Wawona prefers native in-process ports (zsh, uutils, weston-terminal, foot, …). WASM is the long-tail escape hatch: compile a tool to WASI, copy the .wasm onto the device, run it.
The module is a document. Apple does not sign it. The interpreter (Wasmtime Pulley on iPhone) is inside the reviewed app — no JIT, no unsigned Mach-O.
Milestone: Support WASI P1 P2 WASM!. Full compile guide: wasm-wasi.md.
On device
- Put
tool.wasmin the Wawona Documents folder (Files.app, iTunes File Sharing, orscp). - In the on-device shell:
help
ls $WAWONA_ROOTFS/usr/bin
wasm ./tool.wasm hello
./tool.wasm helloCompile (no Nix)
# Rust — https://rustup.rs
rustup target add wasm32-wasip1
cargo build --target wasm32-wasip1 --release
# Go 1.21+ — https://go.dev/dl/
GOOS=wasip1 GOARCH=wasm go build -o tool.wasm
# Swift 6.2+ wasm SDK (no Foundation)
# see examples/wayland-shm/swift/build.shWayland client (Rust, Go, or Swift — same wl_shm + xdg window):
cd examples/wayland-shm
./rust/build.sh # or ./go/build.sh or ./swift/build.shDemos: wwn-wasm/examples.
watchOS keeps the runtime off (size). macOS may use Cranelift. Native ports stay first-class.