39.0.0
Released 2025-11-20.
Added
-
Initial work has begun to support WebAssembly-level debugging natively in
Wasmtime. This is intended to complement today's preexisting DWARF-level
debugging, but this work will be portable and operate at the WebAssembly level
of abstraction rather than the machine-level. Note that this work is not yet
complete at this time but is expected to get filled out over the coming
releases.
#11768
#11769
#11873
#11892
#11895 -
The pooling allocator now exposes more metrics about unused slots.
#11789 -
The Wizer and component-init projects have been merged into Wasmtime under
a newwasmtime wizerCLI subcommand andwasmtime-wizercrate. This is
mostly a drop-in replacement for both with a minor caveat that the
initialization function is now calledwizer-initializeinstead of
wizer.initializeto be compatible with components.
#11805
#11851
#11853
#11855
#11857
#11863
#11866
#11867
#11877
#11876
#11878
#11891
#11897
#11898
-
The
Config::wasm_featuremethod is now public.
#11812 -
Enabling the wasm exceptions proposal is now exposed in the C API.
#11861 -
The
wasmtimecrate now has acustom-sync-primitivesCargo feature which
enables using custom synchronization primitives defined by the embedder. This
is useful inno_stdtargets where the default panic-on-contention primitives
are not appropriate.
#11836 -
Wasmtime now supports unsafe intrinsics to be used for compile-time builtins.
This can be used to provide give low-level access to host APIs/memory to a
guest program in a controlled fashion.
#11825
#11918 -
The
signals_based_trapsconfiguration option is now exposed in the C API.
#11879 -
A new
EqRef::from_i31function has been added.
#11884 -
The
wasmtime servesubcommand will, by default, now reuse instances when
used with WASIp3 components. This increases throughput and additionally
showcases the concurrent features of WASIp3. This can be opted-out-of on the
CLI as well.
#11807 -
The C++ API for components has been filled out and implemented.
#11880
#11889
#11988 -
A new
ResourceDynamictype, similar toResource<T>, has been added to
support host resources that have a dynamic tag at runtime rather than a
statically known tag at compile time. This is then used to implement resources
in the C/C++ API as well.
#11885
#11920 -
The C/C++ API of Wasmtime now supports the custom-page-sizes wasm proposal.
#11890 -
Initial support has been added for the cooperative multithreading component
model proposal in Wasmtime, built on async primitives.
#11751 -
The
epoch_deadline_callbackRust API has been bound in C++.
#11945 -
A new
Request::into_httphelper has been added to the WASIp3 implementation
ofwasi:http.
#11843 -
A
define_unknown_imports_as_trapsfunction has been added to the C API.
#11962 -
A callback-based implementation of
stdoutandstderrhas been added to the
C API for WASI configuration.
#11965
Changed
-
Running async functions in the component model now operates at the
Store-level of abstraction rather than anInstance.
#11796 -
The
wasmtime servesubcommand no longer mistakenly spawns an epoch thread
per-request and instead uses a single epoch thread.
#11817 -
The
component-model-asyncCargo feature is now on-by-default. Note that it
is still gated at runtime by default. Also note that Wasmtime 39 does not include
#12031 which means
that components using async produced with the latestwasm-toolswill not run
in Wasmtime 39. To run async components it's recommended to pin to a
historical version ofwasm-toolsand guest toolchains for now.
#11822 -
Bindings generated by
wiggleno longer useasync_trait.
#11839 -
Wasmtime's documentation now has an example of a plugin system using Wasmtime.
#11848 -
Profiling with perfmap or jitdump now uses
O_APPENDto be more amenable to
other engines in the same process also using perfmap/jitdump.
#11865 -
The
wasmtime-wasi-httpcrate now usesUnsyncBoxBodyto clarify thatSync
is not required.
#11941 -
A
.character is now used instead of/int hebindgen!macro to separate
interface members.
#11947 -
The
func_newfunction for component linkers now provides the type to the
callee so it knows the type that the component that imported it is using.
#11944 -
The
component::Functype now has a type accessor and the old params/result
accessors were deleted.
#11943 -
Wasmtime now requires Rust 1.89.0 or later to compile.
#11959
Fixed
-
Some panics handling shapes of components with resources in various locations
has been fixed.
#11798 -
Bitwise float operations in Cranelift have been fixed on aarch64.
#11811 -
An off-by-one in the bounds check of wasm atomic operations has been fixed.
#11977 -
Bounds-check elision now happens again with 4 GiB guard pages.
#11973