wasmi
WebAssembly interpreter
1.1.0
22M downloads/mo
#2000 most downloaded on crates.io
wasmi-labs/wasmi
What this package is like to depend on
Last release 13 days ago
10 Aug 2026
Ships unpredictably
gaps range from 8 days to 3 months
Most releases are documented
notes for 53 of 76 stable releases
52 versions withdrawn
withdrawn after publishing
9 years old
139 releases · first in 2018
30 releases in the last 12 months
see the full history below
Release timeline
139 releases · Jan 2018 to Aug 2026Releases
latest 60 of 139-
2.0.0-beta.1010 Aug 2026 pre-releaseRelease notes
Open source →Added
- Added way to customize dynamic fuel metering. #2025
- Added stable fuel metering. #2013
- This replaces Wasmi's old fuel metering that was tied to its internal bytecode.
- The new stable fuel metering is tied to the input Wasm bytecode instead.
- While less precise, it has the big advantages that it stays relatively stable and that it is the same technique that is also used in Wasmtime.
- Added more optimizations to make Wasmi execute even faster:
- Massively improve performance across the board with fix that improves branch prediction. #2027
- Re-use
spin Wasm calls. #2014- This improves performance of host calls primarily.
- Add
InstanceEntitypointer toWasmFuncEntity. #2018- This improves performance of
call_indirectandcall_imported.
- This improves performance of
- Add special
call_indirectoperator variants for(table 0). #2019- This is very beneficial since more
call_indirectoperators work on(table 0).
- This is very beneficial since more
- Reduce tons of unnecessary indirections in Wasmi's executor:
Internal
-
2.0.0-beta.929 Jul 2026 pre-releaseRelease notes
Open source →Internal
- Add
inlineannotations to prevent spilling in some execution handlers. - Simplify fetching memory bytes in the executor. #2010
- This improves codegen for some
loadandstoreexecution handlers.
- This improves codegen for some
- Make the
Insttype wrap usize on platforms with enough GPRs. #2011- This improves performance on platforms such as
aarch64(a.k.a Apple Silicon).
- This improves performance on platforms such as
- Add
-
2.0.0-beta.827 Jul 2026 pre-releaseRelease notes
Open source →Added
- Added
Configoption to disallow running thestartfunction of Wasm modules. #1985 - Added some more optimizations to Wasmi:
- Greatly improved speed for accessing instance related objects in the executor. #1940
- This optimization builds on a new improved internal Wasm instance layout + caching.
- Improve performance of
call_importedandcall_indirectvia caching. #1996 - Improve performance for accessing instance related objects on 32-bit platforms. #1997
- Resolve deduplicated function types at translation time to improve
call_indirectperformance. #2006 - All in all the
count/globalsbenchmark saw a whopping ~35% improvement in performance.- Despite Wasmi's module related bytecode, instance access is now as efficient as in Wasm3's or Stitch'es executors with their instance-related bytecodes.
- Greatly improved speed for accessing instance related objects in the executor. #1940
Fixed
- Fix potential memory invadliation bug when tail calling host functions. #1999
Internal
- Added benchmark to test
call_indirectperformance. #1993 - Added benchmark to test
call_importedperformance for non-host calls. #1994 - Added
Stable{Arena,Vec}towasmi_collections. #1987- These new collections are similar to
ArenaandVecrespectively but with stable internal pointers to their contained items. - These collections were required to implement #1940.
- These new collections are similar to
- Added
-
2.0.0-beta.709 Jul 2026 pre-releaseRelease notes
Open source →Fixed
- Fixed an issue that
cmp+branchfusions were not applied in all valid cases. #1975
- Fixed an issue that
-
2.0.0-beta.608 Jul 2026 pre-releaseRelease notes
Open source →Added
- Added a new default-enabled
auto-dispatchcrate feature. #1968- When enabled, Wasmi automatically uses its faster tail-call based dispatch only on
targets that are known to support LLVM tail calls and that are compiled with an
optimizing
opt-level, and otherwise falls back to the portable (loop-based) dispatch scheme automatically. - Enabling the
portable-dispatchfeature still takes precedence overauto-dispatch. - Feature added to the
wasmi,wasmi_cli,wasmi_c_apiandwasmi_c_api_implcrates.
- When enabled, Wasmi automatically uses its faster tail-call based dispatch only on
targets that are known to support LLVM tail calls and that are compiled with an
optimizing
Fixed
- Fixed a bug that incorrectly pushed multiple results in unfused SIMD
loadoperator translation. #1969 - Fixed a bug in
fabs+fnegfused translation. #1970 - Fixed a bug that some SIMD
loadoperators did not properly preserve a previous accumulator. #1971 - Fixed a bug in
multi-valueWasmbr_tabletranslation. #1972 - Fixed reachability of a
debug_assertinfuse_cmp_branch. #1973
- Added a new default-enabled
-
2.0.0-beta.506 Jul 2026 pre-releaseRelease notes
Open source →Added
- Reduced Wasmi's binary artifact size with some new features and tweaks:
- Added fused
load+copy_sroperators. #1955- These improve performance by up to 10% according to some benchmark test cases.
- Added richer error information to Wasm module instantiation errors. #1962 + #1963
- Thanks to kajacx for the improvement!
Fixed
- Fixed a
u64overflow when sizing a 64-bit memory's maximum during translation. #1964- A
memory64declared with the largest allowed maximum (2^48pages) turned every non-zero constant load/store address into an unconditionalMemoryOutOfBoundstrap. - Thanks to aizu-m for the fix!
- A
- Fixed mismatched
load_extendtranslation and execution. #1958- Funnily this was mismatched on both translation and execution which caused this to slip under the CI's radar as the double breakage caused this to behave as intended.
Changed
- Lower some
v128_load{32,64}_laneoperators toextract_lane+scalar.storeoperators. #1966
Internal
- Clean-up execution handlers with the new
Argsutility type. #1956
-
2.0.0-beta.430 Jun 2026 pre-releaseRelease notes
Open source →Added
- Added support for the Wasm deterministic profile. #1947
- Enable Wasm deterministic profile by enabling the new
deterministiccrate feature.
- Enable Wasm deterministic profile by enabling the new
- Added support to enable or disable
memory64support. #1934- Disabling
memory64slightly reduces the artifact binary size and may improve execution performance, especially on embedded targets.
- Disabling
- Added the
portable-dispatchcrate feature to the Wasmi C-API. #1950- The
wasmi_c_api_impl(andwasmi_c_api) crates now forward aportable-dispatchfeature to the underlyingwasmicrate, so C-API users can opt into the portable (loop-based) operator dispatch that does not rely on tail calls. - This automatically enables the
portable-dispatchfeature forCMAKE_BUILD_TYPE=Debug.
- The
- Added more optimizations and improvements for the Wasmi IR and codegen:
- Expanded the configurable crate features of the Wasmi C-API. #1951
- The
wasmi_c_api_implandwasmi_c_apicrates now forward most features exposed bywasmi. - Fixed a bug that the
stdfeature was not forwarded towasmi.
- The
Fixed
- Fixed a stackoverflow issue when compiling Wasmi without
portable-dispatch. [#1942]- Previously Wasmi was required to be compiled with at least
opt-level = 3andcodegen-units = 1to avoid the stackoverflow issue. - With this update a mere
opt-level = 2is enough to make LLVM generate the tail-call dispatch for all butmemory.growandtable.growoperators. - Users who want tail calls even for those 2 remaining operators can compile Wasmi with a
nightlytoolchain and use theunstablecrate feature to make Wasmi use Rust's unstablebecomekeyword.
- Previously Wasmi was required to be compiled with at least
- Fixed a bug that caused Wasmi's compile-time to explode when using
indirect-dispatch. #1939- Users were able to circumvent this LLVM codegen bug by using
llvm-args=--switch-to-lookup=true. However, with this fix, that is no longer needed and Wasmi compile-times are back to normal again. - This bug also negatively affected the execution performance of Wasmi which is fixed as well.
- Users were able to circumvent this LLVM codegen bug by using
- Fixed an incorrect macOS linker flag in the C-API CMake build. #1952
- Shared-library builds added a Linux-only
$ORIGINrpath on macOS, whichdylddoes not expand. It is now omitted on macOS (matching Wasmtime). Consumers of the sharedlibwasmi.dylibon macOS should add their own rpath (e.g.-Wl,-rpath,@loader_path) to locate it at runtime.
- Shared-library builds added a Linux-only
- Fixed Wasmi C-API
no_stdsupport. #1915 - Fixed a bug in the lowering of
isubwith immediaterhstoiadd. #1914
Internal
- Strengthened the CI guard for tail-call operator dispatch. [#1942]
- The tail-call CI job now runs the entire
wasmi_wastsuite (not just the call tests) on the non-portable-dispatchpath atcodegen-units > 1, plus a newwasmi_torturetest that loops every Wasm operator category under a smallRUST_MIN_STACKso any handler that stops tail-calling overflows the native stack and fails CI.
- The tail-call CI job now runs the entire
- The
wasmi_wasttest runner verifies NaN canonicalization when built with thedeterministicfeature. #1947- This requires
nan:arithmeticresults to match the canonical NaN.
- This requires
- Simplify SIMD specific load operator IR and translation. #1922
- Remove
copy_spanoperators from Wasmi IR. #1929- Now all copies are always copying single values.
- Benchmarks showed that this is actually executing faster.
- Add
cfg-guard badges to docs rendered atdocs.rs. #1913 - Update the
nightlyRust toolchain used for the Wasmi CI. #1936
- Added support for the Wasm deterministic profile. #1947
-
2.0.0-beta.322 Jun 2026 pre-releaseRelease notes
Open source →Added
- Added a new
validatecrate feature towasmiandwasmi_clicrates. 🚀- This feature controls whether Wasmi support Wasm validation.
- The feature is enabled by default with
--no-default-features. - Users who have full control over the Wasm inputs to Wasmi may have a great need for this as this can reduce binary artifact sizes by ~200-300kB.
- PR: #1902
- Added new
libmcrate feature to Wasmi. #1860- This allows to enforce
libmusage.
- This allows to enforce
- Added support to Wasmi CLI to print
funcrefandexternrefwithnullvalue. #1839 - Add support for hexdec encoded integer args to Wasmi CLI. #1851
Changed
- Wasmi IR operators now store their results in accumulator registers. 🚀
- With this, Wasmi uses the same interpreter architecture as the fastest Wasm interpreters, Wasm3 and Stitch.
- Benchmarks concluded that Wasmi is on par and sometimes even exceeds performance of its competition now.
- PRs:
- Follow-up Optimizations:
- New Wasmi execution optimizations: 🚀
- Re-designed
CodeMapto be lock-free & append-only. #1898- Wasmi makes full use of these
CodeMapattributes which significantly improves Wasm to Wasm function call performance.
- Wasmi makes full use of these
- Only zero-initialize non-parameter function locals upon Wasm call. #1893
- This significantly improves Wasm to Wasm function call performance.
- CLI: disallow
v128argument types. #1848- With this Wasmi CLI now mirrors Wasmtime CLI's behavior.
- Improve
instancepreservation of same-instance calls. #1878 - Translate
ref.is_nullviai32.eqzinstead ofi64.eqz. #1861
- Re-designed
Fixed
- Fix operand order in
v128_select_sssstranslation. #1834- Thanks to @shumbo for the fix!
- Fix re-extraction of
mem0after host function calls. #1837- Thanks to @npiesco for the fix!
- Fixed incorrect NaN behavior for
f{32,64}.{ceil,floor,trunc}. #1860
Internal
- Automatically create release artifacts for Wasmi GitHub releases. #1906
- Added flag to steer LLVM away from bad codegen. #1873
- Added missing
stdcrate feature forward fromwasmitowasmi_ir. #1862 - Update Wasmtime fuzzing oracle to v45. #1867
- Make benchmarks test properly under Windows. #1885
- Fixed a bug that
watbased tests were not ignored on!wat. #1883 - Added a whole variety of new Rust based benchmarks:
- Added a new
-
2.0.0-beta.203 Mar 2026 pre-releaseRelease notes
Open source →Added
- Added
unstablecrate feature towasmi,wasmi_wastandwasmi_clicrates. #1825- This enables unstable
rustcfeatures available in nightly Rust releases. - Concretely, this enables usage of Rust's unstable
becomekeyword to enforce tail-calls in its instruction dispatch whenportable-dispatchis disabled. - Enable
becomewithcargo build --no-default-features --features unstable.
- This enables unstable
- Added proper
README.mdto Wasmi's CLI application. #1824
Changed
- Clean-up
ResourceLimiterAPI. #1817StoreLimitsnow properly enforce panics iftrap_on_grow_failurewas enabled.memory_grow_failedandtable_grow_failednow takeMemoryErrorandTableErrorrespectively.LimiterErroris now a single variantenummaking its use much simpler.
Fixed
- CLI: fixed a panic when using the
runcommand without arguments. #1810- Thanks to polarathene for reporting the issue.
- Fixed an integer-overflow bug in the internal
Table::set_rawAPI. #1818- Thanks to sumleo for reporting the issue.
- Fixed a potential bug with
local.settranslation and SIMD. #1821
Internal
- Redesigned Wasmi's internal
selectoperators. #1823- The new design is simpler, performs similarly and requires fewer
selectoperators.
- The new design is simpler, performs similarly and requires fewer
- Added
-
2.0.0-beta.119 Feb 2026 pre-releaseRelease notes
Open source →Changed
- Wasmi's internal
Handletrait no longer has aFromsuper-trait. #1804- This fixes an issue from users with conflicting
Fromimpls for Wasmi handles such asFunc,Global, etc..
- This fixes an issue from users with conflicting
- Wasmi's internal
-
2.0.0-beta.018 Feb 2026 pre-releaseRelease notes
Open source →Added
- Implemented some improvements for
wasmi::Table.- Added
RefandRefTypeand makewasmi::Tableoperate onRefinstead ofVal. #1747- This has be beneficial side-effect that
wasmi::Tableis now unaffected by thesimdcrate feature and no longer suffers from increased memory consumption. - Furthermore, this improves Wasmi's Wasmtime API mirror as Wasmtime also uses
RefandRefType.
- This has be beneficial side-effect that
- Shrink
wasmi::Tableelements from 64-bit to 32-bit. #1776- This effectively halfs the memory consumption of
wasmi::Tableinstances.
- This effectively halfs the memory consumption of
- Added
- Designed and integrated an entirely new internal IR for Wasmi. #1655
- This affects both execution and translation performance.
- New crate features have been added:
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.
- Wasmi's executor now uses fixed 64-bits cells. #1755
- This technically is an internal change but it yields observable improvements for users.
- Enabling the
simdcrate feature no longer affects memory consumption or execution performance of non-simdWasm code.
- Implement a variety of improvements for the Wasmi CLI application.
- Added a bunch of new crate features to the
wasmi_clicrate:- PRs: #1784 #1787 #1788
wasi: Enable WASI support. (default: ✅)wast: Enable Wast support andwastcommand. (default: ✅)run: Enable theruncommand (default: ✅)portable-dispatch: Enablewasmi'sportable-dispatchcrate feature. (default: ❌)indirect-dispatch: Enablewasmi'sindirect-dispatchcrate feature. (default: ❌)
- Similar to Wasmtime's CLI, Wasmi now also features sub-commands: #1799
run: Executes a WebAssembly module.wast: Executes a WebAssembly script.
- The Wasmi CLI's command has been renamed from
wasmi_clito justwasmi. #1798
- Added a bunch of new crate features to the
- Add
wasmi_wasi::add_to_externalsAPI. #1785- This is more efficient than the existing
add_to_linkerAPI and should be used instead if possible. - The Wasmi CLI application now makes use of this API in order to prepare its WASI environment.
- This is more efficient than the existing
Changed
- Wasmi now uses Rust edition 2024 in the entire workspace. #1759
- This does not affect users since Wasmi's MSRV did not change.
Internal
- Use OIDC in Wasmi
coverageCI job. #1745 - Wasmi differential fuzzing oracles are not optionally included. #1758
- This allows to exclude fuzzing oracles to speed-up fuzzing and compile times.
- Add a new GitHub Actions CI job to check via
cargo-deny. #1761 - Refactored
wasmi_collectionsarena data structures. #1771 - Removed ancient Wasmi v0.31 as oracle for differential fuzzing. #1777
- Renamed internal
Untyped{Val,Ref}types toRaw{Val,Ref}. #1781 - Refactor and unify Wasmi's internal handle types. #1772
- Implemented some improvements for
-
1.1.012 Jun 2026Nothing published for this version
-
1.0.909 Feb 2026Release notes
Open source →Fixed
- Fixed a bug that Wasmi's translator would sometimes incorrectly merge
copyinstructions. #1779
- Fixed a bug that Wasmi's translator would sometimes incorrectly merge
-
1.0.829 Jan 2026Release notes
Open source →Fixed
- Fixed another bug with incorrect translation of
wide-arithmeticops followed bylocal.set. #1762
- Fixed another bug with incorrect translation of
-
1.0.709 Jan 2026Release notes
Open source →Fixed
- Fixed a bug that
local.setfusion with somewide-arithmeticops was working incorrectly. #1756- Thanks to louismerlin for the detailed bug report.
- Fixed a bug that
-
1.0.625 Dec 2025 -
1.0.519 Dec 2025Release notes
Open source →Fixed
- Fix a bug in the execution of
i{32,64}.rem_s(MAX, -1). rev-1c3682f- The Wasm spec demanded to return
0while Wasmi trapped withinteger-overflow. - Thanks to davnavr for the detailed bug report.
- The Wasm spec demanded to return
- Fix a bug in the execution of
-
1.0.410 Dec 2025Release notes
Open source → -
1.0.306 Dec 2025Release notes
Open source →Fixed
- Fixed a bug that
Config::set_max_cached_stacksset the recursion limit instead. #1721- Thanks to Robert MacWha for reporting the issue.
- Fixed a bug that
-
1.0.206 Dec 2025Release notes
Open source →Fixed
- Fixed a memory leak in
ByteBufferintroduced in the last patch. [#1722]- Thanks to Robert MacWha for reporting the issue.
- Fixed a memory leak in
-
1.0.105 Dec 2025 withdrawnRelease notes
Open source →Fixed
- Fixed a bug when trying to grow
Memorybeyond the system's memory limits. #1722- Thanks to Robert T. Morris (RTM) for reporting this bug!
- Fixed a bug when trying to grow
-
1.0.003 Dec 2025 withdrawnRelease notes
Open source →This release comes with a blog post: Wasmi 1.0
Added
- Added conversions between
TrapCodeandu8. #1651
Fixed
- Fix SIMD usage in Wasmi's C-API. #1676
Changed
- Adjust
table.growbehavior to match Wasmtime's limits. #1710
Removed
- Remove all deprecated items from Wasmi's API: #1634
- Removed deprecated types:
- Removed deprecated methods and modules:
Internal
- Enable
reference-typesin Wasmi's fuzzing infrastructure. #1708 - Improve Wasmi's Wast runner:
- Minor renamings to simplify integration of Wasmi's new IR.
- Refactor
wasmi_irto reduce compile times. #1640 - Allocate fewer function local constants during Wasm -> Wasmi translation. #1638
- Added conversions between
-
0.51.506 Dec 2025Release notes
Open source →Fixed
- Fixed a bug that
Config::set_max_cached_stacksset the recursion limit instead. [#1721]- Thanks to Robert MacWha for reporting the issue.
- Fixed a bug that
-
0.51.406 Dec 2025Release notes
Open source →Fixed
- Fixed a memory leak in
ByteBufferintroduced in the last patch. [#1722]- Thanks to Robert MacWha for reporting the issue.
- Fixed a memory leak in
-
0.51.305 Dec 2025 withdrawnRelease notes
Open source →Fixed
- Fixed a bug when trying to grow
Memorybeyond the system's memory limits. [#1722]- Thanks to Robert T. Morris (RTM) for reporting this bug!
- Fixed a bug when trying to grow
-
0.51.219 Nov 2025 withdrawnRelease notes
Open source →Fixed
- Fixed a bug that caused miscalculation of function frame sizes. #1699
- This only affected Wasm modules with very large functions with well over 30k instructions.
- This bug was introduced in Wasmi v0.49.0.
- Fixed a bug that may cause incorrect fuel consumption for some
bulk-memorytable instructions. #1690
- Fixed a bug that caused miscalculation of function frame sizes. #1699
-
0.51.125 Aug 2025 withdrawnRelease notes
Open source →Fixed
- Fixed a bug that caused lazily compiled functions to be stuck at compiling when running out of fuel during translation. #1648
-
0.51.013 Aug 2025 withdrawnRelease notes
Open source →Changed
- Redesign the stack limits
ConfigAPI. #1631- Deprecated the
StackLimitstype andConfig::set_stack_limitsmethod. - Deprecated the
Config::cached_stacksmethod. - Added
Config::set_{max_recursion_depth,min_stack_height,max_stack_height}methods.
- Deprecated the
- Redesign the stack limits
-
0.50.011 Aug 2025Release notes
Open source →This is supposedly the final release before Wasmi 1.0.0.
Added
- This version ships with an entirely new Wasm bytecode to Wasmi bytecode translator.
- The new translator is ~5-10% faster than the old one.
- Fuel-metering is no longer an afterthought and thus comes nearly for free.
- The new codebase is much simpler to maintain and reason about.
- Wasmi bytecode generated by the new translator shows similar performance as the old one.
- The new translator provides a lot more information to Wasmi's optimizer which allows for new optimizations in upcoming Wasmi releases.
- PRs: #1512 #1618
- Add lowerings for xor instructions when used in comparisons.
- This reduced the number of Wasmi bytecode instructions by a whopping 20 which might have positive effects on execution performance due to decreased cache pressure.
- PRs: #1625
Changed
- Removed Wasmi bytecode instructions that are no longer generated by the new translator.
Internal
- This version ships with an entirely new Wasm bytecode to Wasmi bytecode translator.
-
0.49.110 Aug 2025 -
0.49.007 Aug 2025 withdrawnRelease notes
Open source →The deprecations introduced in this version prepares Wasmi for its 1.0 release.
Changed
- Deprecate
wasmi::coremodule re-export. [#1605]- Public facing definitions are now re-exported from
wasmi's crate root which users should use instead.
- Public facing definitions are now re-exported from
- Improve Wasmi's Wasmtime API mirror:
- Make
ExternRefnon-nullable and introduce new nullableReftype. [#1603]- Wasmtime uses
Option<ExternRef>instead which is very similar. Ref<ExternRef>can be converted toOption<ExternRef>using thevalmethod.
- Wasmtime uses
- Remove
FuncReftype in favor ofRef<Func>[#1604]- Wasmtime uses
Option<Func>instead which is very similar. Ref<Func>can be converted toOption<Func>using thevalmethod.
- Wasmtime uses
- Deprecate
InstancePreandLinker::instantiate[#1602]- Enable fuel metering and set fuel to zero before instantiation
in order to prevent running a Wasm module's
startfunction upon instantiation.
- Enable fuel metering and set fuel to zero before instantiation
in order to prevent running a Wasm module's
- Deprecate
LinkerBuildertype. [#1601]- Use
LinkerorInstance::newinstead.
- Use
- Make
- Deprecate
-
0.48.021 Jul 2025Release notes
Open source →Added
- Added Wasm
reinterpretoperators towasmi_core::wasmAPI.
Changed
- Marked
Module::new_streaming[_unchecked]API deprecated. #1540- Reason for the deprecation:
- The streaming Wasm module creation is not a great fit for Wasmi's target usage.
- No users are known that depend on this functionality - please inform us if you do!
- Streaming Wasm module creating has a performance overhead when not needed.
- Reason for the deprecation:
- Changed
CompilationModedefault toCompilationMode::LazyTranslation. #1530- With this default Wasm is still validated eagerly but tranlated to Wasmi IR lazily. This gives the best of both worlds: fast startup times while avoiding partial validation.
- Update Wasmtime dependencies to v34. #1563
Fixed
- Fixed a bug that
f{32,64}.copysignwith immediaterhsoperands won't bump fuel. #1539 - Fixed incorrect optimization application for
i64.mul_wide_s. #1545 #1546 - Fixed an
integer-overflowthat could happen when reading or writing memory. #1554
Internal
- Added Wasm
-
0.47.206 Dec 2025Release notes
Open source →Fixed
- Fixed a memory leak in
ByteBufferintroduced in the last patch. [#1722]- Thanks to Robert MacWha for reporting the issue.
- Fixed a memory leak in
-
0.47.105 Dec 2025 withdrawnRelease notes
Open source →Fixed
- Fixed a bug when trying to grow
Memorybeyond the system's memory limits. [#1722]- Thanks to Robert T. Morris (RTM) for reporting this bug!
- Fixed a bug when trying to grow
-
0.47.030 May 2025 withdrawnRelease notes
Open source →Changed
- Remove the
downcast-rsdependency from Wasmi crates. #1517 - Bump the minimum supported Rust version (MSRV) to Rust 1.86. #1518
- This change was necessitated by the removal of
downcast-rs.
- This change was necessitated by the removal of
Internal
- Lower
selectinstructions more aggressively. #1526- This significantly reduced the number of different
selectinstruction variants and thus might have positive affects on Wasmi's execution performance.
- This significantly reduced the number of different
- Remove the
-
0.46.008 May 2025Release notes
Open source →Changed
Store<T>::newno longer requiresT: 'static. #1507- The
T: 'staticrequirement was introduced inv0.45.0in [#1449].
- The
- Improve host function call performance. #1506
Internal
- Updated dependencies. #1509
-
0.45.006 May 2025Release notes
Open source →Added
- Added support for Wasm function call resumption after running out of fuel. #1498
- This feature is very useful when using Wasmi inside a scheduler that works with Wasmi's fuel metering to provide amount of compute units to different Wasm execution threads for example.
- Added missing
wasmi_core::simdAPI functions forrelaxed-simd. #1447 - Added implementations for Rust's
Errortrait for allwasmierror types onno_std. #1462
Changed
- Avoid performing duplicate type and validation checks in
Linker::instantiate. #1476 - Updated
wasm-toolsdependencies to v228. #1463 - Removed most of
wasmi_core::TypedVal's API. #1457- The newer
wasmi_core::wasmAPI is to be preferred and provides the same functionality.
- The newer
Fixed
- Fixed a bug that Wasmi did not make
wasmparser's parser aware of enabled Wasm features. #1502- Making
wasmparseraware of the enabled Wasm features allows it to detect malformed Wasm binaries during parsing.
- Making
Internal
- Make Wasmi's executor non-generic over the
Store'sT. #1449 - Changes to Wasmi's IR:
- Removed all conditional return instructions. #1486
- This allows Wasmi to apply its powerful cmp+branch fusion in more places.
- Remove most of the
bulk-memory(andbulk-table) instruction variants. #1489- Wasmi still has optimized variants for the most common cases.
- Add new logical-comparator instructions. #1494
- This further enhances Wasmi's powerful cmp+branch instruction fusion.
- Add negated
f{32,64}.{lt,le}instructions. #1496- This allows Wasmi to apply its cmp+nez fusion for
f{32,64}.{le,lt}instructions as well.
- This allows Wasmi to apply its cmp+nez fusion for
- Re-design Wasmi's
selectinstructions. #1497- This allows to use Wasmi's powerful cmp op-code fusion for
selectinstructions.
- This allows to use Wasmi's powerful cmp op-code fusion for
- Removed all conditional return instructions. #1486
- Moved many
wasmiinternals intowasmi_core:
- Added support for Wasm function call resumption after running out of fuel. #1498
-
0.44.104 May 2025 -
0.44.029 Mar 2025 withdrawnRelease notes
Open source →Added
- Add support for the Wasm
relaxed-simdproposal. #1443- All
relaxed-simdoperators behave deterministically on all platforms supported by Wasmi. - Users have to enable the
simdcrate feature in order to userelaxed-simdcapabilities. - Note that enabling the
simdcrate feature may regress Wasm execution and memory consumption performance.
- All
Changed
- Wasmi's CLI now prints multiple results on a new line each. #1438
- With this change Wasmi's CLI and Wasmtime's CLI have the same behavior.
- Add support for the Wasm
-
0.43.129 Mar 2025 -
0.43.027 Mar 2025 withdrawnRelease notes
Open source →Added
- Added support for the Wasm
simdproposal. #1364- Users have to opt-in to use this feature by enabling Wasmi's
simdcrate feature. - Note: enabling
simdmay introduce Wasm execution overhead, increase memory consumption increase compiled artifact size and compile times for Wasmi crates. So usesimdonly if your use case needs it.
- Users have to opt-in to use this feature by enabling Wasmi's
Changed
- Wasmi's minimum supported Rust version is now Rust 1.83. #1405
Internal
- Added support for the Wasm
-
0.42.120 Mar 2025Release notes
Open source →Fixed
- Fixed a bug in
i64.mul_wide_{s,u}instruction constant evaluation. #1397
- Fixed a bug in
-
0.42.011 Mar 2025 withdrawnRelease notes
Open source →Added
- Added support for the Wasm
wide-arithmeticproposal. #1369- The
wide-arithmeticproposal is disabled by default inwasmilibrary and enabled by default in the Wasmi CLI.
- The
Changed
- Optimized memory accesses with a constant
ptrvalue. #1381
Internal
- Update
wasm-toolsdependencies from v226 to v227. #1380
- Added support for the Wasm
-
0.41.306 Dec 2025Release notes
Open source →Fixed
- Fixed a memory leak in
ByteBufferintroduced in the last patch. [#1722]- Thanks to Robert MacWha for reporting the issue.
- Fixed a memory leak in
-
0.41.205 Dec 2025 withdrawnRelease notes
Open source →Fixed
- Fixed a bug when trying to grow
Memorybeyond the system's memory limits. [#1722]- Thanks to Robert T. Morris (RTM) for reporting this bug!
- Fixed a bug when trying to grow
-
0.41.111 Mar 2025 withdrawn -
0.41.010 Mar 2025 withdrawnRelease notes
Open source →Added
- Added support for the Wasm
memory64proposal. #1371- The
memory64proposal is enabled by default inwasmiand the Wasmi CLI.
- The
- Added support for the Wasm
custom-page-sizesproposal. #1349- The
custom-page-sizesproposal is enabled by default inwasmiand the Wasmi CLI.
- The
- Added support to for Wat inputs in
Module::newandModule::new_unchecked. #1328- There deliberately is no Wat support in
Module::new_streamingsince Wat cannot be stream compiled.
- There deliberately is no Wat support in
Fixed
- Fixed a bug that could lead to crashes when tail calling host functions. #1329
- Fixed a bug that
no_mangeandexport_namewhere used at the same time. #1337
Changed
- Bumped Minimum Support Rust Version to v1.82. #1375
- The
memory.growandtable.growinstructions now trap instead of panic when out of system memory.- This change was part of the changes introduced by the support
for the Wasm
memory64andcustom-page-sizesproposals.
- This change was part of the changes introduced by the support
for the Wasm
Internal
- No longer use
libmdefault features. #1322 - Implemented several improvements to our fuzzing infrastructure:
- Significantly improved Wasmtime translation (JIT) times. #1339
- Improve debug output of fuzzers. #1344
- Differential fuzzer now uses fuzz input to randomize function parameters. #1348
- Allow fuzzing the Wasm
custom-page-sizesproposal implementation. #1354 - Allow fuzzing the Wasm
memory64proposal implementation. #1379
- Update the Wasm spec testsuite. #1361
- Update
wasm-toolsdependencies to v226. #1374 - Update to
string-internerv0.19. #1367
- Added support for the Wasm
-
0.40.027 Nov 2024Release notes
Open source →This release focuses on compile time improvements for Wasmi, significantly reducing the time it takes to compile Wasmi and decrease its compiled artifact size.
Added
- Added optimization for
loadandstorelowering. #1303- This reduces the total number of Wasmi instructions.
- Added
prefix-symbolscrate feature towasmi_c_api_implcrate. #1315- This allows to prefix all exported symbols with
wasmi_in order to avoid duplicate symbols when linking multiple Wasm runtimes implementing the Wasm C-API.
- This allows to prefix all exported symbols with
Fixed
- C-API
- Conditionally forward the
string-interner/stdcrate feature. #1304 - Fix Wasmtime fuzzer oracle config usage. #1314
Changed
- Bumped minimum supported Rust version from v1.79 -> v1.80. #1318
- Replace the
wasmparser-nostdfork with upstreamwasmparser. #1141- This allows Wasmi to implement new Wasm proposals.
- Unfortunately this update also regresses Wasmi translation performance by roughly 5-15% depending on the exact Wasm blob and translation mode.
- Update the
string-internerandhashbrowndependencies. #1305
Internal
- Added optimization for
-
0.39.106 Nov 2024Release notes
Open source →Fixed
- Fixed a bug when translating double negations in expression contexts. #1293
-
0.39.004 Nov 2024 withdrawnRelease notes
Open source →Added
- Add new
LinkerAPIs. #1281Linker::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.
- Add
hash-collectionsandprefer-btree-collectionscrate features to thewasmicrate. #1265- This allows for more fine grained control over Wasmi dependencies to further decrease compile times.
- Add lowering of compare instructions and fused branch+compare instructions. #1243
- This improved performance for certain workloads and reduced the total Wasmi instruction count significantly.
Fixed
- Fixed a bug in translation of fused
cmp+branchinstructions with huge offsets.- This was fixed as a side product in #1243.
Removed
- Removed the
no-hash-mapscrate feature. #1265 - Removed some minor
wasmicrate dependencies. #1266 #1267- This should improve compile times of the
wasmicrate slightly.
- This should improve compile times of the
Internal
- Modernize fuzzer and significantly improve fuzzing test coverage.
- Modernize Wasmi
.wastdirectives runner. #1279- Overall this significantly improved readability and maintainability
of the Wasmi
.wastdirectives runner.
- Overall this significantly improved readability and maintainability
of the Wasmi
- Add new
-
0.38.006 Oct 2024Release notes
Open source → -
0.37.204 Oct 2024Release notes
Open source →Added
-
Added a new
extra-checkscrate feature to thewasmicrate. #1217- This improves unreachability checks in when
debug-assertionsorextra-checksare enabled. - If
extra-checksare disabled, some technically unnecessary runtime checks are no longer performed. - Use
extra-checksif your focus is on safety, disable if your focus is on performance.
- This improves unreachability checks in when
Fixed
- Fixed a bug in local preservation when translating Wasm
loopcontrol flow. #1218
-
-
0.37.101 Oct 2024 withdrawn -
0.37.030 Sep 2024 withdrawnRelease notes
Open source →Added
- Added support for Wasm
multi-memoryproposal. #1191 - Added
Store::call_hookAPI. #1144- Contributed by emiltayl.
Changed
- Updated WASI dependencies. #1140
- This fixes some long-standing bugs in the
wasmi_wasicrate.
- This fixes some long-standing bugs in the
Fixed
- This release includes all fixes that have been backported to
v0.36.1,v0.36.2andv0.36.5.
Internal
- Add new Wasmi bytecode. #1152
- This was a major undertaking with lots of sub-issues and PRs.
- The Wasmi bytecode definitions now reside in their own
wasmi_ircrate. - Most of the definitions are sourced from a single Rust macro to reduce maintenance friction.
- Remove unnecessary
iextendinstructions. #1147 - Changed encoding for Wasmi
call_indirectinstructions. #1156- The new encoding improves performance and reduces the number of function local constants.
- Changed encoding for Wasmi
selectinstructions. #1157- The new encoding is more straight-forward and aims to simplify the Wasmi executor and translator.
- Changed encoding for Wasmi
br_tableinstruction. #1158- The new encoding improves performance and memory consumption for certain use cases.
- Minor improvements to Wasmi bytecode.
- Added support for Wasm
-
0.36.511 Oct 2024Release notes
Open source →Fixed
- Fixed a bug with
table.gettranslation whenindexis a preserved register. [#commit-b4e78d]
- Fixed a bug with
-
0.36.403 Oct 2024 withdrawnRelease notes
Open source →Fixed
- Fixed a bug in local preservation when translating Wasm
loopcontrol flow. #1218
- Fixed a bug in local preservation when translating Wasm
-
0.36.301 Oct 2024 withdrawn -
0.36.228 Sep 2024 withdrawnRelease notes
Open source →Fixed
- Fix miri reported UB in
FuncRefandExternRefconversions. #1201 - Fix bug in
table.initfrom importedglobal.getvalues. #1192
Changed
- Changed some
inlineannotations in the Wasmi executor. #commit-b4e78d- This change had minor positive effects on the performance of commonly executed Wasmi instructions.
- Fix miri reported UB in
-
0.36.120 Sep 2024 withdrawnRelease notes
Open source →Fixed
-
0.36.024 Jul 2024 withdrawnRelease notes
Open source →Added
- Added support for the official Wasm C-API. (https://github.com/wasmi-labs/wasmi/pull/1009)
- This allows to use Wasmi from any program that can interface with C code.
- The
wasmi_c_api_implcrate allows to use Wasmi via the Wasm C-API from Rust code.
- Added
Instance::newAPI. (https://github.com/wasmi-labs/wasmi/pull/1134)- This was mainly needed to support the Wasm C-API.
- The new API offers a more low-level way for Wasm module instantiation that may be more efficient for certain use cases.
- Added
Cloneimplementation forModule. (https://github.com/wasmi-labs/wasmi/pull/1130)- This was mainly needed to support the Wasm C-API.
Changed
- The store fuel API now returns
Errorinstead ofFuelError. (https://github.com/wasmi-labs/wasmi/pull/1131)- This was needed to support the Wasm C-API.
- The
FuelErroris still accessible via theError::kindmethod.
- Added support for the official Wasm C-API. (https://github.com/wasmi-labs/wasmi/pull/1009)