Skip to content

Releases: bytecodealliance/wasmtime

v33.0.1: Release Wasmtime 33.0.1 (#11120)

24 Jun 16:48
b7e5651

Choose a tag to compare

33.0.1

Released 2025-06-24.

Fixed

  • Fix a panic with host-defined tables/globals and concrete reference
    types.
    #11103

v32.0.1: Release Wasmtime 32.0.1 (#11118)

24 Jun 16:16
ac65901

Choose a tag to compare

32.0.1

Released 2025-06-24.

Fixed

  • Fix a panic with host-defined tables/globals and concrete reference
    types.
    #11103

v24.0.3: Release Wasmtime 24.0.3 (#11121)

24 Jun 16:41
6f07581

Choose a tag to compare

24.0.3

Released 2025-06-24.

Fixed

  • Fix a panic with host-defined tables/globals and concrete reference
    types.
    #11103

v34.0.0: Release Wasmtime 34.0.0 (#11085)

20 Jun 15:55
26ed24a

Choose a tag to compare

34.0.0

Released 2025-06-20.

Added

  • Support for SIMD in the Pulley interpreter can now be disabled at compile-time
    to shrink the size of the final binary.
    #10727

  • The C API now has wasmtime_trap_new_code to create a wasm_trap_t from
    its code.
    #10765

  • Winch's support for x86_64 is now classified with tier 1 support in Wasmtime.
    #10755

  • Winch's support for aarch64 now implements stack checks to pass many more spec
    tests.
    #10763

  • Cranelift's s390x backend now has full support for the f128 type.
    #10774

  • Wasmtime's C API for the component model has initial support for calling
    functions.
    #10697
    #10841
    #10858
    #10864
    #10877

  • The wasmtime wast command now has a --generate-dwarf flag to show
    filename/line number information for backtraces.
    #10780

Changed

  • The shape of bindgen!-generated add_to_linker functions has changed with
    the removal of GetHost and replacement of a HasData trait. For more
    information see the associated PR.
    #10770

  • Wasmtime's Store<T> now requires that T: 'static. This is done in
    preparation for merging WASIp3 work to the main repository with some more
    information on the associated PR.
    #10760

  • The wasmtime::component::Instance::instance_pre method is now public.
    #10761

  • Wasmtime and Cranelift's minimnum supported version of Rust (MSRV) is now
    1.85.0.
    #10785

  • Cranelift's debugtrap on aarch64 now generates brk #0xf000 for debuggers
    to recognize it.
    #10813

  • The wasi-http implementation no longer generates a trap if the handle to
    receive the response on the host is dropped early.
    #10833

  • The wasmtime serve command will now send some boilerplate descriptive HTML
    on a 500 server error instead of nothing.
    #10851

  • A significant amount of work has gone into the new assembler for the x64
    backend. Too many PRs to list here but progress continues apace at defining
    all machine instructions in a standalone crate.

  • Cranelift will now reject unimplemented big-endian loads/stores on backends
    that do not implement this functionality.
    #10863

  • The wasmtime explore generated HTML handles large modules better now.
    #10892

  • Wasmtime's internal representation of wasmtime::Func has changed and a
    previous optimization of Func::call has been lost. If affected it'd
    recommended to use Func::call_unchecked instead or to open an issue.
    #10897

v33.0.0: Release Wasmtime 33.0.0 (#10812)

20 May 12:50
4ce8232

Choose a tag to compare

33.0.0

Released 2025-05-20.

Added

  • Cranelift now has initial support for try_call and try_call_indirect
    instructions, to be used in the future for the WebAssembly exception-handling
    proposal. Wasmtime does not yet implement this proposal yet.
    #10510
    #10557
    #10593

  • Cranelift can now optimize some simple possibly-side-effectful instructions,
    such as division.
    #10524

  • Wasmtime now supports --invoke for components using the WAVE format.
    #10054

  • Initial support for the Component Model has landed in Wasmtime's C API. Note
    that the API is not yet feature-complete, however.
    #10566
    #10598
    #10651
    #10675

  • Wasmtime's C++ API is now available from this repository and the
    bytecodealliance/wasmtime-cpp repository has been archived. Additionally the
    monolithic wasmtime.hh header file has been split into separate header
    files.
    #10582
    #10600

  • Wasmtime's cookbook-style documentation has been expanded.
    #10630

  • Wasmtime's now supports custom yield behavior when using epoch interrupts.
    #10671

Changed

  • Wasmtime's bindgen now type-checks export functions in the constructor of
    the generated {Worldname}Pre or {Worldname} structs, rather than at the
    call of the export function.
    #10610

  • Wasmtime's component::Component and component::Instance now have consistient
    get_export and get_export_index methods, which return (ComponentItem, ComponentExportIndex) and ComponentExportIndex, respectively.
    #10597

  • On failure, wasmtime serve gives an internal server error response, rather
    than closing the connection.
    #10645

  • Cranelift's single-pass allocator has been disabled due to being unable to
    support internal refactorings in preparation for the WebAssembly exceptions
    proposal. Re-enabling this allocator is tracked at
    regalloc2#217 for
    those interested.
    #10554

  • Wasmtime's {Array,Extern,Struct}Ref functions will now automatically trigger
    a GC.
    #10560

  • Wasmtime's GC heaps now use the same translation techniques as linear memories
    meaning they have far fewer bounds-checks than before.
    #10503

  • Wasmtime's implementation of WASIp2 has moved to wasmtime_wasi::p2 from the
    root of the crate.
    #10073

  • Wasmtime will no longer emit calls to Cranelift-defined "libcalls" and instead
    everything goes through Wasmtime's libcall mechanism instead, paving the way
    for a future change for more efficient stack limit checking in wasm. This can
    also improve deserialize-from-disk times and improve page cache usage for
    modules that use libcalls as relocations are no longer necessary.
    #10657

  • Configuration of caching can now be done through an API instead of exclusively
    through a configuration file. Additionally cache-related APIs in Config have
    changed.
    #10665

  • Resources in the Component Model are now stored in a single table per-instance
    instead of per-type tables. Guests will see a different pattern of index
    allocation but this is not expected to cause any issues at runtime.
    #10701

Fixed

  • Some math intrinsics have been fixed when compiled by Rust 1.87+.
    #10534

  • Component model libcalls correctly handle platform-specific argument extension
    in ABIs.
    #10540

  • An off-by-one issue with DWARF debuginfo has been fixed.
    #10570

  • The Config::target method is no longer gated by a #[cfg] for an enabled
    compiler, it can be used when only the runtime feature is available.
    #10618

  • An issue with "simulated" DWARF has been fixed.
    #10681

  • C/C++ headers are now tested that they can be included in isolation, and a
    number of issues have been fixed.
    #10694

v32.0.0: Release Wasmtime 32.0.0 (#10617)

21 Apr 15:27
d305495

Choose a tag to compare

32.0.0

Released 2025-04-21.

Added

  • {Module,Component}::deserialize_raw can now be used to deserialize an
    in-memory module while relying on external management of the memory.
    #10321

  • An initial implementation of wasi-tls has been added.
    #10249

  • The wasmtime CLI now supports hexadecimal integer CLI arguments.
    #10360

  • Cranelift now supports a log2_min_function_alignment flag.
    #10391

  • A new wasmtime objdump subcommand has been added to help explore and debug
    *.cwasm files.
    #10405

  • Support for the pooling allocator has been added to the C API.
    #10484

  • Support for the guest profiler with the component model has been added.
    #10507

Changed

  • Cranelift MemFlags now has a can_move flag which restricts whether a load
    or store can be moved.
    #10340

  • The .text size of Pulley *.cwasm files should be smaller with less
    padding.
    #10285

  • The wasmtime serve subcommand now implements a graceful shutdown on ctrl-c.
    #10394

  • Stack maps used for GC are now stored in a serialized binary format that is
    faster to deserialize.
    #10404

  • The aegraph implementation in Cranelift has been simplified to remove the
    union-find and canonical eclass IDs.
    #10471

  • The store_list and load_list helpers have been specialized in components
    for f32 and f64.
    #9892

  • Cranelift now removes block params on critical-edge blocks.
    #10485

  • The Linker::define_unknown_imports_as_default_values API now supports
    defining defaults for more kinds of items.
    #10500

  • Wasmtime now requires Rust 1.84.0 to compile.
    #10520

Fixed

  • Winch compilation of extadd instructions has been fixed.
    #10337

  • Fix an issue with DRC collector's barriers.
    #10371

  • Loads on (ref null none) that can trap are now performed.
    #10372

  • Fix reference count management in AnyRef::from_raw.
    #10374

  • An issue with multi-value returns in Winch has been fixed.
    #10370

  • A panic at compile-time from an overflowing shift has been fixed when
    targeting aarch64.
    #10382

  • The wasmtime serve command no longer panics when handle returns before
    calling set.
    #10387

  • Winch compilation of replace_lane instructions with floats has been fixed.
    #10393

  • An invalid integer-shift optimization on vector types has been removed.
    #10413

  • The DWARF loclist to exprloc optimization has been fixed.
    #10400

  • Objects in the DRC collector are now transitively dec-ref's when collected.
    #10401

  • A bug with GC rec gropus and registration in an Engine has been fixed.
    #10435

  • A bug related to GC arrays of GC refs misreported their count of GC edges has
    been fixed.
    #10453

  • A bug related to appropriately adding stack maps for all GC variables has been
    fixed.
    #10456
    #10468

  • A bug with array.fill has been fixed.
    #10470

  • GC structs are no longer reordered to optimize their size to fix subtyping.
    #10463

  • Panics related to exceptions and components being mixed has been fixed.
    #10473

  • Winch stack parameter alignment has been fixed.
    #10513

  • Rendering inline function frames in a trap backtrace has been fixed.
    #10523

v31.0.0: Release Wasmtime 31.0.0 (#10428)

20 Mar 14:53
7a9be58

Choose a tag to compare

31.0.0

Released 2025-03-20.

Added

Changed

  • Pulley's implementation of loads/stores to linear memory has changed to
    better support optimizations and reduction of interpreter opcodes in the
    final binary.
    #10154

  • Cranelift's verifier now ensures that integers used as address types have the
    correct width.
    #10209

  • Wasmtime and Cranelift's minimum supported version of Rust is now 1.83.0.
    #10264

  • Wasmtime now mentions the filename when the input cannot be opened on the CLI.
    #10292

  • All types are now generated in component::bindgen!, even if they're not
    reachable.
    #10311

  • Tables allocated with the system allocator now use alloc_zeroed (aka
    calloc) for allocation.
    #10313

Fixed

  • GC: the is-null-or-i31ref checks have been fixed.
    #10221

  • GC: an incorrect assertion and canonicalized types for runtime usage has been
    fixed.
    #10223

  • GC: subtype checks for imported globals during instantiation have been fixed.
    #10304

  • GC: exposing references to wasm in the gc_alloc_raw libcall has been fixed.
    #10322

  • Winch's fuel checks correctly sync fuel before the check now.
    #10231

  • Winch's treatment of stores and other trapping ops has been fixed on AArch64.
    #10201

  • Winch's handling of the shadow stack pointer has been fixed on AArch64.
    #10263

  • Winch's handling of address calculations has been fixed on AArch64.
    #10297

  • Winch's handling of multivalue return of constants has ben fixed.
    #10315

v30.0.2: Release Wasmtime 30.0.2 (#10294)

25 Feb 18:31
398694a

Choose a tag to compare

30.0.2

Released 2025-02-25.

Fixed

  • MinGW C API builds are now built with a newer version of GCC which seems to
    fix an issue caused by #9929.
    #10290

Changed

  • The cranelift-codegen crate now no longer depends on arbitrary, a
    now-unnecessary dependency.
    #10217

v30.0.1: Release Wasmtime 30.0.1 (#10272)

21 Feb 23:28
daaaabe

Choose a tag to compare

30.0.1

Released 2025-02-21.

Fixed

  • Fixes an issue building the cranelift-assembler-x64 crate on Windows
    when the Rust toolchain is on a different drive than the project using
    wasmtime. For more details, see the Zulip discussion. #10270

v30.0.0: Release Wasmtime 30.0.0 (#10250)

20 Feb 02:56
ede663c

Choose a tag to compare

30.0.0

Released 2025-02-20.

Added

  • New wasmtime-wasi-io crate provides a #![no_std] wasi:io implementation,
    factored out of wasmtime-wasi. Users of wasmtime-wasi don't have to
    depend on this new crate.
    #10036

  • Wasmtime's interpreter, Pulley, is now complete and has been listed as
    tier 2.
    #9897
    #9884
    #9943
    #9944
    #9983
    #9966
    #9935
    #10034
    #10057
    #10095

  • Wasmtime's CI now checks that the repository builds for aarch64-apple-ios.
    Note that no tests are run for this target, so it's still tier 3.
    #9888

  • Winch's support for AArch64 and simd on x64 have continued to progress
    well. Winch additionally now fully supports the threads WebAssembly
    proposal.
    #9889
    #9970
    #9950
    #9987
    #9990
    #9959
    #10008
    #10028
    #10029
    #10023
    #10042
    #10050
    #10039
    #10082
    #10092
    #10109
    #10148
    #10147

  • The memory64 WebAssembly feature is now enabled by default. This WebAssembly
    proposal is now considered a tier 1 feature.
    #9937
    #10159

  • Wasmtime's full test suite and CI now includes 32-bit platforms such as x86
    and armv7 Linux. These platforms have been added to tier 3 status and use
    Pulley as their execution backend.
    #10025

  • Initial experimental support for WASIp3 and async features of the Component
    Model have started to land. These features are not yet ready for
    general-purpose use.
    #10044
    #10047
    #10083
    #10103

  • The wasmtime CLI now supports using a TOML configuration file via --config
    in addition to CLI options.
    #9811
    #10132

  • Initial support for a new assembler on x64 has been added.
    #10110
    #10178

Changed

  • wasmtime-wasi split the WasiView trait into IoView and WasiView, and
    wasmtime-wasi-http re-uses IoView in WasiHttpView. Details on porting
    for embedders in PR.
    #10016

  • wasmtime-wasi renamed some exported types and traits. Embedders which use
    Pollable, InputStream, OutputStream, Subscribe, HostInputStream,
    HostOutputStream, PollableFuture, or ClosureFuture from that crate
    will need to rename those imports to their new names, describe in PR.
    #10036

  • Components using a 64-bit linear memory should never have worked before, but
    they're now rejected earlier in the validation process.
    #9952

  • Module validation is now deterministic in the face of multiple errors.
    #9947

  • Wasmtime's minimum supported version of Rust is now 1.82.0.
    #9956

  • Cranelift will now deduplicate trap[n]z instructions.
    #10004

  • The --emit-clif option to wasmtime compile now emits post-optimization
    CLIF.
    #10011

  • The signals-based-traps Cargo feature has been removed in favor of
    auto-detection of available features based on the #[cfg] directives
    available for the target platform.
    #9941

  • The async_stack_zeroing configuration knob now covers all stack allocations,
    not just those from the pooling allocator.
    #10027

  • Wasmtime should work-by-default on more platforms, even those where Cranelift
    has no support for the architecture. This is done by ensuring some
    architecture and platform-specific bits are removed on unknown platforms (and
    Pulley is used instead).
    #10107

  • Wasmtime now compiles on platforms missing 64-bit atomics.
    #10134

Fixed

  • Fixed a missing case for Ref::matches_ty should return true.
    #9985

  • A bug with using the single_pass register allocation algorithm on x64/s390x
    has been fixed by refactoring how branches are represented.
    #10086
    #10087

  • A bug with argument extensions on riscv64 has been fixed.
    #10069

  • The PartialEq implementation for RegisteredType has been fixed.
    #10091

  • The output of component::bindgen! now works with #![no_std] crates.
    #10105

  • Fix wasmtime wast when combined with --fuel.
    #10121

  • The wat feature of the C API is now plumbed correctly in a few more
    locations.
    #10124

  • Spurious wake-ups in blocking_* methods of InputStream and OutputStream
    have been fixed.
    #10113