Wasmtime is a lightweight WebAssembly runtime built for speed, security, and standards-compliance. December’s v28.0 release brings enhancements including a new option for optimization at compile-time, a new first-class type for Cranelift’s domain-specific language (DSL), and more.

  • The Instruction Selection Lowering Expressions (ISLE) DSL for Cranelift now includes a first-class Boolean type, giving users more tools for expressing parts of the Cranelift compiler backend.
  • The addition of a new single-pass register allocator enables users to choose between optimizing builds for either performance at compile-time or performance at runtime for the generated code.
  • The public-facing documentation within Wasmtime on memory settings has been reworked and clarified to make usage and configuration clearer.

What’s new in Wasmtime v28.0

Wasmtime v28.0 includes a variety of enhancements and fixes. The release notes are available here.

Added

  • The ISLE DSL used for Cranelift now has a first-class bool type. #9593
  • Cranelift now supports a new single-pass register allocator designed for compile-time performance (unlike the current default which is optimized for runtime-of-generated-code performance). #9611
  • The wasmtime crate now natively supports the wasm-wave crate and its encoding of component value types. #8872
  • A Module can now be created from an already-open file. #9571
  • A new default-enabled crate feature, signals-based-traps, has been added to the wasmtime crate. When disabled then runtime signal handling is not required by the host. This is intended to help with future effort to port Wasmtime to more platforms. #9614
  • Linear memories may now be backed by malloc in certain conditions when guard pages are disabled, for example. #9614 #9634
  • Wasmtime’s async feature no longer requires std. #9689
  • The buffer and budget capacity of OutgoingBody in wasmtime-wasi-http are now configurable. #9670

Changed

  • Wasmtime’s external and internal distinction of “static” and “dynamic” memories has been refactored and reworded. All options are preserved but exported under different names with improved documentation about how they all interact with one another (and everything should be easier to understand). #9545
  • Each Store<T> now caches a single fiber stack in async mode to avoid allocating/deallocating if the store is used multiple times. #9604
  • Linear memories now have a 32MiB guard region at the end instead of a 2GiB guard region by default. #9606
  • Wasmtime will no longer validate dependencies between WebAssembly features, instead delegating this work to wasmparser’s validator. #9623
  • Cranelift’s isle-in-source-tree feature has been re-worked as an environment variable. #9633
  • Wasmtime’s minimum supported Rust version is now 1.81. #9692
  • Synthetic types in DWARF are now more efficiently represented. #9700
  • Debug builtins on Windows are now exported correctly. #9706
  • Documentation on Config now clarifies that defaults of some options may differ depending on the selected target or compiler depending on features supported. #9705
  • Wasmtime’s error-related types now all unconditionally implement the Error trait, even in #[no_std] mode. #9702

Fixed

  • Field type matching for subtyping with wasm GC has been fixed. #9724
  • Native unwind info generated for s390x has been fixed in the face of tail calls. #9725

Get involved

Thanks to Karl Meakin, Chris Fallin, Pat Hickey, Alex Crichton, Xinzhao Xu, SingleAccretion, Nick Fitzgerald, and Ulrich Weigand for their work on this release.

Want to get involved with Wasmtime? Join the community on our Zulip chat and read the Wasmtime contributors’ guide for more information.