github bytecodealliance/wasmtime v46.0.0

latest release: dev
4 hours ago

46.0.0

Released 2026-06-22.

Added

  • Added opt-in support for the WebAssembly branch-hinting proposal: the
    metadata.code.branch_hint custom section is parsed and used to mark cold
    blocks during Cranelift compilation, behind Config::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_32 platforms.
    #13259

  • The cranelift-frontend crate,the RISC-V Cranelift backend, and Wasmtime's
    component-model-async feature now support no_std.
    #13401
    #13479
    #13533

  • Wasmtime has initial support for the component model (implements "...")
    feature.
    #13361
    #13497
    #13513

  • The wasmtime CLI now supports configuring the initial-cwd property of
    WASI.
    #13468

  • The wasmtime serve subcommand now supports --header to set headers for the
    guest.
    #13471

  • Wasmtime supports WASI 0.2.12, which notably includes exit-with-code in
    stable.
    #13536

  • Wasmtime's component-model-async-bytes feature was renamed to
    component-model-bytes and now lifting/lowering using Bytes and BytesMut
    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 ctz or clz has 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
    WasmtimeBug type for embedders to detect and safely tear down the
    store/instance.
    #13321
    #13320

  • Cranelift's MemFlags type is now renamed to MemFlagsData, 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 a waitable-set.
    #13415

  • Wasmtime's behavior with subtask.cancel is now adjusted to resume the
    cancelled task immediately instead of always yielding.
    #13443

  • The wasmtime_wasi_http::handler module 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 InstanceExportLookup trait has been generalized into ExportLookup, and
    this is now optionally implemented for wit_parser::ItemName with the
    wit-parser crate feature.
    #13505

  • Many of Cranelift's *_imm instructions 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 *WithStore traits 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 ThrownException when 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_support have been fixed.
    #13542

  • A panic in substituted_component_type has been fixed when guests have
    exported resources.
    #13608

Don't miss a new wasmtime release

NewReleases is sending notifications on new releases.