WANTED Engine
WANTED is WebAssembly Nanocontainer Technology for Embedded Devices. It loads, isolates, and runs multiple WebAssembly applications — wapps — as independent threads inside a single process. Each wapp runs in its own WASM linear memory and reaches the outside world only through a virtual filesystem: hardware, network sockets, IPC channels, and the runtime control plane are all paths in a per-wapp namespace. There is no ambient host access and no shared memory between wapps.
The engine targets constrained hardware first. It runs on Linux today and on NuttX (host simulator), uses the WAMR interpreter so no per-target codegen is needed, and packages wapps as OCI-compatible layered TAR images for delta updates and offline distribution.
Key properties
- Offline-first. Wapps are self-contained OCI TAR images; no registry connectivity is required to install or run them.
- Capability isolation via the VFS. A wapp can only touch what its launch config mounts into its namespace —
/dev/,/net/,/proc/,/etc. No grant, no access. - Standard WASI ABI. Wapps are ordinary
wasm32-wasibinaries; the host interface is WASIsnapshot_preview1plus a small VFS-mediated control surface. - OCI-compatible packaging. Layered ustar TARs with shadowing and whiteout semantics, indexed for O(log N) lookup and zero-copy boot.
- Portable across targets. A thin
Platform*seam abstracts threads, sockets, files, clock, and memory stats; Linux and NuttX are the two production implementations.
Feature matrix
| Area | Capability |
|---|---|
| Runtime | WAMR 2.4.4, fast interpreter; thread-per-wapp execution; WASI snapshot_preview1 bridge |
| VFS drivers | TarFS root, DevFS (/dev/), NetFS (/net/), ProcFS (/proc/), named pipes, sockets (TCP/UDP/TLS), 9P client, log console |
| Packaging | OCI-compatible layered ustar TAR; up to 4 layers; whiteout deletion; PAX/GNU long names |
| Supervisor | Privileged wapp loaded at boot; variants for production control (sheriff), interactive debug (wsh), and in-WASM self-test |
| Control plane | /dev/wanted/* — install, start/stop, observe state, read logs, and drive engine power state |
| Platforms | Linux (primary); NuttX simulator (CI-gated); NuttX on ESP32 hardware coming soon |
Documentation
-
Quick Start
Build the engine, package a wapp, and launch it from the wsh debug shell in about ten minutes.
-
Architecture
How the engine isolates and runs wapps: the VFS router, the wapp model, the supervisor, the platform seam, and the WAMR runtime.
-
Wapp Authoring
Writing a wapp: package layout, image identity, the WASI ABI, filesystem and IPC, and building the image.
-
VFS Reference
The fixed VFS a wapp always sees: the always-present /dev builtins, /proc, and the TarFS root. Config-mounted drivers are summarized separately.
-
Control Plane Reference
The complete /dev/wanted contract: nodes, verbs, the wapp state machine, and the launch-config schema.
-
Configuration Reference
The engine's JSON config: every field, its type, default, and effect — system flags and the supervisor's image and launch params.
-
Platform Guide
Building for and porting to each target: the Platform seam, Linux, the NuttX simulator, and what a new port must implement.
-
Testing Guide
The three test tiers — unit, in-WASM selftest, and smoke — how to run them, and how to add a new test wapp.
Source
The engine is developed in the open at gitlab.com/mekops/wanted/wanted-engine, with mirror on github.com/mekops-lab/wanted-engine
Contributions welcome! You can open issue on github and/or gitlab (where CI lives). MR/PR are accepted on both places.