Drop a .wasm into Files and run it. The interpreter is in the app; Apple does not sign the module.

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

  1. Put tool.wasm in the Wawona Documents folder (Files.app, iTunes File Sharing, or scp).
  2. In the on-device shell:
help
ls $WAWONA_ROOTFS/usr/bin
wasm ./tool.wasm hello
./tool.wasm hello

Compile (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.sh

Wayland client (Rust, Go, or Swift — same wl_shm + xdg window):

cd examples/wayland-shm
./rust/build.sh    # or ./go/build.sh or ./swift/build.sh

Demos: wwn-wasm/examples.

watchOS keeps the runtime off (size). macOS may use Cranelift. Native ports stay first-class.