Small JavaScript and TypeScript engine in no_std Rust from Armin Ronacher, built mainly for wasm32 to replace QuickJS in Pi's code mode, where model-written scripts call tools and return data.
The design follows from one job: running short scripts an agent writes, in a sandbox, while they wait on tools. All VM state lives in one byte arena addressed by u32 offsets, and the interpreter never recurses on the Rust stack for JS calls. It can stop between any two instructions and resume, including inside getters, promise jobs and generators. A run waiting on its tools can be written out as a continuation dump, a plain JavaScript program that recreates it, so a later process can pick it up.
Creating a VM is a copy of a prebuilt image, about 40 µs in wasm. The clock, randomness and weak references come from the host, so the same inputs give byte-identical heap images. The wasm build is 1,471 KB, or 525 KB gzipped.
The README's own numbers, measured on 1 November: 38,069 of 38,109 active test262 tests pass, and 221 of Pi's 226 code mode tests. On Pi's tool-heavy benchmark it takes 4.2 ms against 5.3 ms for quickjs-wasi, and a script starts in 1.0 ms against 3.9 ms. It uses fewer machine instructions than quickjs-wasi on loops, property access and JSON, but about three times as many on callback-heavy builtins like map, filter and reduce, the main remaining gap. Intl, Temporal, modules, sloppy mode and direct eval are skipped by design. Licensed MIT or Apache-2.0.