Releases: wasmi-labs/wasmi
Releases · wasmi-labs/wasmi
Release list
v2.0.0-beta.6 - 2026/07/08
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
optimizingopt-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
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
v2.0.0-beta.5 - 2026/07/06
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.
- Funnily this was mismatched on both translation and execution which caused this
Changed
- Lower some
v128_load{32,64}_laneoperators toextract_lane+scalar.storeoperators. #1966
Internal
- Clean-up execution handlers with the new
Argsutility type. #1956
v2.0.0-beta.4 - 2026/07/01
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-dispatch
feature 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 = 1
to 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
nightly
toolchain 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
v2.0.0-beta.3 - 2026/06/22
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:
v1.1.0 - 2026/06/12
v2.0.0-beta.2 - 2026/03/03
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
v2.0.0-beta.1 - 2026/02/19
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
v2.0.0-beta.0 - 2026/02/18
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
v1.0.9 - 2026/02/09
Fixed
- Fixed a bug that Wasmi's translator would sometimes incorrectly merge
copyinstructions. #1779
v1.0.8 - 2026/01/29
Fixed
- Fixed another bug with incorrect translation of
wide-arithmeticops followed bylocal.set. #1762