WASIX
WASIX is the long-term stabilization and support of the existing WASI ABI plus additional non-invasive syscall extensions that complete the missing gaps sufficiently enough to enable real, practical, and useful applications to be compiled and used.
WASIX was created by the Wasmer team to speed up the Wasmification of codebases around the world.
You can check more about WASIX on the website .
Compiling your language to WASIX
WASIX is WASI preview1 plus POSIX extensions: threads, fork and exec, TCP/UDP sockets, DNS, pipes, and TTY. Plain WASI modules also run on Wasmer.
| Language | Procedure |
|---|---|
| Rust (WASIX) | cargo install cargo-wasix, then cargo wasix build --release. Output: target/wasm32-wasmer-wasi/release/*.wasm |
| Rust (plain WASI) | rustup target add wasm32-wasip1, then cargo build --target wasm32-wasip1 |
| C / C++ (WASIX) | Install wasixcc, run wasixcc --download-all once, then wasixcc main.c -o app.wasm |
| Go | Go >= 1.21: GOOS=wasip1 GOARCH=wasm go build -o app.wasm . TinyGo: tinygo build -target=wasi -o app.wasm . |
| Python, PHP, JS | Do not compile. Run the prebuilt runtimes: python/python, php/php-32, wasmer/edgejs. Find more with wasmer package search |
Go’s wasip1 port is single-threaded WASI, not WASIX. Programs that need
sockets or subprocesses in Go need a different design or language.
To check which ABI a module targets, run wasmer inspect app.wasm and
read the import namespaces: wasi_snapshot_preview1 means WASI,
wasix_32v1 means WASIX. A “missing import” error usually means the
module targets a different ABI or a newer WASIX than the runtime.
These runtime packages can be launched with wasmer run or composed inside a
sandbox through the JavaScript SDK and
Python SDK.
Usage
To use the WASIX runner, you need to specify the runner for your package in your wasmer.toml file:
# ...
[[command]]
name = "proxy"
module = "<your-module>"
runner = "https://webc.org/runner/wasi"Learn More
To learn more about the WASIX runner, please click here .