#webassembly #wasm

no-std wasix

Experimental WASIX API bindings for Rust

30 releases

new 0.11.34+wasix-snapshot-preview1 Jul 5, 2022
0.11.33+wasix-snapshot-preview1 Jul 2, 2022
0.11.30+wasix-snapshot-preview1 Jun 25, 2022
0.11.14+wasix-snapshot-preview1 May 31, 2022

#136 in WebAssembly

Download history 254/week @ 2022-05-10 79/week @ 2022-05-17 109/week @ 2022-05-24 156/week @ 2022-05-31 102/week @ 2022-06-07 99/week @ 2022-06-14 143/week @ 2022-06-21 137/week @ 2022-06-28

496 downloads per month

Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT

405KB
8K SLoC

wasix

A Bytecode Alliance project

WASI API Bindings for Rust

Crates.io version Download docs.rs docs

This crate contains API bindings for WASIX system calls in Rust, and currently reflects the wasix_v1 module. This crate is quite low-level and provides conceptually a "system call" interface. In most settings, it's better to use the Rust standard library, which has WASI support.

The wasix crate is also entirely procedurally generated from the *.witx files describing the WASI apis. While some conveniences are provided the bindings here are intentionally low-level!

Usage

First you can depend on this crate via Cargo.toml:

[dependencies]
wasix = "0.11"

Next you can use the APIs in the root of the module like so:

fn main() {
    let stdout = 1;
    let message = "Hello, World!\n";
    let data = [wasix::Ciovec {
        buf: message.as_ptr(),
        buf_len: message.len(),
    }];
    wasix::fd_write(stdout, &data).unwrap();
}

Next you can use a tool like cargo wasix to compile and run your project:

To compile Rust projects to wasm using WASI, use the wasm64-wasix target, like this:

$ wasmer run wasix
   Compiling wasix v0.11.0+wasix-snapshot-preview1
   Compiling wut v0.1.0 (/code)
    Finished dev [unoptimized + debuginfo] target(s) in 0.34s
     Running `/.cargo/bin/cargo-wasix target/wasm64-wasix/debug/wut.wasm`
     Running `target/wasm64-wasix/debug/wut.wasm`
Hello, World!

Development

The bulk of the wasix crate is generated by the witx-bindgen tool, which lives at crates/witx-bindgen and is part of the cargo workspace.

The src/lib_generated.rs file can be re-generated with the following command:

cargo run -p witx-bindgen -- crates/witx-bindgen/WASI/phases/snapshot/witx/wasix_v1.witx > src/lib_generated.rs

Note that this uses the WASIX standard repository as a submodule. If you do not have this submodule present in your source tree, run:

git submodule update --init

License

This project is licensed 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.

Dependencies

~175KB