Repository navigation
Releases
Releases · slicevm/slice
Slice (Nexus-JS) v0.10.12
Slice (Nexus-JS) v0.10.12
Highlights
Security & Sandbox Hardening (#71)
- Deny-by-Default Filesystem OCap & CoW VFS Tombstone Isolation:
- Enforced strict deny-by-default filesystem capability tokens across
CapabilityToken::pure_compute(),Slice.evalSandbox,slice eval,slice serve, andslice mcpunless explicit--allow-read/--allow-writeflags orslice.tomlcapabilities are granted (slice testretains isolated/tmpand/vfsscratch access). - Added copy-on-write VFS deletion tombstones (
BOA_VFS_TOMBSTONES) sounlinkSync,rmSync,rmdirSync, andrenameSyncmask entries in memory without deleting underlying host filesystem files, withO(1)rollback onSlice.restore().
- Enforced strict deny-by-default filesystem capability tokens across
- Asymmetric Cryptography Hardening (
RSA 2048..8192& RFC 7748X25519):- Removed static RSA-2048 keys and disabled unbounded runtime RSA/DSA prime generation in the multi-tenant edge sandbox (
ERR_CRYPTO_UNSUPPORTED_OPERATION/NotSupportedError/ERR_INVALID_ARG_VALUE). - Implemented dynamic
2048to8192-bit ASN.1 DER (PKCS#8,PKCS#1,SPKI) andJWKRSA import/export plusring-backedRSASSA-PKCS1-v1_5andRSA-PSS(SHA-256,SHA-384,SHA-512) signing and verification acrossnode:cryptoandcrypto.subtle. - Implemented constant-time RFC 7748
X25519key generation,PKCS#8v1/v2 +SPKI+JWK+rawcodecs,crypto.diffieHellman, andcrypto.subtleX25519(deriveBits,deriveKey) viax25519-dalekwith constant-time low-order public point rejection.
- Removed static RSA-2048 keys and disabled unbounded runtime RSA/DSA prime generation in the multi-tenant edge sandbox (
Runtime Performance & Prelude Sharding (#62, #69, #71)
- WinterTC
fetchHot-Path Latency Optimization (#62):- Optimized
SliceIsolate::dispatch_http_requestwith lazy header materialization, fast-path synchronousResponseextraction, and conditional event-loop draining, lifting Tier-1 WinterTC HTTP/1.1 keep-alive throughput to154,737 req/s(6.46 us/req).
- Optimized
- Runtime Hot Paths, JSON Fast Paths, VFS Slab, & Shard 18/19 Split (
#69):- Accelerated
JSON.parse/JSON.stringifyfast paths and object shape property lookups inboa_engine, optimizednode:fsVFS slab paths, and split18_intl.jsfrom19_process_cli.jsso CLI and server workloads that do not useIntlskip evaluating internationalization tables.
- Accelerated
Compiler Diagnostics & Documentation (#60, #70, #71)
- Multi-Frame Source-Mapped Stack Traces & Class Method Spans (
#60):- Extended
//#[SLICE_SMAP_V1]source mapping inslice-casand stack formatting inslice-engineto resolve multi-frame uncaught call stacks and class/object methods back to original TypeScript files and line numbers, and aligned pre-fusedSLICEBC\x01prelude line offsets.
- Extended
- Documentation & Compatibility Matrix Alignment (
#70,#71):- Streamlined
README.md, added unified documentation navigation (docs/README.md), removed stale internal specs, and alignedCOMPATIBILITY.mdanddocs/with verified runtime behavior.
- Streamlined
Benchmark Summary (v0.10.12 vs Bun v1.4.4, Deno v2.9.8, Node.js v27.0.0-alpha)
- 33 / 33 Workloads Won in
--warmpooled isolate mode (33/33vs Deno,33/33vs Node.js, and29/33cold one-shot vs Bun). - Single Isolate Cold-Start (
Linux x86_64):0.94 usMin /1.24 usP50 /2.10 usP99 (1.50 msfor 1,000-tenant MicroVM swarm at4.0 KBper-tenant compartment footprint). slice serveMulti-Tenant HTTP/1.1 Keep-Alive:154,737 req/s(Tier-1 WinterTC) /148,865 req/s(Tier-0 CAS),1.60xfaster thanBun.serveand2.71xfaster than Node.js.- Security Verification:
5 / 5 PASSacross OCap, SES, Fuel, SSRF/DLP, and MPK containment vectors.
Slice (Nexus-JS) v0.10.11
Slice (Nexus-JS) v0.10.11
Highlights
Wave 1 (v0.10.9) — Iterative ECMA-404 JSON.parse, Process Exit & Worker Isolation (#47, #48, #49, #50, #57, #60)
- Zero-Recursion Iterative ECMA-404
JSON.parse&JSON.stringify(#47):- Replaced recursive JSON parsing in
vendor/boa_engine/src/builtins/json/mod.rsandcrates/slice-engine/src/intrinsics/simd_ops.rswith an explicit heap-allocated frame stack (ParseFrame::ObjectWaitValue,ParseFrame::ArrayWaitElement,ReviverFrame), safely handling 512+ levels of nesting without native thread stack overflow (RangeError: Maximum JSON nesting depth (512) exceeded) while enforcing strict ECMA-404 control-character rejection (0x00..=0x1F), valid UTF-16 surrogates, and__proto__own-data-property definitions. - Added an ASCII zero-escape fast path (
!b.iter().any(|&c| c < 0x20 || c == b'\\' || c >= 0x80)), making common JSON key/value parsing 6–18% faster in microbenchmarks.
- Replaced recursive JSON parsing in
process.exit(code)&process.exitCodePropagation (#48):- Propagated non-zero
process.exit(code)(__SLICE_PROCESS_EXIT__:N),process.exitCode, and"beforeExit"/"exit"lifecycle hooks cleanly to the host CLI exit status across Tier-0 and Tier-2 execution without printing a spurious stack trace.
- Propagated non-zero
- Unhandled Promise Rejection Detection (
#49):- Added per-promise
handledtracking to the Boa job queue alongsideprocess.on("unhandledRejection", ...)dispatch and non-zero exit enforcement when unhandled rejections remain after draining the event loop.
- Added per-promise
- Worker Threads Deterministic Clock &
worker.terminate()Semantics (#50,#57):- Propagated deterministic virtual clock seeds (
Date.now(),new Date(),performance.now()) intonode:worker_threadsworker isolates. - Made
worker.terminate()resolve with exit code1(Promise<1>) and fire"exit"once without emitting a spurious"error"event on normalprocess.exit(0).
- Propagated deterministic virtual clock seeds (
- CLI Entry-Arg Ordering & Sandbox Error Sanitization (
#60,#61):- Supported
slice run <entry> [flags]flag ordering after the entry path and redacted host filesystem paths from sandbox violation diagnostics.
- Supported
Wave 2 (v0.10.10) — node:fs VFS Hardening, node:stream & node:child_process (#51, #56, #62)
- CoW VFS Symlink Loop Guard (
ELOOP), Binaryreaddir, &fs.StatWatcher(#51):- Added 32-hop symlink resolution cycle detection (
ELOOP: too many symbolic links encountered),readdirSync(dir, { encoding: "buffer" })returningBufferinstances,dirent.parentPath/dirent.path, and EventEmitter-backedfs.watchFile/fs.unwatchFilepolling triggers on VFS mutations.
- Added 32-hop symlink resolution cycle detection (
node:streamObjectMode, Async Pipelining,stream/webBridges & Multi-ByteStringDecoder(#56):- Preserved
null/undefined/falsy values inDuplex/Transform/PassThroughobjectMode, added asyncTransform._transformbackpressure queuing andReadable.from(asyncIterable)pumping, implementedReadable.toWeb/fromWebandWritable.toWeb/fromWeb, and added Stateful UTF-8 / UTF-16LE / Base64 multi-byte boundary buffering innode:string_decoder.
- Preserved
node:child_processSandboxedAbortSignal,timeout,maxBuffer& IPC (#62):- Added
AbortSignal(ABORT_ERR),timeout(ETIMEDOUT+killSignal),maxBuffer(ERR_CHILD_PROCESS_STDIO_MAXBUFFER),inputstdin piping, and virtualized.send()/.disconnect()IPC channels toexec/execFile/spawn/forkwhile preserving strict OCap denial by default.
- Added
Wave 3 (v0.10.11) — DOMException, AsyncLocalStorage, WebCrypto Asymmetric/KDF, Intl, & WinterTC/Node Polish (#52, #53, #54, #55, #58, #59)
- Standard
DOMExceptionPrototype & Legacy Code Table (#52):- Implemented spec-compliant
DOMException(message, name)inheriting fromError.prototype(instanceof Error === true) with full W3C legacy numericcodeconstants (INDEX_SIZE_ERR = 1..DATA_CLONE_ERR = 25), wired acrossAbortController.abort(),AbortSignal.abort(),AbortSignal.timeout(), andstructuredClone().
- Implemented spec-compliant
- Async-Propagating
AsyncLocalStorage&AsyncResource(#53):- Propagated
AsyncLocalStoragestore snapshots acrossPromise.prototype.then/catch/finallymicrotasks,queueMicrotask,setTimeout,setInterval,setImmediate, andprocess.nextTick.
- Propagated
- Timer
ref()/unref()/refresh()Handles &timers/promises(#54):- Returned
Timeout/Immediateobjects with.ref(),.unref(),.hasRef(),.refresh(), and[Symbol.toPrimitive](); excluded unref'd timers from keeping the event loop alive; and implementednode:timers/promises(setTimeout,setImmediate,setIntervalasync iterator,scheduler.wait/yield) withAbortSignalcancellation.
- Returned
- Pure-Rust
IntlSuite (#55):- Upgraded
Intl.DateTimeFormat(timeZone,dateStyle/timeStyle,month/weekday/hour12),Intl.NumberFormat(style: "currency" | "percent" | "unit",notation: "compact",signDisplay),Intl.PluralRules,Intl.RelativeTimeFormat,Intl.ListFormat,Intl.Segmenter(granularity: "grapheme" | "word" | "sentence"), andIntl.DisplayNames.
- Upgraded
- Real WebCrypto Ed25519, X25519, RSA-OAEP/PSS/RSASSA-PKCS1-v1_5, PBKDF2, HKDF &
node:cryptoKey Objects (#58):- Wired
crypto.subtleto pure-Rustring,ed25519-dalek, andx25519-dalekimplementations (generateKey,sign,verify,encrypt,decrypt,deriveBits,deriveKey,importKey/exportKeyfor"raw","pkcs8","spki","jwk",wrapKey/unwrapKey), plusnode:cryptoKeyObject,createPublicKey/createPrivateKey/createSecretKey,generateKeyPairSync,diffieHellman, andhkdfSync.
- Wired
- WHATWG
URLSetter Validation,EventTargetOptions,FormData/BlobFiles, &node:path/node:events/node:util(#59):- Added full URL component re-parsing (
protocol,username,password,host,hostname,port,pathname,search,hash),URL.canParse(),URLSearchParams.prototype.sort()/.size,EventTargetonce/passive/signal/capture/stopImmediatePropagation(),File-backedFormData,path.win32.*,events.once()/events.on(), andutil.parseArgs/isDeepStrictEqual/stripVTControlCharacters.
- Added full URL component re-parsing (
Benchmark Summary (v0.10.11 vs Bun v1.4.4, Deno v2.9.8, Node.js v27.0.0-alpha)
- 33 / 33 Workloads Won in
--warmpooled isolate mode (1.85x – 36.60xfaster than Bun;2.64x – 10.58xfaster than Node.js). - Single Isolate Cold-Start:
0.98 usMin /1.23 usP50 /2.03 usP99 (1.47 msfor 1,000-tenant MicroVM swarm at9.70 MBtotal RSS). slice serveMulti-Tenant HTTP/1.1 Keep-Alive:153,174 req/s(Tier-0 CAS) /145,192 req/s(Tier-1 WinterTC),1.52xfaster thanBun.serveand2.80xfaster than Node.js.
Slice (Nexus-JS) v0.10.7
Slice (Nexus-JS) v0.10.7
Highlights
- Guest
Slice.evalSandboxMemory Cap & Heap Accounting (#42):- Added
memoryandmaxMemoryBytesserde aliases toSandboxEvalOptions::memory_bytesso guestSlice.evalSandbox(code, { memory })honors explicit byte caps instead of falling back to the 16 MB default. - Stopped permanently deducting freed child JS heap allocations from the parent realm's
BOA_KV_MEM_BUDGETafter the childSlice.evalSandboxisolate exits, while preservingparent_rem_memclamping during child execution.
- Added
- Proportional
fuelUsedTelemetry forwhileanddo...whileLoops (#43):- Tracked cumulative
loop_iterations_executedinboa_engine::vm::RuntimeLimitson everyIncrementLoopIterationopcode and charged(loop_iters / 250).max(1)infinish_boa_compartment_execution, aligningwhileanddo...whilefuel reporting withforloops.
- Tracked cumulative
- Dedicated Egress DLP Violation Variant (
#44):- Added
SandboxViolation::EgressSecretLeakBlocked { tenant_id }(Egress DLP Violation (EGRESS_SECRET_LEAK_BLOCKED): Compartment '<tenant_id>' blocked from exfiltrating a registered audit secret) across outbound HTTP, WebSocket, and TCP/UDP socket guards instead of reusingEnvAccessDenied.
- Added
- Single-Line
Slice.evalSandboxError Location & Deduplication (#45):- Deduplicated location parentheticals in
finish_boa_compartment_executionwhenraw_error stack frames already include(unknown at ...). - Removed the extra leading newline in standalone
SLICEBOA{wrappers so single-lineSlice.evalSandboxsnippets report line:1:instead of:2:. - Updated Tier-0
JSON.parseto returnUncaught SyntaxErroron malformed JSON.
- Deduplicated location parentheticals in
Slice (Nexus-JS) v0.10.6
Slice (Nexus-JS) v0.10.6
Highlights
- JSON Serialization & Parsing Fast-Path (
#37):- Added a direct
Vec<u8>+ryu_js+ shape property-table (Shape::with_property_keys) fast-path forJSON.stringifyand a zero-copy Latin1 borrow path forJSON.parseinvendor/boa_engine/src/builtins/json/mod.rs. - Added sub-millisecond monotonic
performance.now()(__slice_perf_now). - Measured speedup:
JSON.stringifyx 10,000 improved 12.48x (60.0 ms -> 4.81 ms), andJSON.parse(JSON.stringify(obj))x 10,000 improved 2.92x (94.0 ms -> 32.16 ms).
- Added a direct
- HTTP Dispatch &
slice serveFast-Path (#38):- Reused a persistent
SliceIsolateper worker thread across TCP connections, cached the resolved entrypoint handler across requests, and added single-pass__slice_http_url(), lazyLiveReqProtogetters, andLazyResProtofor zero-header-allocationResponse.json(data)/new Response("ok"). - Measured speedup: Single-socket Keep-Alive throughput increased +28.6% (
11,917 -> 15,329 req/s) and cold-start improved to0.96 usmin (1.05 usP50).
- Reused a persistent
- Source Map &
Error.stackResolution (#33):- Kept the fused runtime prelude on a single line so
SLICEBC\x01pre-compiled bytecode line numbers align 1:1 with//@sm:source map markers, and extended source map resolution to cover ES6 class methods, dynamic error prefixes, and uncaught exception output.
- Kept the fused runtime prelude on a single line so
node:fsVFS Additions,node:readline, and Core Compatibility Shims (#28,#31):- Added
cpSync/cp,readlinkSync/readlink,truncateSync/truncate,utimesSync/utimes,lutimesSync/lutimes,watch/watchFile/unwatchFile(andfs.promises.*equivalents) backed by the in-memory CoW VFS. - Added
node:readline(createInterface, async iterator),node:readline/promises, and compatibility shims fornode:v8,node:inspector,node:cluster,node:http2, andnode:wasi.
- Added
- CAS Archive Provenance, Dependency Diagnostics & Engine Docs (
#34,#35,#36):- Added
lockfile_blake3and resolvedpackage.jsondependency versions toCasIndexHeaderandslice inspect. - Added a missing-
node_modulesdiagnostic hint in the module resolver and documentedboa_enginepatches invendor/boa_engine/SLICE_PATCH.md.
- Added
Slice (Nexus-JS) v0.10.5
Slice (Nexus-JS) v0.10.5
Highlights
- Sandbox & MCP Security/Capability Enhancements (
#12–#16):- Custom
Slice.evalSandboxAudit Secrets (#12): AddedauditSecret/auditSecretsoptions toSlice.evalSandboxandslice mcp(slice_eval_ts), scanning childstdoutand return values for raw, Base64, and Base64URL secret leaks while isolating child secrets from the parent compartment. - Guest Checkpoint Controls (
#13): Addedcheckpoints(boolean),maxCheckpoints(usize), andcheckpointsTaken/restoresPerformedtelemetry toSlice.evalSandboxandslice mcp. - MCP Deterministic Seed & Memory Alias (
#14,#15): AddeddeterministicSeedandmemoryBytessupport toslice_eval_tsinslice mcp. - Time-Travel
slice testAsync & Clock Accuracy (#16): Started per-test wall-clock timers after lazy compilation, preserved async errors acrossasync test(...)promises, and restoredBOA_TIME_WARP_ENABLEDvia an RAII guard.
- Custom
- Bug & Isolation Fixes (
#1–#11):- Partitioned outbound HTTP/1.1 Keep-Alive connection pools by
(tenant, host, port)to prevent cross-tenant socket reuse or eviction. - Enforced strict OCap and SSRF validation on mocked
fetch,WebSocket, andSlice.connectsockets before consulting mock tables. - Fixed
SavedIsolateContextGuardrestoration of parent event-loop state,BOA_ENV_MAP,BOA_HTTP_REQ,BOA_HTTP_RESP,BOA_ACTIVE_TENANT, and mock tables across nestedSlice.evalSandboxcalls.
- Partitioned outbound HTTP/1.1 Keep-Alive connection pools by
- Engine Performance & Memory Optimizations:
- Dirty-Subsystem Bitmask (
BOA_DIRTY_SUBSYSTEMS) & Zero-Allocation Context Guard: Added a single-byte dirty bitmask (DIRTY_EVENT_LOOP,DIRTY_ALS,DIRTY_FETCH_MOCK,DIRTY_WEBSOCKET,DIRTY_SOCKETS,DIRTY_WORKERS,DIRTY_WASM) andOption<SavedEventLoopSnapshot>fast path so synchronous isolates and nested sandboxes skip cloning or clearing untouched subsystems. SANDBOX_EVAL_BC_CACHE& Tier-0 AST Fast Rejections: Added a 64-entry thread-localRc<[u8]>bytecode cache incompile_source_for_sandbox_eval, reducing childSlice.evalSandboxlatency by 88.4% (15.22 us -> 1.77 us) and 3-branch Tree-of-Thought evaluation by 48.6% (107.06 us -> 55.02 us).- Precompiled
__slice_drain_wu&Response.jsonFast-Path: CachedglobalThis.__slice_drain_wuonWarmBoaRealm::drain_wu_fnand added a!initfast-path toResponse.json, boostingslice serveTier-1 WinterTC throughput by +21.2% (120,333 req/s -> 145,839 req/s). CHECKPOINT_SLAB&EDGE_KV_SLABCleanup: Purged pre-warm checkpoints inprewarm_boa_bundleand skipped empty KV shard probes inrestore_tenant_state, cuttingCS-01Warm latency by -16.4% (15.69 ms -> 13.12 ms),CS-05Warm latency by -12.9% (11.85 ms -> 10.31 ms), andSlice.kvmemory footprint by -31.8% (12,362 B -> 8,431 B).
- Dirty-Subsystem Bitmask (
Slice (Nexus-JS) v0.10.4
Slice (Nexus-JS) v0.10.4
Highlights
- Workspace-Wide Domain Architecture: Reorganized all five workspace crates (
slice-engine,slice-cas,slice-sandbox,slice-io, andslice-cli) into focused domain subdirectories with concise rootlib.rs/main.rsentrypoints. - Security Hardening:
slice-engine: Hardened isolate compartment lifecycle, OCap/DLP enforcement, and cryptographic intrinsics.slice-cas: Prevented JSON module code injection, blockedpackage.jsonexports/importspath traversal outside package roots, guarded against circulartsconfig.jsonextendschains, and added safe bracket export binding for non-identifier export names.slice-sandbox: Hardened VFS lexical normalization against Windows UNC/device-namespace prefixes and null bytes, enforced strict port isolation inverify_net_connect, expanded SSRF guards for trailing-dot FQDNs, IPv6 zone indices, and NAT64/6to4/Teredo transition ranges, and sanitized subprocess binary names.slice-io: Enforced active-allocation bitmap checks on slab reads/writes, zeroed slab buffers on release, and rejected duplicate buffer-slot aliasing in completion ring submissions.slice-cli: Registered explicitaudit_secretsacross all HTTP server worker isolates, JSON-escapedSandboxViolation403 responses, switched temporary.casstaging files to unique per-invocation paths, skipped symlinks in--watchand test discovery, and wiredallowNet/allowExecwith bounded request lines inslice mcp.
- Performance Optimizations:
slice-cas: Single-pass CJSrequiresummary scanning, zero-allocation import specifier scanning, and cached Oxc AST dead-export liveness analysis.slice-sandbox: Zero-allocation VFS path validation, ASCII case-insensitive secret key classification, andFxHashMap/FxHashSetcapability lookups.slice-io: LIFO hot-cache slab slot allocation andO(1)active-slot accounting.slice-cli: Single-statFxHashMapmulti-tenant.cashot-swap caching and stack-allocateditoaHTTP response header formatting.
Slice (Nexus-JS) v0.10.1
Slice (Nexus-JS) v0.10.1
Highlights
- Modular Host Bindings Architecture (
src/bindings/): Split the monolithichost_bindings.rsinto 14 focused domain modules (core,helpers,crypto,fs,http_and_fetch,kv_and_sandbox,wintertc_and_buffer,websocket,workers_and_sockets,wasm,child_process,deterministic_and_os,intrinsics). - Zero-Copy
TypedArray&DataViewFast Paths (boa_engine+helpers.rs): Added direct native downcast methods (TypedArray::with_bytes,TypedArray::with_bytes_mut,TypedArray::fast_byte_length,DataView::with_bytes) eliminating JS property lookups and intermediateVec<u8>allocations across WebCrypto,node:crypto,TextEncoder/TextDecoder,Buffer,zlib, sockets, and WebAssembly (6.1xfastercrypto.getRandomValues,2.0xfasterTextEncoder.encodeInto,1.9xfastercreateHash/createHmac). - Streaming
JSON.parseviaDeserializeSeed(serde_json): Eliminated intermediateserde_json::ValueDOM trees duringJSON.parse, delivering a27%speedup on JSON transformation pipelines (195.89 usvs269.67 us). - 5-Ring Security & OCap Hardening:
- Enforced VFS symlink target resolution and OCap read/write verification across all
node:fsoperations (SEC-01). - Enforced isolate memory ceilings (
BOA_KV_MEM_BUDGET) on VFS writes,console.log, andcrypto.randomBytes(SEC-02). - Bounded
zlibdecompression streams to the active isolate memory ceiling and metered CPU fuel (SEC-03). - Extended Egress DLP scanning to HTTP response headers and
Content-Type(SEC-04). - Verified
FsReadOCap on subprocesscwdand sanitized dynamic linker/shell environment variables (LD_PRELOAD,DYLD_*,BASH_ENV) innode:child_process(SEC-05).
- Enforced VFS symlink target resolution and OCap read/write verification across all
Slice (Nexus-JS) v0.9.91
Slice (Nexus-JS) v0.9.91
Highlights
- Default Optimal Execution Path (Tier 1 + SLICEBC\x01 Precompiled Boa CodeBlock CAS):
- Serializes compiled Gc bytecode, global Scope bindings, Oxc AST deferred function module spans (