Skip to content
This repository has been archived by the owner on Feb 14, 2025. It is now read-only.

A lightweight Cargo subcommand to build Rust code for the `wasm32-wasi` target

License

Notifications You must be signed in to change notification settings

bytecodealliance/cargo-wasi

Folders and files

NameName
Last commit message
Last commit date
Jun 28, 2022
Jul 5, 2022
Dec 11, 2019
Jun 28, 2022
Jun 7, 2023
Jun 7, 2023
Oct 25, 2019
Nov 12, 2019
Nov 12, 2019
Jun 12, 2023
Nov 15, 2019
Nov 12, 2019
Feb 14, 2025
Nov 12, 2019
Oct 23, 2019

cargo wasi is deprecated, use cargo component instead

This repository for the cargo wasi tool was created long before the Component Model of today in a time where the future of WASI was much less certain than it is now. Nowadays users looking to integrate Rust and WASI should use cargo component instead of `cargo wasi.

The original assumptions of cargo wasi, such as being based on wasm-bindgen, are no longer applicable and the design direction of WASI has changed significantly relative to when this tool was started.

See this comment for a few more details. Otherwise feel free to reach out on Zulip with any questions.


cargo wasi

A Bytecode Alliance project

A lightweight Cargo subcommand to build code for the wasm32-wasi target.

Crates.io version Download docs.rs docs

Installation

To install this Cargo subcommand, first you'll want to install Rust and then you'll execute:

$ cargo install cargo-wasi

After that you can verify it works via:

$ cargo wasi --version

Read more about installation in the guide!

Usage

The cargo wasi subcommand is a thin wrapper around cargo subcommands, providing optimized defaults for the wasm32-wasi target. Using cargo wasi looks very similar to using cargo:

  • cargo wasi build — build your code in debug mode for the wasi target.

  • cargo wasi build --release — build the optimized version of your *.wasm.

  • cargo wasi run — execute a binary.

  • cargo wasi test — run your tests in wasm32-wasi.

  • cargo wasi bench — run your benchmarks in wasm32-wasi.

In general, if you'd otherwise execute cargo foo --flag you can likely execute cargo wasi foo --flag and everything will "just work" for the wasm32-wasi target.

To give it a spin yourself, try out the hello-world versions of programs!

$ cargo new wasi-hello-world
     Created binary (application) `wasi-hello-world` package
$ cd wasi-hello-world
$ cargo wasi run
   Compiling wasi-hello-world v0.1.0 (/code/wasi-hello-world)
    Finished dev [unoptimized + debuginfo] target(s) in 0.15s
     Running `cargo-wasi target/wasm32-wasi/debug/wasi-hello-world.wasm`
     Running `target/wasm32-wasi/debug/wasi-hello-world.wasm`
Hello, world!

Or a library with some tests:

$ cargo new wasi-hello-world --lib
     Created library `wasi-hello-world` package
$ cd wasi-hello-world
$ cargo wasi test
   Compiling wasi-hello-world v0.1.0 (/code/wasi-hello-world)
    Finished dev [unoptimized + debuginfo] target(s) in 0.19s
     Running target/wasm32-wasi/debug/deps/wasi_hello_world-9aa88657c21196a1.wasm
     Running `/code/wasi-hello-world/target/wasm32-wasi/debug/deps/wasi_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

Read more about cargo wasi usage in the guide!

License

This project is license under the Apache 2.0 license with the LLVM exception. See [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.

See the contributing section of the guide to start hacking on cargo wasi!

About

A lightweight Cargo subcommand to build Rust code for the `wasm32-wasi` target

Resources

License

Code of conduct

Security policy

Stars

Watchers

Forks

Packages

No packages published

Languages