# CLI Usage In general `cargo wasi` takes no CLI flags specifically, since it will forward *everything* to `cargo` under the hood. The subcommand, however, will attempt to infer flags such as `-v` from the Cargo arguments pass, switching itself to a verbose output if it looks like Cargo is using a verbose output. The supported subcommands for `cargo wasi` are: ## `cargo wasi build` This is the primary subcommand used to build WebAssembly code. This will build your crate for the `wasm32-wasi` target and run any postprocessing (like `wasm-bindgen` or `wasm-opt`) over any produced binary. ``` $ cargo wasi build $ cargo wasi build --release $ cargo wasi build --lib $ cargo wasi build --test foo ``` Output `*.wasm` files will be located in `target/wasm32-wasi/debug` for debug builds or `target/wasm32-wasi/release` for release builds. ## `cargo wasi check` This subcommands forwards everything to `cargo check`, allowing to perform quick compile-time checks over your code without actually producing any `*.wasm` binaries or running any wasm code. ``` $ cargo wasi check $ cargo wasi check --lib $ cargo wasi check --tests ``` ## `cargo wasi run` Forwards everything to `cargo run`, and runs all binaries in `wasmtime`. Arguments passed will be forwarded to `wasmtime`. Note that it's not necessary to run `cargo wasi build` before this subcommand. Example usage looks like: ``` $ cargo wasi run $ cargo wasi run --release $ cargo wasi run arg1 arg2 $ cargo wasi run -- --flag-for-wasm-binary $ cargo wasi run --bin foo ``` > **Note**: Using `cargo wasi` will print `Running ...` twice, that's normal > but only one wasm binary is actually run. ## `cargo wasi test` Forwards everything to `cargo test`, and runs all tests in `wasmtime`. Arguments passed will be forwarded to `cargo test`. Note that it's not necessary to run `cargo wasi build` before executing this command. Example usage looks like: ``` $ cargo wasi test $ cargo wasi test my_test_to_run $ cargo wasi test --lib $ cargo wasi test --test foo $ cargo wasi test -- --nocpature ``` You can find some more info about writing tests in the [Rust book's chapter on writing tests](https://doc.rust-lang.org/book/ch11-01-writing-tests.html). > **Note**: You'll also want to be sure to consult [WASI-specific caveats when testing](testing.md) since there are some gotchas today. ## `cargo wasi bench` Forwards everything to `cargo bench`, and like previous commands also executes the benchmarks inside of `wasmtime`. Arguments passed will be forwarded to `cargo bench`, such as: ``` $ cargo wasi bench $ cargo wasi bench my_benchmark_to_run $ cargo wasi bench --bench foo $ cargo wasi bench -- --nocpature ``` ## `cargo wasi fix` Forwards everything to `cargo fix`, but again with the `--target wasm32-wasi` option which ensures that the fixes are also applied to wasi-specific code (if any). ## `cargo wasi version` This subcommand will print out version information about `cargo wasi` itself. This is also known as `cargo wasi -V` and `cargo wasi --version`. ``` $ cargo wasi version $ cargo wasi -V $ cargo wasi --version ``` ## `cargo wasi self clean` This is an internal management subcommand for `cargo wasi` which completely clears out the cache that `cargo wasi` uses for itself. This cache includes various metadata files and downloaded versions of tools like `wasm-opt` and `wasm-bindgen`. ``` $ cargo wasi self clean ``` ## `cargo wasi self update-check` Checks to see if an update is ready for `cargo-wasi`. If it is then instructions to acquire the new update will be printed out. ``` $ cargo wasi self update-check ```