# cargo-wasix A cargo subcommand that wraps regular cargo commands for compiling Rust code to `wasix`, a superset of Webassembly `wasi` with additional functionality. See [wasix.org](https://wasix.org) for more. ## Installation > **Installation requires** > ‣ [Rust](https://www.rust-lang.org/tools/install) installed via [rustup](https://rustup.rs/) ### Information This subcommand is available on [crates.io](https://crates.io/crates/cargo-wasix) Available platforms: - `x86_64-unknown-linux-gnu` - `x86_64-apple-darwin` - `aarch64-apple-darwin` - `x86_64-pc-windows-msvc`
> [!WARNING] > The installation methods below will not immediately install the `wasix` Rust toolchain. Instead, the toolchain will automatically be downloaded on demand when you run commands like `cargo wasix {check,build,...}`.
You can install this Cargo subcommand via: ### Cargo Install ```shell $ cargo install cargo-wasix ``` ### Cargo Binstall > [`cargo binstall`](https://github.com/cargo-bins/cargo-binstall) provides a low-complexity mechanism for installing rust binaries as an alternative to building from source (via `cargo install`) or manually downloading packages. > Uses pre-built binaries. ```shell $ cargo binstall cargo-wasix ``` ### Install from install script > Uses pre-built binaries. #### For Linux and macOS ```shell $ curl --proto '=https' --tlsv1.2 -LsSf https://github.com/wasix-org/cargo-wasix/releases/latest/download/cargo-wasix-installer.sh | sh ``` #### For Windows ```shell irm https://github.com/wasix-org/cargo-wasix/releases/latest/download/cargo-wasix-installer.ps1 | iex ``` ### Verify Installation ```shell $ cargo wasix --version ``` ## Usage The `cargo wasix` subcommand is a thin wrapper around `cargo` subcommands, providing optimized defaults for the `wasm32-wasmer-wasi` target. Using `cargo wasix` looks very similar to using `cargo`: - `cargo wasix build` — build your code in debug mode for the wasix target. - `cargo wasix build --release` — build the optimized version of your `*.wasm`. - `cargo wasix run` — execute a binary. - `cargo wasix test` — run your tests in `wasm32-wasmer-wasi`. - `cargo wasix bench` — run your benchmarks in `wasm32-wasmer-wasi`. In general, if you'd otherwise execute `cargo foo --flag` you can likely execute `cargo wasix foo --flag` and everything will "just work" for the `wasm32-wasmer-wasi` target. To give it a spin yourself, try out the hello-world versions of programs! ``` $ cargo new wasix-hello-world Created binary (application) `wasix-hello-world` package $ cd wasix-hello-world $ cargo wasix run Compiling wasix-hello-world v0.1.0 (/code/wasix-hello-world) Finished dev [unoptimized + debuginfo] target(s) in 0.15s Running `cargo-wasix target/wasm32-wasmer-wasi/debug/wasix-hello-world.wasm` Running `target/wasm32-wasmer-wasi/debug/wasix-hello-world.wasm` Hello, world! ``` Or a library with some tests: ``` $ cargo new wasix-hello-world --lib Created library `wasix-hello-world` package $ cd wasix-hello-world $ cargo wasix test Compiling wasix-hello-world v0.1.0 (/code/wasix-hello-world) Finished dev [unoptimized + debuginfo] target(s) in 0.19s Running target/wasm32-wasmer-wasi/debug/deps/wasix_hello_world-9aa88657c21196a1.wasm Running `/code/wasix-hello-world/target/wasm32-wasmer-wasi/debug/deps/wasix_hello_world-9aa88657c21196a1.wasm` running 1 test test tests::it_works ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out ``` ### Update/re-download the toolchain If your toolchain stops working, or you want to update to the latest version, you can run the following command to re-download the lastest release: ``` cargo wasix download-toolchain ``` ## License This project is license under the Apache 2.0 license with the LLVM exception. See [LICENSE](https://github.com/wasix-org/cargo-wasix/blob/main/LICENSE) for more details. ### Contribution Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this project by you, as defined in the Apache-2.0 license, shall be licensed as above, without any additional terms or conditions.