// the find
wasmi-labs/wasmi
Efficient and versatile WebAssembly interpreter for embedded systems.
Wasmi is a WebAssembly interpreter written in Rust targeting no_std embedded environments — think smart contract runtimes, game plugin systems, or anywhere you need sandboxed execution without JIT compilation. It's used in production by Stellar's Soroban smart contracts, Typst, and smoldot. The API deliberately mirrors Wasmtime's, so switching between the two is mostly a dependency swap.
Two independent security audits (SRLabs and Runtime Verification) with reports included in the repo — rare for a project this size. Fuel metering is built-in, which is the feature embedded use cases actually need and Wasmtime makes you bolt on separately. 100% Wasm spec testsuite compliance with differential fuzzing against Wasmtime to catch divergence. The register-based IR (custom bytecode layer in crates/ir) means interpretation overhead is meaningfully lower than naive stack-based approaches.
No JIT means it will always be 5–20x slower than Wasmtime or Wasm3 with JIT on workloads that aren't memory-bound — that gap matters if you're running non-trivial guest code. WASI support is still wasip1 only; wasip2 and the component model are absent, so modern toolchain targets that emit wasip2 won't work. function-references, GC, threads, and exception-handling proposals are all on tracking issues with no shipped implementation, which blocks Kotlin/Wasm, Dart, and other GC-dependent guests. The Wasmtime API mirror is a double-edged sword — your code looks portable, but behavioral edge cases differ in subtle ways that only surface at runtime.