46.0.0
Released 2026-06-22.
Added
-
Added opt-in support for the WebAssembly branch-hinting proposal: the
metadata.code.branch_hintcustom section is parsed and used to mark cold blocks during Cranelift compilation, behindConfig::wasm_branch_hinting(off by default). #13459 -
Wasmtime's C API now supports type reflection of GC values. #13268
-
Wasmtime now supports being compiled to
arm64_32platforms. #13259 -
The
cranelift-frontendcrate,the RISC-V Cranelift backend, and Wasmtime'scomponent-model-asyncfeature now supportno_std. #13401 #13479 #13533 -
Wasmtime has initial support for the component model
(implements "...")feature. #13361 #13497 #13513 -
The
wasmtimeCLI now supports configuring theinitial-cwdproperty of WASI. #13468 -
The
wasmtime servesubcommand now supports--headerto set headers for the guest. #13471 -
Wasmtime supports WASI 0.2.12, which notably includes
exit-with-codein stable. #13536 -
Wasmtime's
component-model-async-bytesfeature was renamed tocomponent-model-bytesand now lifting/lowering usingBytesandBytesMutis directly supported. #13366 -
Wasmtime now exposes the async call stack of components through its public API which can be used to determine which root task performed an import call. #13510
-
Wasmtime now supports WASI 0.3.0 by default and the
component-model-asyncwasm feature is now enabled by default. #13612
Changed
-
Performance of bulk-data-transfer instructions such as
{array,table,memory}.{copy,fill,init}have been improved. #13312 #13367 #13368 #13382 #13407 #13424 #13438 #13460 #13524 -
Codegen for conditions based on
ctzorclzhas been optimized. #13332 #13343 -
Cranelift now optimizes conditional branches of constant conditions into unconditional jumps. #13267 #13391
-
Wasmtime's copying collector now has an in-wasm fast path for its bump allocator. #13323
-
Wasmtime's GC implementation has been hardened in the face of GC heap corruption to avoid panicking or aborting. Corruption is returned as a
WasmtimeBugtype for embedders to detect and safely tear down the store/instance. #13321 #13320 -
Cranelift's
MemFlagstype is now renamed toMemFlagsData, andAliasRegions are now stored in the DFG. #13353 #13354 -
Wasmtime now handles OOM gracefully in more situations. #13371 #13372 #13374 #13375 #13376 #13377 #13378 #13379 #13388 #13413 #13412 #13414
-
Cranelift's egraph rewrite pass now uses a concept of fuel to avoid exponential blowup of rewrites. #13390
-
Wasmtime now consumes fuel in bulk-data-transfer instructions proportional to the size of the transfer. #13393 #13448
-
Cranelift's ISLE format now supports
structs as well as tuple fields for structs/enums. #13319 #13335 -
Wasmtime's implementation of passive element and data segments is now optimized to perform more work in wasm itself and has a refactored representation on the host. #13394 #13444
-
Heuristics for triggering GC in the DRC collector have been adjusted to avoid blowups seen in the wild. #13422
-
Wasmtime's default garbage collector is now the copying collector instead of the deferred-reference-counting collector. This collector should be more performant in most situations and additionally have the ability to collect cycles. #13439
-
Wasmtime now traps if a waitable is being waited on synchronously and additionally added to a
waitable-set. #13415 -
Wasmtime's behavior with
subtask.cancelis now adjusted to resume the cancelled task immediately instead of always yielding. #13443 -
The
wasmtime_wasi_http::handlermodule has had its interface overhauled to better handle configuring the lifecycle of a request as it flows through the system in terms of timeouts and such. #13404 -
Most of Wasmtime's instance initialization is now compiled into a per-module initialization function rather than happening through the host in Wasmtime. #13487
-
The
InstanceExportLookuptrait has been generalized intoExportLookup, and this is now optionally implemented forwit_parser::ItemNamewith thewit-parsercrate feature. #13505 -
Many of Cranelift's
*_imminstructions have been removed in favor as they were just sugar over other opcodes. Builder-style methods remain, however. #13527 #13541 #13543 #13545 #13548 #13553 -
Wasmtime's caching behavior is no longer gated on
cfg(debug_assertions)and has been adjusted to handle a git source differently. #13535 -
Bindings generation for store-using
*WithStoretraits now have a type parameter of the store on the trait itself instead of on every method. #13549 -
Wasmtime now requires Rust 1.94.0 to compile. #13547
Fixed
-
Wasmtime's copying collector has had a few bugs related to how it's translated to CLIF fixed. #13381
-
Returning a
ThrownExceptionwhen there wasn't a pending exception within a store has been fixed. #13306 -
A DRC corruption issue when overwriting an i31ref slot has been fixed. #13307
-
Taking a store's exception from a debug handler has been fixed. #13310
-
Alignment checks of atomics with Winch have been fixed. #13337
-
GC barriers around managing the pending exception within a store have been fixed. #13330
-
Cranelift's handling of short jumps on some architectures is now improved to handle very large basic blocks. #13392
-
Cross-component stream copies have been fixed. #13418
-
Cranelift-generated stack maps have been fixed in a few cases. #13449 #13466 #13498
-
Component-to-component adapters which use resources in arguments and disable
concurrency_supporthave been fixed. #13542 -
A panic in
substituted_component_typehas been fixed when guests have exported resources. #13608