wasmer-wasi Build Status Join Wasmer Slack MIT License crates.io

This crate provides the necessary imports to use WASI easily from Wasmer. WebAssembly System Interface (WASI for short) is a modular system interface for WebAssembly. WASI is being standardized in the WebAssembly subgroup.

Very succinctly, from the user perspective, WASI is a set of WebAssembly module imports under a specific namespace (which varies based on the WASI version). A program compiled for the wasm32-wasi target will be able to support standard I/O, file I/O, filesystem manipulation, memory management, time, string, environment variables, program startup etc.

This crate provides the necessary API to create the imports to use WASI easily from the Wasmer runtime, through our ImportObject API.

Supported WASI versions

| WASI version | Support | |-|-| | wasi_unstable | ✅ | | wasi_snapshot_preview1 | ✅ |

The special Latest version points to wasi_snapshot_preview1.

Learn more about the WASI version process (ephemeral, snapshot, old).

Usage

Let's consider the following hello.rs Rust program:

rust fn main() { println!("Hello, {:?}", std::env::args().nth(1)); }

Then, let's compile it to a WebAssembly module with WASI support:

sh $ rustc --target wasm32-wasi hello.rs

Finally, let's execute it with the wasmer CLI:

sh $ wasmer run hello.wasm Gordon Hello, Some("Gordon")

… and programatically with the wasmer and the wasmer-wasi libraries:

```rust use wasmer::{Store, Module, Instance}; use wasmer_wasi::WasiState;

let store = Store::default(); let module = Module::from_file(&store, "hello.wasm")?;

// Create the WasiEnv. let wasi_env = WasiState::new("command-name") .args(&["Gordon"]) .finalize()?;

// Generate an ImportObject. let importobject = wasienv.import_object(&module)?;

// Let's instantiate the module with the imports. let instance = Instance::new(&module, &import_object)?;

// Let's call the _start function, which is our main function in Rust. let start = instance.exports.getfunction("start")?; start.call(&[])?; ```

Check the fully working example using WASI.

More resources

This library is about the WASI implementation inside the Wasmer runtime. It contains documentation about the implementation itself. However, if you wish to learn more about WASI, here is a list of links that may help you: