NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #2153 most downloaded on crates.io
Core primitives for the wasmi WebAssembly interpreter
Last release 1 months ago
01 Sep 2026
Ships unpredictably
gaps range from 8 days to 3 months
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
95 releases · first in 2022
One column per quarter.
Added support for the official Wasm C-API.
wasmi_c_api_impl crate allows to use Wasmi via the Wasm C-API from Rust code.Instance::new API. (https://github.com/wasmi-labs/wasmi/pull/1134)
Clone implementation for Module. (https://github.com/wasmi-labs/wasmi/pull/1130)
Error instead of FuelError. (https://github.com/wasmi-labs/wasmi/pull/1131)
FuelError is still accessible via the Error::kind method.Fixed a dead-lock that prevented users from compiling Wasm modules in host functions called from Wasmi's executor.
CodeMap::alloc_funcs API and use it when compiling Wasm modules. (https://github.com/wasmi-labs/wasmi/pull/1125)
Module::new) by up to 23%.Allows Wasmi CLI to be installed with locked dependencies. ([#1096])
cargo install --locked wasmi_cliFuncType to 1000, each. (#1116)Added Error trait impls for all Wasmi error types impleemnting Display.
Error trait impls for all Wasmi error types impleemnting Display. (https://github.com/wasmi-labs/wasmi/pull/1089)
clippy warning about map_err. (https://github.com/wasmi-labs/wasmi/pull/1094)Added support for Wasm custom sections processing.
Module.Config::ignore_custom_sections flag to disable this functionality.Config::ignore_custom_sections flag to disable processing custom sections if this is unwanted. (https://github.com/wasmi-labs/wasmi/pull/1085)Memory::{data_ptr, data_size, size} methods. (https://github.com/wasmi-labs/wasmi/pull/1082)Memory::grow signature to mirror Wasmtime's Memory::grow method. (https://github.com/wasmi-labs/wasmi/pull/1082)Memory::current_pages method. (https://github.com/wasmi-labs/wasmi/pull/1082)
Memory::size method instead.Fix overlapping reuse of local preservation slots.
Refine and generalize the fix for v0.32.1.
Fixes a miscompilation when merging two copy instructions where the result of the first copy is also the input to the second copy and vice versa.
Updated CI jobs to use dtolnay/rust-toolchain instead of actions-rs because the latter was deprecated.
Note:
Engine executes roughly 80-100% faster and
compiles roughly 30% slower according to benchmarks conducted so far.Module::new_unchecked API. (https://github.com/wasmi-labs/wasmi/pull/829)
Module::new Wasmi eagerly compiles Wasm bytecode into Wasmi bytecode
which is optimized for efficient execution. However, this compilation can become very
costly especially for large Wasm binaries.CompilationMode::Eager: Eager compilation, what Wasmi did so far. (default)CompilationMode::LazyTranslation: Eager Wasm validation and lazy Wasm translation.CompilationMode::Lazy: Lazy Wasm validation and translation.CompilationMode::LazyTanslation: Usually improves startup performance by a factor of 2 to 3.CompilationMode::Lazy: Usually improves startup performance by a factor of up to 27.CompilationMode::Lazy can lead to partially validated Wasm modules
which can introduce non-determinism when using different Wasm implementations.
Therefore users should know what they are doing when using CompilationMode::Lazy if this is a concern.let mut config = wasmi::Config::default();
config.compilation_mode(wasmi::CompilationMode::Lazy);
CompilationMode::Lazy or CompilationMode::LazyTranslation and fuel metering is enabled
the first function access that triggers compilation (and validation) will charge fuel respective
to the number of bytes of the Wasm function body. (https://github.com/wasmi-labs/wasmi/pull/876)Module::new and
Module::new_unchecked are now non-streaming with insane performance improvements of up
to 80% in certain configurations.Module::new_streaming and Module::new_streaming_unchecked APIs.Module::validate API. (https://github.com/wasmi-labs/wasmi/pull/840)
Engine config.Module::new or Module::new_unchecked
might still fail due to translation errors.--compilation-mode argument to enable lazy Wasm compilation. (https://github.com/wasmi-labs/wasmi/pull/849)--verbose mode to Wasmi CLI by @tjpalmer. (https://github.com/wasmi-labs/wasmi/pull/957)
Memory::new_static constructor by @Ddystopia. (https://github.com/wasmi-labs/wasmi/pull/939)
Memory from a static byte array
which is especially handy for certain embedded use cases.LinkerBuilder type. (https://github.com/wasmi-labs/wasmi/pull/989)
LinkerBuilder to create new Linkers with the same set of host functions is a lot more
efficient than creating those Linkers the original way. However, the initial LinkerBuilder
construction will be as inefficient as building up a Linker previously.EnforcedLimits configuration option to Config. (https://github.com/wasmi-labs/wasmi/pull/985)
let mut config = wasmi::Config::default();
config.enforced_limits(wasmi::EnforcedLimits::strict());
In future updates we might relax this to make EnforcedLimits fully customizable.EngineWeak constructed via Engine::weak. (https://github.com/wasmi-labs/wasmi/pull/1003)
Engine.no-hash-maps crate feature to the wasmi crate. (https://github.com/wasmi-labs/wasmi/pull/1007)
wasmi crate to avoid using hash based data structures which can be beneficial for
running Wasmi in some embedded environments such as wasm32-unknown-unknown that do not support
random sources and thus are incapable to spawn hash maps that are resilient to malicious actors.Default implementation for Store<T> where T: Default. (https://github.com/wasmi-labs/wasmi/pull/1031)
WasmTy implementations for f32 and f64 Rust primitives. (https://github.com/wasmi-labs/wasmi/pull/1031)
Linker::func_wrap calls that take those primitives as arguments.
Before this change users had to use F32 and F64 instead which is a bit cumbersome.tail-calls and extend-const proposals by default. (https://github.com/wasmi-labs/wasmi/pull/849)
Debug and Display impls for NaNs of Wasm f32 and f64 values.
nan:0x{bytes} where {bytes} is their respective raw bytes.Sync for ResumableInvocation and TypedResumableInvocation. (https://github.com/wasmi-labs/wasmi/pull/870)Config::tail_call and Config::extended_const by default. (https://github.com/wasmi-labs/wasmi/pull/1031)
Engine backend. (https://github.com/wasmi-labs/wasmi/pull/818)
Engine is more promising
and the Wasmi team does not want to maintain two different engine backends.FuelConsumptionMode from Config. (https://github.com/wasmi-labs/wasmi/pull/877)
FuelConsumptionMode was required to differentiate between lazy and eager fuel consumption.
This was necessary due to how lazy fuel consumption was implemented in that it would pre-charge
for instruction execution were the exact amount of required fuel was not possible to determine
at compilation time. Examples are memory.grow and table.copy instructions. The linked PR
improved lazy fuel consumption to no longer pre-charge and instead pre-check if the operation
is going to succeed and only charge fuel in that case.dtolnay/rust-toolchain instead of actions-rs because the latter was deprecated. (https://github.com/wasmi-labs/wasmi/pull/842)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Removed some deprecated functions in the wasmi_core crate.
wasmi_core crate. (https://github.com/wasmi-labs/wasmi/pull/545)global.get of immutable non-imported globals. (https://github.com/wasmi-labs/wasmi/pull/533)
wasmi_core and Wasmi's executor.
Fixed a potential undefined behavior as reported by the miri tool with respect to its experimental stacked borrows.
miri tool
with respect to its experimental stacked borrows. (https://github.com/wasmi-labs/wasmi/pull/524)Linker::instantiate now takes &self instead of &mut self. (https://github.com/wasmi-labs/wasmi/pull/512)
Caller::new was public. (https://github.com/wasmi-labs/wasmi/pull/514)
TypedFunc::call at slight cost of Func::call. (https://github.com/wasmi-labs/wasmi/pull/522)
miri testing to Wasmi CI (https://github.com/wasmi-labs/wasmi/pull/523)Added Contibution Guidelines and Code of Conduct to the repository.
Added Memory::data_and_store_mut API inspired by Wasmtime's API.
Memory::data_and_store_mut API inspired by Wasmtime's API. (https://github.com/wasmi-labs/wasmi/pull/448)wasmparser-nostd dependency from 0.90.0 to 0.91.0.
wasmi_core from 0.3.0 to 0.4.0.num-rational dependency from wasmi_core
for some nice speed-ups in compilation time of Wasmi itself.global.get and global.set Wasm instruction execution. (https://github.com/wasmi-labs/wasmi/pull/427)
criterion benchmarking framework to version 0.4.0.br_table translations. (https://github.com/wasmi-labs/wasmi/pull/440)clippy lints for Wasmi and wasmi_core. (https://github.com/wasmi-labs/wasmi/pull/438)Update wasmparser-nostd dependency from version 0.83.0 -> 0.90.0. Link:
wasmparser-nostd dependency from version 0.83.0 -> 0.90.0.
Link:
wasmparser::VisitOperator API.
Link
Fixed bugs found during fuzzing the translation phase of Wasmi. Link
Read trait implementation for no_std compilations.
Linkwasmi_core version 0.3.0.wasmi::Config in order to better reflect the API of
wasmtime::Config.Trap type to be of pointer size which resulted in significant
performance wins across the board especially for call intense work loads.
LinkVec based implementation.
Linkwasmi::Engine now caches the bytes of the default linear memory for
performance wins in memory.store and memory.load intense work loads.
LinkAdded support for the following Wasm proposals:
Added support for the following Wasm proposals:
We plan to support more Wasm proposals in the future.
Wasmi has been entirely redesigned and reimplemented.
This work resulted in an entirely new API that is heavily inspired by
the Wasmtime API,
a brand new Wasm execution engine that performs roughly 30-40%
better than the previous engine according to our benchmarks,
the support of many Wasm proposals and Wasm parsing and validation
using the battle tested wasmparser
crate by the BytecodeAlliance.
The new Wasmi design allows to reuse the Wasm execution engine resources instead of spinning up a new Wasm execution engine for every function call.
Note: If you plan to use Wasmi it is of critical importance
to compile Wasmi using the following Cargo profile settings:
[profile.release]
lto = "fat"
codegen-units = 1
If you do not use these profile settings you might risk regressing performance of Wasmi by up to 400%. You can read more about this issue here.
Note: This is the last major release of the legacy Wasmi engine. Future releases are using the new Wasm execution engines that are currently in develo
Note: This is the last major release of the legacy Wasmi engine.
Future releases are using the new Wasm execution engines
that are currently in development.
We may consider to publish new major versions of this Wasm engine
as wasmi-legacy crate.
wasmi-validation v0.4.2 -> v0.5.0Deprecated RuntimeValue::decode_{f32,f64} methods.
wasmi_core crate.RuntimeValue::decode_{f32,f64} methods.
F32 and F64 types.
The RuntimeValue type provides from_bits methods for similar purposes.F{32,64}::from_bits().into() respectively.TrapKind to TrapCode.TrapCode definitions from the wasmi_core crate.parity-wasm v0.42 -> v0.45memory_units v0.3.0 -> v0.4.0RuntimeValue to Value internally.wat crate dependency instead of wabt for reading .wat files in tests.assert_matches: v1.1 -> v1.5rand 0.4.2 -> 0.8.2clippy warnings.Make Wasmi traps more conformant with the Wasm specification.
{f32, f64}_copysign implementations. (https://github.com/wasmi-labs/wasmi/pull/293){f32, f64}_{min, max} implementations. (https://github.com/wasmi-labs/wasmi/pull/295)LittleEndianConvert trait. (https://github.com/wasmi-labs/wasmi/pull/290)#[must_use]. (https://github.com/wasmi-labs/wasmi/pull/288)ValueStack so that only the live parts are printed.Audit crate dependencies for vulnerabilities.
region crate does:
https://github.com/darfink/region-rs#platformswasmi-validation crates now both use Rust edition 2021.README now better teaches how to test and benchmark the crate.num-rational from version 0.2.2 -> 0.4.0.MemoryInstance::get method.
MemoryInstance::get_value or MemoryInstance::get_into
methods instead.Vec
based fallback implementation anyways due to technical design.core crate feature that previously has been required for no_std builds.
--no-default-features for a no_std build.Updated parity-wasm from verion 0.41 to 0.42.
parity-wasm from verion 0.41 to 0.42.wasmi-validation from version 0.3.1 to 0.4.0.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →