v2.0.0-beta.4 - 2026/07/01
Pre-release
Pre-release
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