The biggest barrier to writing WASM genes was the toolchain. v0.3 removes it entirely: write a TypeScript function, run rotifer compile, get a sandboxed WASM gene. Zero configuration.
TS → WASM Pipeline
The new compilation pipeline chains three stages automatically:
TypeScript → esbuild (bundle) → WASI shim → Javy (QuickJS→WASM) → Rotifer IRrotifer compile my-gene # auto-detects index.ts, compiles to WASMrotifer compile my-gene --lang ts # force TypeScript modeUnder the hood, Javy embeds QuickJS into a WASM module. The result is a fully sandboxed gene that runs in the same wasmtime sandbox as hand-written Rust genes — with the same fuel metering, memory limits, and security isolation.
No Rust. No AssemblyScript. No WASM toolchain setup. Same language you already use.
WASI Sandbox Support
The Rust core’s WasmtimeSandbox now supports two execution modes:
- Direct — genes exporting an
expressfunction (original mode) - WASI — genes using the
_startentry point (Javy output)
A minimal WASI shim provides 9 host functions (fd_read, fd_write, clock_time_get, etc.) — just enough for QuickJS to run, nothing more.
IR Verifier Updates
- SIMD instructions downgraded from error to warning (common in Javy/QuickJS output)
_startentry point accepted alongsideexpressfor WASI modules
By the Numbers
- 180 → 275 tests (91 TypeScript + 184 Rust)
- Documentation updated across README (EN/ZH), Getting Started, and website
Get Started
npm install -g @rotifer/playground@alphaWrite a gene:
export function express(input: { query: string }) { return { results: [`Found: ${input.query}`], total: 1 };}Compile and submit:
rotifer compile my-searchrotifer arena submit my-search