How is Traverse different from WASI?
WASI is a specification — it defines how WASM modules interact with the host operating system through a standard set of system call interfaces. Traverse is a runtime that uses WASI underneath. They operate at different levels and are not alternatives to each other.
What WASI is
WASI (WebAssembly System Interface) standardizes how a WASM module can call host functions for things like file I/O, networking, environment variables, and clocks. Without WASI, a WASM module runs in a pure sandbox with no way to reach the outside world. WASI defines the interface for breaking out of that sandbox in a controlled, portable way.
What Traverse adds on top
Traverse compiles capabilities to wasm32-wasi targets — WASM binaries that use the WASI interface. Then it adds its own layer on top:
- A contract system that defines what a capability accepts and returns
- Precondition and postcondition enforcement before and after execution
- A registry for storing, versioning, and discovering capabilities
- A state machine execution model that tracks every phase of a call
- A trace artifact produced on every execution
- An MCP server that exposes capabilities to AI agents
The analogy
WASI is to Traverse roughly as POSIX is to a web framework. POSIX defines how programs call the OS. A web framework builds on top of those OS calls and adds routing, middleware, and request handling. You use the web framework — it uses POSIX under the hood. You use Traverse — it uses WASI under the hood.
Why this matters for portability
Traverse capabilities compile to the WASI target, which means the same binary runs on any WASI-compatible runtime: Wasmtime, WasmEdge, browser via polyfill, edge runtimes. WASI provides the portability foundation. Traverse provides the contract governance layer on top of it.