Sandbox runtime + Release API
Features
- Lightweight JavaScript runtime (~9 MB binary)
- Near‑V8 performance with a cold start around 5 ms
- Built from scratch (Ant Silver engine, not a V8/JSC wrapper)
Recent releases
View all 32 releases →- Added WebSocket API support
- Added EventSource (Server‑Sent Events) API
- Introduced ant:rpc module with example server and client
Full changelog
Ant 0.11.0
A major compatibility release focused on modern JavaScript behavior, richer networking APIs, stronger Node support, and a runtime that feels much more complete in real-world app code.
Highlights
ES6 & Proxy correctness
- Private class brands now behave properly
- Proxy, Reflect, own-key ordering, and
Object.assigngot a broad correctness pass - Classes, typed arrays, parser edge cases, and
with () {}behavior all moved closer to spec
Networking APIs
- Added
WebSocket - Added
EventSource - Added a
ant:rpcmodule
Node/npm compatibility
- Better compatibility for real packages, including the Discord example
- Improved
node:http/httpsbehavior and CommonJS export handling - Better socket, TLS, and connect-failure behavior
Memory & runtime cleanup
- Lower allocation pressure and less transient buffer churn
- Better GC marking across more native-backed modules
- Safer native object layout and pointer handling
Performance
- Faster string building
- Better JIT behavior for numeric loops and bailout snapshots
- More benchmark coverage to track regressions and wins
Developer experience
console.inspectfor strings- Broader spec and regression coverage across the runtime
Compatibility Scoreboard
| Area | Status |
| --------------------- | -------------------------------------------------------------------------------- |
| compat-table | 1511 / 1511 passing |
| test262 | ~64% passing |
| Big wins this release | Proxies, Reflect, private brands, WebSocket, EventSource, Node/npm compatibility |
Try It Now
- RPC example server: examples/rpc/server.js
- RPC example client: examples/rpc/client.js
- Added proper brand-based private class support
- Added
Array.isTemplateObject - Fixed class-method enumerability behavior
- Enabled implicit strict mode for classes
- Fixed typed-array and parser ES6 compatibility cases
- Improved proxy behavior across a broad fixing pass
- Improved
Reflectbehavior - Fixed own-key ordering regressions
- Cleaned up
Object.assignbehavior - Added a better
IsArraycheck for userland-facing paths - Fixed
js_to_primitiveexotic-helper behavior - Added more
with () {}correctness fixes - Fixed thrown set-trap behavior
- Emitted proper
URLSearchParamsarray lengths - Fixed constructor-wrapper target-depth lookup
- Fixed static-child
thisbehavior - Fixed CommonJS export namespace behavior
- Improved ES6 function name support
- Improved handling of explicit function
length - Improved object primitive handling
- Improved symbol primitive behavior
- Improved Annex B string compatibility
- Added more Annex B follow-up fixes
- Improved string tags for newer builtins
- Improved
string_builder_tperformance - Added
console.inspectsupport for strings - Updated string specs and template-string coverage
- Fixed a small
.spliceedge case - Improved flatMap performance
- Fixed JSON and object behavior in more ES6-leaning cases
- Added
EventSource - Added
WebSocket - Added a basic
ant:rpcmodule - Added spec coverage for EventSource and WebSocket
- Added RPC examples
- Added Node compatibility needed for the Discord npm example
- Added a Discord example app
- Improved
node:http/httpscompatibility for more userland packages - Replaced the older
tls.mjspath with atls.cstub implementation - Improved TLS handle draining
- Emitted synchronous connect failures on a microtask
- Allowed better cleanup when listeners are aborted
- Fixed stdin lockups
- Fixed connection cleanup in
net - Added better protocol, upgrade, TLS, and socket coverage in tests
- Reduced allocation pressure in hot paths
- Reduced transient buffer usage
- Added a temporary parse arena with rewinding for short-lived parse work
- Added finalizers for
RequestandResponse - Added GC marking for crypto, events, LMDB, TLS, N-API, generators, and sockets
- Improved native object layout by moving away from
ANT_PTR - Stopped storing pointers in
SLOT_DATA - Unified the native tag API
- Removed redundant pointer-type checks in native paths
- Reduced
sv_funcmemory significantly with a sidecar layout - Added a hot path for both sidecar layouts
- Reduced object size in some hot allocation paths
- Fixed a MIR leak during bailout/unload paths
- Fixed miscellaneous memory leaks
- Improved stream allocation shapes
- Optimized padding and memory layout for internals
- Fixed buffer offset safety issues
- Fixed
Buffer#indexOfrange handling - Fixed UTF-8 buffer handling edge cases
- Improved stream allocation behavior
- Added more readable/writable state predicate coverage
- Improved timers, event listeners, and stream lifecycle behavior
- Updated event listener globals and related compatibility paths
- Enabled WASM SIMD
- Optimized JIT numeric local loops
- Hardened JIT bailout snapshots
- Added a broad runtime/perf pass on the proxy-es6 branch
- Improved performance in several proxy and object-model hot paths
- Improved
T_CFUNCpromotion fallback behavior - Added deeper microbench coverage
- Added more advanced Fibonacci benchmarks
To install Ant v0.11.0:
curl -fsSL https://ant.themackabu.com/install | bash
- Consistent handling of XDG paths
Full changelog
Patch Notes
Ant v0.10.2 is a tiny patch release focused on user directory behavior.
- Ant now respects XDG paths more consistently.
- Ant also keeps working with the legacy
$HOME/.antlayout, so existing setups do not break.
To install Ant v0.10.2:
curl -fsSL https://ant.themackabu.com/install | bash
- Removal of Ant binaries for version 0.10.0 due to a critical bug in number parsing.
Full changelog
[!CAUTION]
Ant binaries for 0.10.0 have been removed due to a critical bug in number parsing
Release Notes
Release v0.10.0 is a broad step forward for the language surface, Node compatibility, async/generator semantics, crash reporting, FFI, runtime performance, and developer tooling.
Language & ECMAScript Features
- Added support for yield and generator functions
- Added spec-shaped async generator prototype chains
- Implemented explicit resource management support
- Added parser, compiler, and runtime support for
using,await using, and throw expressions - Added disposal symbols,
SuppressedError,DisposableStack, andAsyncDisposableStack - Wired disposal cleanup through blocks, returns, breaks, continues,
for...of, and async disposal paths - Added async-iterator helper plumbing needed by the new resource-management flow
- Implemented
Set.prototype.union - Implemented
Set.prototype.intersection - Implemented
Set.prototype.difference - Implemented
Set.prototype.symmetricDifference - Implemented
Set.prototype.isSubsetOf - Implemented
Set.prototype.isSupersetOf - Implemented
Set.prototype.isDisjointFrom - Added Map / WeakMap upsert support
- Added
BigInt64Array - Added
Uint8Arraybase64 helpers - Added
Uint8Arrayhex helpers - Added regexp index-group support
- Fixed ES2019 symbol descriptions and function source-string behavior
Async, Generators & Coroutine Semantics
- Stabilized async coroutines across more reentrant and callback-heavy cases
- Fixed async generator await / yield interactions
- Fixed async-generator overlap semantics
- Fixed reentrant async-generator
next()behavior - Added focused async-iterator and async-materialization coverage
- Compiled async iteration correctly alongside TLA
- Redesigned lazy-start and materialization cases
- Switched coroutine tracking to a linked-list model
- Only destroy
coro->vmwhen the coroutine is actually reaped - Added promise assimilation helpers
- Cleaned up dead code in promise paths
- Used the active VM/coroutine more consistently for tracing and async work
- Improved promise-job resume and dead-await/TLA fast-path coverage
Node Compatibility & Builtin Coverage
- Expanded compatibility across builtins and npm packages
- Added
Object.getOwnPropertyDescriptors - Treated native C functions as objects for Object-prototype operations
- Preserved display names for builtin module namespaces
- Used
node:aliases in missing named export errors - Attached module-context metadata to cached builtin namespaces
- Registered FS constants as the constants module
- Added
fs.chmod/fs.chmodSyncsupport for numeric and octal-string modes - Added
fs.readlink/fs.readlinkSync - Exported more FS open/stat mode constants
- Added
fs.realpath.nativecallback compatibility - Added registered
path/posixandpath/win32variants - Added buffer constants including
kMaxLength,kStringMaxLength, andINSPECT_MAX_BYTES - Added
util.callbackify - Added
util.abortedforAbortSignal-driven promises - Added
process.listeners - Added
process.emitWarningformatting and warning-event payload support - Added stream default high water mark getters/setters
- Improved
fs/promisesFileHandle compatibility - Improved
util.promisifybehavior - Improved
EventEmitter.listeners() - Improved console instance routing and trace sink behavior
- Added
SubtleCrypto.digest - Exposed
node:url.parse - Improved
node:netclient shim coverage - Wired CommonJS exports onto Object.prototype semantics more cleanly
- Made EventEmitter inherit from the expected function/object shape
Runtime, Compiler & JIT
Under the hood, Ant changed a lot:
- Reduced compile time by removing a fast-path bypass
- Reworked Silver string building around a builder-backed path instead of deep rope-heavy append chains
- Taught the VM, compiler, JIT glue, and GC to preserve and flush builder-backed strings
- Rewrote the string pool for performance
- Threaded more string operations through the JIT
- Added broader
OP_SPECIAL(1..3)JIT support forsuper,this, and import metadata - Fixed a JIT method-call stack-growth regression
- Improved regex compile speed
- Added regexp abstract exec work
- Migrated
Array.prototype.includesinto a dedicated opcode - Optimized the dense-array includes fast path
- Improved dense and overall array indexing performance
- Fixed ES2016 conformance regressions introduced along the way
- Undid an arguments-lowering change that regressed behavior
- Added safer entry frame-pointer handling in the engine
- Avoided VM stack relocation pitfalls in destructuring iterator helpers
- Removed unused
T_CLOSURE - Allowed promotion from
T_CFUNCto metadata-backed objects - Stored native functions exactly during assignment
- Allowed constructed C-function prototypes during promotion
- Fixed super lookup for extracted static methods and constructors
- Moved array/object prototype references under the symbol struct
Memory Management & Correctness
- Added write barriers for slots inside pipes, writable streams, and readable streams
- Adjusted GC thresholds as part of broader promise/runtime tuning
- Updated RSS reporting to reflect truer usage
- Fixed iterable WeakMap regressions
- Added a proper ERRNO path for FS modules
- Fixed N-API exception handling
- Prevented row/column assignment bugs in process/TTY paths
- Shared enumerable-property iteration between spread and assign
- Centralized proxy enumeration in smaller runtime fixes
- Added inspect support for
Headers,Request, andResponse - Allowed generator/map support for object keys in
Object.fromEntries-style paths
Streams, Fetch, URL & Server
- Migrated
process.stdoutandprocess.stdinto ReadableStream-based plumbing - Aligned stdio encoding behavior and fixed TTY teardown on exit
- Improved stream lifecycle behavior around flowing startup and transform callbacks
- Rejected invalid readable-stream chunks more consistently
- Handled broader stream chunks in reporting paths and cancelled abandoned bodies
- Added fetch redirect support
- Added proper URL parsing for hashable paths
- Added a fast URL parsing path
- Added proper idle/request timeouts in the server
- Fixed a server string-buffer oversight
- Prevented tlsuv from closing a request before completion
FFI, WASM, Intl & Platform Work
- Rewrote the entire FFI module
- Cleaned up related reflect/internal_prop behavior around the FFI rewrite
- Removed unused
T_FFI - Added new FFI wrapper coverage and refreshed the SQLite example
- Migrated Intl into a dedicated module
- Added a Lua example
- Added WASM table fixtures
- Allowed faster WASM paths
- Handled WASM exit messages more cleanly
- Prevented WASM from throwing stack-related failures in specific paths
- Prevented WASI from starting unless running as a reactor
- Removed a duplicate WAMR check
- Improved the WASM demo and demo script
- Switched to a patched MIR (http://github.com/themackabu/mir)
- Bumped Windows stack limits
- Used
pthread_get_stacksize_npcorrectly - Added arena/mmap hints and Linux-specific arena tuning
Crash Handling & js.report
- Added a native crash handler
- Added Windows crash-handler support
- Added upload-based crash reporting
- Improved crash error-print formatting
- Improved crash-message summaries
Install
curl -fsSL https://ant.themackabu.com/install | bash
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.