Continuous Integration | Test Coverage | Documentation | Crates.io |
---|---|---|---|
Wasmi - WebAssembly (Wasm) Interpreter
Wasmi is an efficient and lightweight WebAssembly interpreter with a focus on constrained and embedded systems.
Version 0.31.0
has been audited by SRLabs.
Distinct Features
The following list states some of the distinct features of Wasmi.
- Simple, correct and deterministic execution of WebAssembly.
- Low-overhead and cross-platform WebAssembly runtime for embedded environments.
- JIT bomb resisting translation.
- Loosely mirrors the Wasmtime API.
- 100% WebAssembly spec testsuite compliance.
- Built-in support for fuel metering.
- Supports the official Wasm C-API.
Usage
Refer to the Wasmi usage guide to learn how properly to use Wasmi.
WebAssembly Proposals
The new Wasmi engine supports a variety of WebAssembly proposals and will support even more of them in the future.
WebAssembly Proposal | Status | Comment |
---|---|---|
mutable-global |
✅ | ≥ 0.14.0 . |
saturating-float-to-int |
✅ | ≥ 0.14.0 . |
sign-extension |
✅ | ≥ 0.14.0 . |
multi-value |
✅ | ≥ 0.14.0 . |
bulk-memory |
✅ | ≥ 0.24.0 . (#628) |
reference-types |
✅ | ≥ 0.24.0 . (#635) |
simd |
❌ | Unlikely to be supported. |
tail-calls |
✅ | ≥ 0.28.0 . (#683) |
extended-const |
✅ | ≥ 0.29.0 . (#707) |
multi-memory |
✅ | ≥ 0.37.0 . (#1191) |
function-references |
📅 | Planned but not yet implemented. (#774) |
gc |
📅 | Planned but not yet implemented. (#775) |
threads |
📅 | Planned but not yet implemented. (#777) |
relaxed-simd |
❌ | Unlikely to be supported since simd is unlikely to be supported. |
component-model |
📅 | Planned but not yet implemented. (#897) |
exception-handling |
📅 | Planned but not yet implemented. (#1037) |
branch-hinting |
📅 | Planned but not yet implemented. (#1036) |
custom-page-sizes |
📅 | Planned but not yet implemented. (#1197) |
WASI | 👨🔬 | Experimental support for WASI (wasip1 ) via the wasmi_wasi crate. |
C-API | 👨🔬 | Experimental support for the official Wasm C-API via the wasmi_c_api_impl crate. |
Development
Build & Test
Clone the Wasmi repository and build using cargo
:
git clone https://github.com/wasmi-labs/wasmi.git --recursive
cd wasmi
cargo build
cargo test
Benchmarks
In order to benchmark Wasmi use the following command:
cargo bench
Use translate
, instantiate
, execute
or overhead
filters to only run benchmarks that test performance of Wasm translation, instantiation, execution or miscellaneous overhead respectively, e.g. cargo bench execute
.
We maintain a timeline for benchmarks of every commit to master
that can be viewed here.
Supported Platforms
Wasmi supports a wide variety of architectures and platforms.
- Fore more details see this list of supported platforms for Rust.
- Note: Wasmi can be used in
no_std
embedded environments, thus not requiring the standard library (std
). - Only some platforms are checked in CI and guaranteed to be fully working by the Wasmi maintainers.
License
Licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.