NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
crates.io · #2054 most downloaded on crates.io
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 54 of the last 60 stable releases
52 versions withdrawn
withdrawn after publishing
9 years old
140 releases · first in 2018
Upgrading from Wasmi 1.x? Please refer to the Wasmi v1 to v2 migration guide which lists all the changes that require action from users.
Upgrading from Wasmi 1.x? Please refer to the
Wasmi v1 to v2 migration guide
which lists all the changes that require action from users.
Wasmi 2.0.0 includes all changes of the 2.0.0-beta.0 up to 2.0.0-beta.10 releases.
Since those are far too many to repeat here, this entry only lists the highlights.
For the complete, PR-by-PR record please refer to the respective beta release entries:
simd crate feature no longer affects memory consumption or
execution performance of non-simd Wasm code.auto-dispatch crate feature. #1968CodeMap to be lock-free and append-only significantly improving Wasm to Wasm call performance.
InstanceEntity layout plus caching greatly improved access to all instance related
data, namely Func, Global, Memory, Table, Data and Elem.
count/globals benchmark improved by a whopping ~35%.wasmi::Table elements shrank from 64-bit (or even 128-bit with the simd crate feature
enabled) to flat 32-bit references, shrinking Wasm tables by a factor of 2-4x.
validate crate feature that controls whether Wasmi supports Wasm validation. #1902
memory64 is now optional via the memory64 crate feature. #1934Op debug output moved behind a new, default-disabled debug crate feature and
generic monomorphization in translation was replaced by explicit V-Tables.
Config::operator_cost and
Config::fuel_cost APIs. #2025deterministic crate feature. #1947Config option to disallow running the start function of Wasm modules. #1985libm crate feature to enforce libm usage. #1860unstable crate feature which enables Rust's unstable become keyword to
enforce tail calls in Wasmi's operator dispatch on nightly Rust. #1825wasmi, including
portable-dispatch, and properly supports no_std.
One column per quarter.
Added way to customize dynamic fuel metering. [#2025]
sp in Wasm calls. #2014
InstanceEntity pointer to WasmFuncEntity. #2018
call_indirect and call_imported.call_indirect operator variants for (table 0). #2019
call_indirect operators work on (table 0).Add inline annotations to prevent spilling in some execution handlers.
inline annotations to prevent spilling in some execution handlers.
load and store execution handlers.Inst type wrap usize on platforms with enough GPRs. #2011
aarch64 (a.k.a Apple Silicon).Added Config option to disallow running the start function of Wasm modules. [#1985]
Config option to disallow running the start function of Wasm modules. #1985call_imported and call_indirect via caching. #1996call_indirect performance. #2006count/globals benchmark saw a whopping ~35% improvement in performance.
call_indirect performance. #1993call_imported performance for non-host calls. #1994Stable{Arena,Vec} to wasmi_collections. #1987
Arena and Vec respectively
but with stable internal pointers to their contained items.Fixed an issue that cmp+branch fusions were not applied in all valid cases. [#1975]
cmp+branch fusions were not applied in all valid cases. #1975Added a new default-enabled auto-dispatch crate feature. [#1968]
auto-dispatch crate feature. #1968
opt-level, and otherwise falls back to the portable (loop-based) dispatch
scheme automatically.portable-dispatch feature still takes precedence over auto-dispatch.wasmi, wasmi_cli, wasmi_c_api and wasmi_c_api_impl crates.load operator translation. #1969fabs + fneg fused translation. #1970load operators did not properly preserve a previous accumulator. #1971multi-value Wasm br_table translation. #1972debug_assert in fuse_cmp_branch. #1973Reduced Wasmi's binary artifact size with some new features and tweaks:
load+copy_sr operators. #1955
u64 overflow when sizing a 64-bit memory's maximum during translation. #1964
memory64 declared with the largest allowed maximum (2^48 pages) turned every
non-zero constant load/store address into an unconditional MemoryOutOfBounds trap.load_extend translation and execution. #1958
v128_load{32,64}_lane operators to extract_lane + scalar.store operators. #1966Args utility type. #1956Added support for the Wasm deterministic profile. [#1947]
deterministic crate feature.memory64 support. #1934
memory64 slightly reduces the artifact binary size
and may improve execution performance, especially on embedded targets.portable-dispatch crate feature to the Wasmi C-API. #1950
wasmi_c_api_impl (and wasmi_c_api) crates now forward a portable-dispatch
feature to the underlying wasmi crate, so C-API users can opt into the portable
(loop-based) operator dispatch that does not rely on tail calls.portable-dispatch feature for CMAKE_BUILD_TYPE=Debug.wasmi_c_api_impl and wasmi_c_api crates now forward most features exposed by wasmi.std feature was not forwarded to wasmi.portable-dispatch. [#1942]
opt-level = 3 and codegen-units = 1
to avoid the stackoverflow issue.opt-level = 2 is enough to make LLVM generate the tail-call dispatch
for all but memory.grow and table.grow operators.nightly
toolchain and use the unstable crate feature to make Wasmi use Rust's unstable become keyword.indirect-dispatch. #1939
llvm-args=--switch-to-lookup=true.
However, with this fix, that is no longer needed and Wasmi compile-times are back to normal again.$ORIGIN rpath on macOS, which dyld does not expand.
It is now omitted on macOS (matching Wasmtime). Consumers of the shared libwasmi.dylib on
macOS should add their own rpath (e.g. -Wl,-rpath,@loader_path) to locate it at runtime.no_std support. #1915isub with immediate rhs to iadd. #1914wasmi_wast suite (not just the call tests) on the
non-portable-dispatch path at codegen-units > 1, plus a new wasmi_torture test that loops
every Wasm operator category under a small RUST_MIN_STACK so any handler that stops tail-calling
overflows the native stack and fails CI.wasmi_wast test runner verifies NaN canonicalization when built with the deterministic feature. #1947
nan:arithmetic results to match the canonical NaN.copy_span operators from Wasmi IR. #1929
cfg-guard badges to docs rendered at docs.rs. #1913nightly Rust toolchain used for the Wasmi CI. #1936Added a new validate crate feature to wasmi and wasmi_cli crates. 🚀
validate crate feature to wasmi and wasmi_cli crates. 🚀
--no-default-features.libm crate feature to Wasmi. #1860
libm usage.funcref and externref with null value. #1839CodeMap to be lock-free & append-only. #1898
CodeMap attributes which significantly
improves Wasm to Wasm function call performance.v128 argument types. #1848
instance preservation of same-instance calls. #1878ref.is_null via i32.eqz instead of i64.eqz. #1861v128_select_ssss translation. #1834
mem0 after host function calls. #1837
f{32,64}.{ceil,floor,trunc}. #1860std crate feature forward from wasmi to wasmi_ir. #1862wat based tests were not ignored on !wat. #1883Added unstable crate feature to wasmi, wasmi_wast and wasmi_cli crates. [#1825]
unstable crate feature to wasmi, wasmi_wast and wasmi_cli crates. #1825
rustc features available in nightly Rust releases.become keyword to enforce
tail-calls in its instruction dispatch when portable-dispatch is disabled.become with cargo build --no-default-features --features unstable.README.md to Wasmi's CLI application. #1824ResourceLimiter API. #1817
StoreLimits now properly enforce panics if trap_on_grow_failure was enabled.memory_grow_failed and table_grow_failed now take MemoryError and TableError respectively.LimiterError is now a single variant enum making its use much simpler.run command without arguments. #1810
Table::set_raw API. #1818
local.set translation and SIMD. #1821select operators. #1823
select operators.Wasmi's internal Handle trait no longer has a From super-trait. [#1804]
Handle trait no longer has a From super-trait. #1804
From impls for Wasmi handles
such as Func, Global, etc..Implemented some improvements for wasmi::Table.
wasmi::Table.
Ref and RefType and make wasmi::Table operate on Ref instead of Val. #1747
wasmi::Table is now unaffected by
the simd crate feature and no longer suffers from increased memory consumption.Ref and RefType.wasmi::Table elements from 64-bit to 32-bit. #1776
wasmi::Table instances.portable-dispatch:
Enable to compile Wasmi on any platform supported by Rust
However, this may significantly reduce execution performance.indirect-dispatch:
Enable to use less encoding space for Wasmi's internal IR.
However, this may significantly reduce execution performance.simd crate feature no longer affects memory consumption or
execution performance of non-simd Wasm code.wasmi_cli crate:
wasi: Enable WASI support. (default: ✅)wast: Enable Wast support and wast command. (default: ✅)run: Enable the run command (default: ✅)portable-dispatch: Enable wasmi's portable-dispatch crate feature. (default: ❌)indirect-dispatch: Enable wasmi's indirect-dispatch crate feature. (default: ❌)run: Executes a WebAssembly module.wast: Executes a WebAssembly script.wasmi_cli to just wasmi. #1798wasmi_wasi::add_to_externals API. #1785
add_to_linker API and should
be used instead if possible.coverage CI job. #1745cargo-deny. #1761wasmi_collections arena data structures. #1771Untyped{Val,Ref} types to Raw{Val,Ref}. #1781Nothing published for this version
Fixed a bug that Wasmi's translator would sometimes incorrectly merge copy instructions. [#1779]
copy instructions. #1779Fixed another bug with incorrect translation of wide-arithmetic ops followed by local.set. [#1762]
wide-arithmetic ops followed by local.set. #1762Fixed a bug that local.set fusion with some wide-arithmetic ops was working incorrectly. [#1756]
local.set fusion with some wide-arithmetic ops was working incorrectly. #1756
Fixed a bug that local preservation of Wasm loops was missing. [#1748]
Fix a bug in the execution of i{32,64}.rem_s(MAX, -1). [rev-1c3682f]
i{32,64}.rem_s(MAX, -1). rev-1c3682f
0 while Wasmi trapped with integer-overflow.Fix Config::set_max_stack_height check. [#1727]
Fixed a bug that Config::set_max_cached_stacks set the recursion limit instead. [#1721]
Config::set_max_cached_stacks set the recursion limit instead. #1721
Fixed a memory leak in ByteBuffer introduced in the last patch. [#1722]
ByteBuffer introduced in the last patch. [#1722]
Fixed a bug when trying to grow Memory beyond the system's memory limits. [#1722]
Memory beyond the system's memory limits. #1722
Remove all deprecated items from Wasmi's API: [#1634]
This release comes with a blog post: Wasmi 1.0
TrapCode and u8. #1651table.grow behavior to match Wasmtime's limits. #1710reference-types in Wasmi's fuzzing infrastructure. #1708wasmi_ir to reduce compile times. #1640Fixed a bug that Config::set_max_cached_stacks set the recursion limit instead. [#1721]
Config::set_max_cached_stacks set the recursion limit instead. [#1721]
Fixed a memory leak in ByteBuffer introduced in the last patch. [#1722]
ByteBuffer introduced in the last patch. [#1722]
Fixed a bug when trying to grow Memory beyond the system's memory limits. [#1722]
Memory beyond the system's memory limits. [#1722]
Fixed a bug that caused miscalculation of function frame sizes. [#1699]
bulk-memory table instructions. #1690Fixed a bug that caused lazily compiled functions to be stuck at compiling when running out of fuel during translation. [#1648]
Deprecated the StackLimits type and Config::set_stack_limits method.
Config API. #1631
StackLimits type and Config::set_stack_limits method.Config::cached_stacks method.Config::set_{max_recursion_depth,min_stack_height,max_stack_height} methods.This is supposedly the final release before Wasmi 1.0.0.
This is supposedly the final release before Wasmi 1.0.0.
Fix negated f{32,64}.cmp+select op-code fusion. [#1612]
f{32,64}.cmp+select op-code fusion. #1612The deprecations introduced in this version prepares Wasmi for its 1.0 release.
The deprecations introduced in this version prepares Wasmi for its 1.0 release.
wasmi::core module re-export. [#1605]
wasmi's
crate root which users should use instead.ExternRef non-nullable and introduce new nullable Ref type. [#1603]
Option<ExternRef> instead which is very similar.Ref<ExternRef> can be converted to Option<ExternRef> using the val method.FuncRef type in favor of Ref<Func> [#1604]
Option<Func> instead which is very similar.Ref<Func> can be converted to Option<Func> using the val method.InstancePre and Linker::instantiate [#1602]
start function upon
instantiation.LinkerBuilder type. [#1601]
Linker or Instance::new instead.Marked Module::new_streaming[_unchecked] API deprecated. [#1540]
reinterpret operators to wasmi_core::wasm API.Module::new_streaming[_unchecked] API deprecated. #1540
CompilationMode default to CompilationMode::LazyTranslation. #1530
f{32,64}.copysign with immediate rhs operands won't bump fuel. #1539i64.mul_wide_s. #1545 #1546integer-overflow that could happen when reading or writing memory. #1554Fixed a memory leak in ByteBuffer introduced in the last patch. [#1722]
ByteBuffer introduced in the last patch. [#1722]
Fixed a bug when trying to grow Memory beyond the system's memory limits. [#1722]
Memory beyond the system's memory limits. [#1722]
Remove the downcast-rs dependency from Wasmi crates. [#1517]
downcast-rs dependency from Wasmi crates. #1517downcast-rs.select instructions more aggressively. #1526
select instruction
variants and thus might have positive affects on Wasmi's execution performance.Store ::new no longer requires T: 'static. [#1507]
Added support for Wasm function call resumption after running out of fuel. [#1498]
wasmi_core::simd API functions for relaxed-simd. #1447Error trait for all wasmi error types on no_std. #1462Linker::instantiate. #1476wasm-tools dependencies to v228. #1463wasmi_core::TypedVal's API. #1457
wasmi_core::wasm API is to be preferred and provides the same functionality.wasmparser's parser aware of enabled Wasm features. #1502
wasmparser aware of the enabled Wasm features allows it to detect malformed Wasm
binaries during parsing.Store's T. #1449bulk-memory (and bulk-table) instruction variants. #1489
f{32,64}.{lt,le} instructions. #1496
f{32,64}.{le,lt} instructions as well.select instructions. #1497
select instructions.wasmi internals into wasmi_core:
Fixed a bug with executing SIMD store_lane instructions. [#1450]
store_lane instructions. #1450Add support for the Wasm relaxed-simd proposal. [#1443]
relaxed-simd proposal. #1443
relaxed-simd operators behave deterministically on all platforms supported by Wasmi.simd crate feature in order to use relaxed-simd capabilities.simd crate feature may regress Wasm execution and memory consumption
performance.Add missing WasmTy implementation for V128 [#1437]
Added support for the Wasm simd proposal. [#1364]
simd proposal. #1364
simd crate feature.simd may introduce Wasm execution overhead, increase memory consumption
increase compiled artifact size and compile times for Wasmi crates. So use simd
only if your use case needs it.Fixed a bug in i64.mul_wide_{s,u} instruction constant evaluation. [#1397]
i64.mul_wide_{s,u} instruction constant evaluation. #1397Added support for the Wasm wide-arithmetic proposal. [#1369]
wide-arithmetic proposal. #1369
wide-arithmetic proposal is disabled by default in wasmi
library and enabled by default in the Wasmi CLI.ptr value. #1381wasm-tools dependencies from v226 to v227. #1380Fixed a memory leak in ByteBuffer introduced in the last patch. [#1722]
ByteBuffer introduced in the last patch. [#1722]
Fixed a bug when trying to grow Memory beyond the system's memory limits. [#1722]
Memory beyond the system's memory limits. [#1722]
Fixed a Wasmi CLI crash when using .wat formatted Wasm files. [#1385]
Added support for the Wasm memory64 proposal. [#1371]
memory64 proposal. #1371
memory64 proposal is enabled by default in wasmi and the Wasmi CLI.custom-page-sizes proposal. #1349
custom-page-sizes proposal is enabled by default in wasmi and the Wasmi CLI.Module::new and Module::new_unchecked. #1328
Module::new_streaming since Wat cannot be stream compiled.no_mange and export_name where used at the same time. #1337memory.grow and table.grow instructions now trap instead of panic when out of system memory.
memory64 and custom-page-sizes proposals.libm default features. #1322custom-page-sizes proposal implementation. #1354memory64 proposal implementation. #1379wasm-tools dependencies to v226. #1374string-interner v0.19. #1367This release focuses on compile time improvements for Wasmi, significantly reducing the time it takes to compile Wasmi and decrease its compiled artif
This release focuses on compile time improvements for Wasmi, significantly reducing the time it takes to compile Wasmi and decrease its compiled artifact size.
load and store lowering. #1303
prefix-symbols crate feature to wasmi_c_api_impl crate. #1315
wasmi_ in order to
avoid duplicate symbols when linking multiple Wasm runtimes implementing
the Wasm C-API.string-interner/std crate feature. #1304wasmparser-nostd fork with upstream wasmparser. #1141
string-interner and hashbrown dependencies. #1305Fixed a bug when translating double negations in expression contexts. [#1293]
Linker::instance: conveniently add exports from an instance to a linker.
Linker APIs. #1281
Linker::instance: conveniently add exports from an instance to a linker.Linker::alias_module: alias module definitions via another name.Linker::allow_shadowing: enable to shadow previous definitions without errors.hash-collections and prefer-btree-collections crate features to the wasmi crate. #1265
cmp+branch instructions with huge offsets.
no-hash-maps crate feature. #1265wasmi crate dependencies. #1266 #1267
wasmi crate slightly..wast directives runner. #1279
.wast directives runner.Add no-hash-maps crate feature to Wasmi CLI and enable it by default. [#1225]
Added a new extra-checks crate feature to the wasmi crate. [#1217]
Added a new extra-checks crate feature to the wasmi crate. #1217
debug-assertions or extra-checks are enabled.extra-checks are disabled, some technically unnecessary runtime checks are no longer performed.extra-checks if your focus is on safety, disable if your focus is on performance.loop control flow. #1218Fixed a bug in select translation constant propagation. [#1213]
select translation constant propagation. #1213Added support for Wasm multi-memory proposal. [#1191]
multi-memory proposal. #1191Store::call_hook API. #1144
wasmi_wasi crate.v0.36.1, v0.36.2 and v0.36.5.wasmi_ir crate.iextend instructions. #1147call_indirect instructions. #1156
select instructions. #1157
br_table instruction. #1158
Fixed a bug with table.get translation when index is a preserved register. [#commit-b4e78d]
table.get translation when index is a preserved register. [#commit-b4e78d]Fixed a bug in local preservation when translating Wasm loop control flow. [#1218]
loop control flow. #1218Fixed a bug in select translation constant propagation. [#1213]
select translation constant propagation. #1213Fix miri reported UB in FuncRef and ExternRef conversions. [#1201]
FuncRef and ExternRef conversions. #1201table.init from imported global.get values. #1192inline annotations in the Wasmi executor. #commit-b4e78d
Fixed ref.is_null translation constant propagation issue. [#1189]
Your coding agent can read these notes before it upgrades. Set up the MCP server →