Skip to content

v2.0.0-beta.4 - 2026/07/01

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Jun 22:54
v2.0.0-beta.4
aa3c8f0

Added

  • Added support for the Wasm deterministic profile. #1947
    • Enable Wasm deterministic profile by enabling the new deterministic crate feature.
  • Added support to enable or disable memory64 support. #1934
    • Disabling memory64 slightly reduces the artifact binary size
      and may improve execution performance, especially on embedded targets.
  • Added the portable-dispatch crate feature to the Wasmi C-API. #1950
    • The 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.
    • This automatically enables the portable-dispatch feature for CMAKE_BUILD_TYPE=Debug.
  • Added more optimizations and improvements for the Wasmi IR and codegen:
    • Added fcopysign lowerings to fabs and fnabs. #1917
    • Emit better optimized copy operators in more places. #1924
    • Added highly specialized and optimized u64_copy_sNsM operators. #1935
    • Improved multi-value return codegen. #1944
    • Unify Wasmi IR return operators. #1948
  • Expanded the configurable crate features of the Wasmi C-API. #1951
    • The wasmi_c_api_impl and wasmi_c_api crates now forward most features exposed by wasmi.
    • Fixed a bug that the std feature was not forwarded to wasmi.

Fixed

  • Fixed a stackoverflow issue when compiling Wasmi without portable-dispatch. [#1942]
    • Previously Wasmi was required to be compiled with at least opt-level = 3 and codegen-units = 1
      to avoid the stackoverflow issue.
    • With this update a mere opt-level = 2 is enough to make LLVM generate the tail-call dispatch
      for all but memory.grow and table.grow operators.
    • Users who want tail calls even for those 2 remaining operators can compile Wasmi with a nightly
      toolchain and use the unstable crate feature to make Wasmi use Rust's unstable become keyword.
  • 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.
  • Fixed an incorrect macOS linker flag in the C-API CMake build. #1952
    • Shared-library builds added a Linux-only $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.
  • Fixed Wasmi C-API no_std support. #1915
  • Fixed a bug in the lowering of isub with immediate rhs to iadd. #1914

Internal

  • Strengthened the CI guard for tail-call operator dispatch. [#1942]
    • The tail-call CI job now runs the entire wasmi_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.
  • The wasmi_wast test runner verifies NaN canonicalization when built with the deterministic feature. #1947
    • This requires nan:arithmetic results to match the canonical NaN.
  • Simplify SIMD specific load operator IR and translation. #1922
  • Remove copy_span operators 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 at docs.rs. #1913
  • Update the nightly Rust toolchain used for the Wasmi CI. #1936