Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

882 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WebAssembly Nanocontainer Technology for Embedded Devices

pipeline status coverage report

CHANGELOG

  • 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.

Documentation

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/wanted contract: 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.

Architecture

WANTED implements a VFS Router. Path resolution is split into four primary namespaces:

  1. Device Namespace (/dev/): Routes to registered sub-drivers (pipes, stdio, control plane).
  2. Network Namespace (/net/): Routes to the socket driver for TCP/UDP.
  3. Process Namespace (/proc/): Read-only system state and metrics.
  4. Application Space (Root /): TarFS merged read-only OCI layers.
WAPP -> WASI -> VFS ROUTER -> [/dev/ | /net/ | /proc/ | TarFS(/)]

See Architecture for the full conceptual overview.

Build and Run

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 suite

Configuration 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 linux

See the Quick Start and Testing Guide for details.

NuttX simulator

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 sim

See the Platform Guide for sim usage and the hardware roadmap.

Contributing

See CONTRIBUTING.md for code style and commit conventions.

License

WANTED Engine is licensed under the Apache License, Version 2.0. Bundled third-party components retain their own licenses — see NOTICE.

About

WANTED runs multiple WebAssembly applications — wapps — as isolated threads inside one process. A wapp's only interface to the outside world is a virtual filesystem: every device, socket, IPC channel, and control-plane node is a path. It's basically docker for embedded devices. Mirror of https://gitlab.com/mekops/wanted/wanted-engine.

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Contributors

Languages