- Interpreter: Uses WAMR 2.4.4 in classic interpreted mode (
WAMR_BUILD_INTERP=1, no AOT/JIT). - Concurrency: Runs multiple isolated threads (wapps).
- Isolation: Strict memory isolation via WebAssembly; external interactions mediated exclusively through the VFS.
- Mount-table VFS Router: Plan 9-inspired path routing for devices, network, and process state.
- Layered TarFS: OCI-compatible filesystem supporting multiple TAR layers with shadowing and whiteouts.
Full developer and user documentation lives in docs/:
- Quick Start — build, package, and launch a wapp in ten minutes.
- Architecture — the VFS router, wapp model, supervisor, and platform seam.
- VFS Reference — every
/dev,/net,/proc, and TarFS path. - Control Plane Reference — the
/dev/wantedcontract: nodes, verbs, state machine. - Configuration Reference — engine JSON config schema.
- Platform Guide — build configuration and target selection, Linux, the NuttX simulator, hardware targets, OpenWrt, and the porting checklist.
- Testing Guide — the unit, in-WASM selftest, and smoke tiers.
WANTED implements a VFS Router. Path resolution is split into four primary namespaces:
- Device Namespace (
/dev/): Routes to registered sub-drivers (pipes, stdio, control plane). - Network Namespace (
/net/): Routes to the socket driver for TCP/UDP. - Process Namespace (
/proc/): Read-only system state and metrics. - Application Space (Root
/): TarFS merged read-only OCI layers.
WAPP -> WASI -> VFS ROUTER -> [/dev/ | /net/ | /proc/ | TarFS(/)]
See Architecture for the full conceptual overview.
The environment is standardized via Podman/Docker. Commands are just recipes that run inside the build container (just --list shows them all). On a bare host the root Makefile is a thin wrapper that runs the same recipe in the container — make build is just just build in the image. Inside the devcontainer or CI, call just directly.
A few make targets are not just recipes: the wasm ones (make wapps, make supervisor, make wasm, make sheriff) run in the separate wapp-SDK container, and the hardware ones (make esp32, make rp2350) select a toolchain image. make help lists them.
just menuconfig # configure this build dir (Kconfig; optional)
just build # build whatever target is configured (default: linux)
just supervisor-variant wsh && just build # swap in the wsh debug supervisor
just test # run unit tests
just selftest # run in-WASM functional suiteConfiguration is a Kconfig tree; an unconfigured build directory takes the
defaults, so just build works with no configure step. configs/ holds
capacity envelopes and per-board defconfigs — DEFCONFIG=small just build
seeds one. See the Platform Guide.
Which target gets built is configuration too. The Target menu selects
linux, nuttx, esp-idf or openwrt along with that target's board or SDK, and
just build dispatches on it — so there is no build recipe per target and
architecture. Each build directory carries its own .config, so two targets
can be configured side by side:
BUILD_DIR=build-mips just target openwrt
BUILD_DIR=build-mips just setconfig WANTED_OPENWRT_SDK_MIPSEL=y
BUILD_DIR=build-mips just build # .ipk, while build/ stays on linuxSee the Quick Start and Testing Guide for details.
WANTED runs as a first-class NuttX application.
just nuttx-deps # init submodules
just target nuttx && just build # build the sim
just nuttx-selftest # run the suite on the simSee the Platform Guide for sim usage and the hardware roadmap.
See CONTRIBUTING.md for code style and commit conventions.
WANTED Engine is licensed under the Apache License, Version 2.0. Bundled third-party components retain their own licenses — see NOTICE.