Skip to content

Releases: wasmi-labs/wasmi

v2.0.0-beta.6 - 2026/07/08

Pre-release

Choose a tag to compare

@github-actions github-actions released this 08 Jul 13:29
v2.0.0-beta.6
81140c2

Added

  • Added a new default-enabled auto-dispatch crate 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-dispatch feature still takes precedence over auto-dispatch.
    • Feature added to the wasmi, wasmi_cli, wasmi_c_api and wasmi_c_api_impl crates.

Fixed

  • Fixed a bug that incorrectly pushed multiple results in unfused SIMD load operator translation. #1969
  • Fixed a bug in fabs + fneg fused translation. #1970
  • Fixed a bug that some SIMD load operators did not properly preserve a previous accumulator. #1971
  • Fixed a bug in multi-value Wasm br_table translation. #1972
  • Fixed reachability of a debug_assert in fuse_cmp_branch. #1973

v2.0.0-beta.5 - 2026/07/06

Pre-release

Choose a tag to compare

@github-actions github-actions released this 06 Jul 12:10
v2.0.0-beta.5
49da301

Added

  • Reduced Wasmi's binary artifact size with some new features and tweaks:
    • Minor tweaks: #1960
    • Added a new debug crate feature to Wasmi. #1959
      • This is useful if richer debug messages are required.
      • Disabled by default to reduce Wasmi's binary artifact size by default.
    • Replace generic monomorphization with explicit V-Tables in translation. #1961
  • Added fused load+copy_sr operators. #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 u64 overflow when sizing a 64-bit memory's maximum during translation. #1964
    • A memory64 declared with the largest allowed maximum (2^48 pages) turned every
      non-zero constant load/store address into an unconditional MemoryOutOfBounds trap.
    • Thanks to aizu-m for the fix!
  • Fixed mismatched load_extend translation 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}_lane operators to extract_lane + scalar.store operators. #1966

Internal

  • Clean-up execution handlers with the new Args utility type. #1956

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

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

v2.0.0-beta.3 - 2026/06/22

Pre-release

Choose a tag to compare

@github-actions github-actions released this 22 Jun 16:21
v2.0.0-beta.3
e6189ed

Added

  • Added a new validate crate feature to wasmi and wasmi_cli crates. 🚀
    • 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 libm crate feature to Wasmi. #1860
    • This allows to enforce libm usage.
  • Added support to Wasmi CLI to print funcref and externref with null value. #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:
      • #1827: Definitions for new Wasmi IR
      • #1855: Adjustments Wasmi Translator & Executor
    • Follow-up Optimizations:
      • #1895: Adds specialized i{32,64}.add operator variants.
      • #1896: Adds lowering from isub to iadd operators.
      • #1905: Make more SIMD operators return results in accumulator registers.
  • New Wasmi execution optimizations: 🚀
    • Re-designed CodeMap to be lock-free & append-only. #1898
      • Wasmi makes full use of these CodeMap attributes which significantly
        improves Wasm to Wasm function call performance.
    • Only zero-initialize non-parameter function locals upon Wasm call. #1893
      • This significantly improves Wasm to Wasm function call performance.
    • CLI: disallow v128 argument types. #1848
      • With this Wasmi CLI now mirrors Wasmtime CLI's behavior.
    • Improve instance preservation of same-instance calls. #1878
    • Translate ref.is_null via i32.eqz instead of i64.eqz. #1861

Fixed

  • Fix operand order in v128_select_ssss translation. #1834
  • Fix re-extraction of mem0 after host function calls. #1837
  • 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 std crate feature forward from wasmi to wasmi_ir. #1862
  • Update Wasmtime fuzzing oracle to v45. #1867
  • Make benchmarks test properly under Windows. #1885
  • Fixed a bug that wat based tests were not ignored on !wat. #1883
  • Added a whole variety of new Rust based benchmarks:
    • PRs:
      • #1870 : sort, matrix_mul, prime_sieve
      • #1871 : n-body: physics simulation
      • #1872 : argon2: password hashing
      • #1877 :
        • mandelbrot
        • spetralnorm
        • json_parsing
        • compression
        • word_count

v1.1.0 - 2026/06/12

Choose a tag to compare

@Robbepop Robbepop released this 12 Jun 12:44
v1.1.0
8273dfb

Changed

  • Updated the wasmparser dependency from v0.228 to v0.239.
  • Add convenience From<{f32,f64}> for Val impls.

v2.0.0-beta.2 - 2026/03/03

Pre-release

Choose a tag to compare

@Robbepop Robbepop released this 03 Mar 14:12
v2.0.0-beta.2
e097f8c

Added

  • Added unstable crate feature to wasmi, wasmi_wast and wasmi_cli crates. #1825
    • This enables unstable rustc features available in nightly Rust releases.
    • Concretely, this enables usage of Rust's unstable become keyword to enforce
      tail-calls in its instruction dispatch when portable-dispatch is disabled.
    • Enable become with cargo build --no-default-features --features unstable.
  • Added proper README.md to Wasmi's CLI application. #1824

Changed

  • Clean-up ResourceLimiter 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.

Fixed

  • CLI: fixed a panic when using the run command without arguments. #1810
  • Fixed an integer-overflow bug in the internal Table::set_raw API. #1818
    • Thanks to sumleo for reporting the issue.
  • Fixed a potential bug with local.set translation and SIMD. #1821

Internal

  • Redesigned Wasmi's internal select operators. #1823
    • The new design is simpler, performs similarly and requires fewer select operators.

v2.0.0-beta.1 - 2026/02/19

Pre-release

Choose a tag to compare

@Robbepop Robbepop released this 19 Feb 17:07
v2.0.0-beta.1
177f508

Changed

  • Wasmi's internal Handle trait no longer has a From super-trait. #1804
    • This fixes an issue from users with conflicting From impls for Wasmi handles
      such as Func, Global, etc..

v2.0.0-beta.0 - 2026/02/18

Pre-release

Choose a tag to compare

@Robbepop Robbepop released this 18 Feb 15:14
v2.0.0-beta.0
ce21848

Added

  • Implemented some improvements for wasmi::Table.
    • Added Ref and RefType and make wasmi::Table operate on Ref instead of Val. #1747
      • This has be beneficial side-effect that wasmi::Table is now unaffected by
        the simd crate feature and no longer suffers from increased memory consumption.
      • Furthermore, this improves Wasmi's Wasmtime API mirror as Wasmtime also uses Ref and RefType.
    • Shrink wasmi::Table elements from 64-bit to 32-bit. #1776
      • This effectively halfs the memory consumption of wasmi::Table instances.
  • 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 simd crate feature no longer affects memory consumption or
      execution performance of non-simd Wasm code.
  • Implement a variety of improvements for the Wasmi CLI application.
    • Added a bunch of new crate features to the wasmi_cli crate:
      • PRs: #1784 #1787 #1788
      • 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: ❌)
    • 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_cli to just wasmi. #1798
  • Add wasmi_wasi::add_to_externals API. #1785
    • This is more efficient than the existing add_to_linker API and should
      be used instead if possible.
    • The Wasmi CLI application now makes use of this API in order to prepare
      its WASI environment.

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 coverage CI 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_collections arena data structures. #1771
  • Removed ancient Wasmi v0.31 as oracle for differential fuzzing. #1777
  • Renamed internal Untyped{Val,Ref} types to Raw{Val,Ref}. #1781
  • Refactor and unify Wasmi's internal handle types. #1772

v1.0.9 - 2026/02/09

Choose a tag to compare

@Robbepop Robbepop released this 09 Feb 17:15
v1.0.9
61ba65e

Fixed

  • Fixed a bug that Wasmi's translator would sometimes incorrectly merge copy instructions. #1779

v1.0.8 - 2026/01/29

Choose a tag to compare

@Robbepop Robbepop released this 29 Jan 12:35
v1.0.8
412301b

Fixed

  • Fixed another bug with incorrect translation of wide-arithmetic ops followed by local.set. #1762