Releases: bytecodealliance/wasmtime
dev: Add avx feature flag (#10846)
* Add support for avx feature flag * Require vaddps/vaddpd use the AVX feature flag.
v33.0.0: Release Wasmtime 33.0.0 (#10812)
33.0.0
Released 2025-05-20.
Added
-
Cranelift now has initial support for
try_call
andtry_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
monolithicwasmtime.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
andcomponent::Instance
now have consistient
get_export
andget_export_index
methods, which return(ComponentItem, ComponentExportIndex)
andComponentExportIndex
, 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 inConfig
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 theruntime
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)
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 acan_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
andload_list
helpers have been specialized in components
forf32
andf64
.
#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 whenhandle
returns before
callingset
.
#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)
31.0.0
Released 2025-03-20.
Added
-
Winch's implementation of the SIMD proposal for WebAssembly is now
feature-complete (but still being fuzzed).
#10180
#10170
#10203
#10202
#10210
#10213
#10224
#10205
#10226
#10228
#10236
#10241
#10243
#10247
#10271
#10284
#10288
#10296 -
The pytorch implementation in wasmtime-wasi-nn now has GPU support.
#10204 -
Cranelift now supports emitting the AArch64
extr
instruction.
#10229 -
Cranelift now supports emitting the x64
shld
instruction.
#10233 -
Initial support for the stack-switching proposal has started to land, but it
is not complete just yet.
#10251
#10265
#10255
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)
v30.0.1: Release Wasmtime 30.0.1 (#10272)
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)
30.0.0
Released 2025-02-20.
Added
-
New
wasmtime-wasi-io
crate provides a#![no_std]
wasi:io implementation,
factored out ofwasmtime-wasi
. Users ofwasmtime-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 thethreads
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 theWasiView
trait intoIoView
andWasiView
, and
wasmtime-wasi-http
re-usesIoView
inWasiHttpView
. 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
, orClosureFuture
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 towasmtime 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 returntrue
.
#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 forRegisteredType
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 ofInputStream
andOutputStream
have been fixed.
#10113
v29.0.1: Release Wasmtime 29.0.1 (#10070)
29.0.1
Released 2025-01-21.
Fixed
- Fix a missing increment in WASIp1-to-WASIp2 adapter which affected WASI
configurations that have multiple preopened directories.
#10064
v29.0.0: Release Wasmtime 29.0.0 (#10049)
29.0.0
Released 2025-01-20.
Added
-
Winch now supports epoch-based interruption.
#9737 -
Pulley, Wasmtime's WebAssembly interpreter, has seen quite a lot of progress
and support fleshed out. It's still not 100% complete but should be about
ready to start kicking the tires.
#9744 -
The Wasmtime CLI now supports a
-Wextended-const
flag to control whether the
extended-const
wasm proposal is enabled or not.
#9768 -
Work continues to progress on the AArch64 Winch backend, bringing it closer to
completion.
#9762
#9767
#9751
#9784
#9781
#9792
#9787
#9798
#9850 -
Wasmtime now supports a "custom code publisher" which can be useful when
Wasmtime doesn't have built-in support for a particular environment.
#9778 -
Configuration options have been added for
wasmtime-wasi-http
outgoing
bodies.
#9800 -
Log prefixes can now be disabled for the
wasmtime serve
command.
#9821 -
A new
WASMTIME_LOG_NO_CONTEXT
environment variable was added to live
alongsideWASMTIME_LOG
.
#9902 -
Release artifacts for aarch64-musl targets are now available.
#9934
Changed
-
Wasmtime libcalls now return whether a trap happened rather than raising a
trap directly to better prepare for the Pulley interpreter and an eventual
implementation of Wasm exception-handling.
#9710 -
Wasmtime will now use the Pulley interpreter by default on platforms that
are not supported by Cranelift.
#9741 -
Demangling symbols in profiling and debugging has improved to handle failures
to demangle C++ symbols.
#9756 -
WASI WIT files have been updated to 0.2.3.
#9807 -
Wasmtime's
bindgen!
macro inasync
mode no longer uses#[async_trait]
an instead natively usesasync fn
in traits.
#9867 -
Floats are no longer canonicalized flowing into or out of components.
#9879 -
Instance methods are now translated to static methods in DWARF translation.
#9898 -
The C API now supports debug builtins for debugging guest code.
#9915
Fixed
v28.0.1: Release Wasmtime 28.0.1 (#10015)
28.0.1
Released 2025-01-14.
Fixed
- Fixed deallocating async stacks when using
Store::into_data
.
#10009