pipa-js brings tiny-runtime JavaScript execution to Rust
pipa-js is chasing the tiny-runtime lane with a 5.2 MB Rust build, built-in network and async support, and a Test262 push that is still only about 45% complete.

If Node, Deno, and Bun are the front doors, pipa-js is angling for the side entrance: a compact JavaScript runtime in Rust built for local-first and embedded use. Its pitch is unusually specific for that corner of the ecosystem. The runtime uses a register-based VM, keeps fetch, websocket, SSE, setTimeout, setInterval, async, JSON, base64, and regex support built in, and reaches for rustls when network support is needed. The Chinese Rust community write-up says the binary can come in at about 5.2 MB with HTTP and REPL support, which puts footprint right at the center of the project’s identity.
The package story makes that same point. The README dated 2026-05-20 says pipa-js can be installed with cargo install pipa-js, can run precompiled .jsc bytecode, and can compile JavaScript into bytecode with -compile before disassembling it with -diss. It also separates a default build, which includes REPL, fetch, and process support, from a smaller build made with cargo build release no-default-features. That is not the shape of a toy engine. It is the shape of a runtime meant to be shipped, embedded, and reused where a full platform would be too heavy.

The benchmark table tells a familiar Rust-runtime story, but with enough nuance to matter. The README lists Richards, DeltaBlue, Crypto, RayTrace, EarleyBoyer, RegExp, Splay, and NavierStokes, and in the posted summary pipa trails Node on total score while sitting ahead of quickjs and well ahead of Boa. That does not make it a Node killer, and it does not need to be. The more important signal is that the project is willing to show its work across standard benchmark names instead of hiding behind a single headline number. A bundled test262_runner.rs file points in the same direction, and the Chinese post says pipa-js is around 45% Test262 compliant for now, with the work still underway.
That conformance push is what places pipa-js in the Rust runtime map. QuickJS, from Fabrice Bellard and Charlie Gordon, has long owned the small, easily embeddable, no-external-dependency niche with almost complete ES2023 support. Boa has taken the Rust side of that conversation with more than 90% ECMAScript support. pipa-js is trying to join that debate with a different blend: a tiny binary, a single-threaded task system, a simple generational GC, and bytecode distribution that makes local execution feel practical rather than aspirational.
There are no published releases yet, so pipa-js is still early in packaging terms. But the opening question it answers is already clear: if you want modern JavaScript without hauling a full platform behind it, Rust now has another runtime trying to earn a place beside the established names.
Know something we missed? Have a correction or additional information?
Submit a Tip
