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's
component-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 to
component-model-bytesand now lifting/lowering usingBytesandBytesMut
is 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-async
wasm 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, and
AliasRegions 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 awaitable-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 the
wit-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