Wasm3 is a fast, MIT-licensed WebAssembly interpreter written in C that runs across x86, ARM, RISC-V, MIPS, Xtensa and other architectures β from ESP8266 microcontrollers and OpenWrt routers to browsers and Linux servers β and it is aimed at developers and embedded engineers who need to execute portable Wasm or WASI code where a full-size runtime will not fit.
What it is
Wasm3 is an interpreter for WebAssembly, the binary instruction format that allows code compiled from languages such as C, Rust and Go to run on a target machine without being recompiled for it. The project lives in the WebAssembly and WASI ecosystem, and it describes itself as the most universal WASM runtime: it passes the WebAssembly spec testsuite and runs many WASI applications, while needing as little as roughly 64KB for code and 10KB of RAM. It is written in C, released under the MIT licence, and can be compiled to WebAssembly itself, so that wasm3 can execute wasm3.
The concrete problem it solves is footprint and portability. On constrained hardware β a router running OpenWrt, Yocto or Buildroot, a single-board computer, or an MCU such as the Arduino, ESP8266, ESP32 or Particle β a heavier runtime cannot be deployed. Wasm3 fills that gap by interpreting Wasm in a small memory budget rather than requiring a JIT, and by exposing the same engine as a library so host applications in another language can embed it directly.
Key capabilities
- Executes Wasm and WASI modules and passes the WebAssembly spec testsuite, with minimum useful requirements of about 64KB for code and 10KB of RAM.
- Runs on x86, x86_64, ARM, RISC-V, PowerPC, MIPS, Xtensa and ARC32 across Linux, Windows, OS X, FreeBSD, Android and iOS.
- Targets embedded and network platforms including OpenWrt, Yocto and Buildroot for routers and modems, Raspberry Pi and Orange Pi boards, and MCUs such as Arduino, ESP8266, ESP32 and Particle.
- Self-hosts: wasm3 can be compiled to WebAssembly and execute wasm3, and it supports Wasm and WASI self-hosting.
- Implements the Lime1 extensions, including Import/Export of Mutable Globals, Non-trapping float-to-int conversions, Sign-extension operators, Multi-value and Extended constant expressions.
- Supports Wasm proposals including Bulk memory operations, Exception handling, Multiple memories, Memory64, Table64, Reference types, Tail call, Custom page size, Compact Import section and Deterministic profile; Typed function references is partial.
- Provides extras such as structured execution tracing, big-endian support, gas metering and guard-page memories, and is usable as a library from Python3, Rust, C/C++, D, GoLang, Zig, Perl, Swift, .Net, Nim, Arduino, PlatformIO, Particle and QuickJS.
Who uses it and how
- Embedded and IoT developers run Wasm modules on ESP8266, ESP32, Arduino and Particle hardware, where the interpreter's small memory footprint is the deciding constraint.
- Edge and network deployments place it on OpenWrt, Yocto and Buildroot systems, so routers and modems can execute sandboxed modules without a large runtime.
- Serverless and container-oriented teams use it as a sandbox for untrusted code, matching the project's containers, serverless and sandbox topics.
- Smart-contract environments use the built-in gas metering to bound execution time and cost of untrusted modules.
- Application developers embed the engine through the documented bindings rather than shipping a standalone binary, with Python3 via pywasm3 and Rust via wasm3-rs among the listed options.
Getting started
Installation follows the project's own instructions in docs/Installation.md, with performance details recorded separately in docs/Performance.md and platform coverage in docs/Hardware.md. The engine can also be consumed directly as a library, with bindings documented for Python3, Rust, C/C++, GoLang, Zig, Perl, Swift, .Net, Nim and Arduino.
How it compares
No competing runtime is named in the facts provided, and no list of paid products that wasm3 replaces is given, so it stands alone in this registry entry. Use the platform and footprint figures above, not a comparison table, to judge fit.
When to use it β and when not to
Wasm3 suits projects that must run Wasm or WASI on small or unusual hardware, or that want to embed an interpreter as a library. Prospective users should know it is in a minimal maintenance phase: the maintainer states that new feature development has stopped, that incoming pull requests will still be reviewed and merged, and that contributions matter more than before, so anyone needing new proposals implemented on a schedule should not depend on it. Typed function references is only partial, and the project publishes benchmarks with the caveat that your mileage may vary.