Wawona prefers native in-process ports when we can ship them (zsh, uutils, weston-terminal, foot, …). Those are real platform binaries inside the reviewed app.
Wasm is not platform-native. That is a real tradeoff: no Mach-O/dlopen modules, no Alpine apk into a guest Linux userspace, and performance sits behind an interpreter (Pulley on Apple mobile). It is a bummer next to a true native port.
What you get instead is a portable Wawona Runtime (wwn-wasm) that developers and users can target once and run across Wawona with full App Store / Play compliance:
- Compile to WASI P1 or P2 (
.wasmbytecode as a document / package) - Browse and search packages at
repo.wawona.io/search/?channel=wasm. How to search and install (wasm, Sileo iOS debs, Termux Android debs) is on Packages. - Install with
wpm(or drop into Files) from that Mode A registry - The reviewed Runtime in the signed app interprets the module. Apple does not sign the
.wasm, and there is no unsigned Mach-O download path
There is no Mode B package channel for Wasm. App Store / Play extra software is wasm only. APT .deb is separate: Sileo on jailbroken iOS (/jailbreak/) and Termux on sideloaded Android (/termux/, not jailbreak, not Play). Store Runtime never needs Mode B to install packages.
Mode B IPAs (TrollStore or Sileo) may JIT-execute the same /wasm/ packages when the JIT entitlement is present. That is an execute backend on the Mode B IPA, not a second registry. App Store builds stay interpreter-only (no Wasm JIT).
Milestone: Support WASI P1 P2 WASM!. Developers: Wasm host ABI, Wayland wasm. ArtCraft Crafting Apps: not in the catalog yet (notes).
Package builds and planned Wasmer / WebC
WASI P1 packages for the catalog build on GitHub Actions in Wawona/wasm-packages (not on a laptop). wpm still installs /wasm/v1 bytecode. A later change adds Wasmer/WebC via wasinix (ABI P1 / P2 / WASIX). Engineering: wasm-abi.md.
On device
- Browse the catalog at
repo.wawona.io/search/?channel=wasm, or follow Packages. Puttool.wasmin the Wawona Documents folder (Files.app, iTunes File Sharing, orscp), or install withwpm. - In the on-device shell:
help
ls $WAWONA_ROOTFS/usr/bin
wasm ./tool.wasm hello
./tool.wasm helloExample: Chess (chess-wawona)
A full Wayland app from the catalog: 2D board, pointer/touch, typed moves, four variants, and a Rust engine. Start a machine (so WAYLAND_DISPLAY is live), then:
wpm install chess-wawona
wasm chess-wawonaCatalog entry: chess-wawona. How it is built (developers): Wayland wasm.
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.shWayland client (Rust, Go, or Swift. Same wl_shm + xdg window): see Wayland wasm.
cd Relay/import/wasm/examples/wayland-shm
./rust/build.sh # or ./go/build.sh or ./swift/build.shDemos: Relay/import/wasm/examples.
Package manager (wpm)
wpm is Wawona Runtime’s dedicated package manager: iSH-like UX for Wasm packages, not .deb and not OCI containers. Default registry: repo.wawona.io/wasm/v1 (store-safe Mode A). The web catalog is /search/?channel=wasm (same index.json). Jailbreak .deb search is a different catalog (/search/?channel=deb, Sileo / apt). See Packages.
See Mode A and Mode B and wasm-package-manager.md.
Relay Wasm ships on every product target, including watchOS (hello-wasi-gui via wl_shm + SpriteKit). macOS may use Cranelift. Native ports stay first-class whenever we have one.