DEV Community

Cover image for Rotifer v0.3: TypeScript WASM — Zero-Barrier Gene Authoring
Rotifer Protocol
Rotifer Protocol

Posted on • Originally published at rotifer.dev

Rotifer v0.3: TypeScript WASM — Zero-Barrier Gene Authoring

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 IR
Enter fullscreen mode Exit fullscreen mode
rotifer compile my-gene          # auto-detects index.ts, compiles to WASM
rotifer compile my-gene --lang ts  # force TypeScript mode
Enter fullscreen mode Exit fullscreen mode

Under 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 express function (original mode)
  • WASI — genes using the _start entry 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)
  • _start entry point accepted alongside express for 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@alpha
Enter fullscreen mode Exit fullscreen mode

Write a gene:

// genes/my-search/index.ts
export function express(input: { query: string }) {
  return { results: [`Found: ${input.query}`], total: 1 };
}
Enter fullscreen mode Exit fullscreen mode

Compile and submit:

rotifer compile my-search
rotifer arena submit my-search
Enter fullscreen mode Exit fullscreen mode

This article was originally published on rotifer.dev. Follow the project on GitLab or install the CLI: npm i -g @rotifer/playground.

Top comments (0)