# WASI Build a C++26 program for the `wasm32-wasi` target and run it in a browser. ## Prerequisites - A WASI sysroot with the exception-enabled libc++, `lib/wasm32-wasip1/eh/` from wasi-sdk 33 or later: wasm builds compile C++ exceptions and link those libraries. The Flatpak bundles one, which `crafter-build` uses as it is. Elsewhere, point `CRAFTER_BUILD_WASI_SYSROOT` at a wasi-sdk sysroot, or set `cfg.sysroot` in `project.cpp`. Arch's `wasi-libc++` packages have no such libraries, and the build stops with a message saying so. - For the browser: WebAssembly exception handling, in Chrome 137, Firefox 131, Safari 18.4 or newer. ## Build ```bash crafter-build ``` Output lands in `bin/wasi-hello-wasm32-wasip1-native/`: - `wasi-hello.wasm` — the compiled module - `index.html` + `runtime.js` — a minimal in-browser WASI shim, dropped in by `EnableWasiBrowserRuntime(cfg)` in `project.cpp`. Stdout goes to the browser console. ## Run in a browser ```bash ./serve.sh # any static file server works ``` Open `http://localhost:8080/`. The string from `main()` shows up in the DevTools console. ## Run in a standalone runtime If you don't need the browser, drop the `EnableWasiBrowserRuntime(cfg)` line from `project.cpp` and run the `.wasm` directly: ```bash wasmtime bin/wasi-hello-wasm32-wasip1-native/wasi-hello.wasm ```