- Tiny: TinyWasm is designed to be as small as possible without significantly compromising performance or functionality (< 6000 lines of code).
- Portable: TinyWasm runs on any platform that Rust can target, including WebAssembly itself, with minimal external dependencies.
- Lightweight: TinyWasm is easy to integrate and has a low call overhead, making it suitable for scripting and embedding.
As of version 0.3.0
, TinyWasm successfully passes all the WebAssembly 1.0 tests in the WebAssembly Test Suite. Work on the 2.0 tests is ongoing. This enables TinyWasm to run most WebAssembly programs, including versions of TinyWasm itself compiled to WebAssembly (see examples/wasm-rust.rs). The results of the testsuites are available here.
The API is still unstable and may change at any time, so you probably don't want to use it in production yet. Note that TinyWasm isn't primarily designed for high performance; its focus lies more on simplicity, size, and portability. More details on its performance aspects can be found in BENCHMARKS.md.
Proposal | Implementation Status | Version |
---|---|---|
Mutable Globals | Fully implemented | 0.2.0 |
Multi-value | Fully implemented | 0.2.0 |
Sign-extension operators | Fully implemented | 0.2.0 |
Bulk Memory Operations | Fully implemented | 0.4.0 |
Reference Types | Partially implemented | N/A |
Multiple Memories | Partially implemented | N/A |
Memory64 | Partially implemented | N/A |
TinyWasm can be used through the tinywasm-cli
CLI tool or as a library in your Rust project. Documentation can be found here.
$ cargo add tinywasm
The CLI is mainly available for testing purposes, but can also be used to run WebAssembly programs.
$ cargo install tinywasm-cli
$ tinywasm-cli --help
std
Enables the use ofstd
andstd::io
for parsing from files and streams. This is enabled by default.logging
Enables logging using thelog
crate. This is enabled by default.parser
Enables thetinywasm-parser
crate. This is enabled by default.archive
Enables pre-parsing of archives. This is enabled by default.unsafe
Usesunsafe
code to improve performance, particularly in Memory access
With all these features disabled, TinyWasm only depends on core
, alloc
and libm
and can be used in no_std
environments.
Since libm
is not as performant as the compiler's math intrinsics, it is recommended to use the std
feature if possible (at least for now), especially on wasm32 targets.
Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in TinyWasm by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Note: The GitHub repository contains a Submodule (crates/tinywasm-parser/data
) which is licensed only under the Apache License, Version 2.0. This data is generated from the WebAssembly Specification and is only used for testing purposes and not included in the final binary.