Documentation
¶
Overview ¶
Package wazero is the reference in-process compute engine: it runs a content-addressed WASI module on the pure-Go wazero runtime (no CGO). The ABI is WASI command style — input JSON arrives on stdin, output JSON is read from stdout, log lines go to stderr. Any language that compiles to a conforming WASI module (Rust, TinyGo, JS via Javy/QuickJS, …) runs here unchanged; the language is a build-time concern.
Two module shapes run here, detected automatically:
- Self-contained: the whole runtime is in the module (Rust/TinyGo native wasm, or a static `javy build`). Compiled once, instantiated per call.
- Dynamically linked Javy: a tiny (~1 KB) module carrying only the op's JS bytecode, importing `invoke`/`cabi_realloc`/`memory` from the shared QuickJS plugin (chassis/compute/javyplugin). The engine links it against that plugin so thousands of ops share one ~1.25 MB engine instead of embedding it per op. See the dynamic-link section below.
Sandbox posture ("restricted WASI"): no filesystem, no network, no env, no args. Wall clock is frozen and randomness is a fixed-seed PRNG — deterministic rather than denied, since real guest runtimes call clock/random at startup (denying breaks them) but exposing the host's would be ambient nondeterminism. Monotonic time is the one exception: guest runtimes require it to advance, so the host monotonic clock is used (a minor timing channel, no other authority). Memory is capped (runtime config) and a per-invocation wall-clock deadline kills a runaway guest (CloseOnContextDone inserts interrupt checks at loop back-edges and calls).
CAVEAT — guest-language RNGs are NOT made deterministic by the fixed-seed random_get above. QuickJS's Math.random() seeds from the monotonic clock, not random_get, so it varies across runs (non-reproducible; monotonic-seeded ⇒ not crypto-grade). This is harmless: computes run exactly once (no replay). Don't assume reproducible randomness from a guest unless you control its seed.
Activate with a blank import:
import _ "github.com/loremlabs/thanks-computer/chassis/compute/wazero"
Index ¶
Constants ¶
const Name = "wazero"
Name is the registered engine identifier.
Variables ¶
This section is empty.
Functions ¶
Types ¶
This section is empty.