PackageTrack
Sign in Get early access

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 2026
2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release Withdrawn

Releases

latest 60 of 139
  1. 2.0.0-beta.10 10 Aug 2026 pre-release
    Release notes

    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 sp in Wasm calls. #2014
        • This improves performance of host calls primarily.
      • Add InstanceEntity pointer to WasmFuncEntity. #2018
        • This improves performance of call_indirect and call_imported.
      • Add special call_indirect operator variants for (table 0). #2019
        • This is very beneficial since more call_indirect operators work on (table 0).
      • Reduce tons of unnecessary indirections in Wasmi's executor:

    Internal

    • Add new sort-dyn benchmark test case to test call_indirect performance. #2017
    • Simplify Wasmi users README listing. #2021
    Open source →
  2. 2.0.0-beta.9 29 Jul 2026 pre-release
    Release notes

    Internal

    • Add inline annotations to prevent spilling in some execution handlers.
    • Simplify fetching memory bytes in the executor. #2010
      • This improves codegen for some load and store execution handlers.
    • Make the Inst type wrap usize on platforms with enough GPRs. #2011
      • This improves performance on platforms such as aarch64 (a.k.a Apple Silicon).
    Open source →
  3. 2.0.0-beta.8 27 Jul 2026 pre-release
    Release notes

    Added

    • Added Config option to disallow running the start function 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_imported and call_indirect via caching. #1996
      • Improve performance for accessing instance related objects on 32-bit platforms. #1997
      • Resolve deduplicated function types at translation time to improve call_indirect performance. #2006
      • All in all the count/globals benchmark 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.

    Fixed

    • Fix potential memory invadliation bug when tail calling host functions. #1999

    Internal

    • Added benchmark to test call_indirect performance. #1993
    • Added benchmark to test call_imported performance for non-host calls. #1994
    • Added Stable{Arena,Vec} to wasmi_collections. #1987
      • These new collections are similar to Arena and Vec respectively but with stable internal pointers to their contained items.
      • These collections were required to implement #1940.
    Open source →
  4. 2.0.0-beta.7 09 Jul 2026 pre-release
    Release notes

    Fixed

    • Fixed an issue that cmp+branch fusions were not applied in all valid cases. #1975
    Open source →
  5. 2.0.0-beta.6 08 Jul 2026 pre-release
    Release notes

    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
    Open source →
  6. 2.0.0-beta.5 06 Jul 2026 pre-release
    Release notes

    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
    Open source →
  7. 2.0.0-beta.4 30 Jun 2026 pre-release
    Release notes

    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
    Open source →
  8. 2.0.0-beta.3 22 Jun 2026 pre-release
    Release notes

    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
    Open source →
  9. 2.0.0-beta.2 03 Mar 2026 pre-release
    Release notes

    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.
    Open source →
  10. 2.0.0-beta.1 19 Feb 2026 pre-release
    Release notes

    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..
    Open source →
  11. 2.0.0-beta.0 18 Feb 2026 pre-release
    Release notes

    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
    Open source →
  12. 1.1.0 12 Jun 2026

    Nothing published for this version

  13. 1.0.9 09 Feb 2026
    Release notes

    Fixed

    • Fixed a bug that Wasmi's translator would sometimes incorrectly merge copy instructions. #1779
    Open source →
  14. 1.0.8 29 Jan 2026
    Release notes

    Fixed

    • Fixed another bug with incorrect translation of wide-arithmetic ops followed by local.set. #1762
    Open source →
  15. 1.0.7 09 Jan 2026
    Release notes

    Fixed

    • Fixed a bug that local.set fusion with some wide-arithmetic ops was working incorrectly. #1756
    Open source →
  16. 1.0.6 25 Dec 2025
    Release notes

    Fixed

    • Fixed a bug that local preservation of Wasm loops was missing. #1748
      • Thanks to davnavr for reporting the bug.
    Open source →
  17. 1.0.5 19 Dec 2025
    Release notes

    Fixed

    • Fix a bug in the execution of i{32,64}.rem_s(MAX, -1). rev-1c3682f
      • The Wasm spec demanded to return 0 while Wasmi trapped with integer-overflow.
      • Thanks to davnavr for the detailed bug report.
    Open source →
  18. 1.0.4 10 Dec 2025
    Release notes

    Fixed

    • Fix Config::set_max_stack_height check. #1727
    Open source →
  19. 1.0.3 06 Dec 2025
    Release notes

    Fixed

    • Fixed a bug that Config::set_max_cached_stacks set the recursion limit instead. #1721
    Open source →
  20. 1.0.2 06 Dec 2025
    Release notes

    Fixed

    • Fixed a memory leak in ByteBuffer introduced in the last patch. [#1722]
    Open source →
  21. 1.0.1 05 Dec 2025 withdrawn
    Release notes

    Fixed

    • Fixed a bug when trying to grow Memory beyond the system's memory limits. #1722
      • Thanks to Robert T. Morris (RTM) for reporting this bug!
    Open source →
  22. 1.0.0 03 Dec 2025 withdrawn
    Release notes

    This release comes with a blog post: Wasmi 1.0

    Added

    • Added conversions between TrapCode and u8. #1651

    Fixed

    • Fix SIMD usage in Wasmi's C-API. #1676

    Changed

    • Adjust table.grow behavior to match Wasmtime's limits. #1710

    Removed

    Internal

    • Enable reference-types in Wasmi's fuzzing infrastructure. #1708
    • Improve Wasmi's Wast runner:
      • Improve NaN checks of Wasmi's Wast runner. #1683
      • Improve error messages for value mismatches. #1682
    • Minor renamings to simplify integration of Wasmi's new IR.
    • Refactor wasmi_ir to reduce compile times. #1640
    • Allocate fewer function local constants during Wasm -> Wasmi translation. #1638
    Open source →
  23. 0.51.5 06 Dec 2025
    Release notes

    Fixed

    • Fixed a bug that Config::set_max_cached_stacks set the recursion limit instead. [#1721]
    Open source →
  24. 0.51.4 06 Dec 2025
    Release notes

    Fixed

    • Fixed a memory leak in ByteBuffer introduced in the last patch. [#1722]
    Open source →
  25. 0.51.3 05 Dec 2025 withdrawn
    Release notes

    Fixed

    • Fixed a bug when trying to grow Memory beyond the system's memory limits. [#1722]
      • Thanks to Robert T. Morris (RTM) for reporting this bug!
    Open source →
  26. 0.51.2 19 Nov 2025 withdrawn
    Release notes

    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-memory table instructions. #1690
    Open source →
  27. 0.51.1 25 Aug 2025 withdrawn
    Release notes

    Fixed

    • Fixed a bug that caused lazily compiled functions to be stuck at compiling when running out of fuel during translation. #1648
    Open source →
  28. 0.51.0 13 Aug 2025 withdrawn
    Release notes

    Changed

    • Redesign the stack limits Config API. #1631
      • Deprecated the StackLimits type and Config::set_stack_limits method.
      • Deprecated the Config::cached_stacks method.
      • Added Config::set_{max_recursion_depth,min_stack_height,max_stack_height} methods.
    Open source →
  29. 0.50.0 11 Aug 2025
    Release notes

    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.
      • This also reduces the number of Wasmi bytecode instructions by 8 which might have positive effects on execution performance due to decreased cache pressure.
      • PRs: #1623 #1624

    Internal

    • Remove some Wasmi dependencies.
      • Namely, smallvec, multi-stash and arrayvec.
      • PRs: #1620 #1626
    Open source →
  30. 0.49.1 10 Aug 2025
    Release notes

    Fixes

    • Fix negated f{32,64}.cmp+select op-code fusion. #1612
    Open source →
  31. 0.49.0 07 Aug 2025 withdrawn
    Release notes

    The deprecations introduced in this version prepares Wasmi for its 1.0 release.

    Changed

    • Deprecate wasmi::core module re-export. [#1605]
      • Public facing definitions are now re-exported from wasmi's crate root which users should use instead.
    • Improve Wasmi's Wasmtime API mirror:
      • Make ExternRef non-nullable and introduce new nullable Ref type. [#1603]
        • Wasmtime uses Option<ExternRef> instead which is very similar.
        • Ref<ExternRef> can be converted to Option<ExternRef> using the val method.
      • Remove FuncRef type in favor of Ref<Func> [#1604]
        • Wasmtime uses Option<Func> instead which is very similar.
        • Ref<Func> can be converted to Option<Func> using the val method.
      • Deprecate InstancePre and Linker::instantiate [#1602]
        • Enable fuel metering and set fuel to zero before instantiation in order to prevent running a Wasm module's start function upon instantiation.
      • Deprecate LinkerBuilder type. [#1601]
        • Use Linker or Instance::new instead.
    Open source →
  32. 0.48.0 21 Jul 2025
    Release notes

    Added

    • Added Wasm reinterpret operators to wasmi_core::wasm API.

    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.
    • Changed CompilationMode default to CompilationMode::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}.copysign with immediate rhs operands won't bump fuel. #1539
    • Fixed incorrect optimization application for i64.mul_wide_s. #1545 #1546
    • Fixed an integer-overflow that could happen when reading or writing memory. #1554

    Internal

    Open source →
  33. 0.47.2 06 Dec 2025
    Release notes

    Fixed

    • Fixed a memory leak in ByteBuffer introduced in the last patch. [#1722]
    Open source →
  34. 0.47.1 05 Dec 2025 withdrawn
    Release notes

    Fixed

    • Fixed a bug when trying to grow Memory beyond the system's memory limits. [#1722]
      • Thanks to Robert T. Morris (RTM) for reporting this bug!
    Open source →
  35. 0.47.0 30 May 2025 withdrawn
    Release notes

    Changed

    • Remove the downcast-rs dependency 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.

    Internal

    • Lower select instructions more aggressively. #1526
      • This significantly reduced the number of different select instruction variants and thus might have positive affects on Wasmi's execution performance.
    Open source →
  36. 0.46.0 08 May 2025
    Release notes

    Changed

    • Store<T>::new no longer requires T: 'static. #1507
      • The T: 'static requirement was introduced in v0.45.0 in [#1449].
    • Improve host function call performance. #1506

    Internal

    • Updated dependencies. #1509
    Open source →
  37. 0.45.0 06 May 2025
    Release notes

    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::simd API functions for relaxed-simd. #1447
    • Added implementations for Rust's Error trait for all wasmi error types on no_std. #1462

    Changed

    • Avoid performing duplicate type and validation checks in Linker::instantiate. #1476
    • Updated wasm-tools dependencies to v228. #1463
    • Removed most of wasmi_core::TypedVal's API. #1457
      • The newer wasmi_core::wasm API is to be preferred and provides the same functionality.

    Fixed

    • Fixed a bug that Wasmi did not make wasmparser's parser aware of enabled Wasm features. #1502
      • Making wasmparser aware of the enabled Wasm features allows it to detect malformed Wasm binaries during parsing.

    Internal

    • Make Wasmi's executor non-generic over the Store's T. #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 (and bulk-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.
      • Re-design Wasmi's select instructions. #1497
        • This allows to use Wasmi's powerful cmp op-code fusion for select instructions.
    • Moved many wasmi internals into wasmi_core:
      • Add FuncType #1458
      • Add Fuel, Memory, Table, Global, ResourceLimiter #1464
      • Replace uses in wasmi with wasmi_core definitions. #1460
    Open source →
  38. 0.44.1 04 May 2025
    Release notes

    Fixed

    • Fixed a bug with executing SIMD store_lane instructions. #1450
    Open source →
  39. 0.44.0 29 Mar 2025 withdrawn
    Release notes

    Added

    • Add support for the Wasm relaxed-simd proposal. #1443
      • All relaxed-simd operators behave deterministically on all platforms supported by Wasmi.
      • Users have to enable the simd crate feature in order to use relaxed-simd capabilities.
      • Note that enabling the simd crate feature may regress Wasm execution and memory consumption performance.

    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.
    Open source →
  40. 0.43.1 29 Mar 2025
    Release notes

    Fixed

    • Add missing WasmTy implementation for V128 #1437
      • This prevented using V128 parameters and results in the TypedFunc API.
      • Note that it was still possible to use V128 with the Func::call API.
    • Fixed a bug executing i8x16.replace_lane with immediate parameter. #1444
    Open source →
  41. 0.43.0 27 Mar 2025 withdrawn
    Release notes

    Added

    • Added support for the Wasm simd proposal. #1364
      • Users have to opt-in to use this feature by enabling Wasmi's simd crate feature.
      • Note: enabling simd may introduce Wasm execution overhead, increase memory consumption increase compiled artifact size and compile times for Wasmi crates. So use simd only if your use case needs it.

    Changed

    • Wasmi's minimum supported Rust version is now Rust 1.83. #1405

    Internal

    • Move all Wasm spec tests over to the wasmi_wast crate. #1403
      • This solves a cyclic dev-dependency issue between wasmi and wasmi_wast crates.
    • Updated wasm-tools and Wasmtime dependencies. #1404
    Open source →
  42. 0.42.1 20 Mar 2025
    Release notes

    Fixed

    • Fixed a bug in i64.mul_wide_{s,u} instruction constant evaluation. #1397
    Open source →
  43. 0.42.0 11 Mar 2025 withdrawn
    Release notes

    Added

    • Added support for the Wasm wide-arithmetic proposal. #1369
      • The wide-arithmetic proposal is disabled by default in wasmi library and enabled by default in the Wasmi CLI.

    Changed

    • Optimized memory accesses with a constant ptr value. #1381

    Internal

    • Update wasm-tools dependencies from v226 to v227. #1380
    Open source →
  44. 0.41.3 06 Dec 2025
    Release notes

    Fixed

    • Fixed a memory leak in ByteBuffer introduced in the last patch. [#1722]
    Open source →
  45. 0.41.2 05 Dec 2025 withdrawn
    Release notes

    Fixed

    • Fixed a bug when trying to grow Memory beyond the system's memory limits. [#1722]
      • Thanks to Robert T. Morris (RTM) for reporting this bug!
    Open source →
  46. 0.41.1 11 Mar 2025 withdrawn
    Release notes

    Fixed

    • Fixed a Wasmi CLI crash when using .wat formatted Wasm files. #1385
    • Fixed a crash when translating memory.grow with an i64.const delta parameter. #1384
      • Note: this can only occur when using the Wasm memory64 proposal.
    Open source →
  47. 0.41.0 10 Mar 2025 withdrawn
    Release notes

    Added

    • Added support for the Wasm memory64 proposal. #1371
      • The memory64 proposal is enabled by default in wasmi and the Wasmi CLI.
    • Added support for the Wasm custom-page-sizes proposal. #1349
      • The custom-page-sizes proposal is enabled by default in wasmi and the Wasmi CLI.
    • Added support to for Wat inputs in Module::new and Module::new_unchecked. #1328
      • There deliberately is no Wat support in Module::new_streaming since Wat cannot be stream compiled.

    Fixed

    • Fixed a bug that could lead to crashes when tail calling host functions. #1329
    • Fixed a bug that no_mange and export_name where used at the same time. #1337

    Changed

    • Bumped Minimum Support Rust Version to v1.82. #1375
    • The memory.grow and table.grow instructions now trap instead of panic when out of system memory.
      • This change was part of the changes introduced by the support for the Wasm memory64 and custom-page-sizes proposals.

    Internal

    • No longer use libm default 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-sizes proposal implementation. #1354
      • Allow fuzzing the Wasm memory64 proposal implementation. #1379
    • Update the Wasm spec testsuite. #1361
    • Update wasm-tools dependencies to v226. #1374
    • Update to string-interner v0.19. #1367
    Open source →
  48. 0.40.0 27 Nov 2024
    Release notes

    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 load and store lowering. #1303
      • This reduces the total number of Wasmi instructions.
    • Added prefix-symbols crate feature to wasmi_c_api_impl crate. #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.

    Fixed

    • C-API
      • Fix a minor compilation issue. #1296
      • Fix the name of wasmi_config_compilation_mode_set #1298
    • Conditionally forward the string-interner/std crate feature. #1304
    • Fix Wasmtime fuzzer oracle config usage. #1314

    Changed

    • Bumped minimum supported Rust version from v1.79 -> v1.80. #1318
    • Replace the wasmparser-nostd fork with upstream wasmparser. #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-interner and hashbrown dependencies. #1305

    Internal

    • Update the wast dependency for Wasmi's Wast runner. #1306
    • Update wasm-tools dependencies to v0.221. #1318
    Open source →
  49. 0.39.1 06 Nov 2024
    Release notes

    Fixed

    • Fixed a bug when translating double negations in expression contexts. #1293
    Open source →
  50. 0.39.0 04 Nov 2024 withdrawn
    Release notes

    Added

    • Add new Linker APIs. #1281
      • Linker::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-collections and prefer-btree-collections crate features to the wasmi crate. #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+branch instructions with huge offsets.
      • This was fixed as a side product in #1243.

    Removed

    • Removed the no-hash-maps crate feature. #1265
    • Removed some minor wasmi crate dependencies. #1266 #1267
      • This should improve compile times of the wasmi crate slightly.

    Internal

    • Modernize fuzzer and significantly improve fuzzing test coverage.
      • Reworked differential fuzzing entirely. #1257
        • This also improves handling of non-deterministic behavior between Wasm runtimes in differential fuzzing.
      • Add wasmi_fuzz crate for better code organization. #1252
      • Merged translate and translate_metered fuzzers. #1249
    • Modernize Wasmi .wast directives runner. #1279
      • Overall this significantly improved readability and maintainability of the Wasmi .wast directives runner.
    Open source →
  51. 0.38.0 06 Oct 2024
    Release notes

    Added

    • Add no-hash-maps crate feature to Wasmi CLI and enable it by default. #1225

    Internal

    • Rename various instructions and add ShiftAmount abstraction. #1221
    • Use Rust's ControlFlow utility. #1223
    • Use get_memory in load and store execution handlers. #1224
    Open source →
  52. 0.37.2 04 Oct 2024
    Release notes

    Added

    • Added a new extra-checks crate feature to the wasmi crate. #1217

      • This improves unreachability checks in when debug-assertions or extra-checks are enabled.
      • If extra-checks are disabled, some technically unnecessary runtime checks are no longer performed.
      • Use extra-checks if your focus is on safety, disable if your focus is on performance.

    Fixed

    • Fixed a bug in local preservation when translating Wasm loop control flow. #1218
    Open source →
  53. 0.37.1 01 Oct 2024 withdrawn
    Release notes

    Fixed

    • Fixed a bug in select translation constant propagation. #1213
    Open source →
  54. 0.37.0 30 Sep 2024 withdrawn
    Release notes

    Added

    • Added support for Wasm multi-memory proposal. #1191
    • Added Store::call_hook API. #1144

    Changed

    • Updated WASI dependencies. #1140
      • This fixes some long-standing bugs in the wasmi_wasi crate.

    Fixed

    • This release includes all fixes that have been backported to v0.36.1, v0.36.2 and v0.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_ir crate.
      • Most of the definitions are sourced from a single Rust macro to reduce maintenance friction.
    • Remove unnecessary iextend instructions. #1147
    • Changed encoding for Wasmi call_indirect instructions. #1156
      • The new encoding improves performance and reduces the number of function local constants.
    • Changed encoding for Wasmi select instructions. #1157
      • The new encoding is more straight-forward and aims to simplify the Wasmi executor and translator.
    • Changed encoding for Wasmi br_table instruction. #1158
      • The new encoding improves performance and memory consumption for certain use cases.
    • Minor improvements to Wasmi bytecode.
      • MemoryGrowBy now takes u32 delta. #1193
      • Improved storeN encoding with immediates. #1194
    Open source →
  55. 0.36.5 11 Oct 2024
    Release notes

    Fixed

    • Fixed a bug with table.get translation when index is a preserved register. [#commit-b4e78d]
    Open source →
  56. 0.36.4 03 Oct 2024 withdrawn
    Release notes

    Fixed

    • Fixed a bug in local preservation when translating Wasm loop control flow. #1218
    Open source →
  57. 0.36.3 01 Oct 2024 withdrawn
    Release notes

    Fixed

    • Fixed a bug in select translation constant propagation. #1213
    Open source →
  58. 0.36.2 28 Sep 2024 withdrawn
    Release notes

    Fixed

    • Fix miri reported UB in FuncRef and ExternRef conversions. #1201
    • Fix bug in table.init from imported global.get values. #1192

    Changed

    • Changed some inline annotations in the Wasmi executor. #commit-b4e78d
      • This change had minor positive effects on the performance of commonly executed Wasmi instructions.
    Open source →
  59. 0.36.1 20 Sep 2024 withdrawn
    Release notes

    Fixed

    • Fixed ref.is_null translation constant propagation issue. #1189
    • Fixed invalid overwrite of preserved local register. #1177
    • Removed faulty br_table optimization.
    • Fix a few clippy warnings.
    Open source →
  60. 0.36.0 24 Jul 2024 withdrawn
    Release notes

    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_impl crate allows to use Wasmi via the Wasm C-API from Rust code.
    • Added Instance::new API. (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 Clone implementation for Module. (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 Error instead of FuelError. (https://github.com/wasmi-labs/wasmi/pull/1131)
      • This was needed to support the Wasm C-API.
      • The FuelError is still accessible via the Error::kind method.
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive