# Wasmtime Releases
--------------------------------------------------------------------------------
## Unreleased
## 0.28.0
Released 2021-06-09.
### Changed
* Breaking: Wasmtime's embedding API has been redesigned, as specified in [RFC
11]. Rust users can now enjoy easier times with `Send` and `Sync` , and all
users can now more clearly manage memory, especially in the C API. Language
embeddings have been updated to the new API as well.
[#2897 ](https://github.com/bytecodealliance/wasmtime/pull/2897 )
[RFC 11]: https://github.com/bytecodealliance/rfcs/pull/11
### Added
* A new `InstancePre` type, created with `Linker::instantiate_pre` , has been
added to perform type-checking of an instance once and reduce the work done
for each instantiation of a module:
[#2962 ](https://github.com/bytecodealliance/wasmtime/pull/2962 )
* Deserialization of a module can now optionally skip checking the wasmtime
version string:
[#2945 ](https://github.com/bytecodealliance/wasmtime/pull/2945 )
* A method has been exposed to frontload per-thread initialization costs if the
latency of every last wasm call is important:
[#2946 ](https://github.com/bytecodealliance/wasmtime/pull/2946 )
* Hooks have been added for entry/exit into wasm code to allow embeddings to
track time and other properties about execution in a wasm environment:
[#2952 ](https://github.com/bytecodealliance/wasmtime/pull/2952 )
* A [C++ embedding of Wasmtime has been written][cpp].
[RFC 11]: https://github.com/bytecodealliance/rfcs/pull/11
[cpp]: https://github.com/bytecodealliance/wasmtime-cpp
### Fixed
* Multiple returns on macOS AArch64 have been fixed:
[#2956 ](https://github.com/bytecodealliance/wasmtime/pull/2956 )
## 0.27.0
Released 2021-05-21.
### Security Fixes
* Fixed a security issue in Cranelift's x64 backend that could result in a heap
sandbox escape due to an incorrect sign-extension:
[#2913 ](https://github.com/bytecodealliance/wasmtime/issues/2913 ).
### Added
* Support for IBM z/Archiecture (`s390x`) machines in Cranelift and Wasmtime:
[#2836 ](https://github.com/bytecodealliance/wasmtime/pull/2836 ),
[#2837 ](https://github.com/bytecodealliance/wasmtime/pull/2837 ),
[#2838 ](https://github.com/bytecodealliance/wasmtime/pull/2838 ),
[#2843 ](https://github.com/bytecodealliance/wasmtime/pull/2843 ),
[#2854 ](https://github.com/bytecodealliance/wasmtime/pull/2854 ),
[#2870 ](https://github.com/bytecodealliance/wasmtime/pull/2870 ),
[#2871 ](https://github.com/bytecodealliance/wasmtime/pull/2871 ),
[#2872 ](https://github.com/bytecodealliance/wasmtime/pull/2872 ),
[#2874 ](https://github.com/bytecodealliance/wasmtime/pull/2874 ).
* Improved async support in wasi-common runtime:
[#2832 ](https://github.com/bytecodealliance/wasmtime/pull/2832 ).
* Added `Store::with_limits` , `StoreLimits` , and `ResourceLimiter` to the
Wasmtime API to help with enforcing resource limits at runtime. The
`ResourceLimiter` trait can be implemented by custom resource limiters to
decide if linear memories or tables can be grown.
* Added `allow-unknown-exports` option for the run command:
[#2879 ](https://github.com/bytecodealliance/wasmtime/pull/2879 ).
* Added API to notify that a `Store` has moved to a new thread:
[#2822 ](https://github.com/bytecodealliance/wasmtime/pull/2822 ).
* Documented guidance around using Wasmtime in multithreaded contexts:
[#2812 ](https://github.com/bytecodealliance/wasmtime/pull/2812 ).
In the future, the Wasmtime API will change to allow some of its core types
to be Send/Sync; see the in-progress
[#2897 ](https://github.com/bytecodealliance/wasmtime/pull/2897 ) for details.
* Support calls from native code to multiple-return-value functions:
[#2806 ](https://github.com/bytecodealliance/wasmtime/pull/2806 ).
### Changed
* Breaking: `Memory::new` has been changed to return `Result` as creating a
host memory object is now a fallible operation when the initial size of
the memory exceeds the store limits.
### Fixed
* Many instruction selection improvements on x64 and aarch64:
[#2819 ](https://github.com/bytecodealliance/wasmtime/pull/2819 ),
[#2828 ](https://github.com/bytecodealliance/wasmtime/pull/2828 ),
[#2823 ](https://github.com/bytecodealliance/wasmtime/pull/2823 ),
[#2862 ](https://github.com/bytecodealliance/wasmtime/pull/2862 ),
[#2886 ](https://github.com/bytecodealliance/wasmtime/pull/2886 ),
[#2889 ](https://github.com/bytecodealliance/wasmtime/pull/2889 ),
[#2905 ](https://github.com/bytecodealliance/wasmtime/pull/2905 ).
* Improved performance of Wasmtime runtime substantially:
[#2811 ](https://github.com/bytecodealliance/wasmtime/pull/2811 ),
[#2818 ](https://github.com/bytecodealliance/wasmtime/pull/2818 ),
[#2821 ](https://github.com/bytecodealliance/wasmtime/pull/2821 ),
[#2847 ](https://github.com/bytecodealliance/wasmtime/pull/2847 ),
[#2900 ](https://github.com/bytecodealliance/wasmtime/pull/2900 ).
* Fixed WASI issue with file metadata on Windows:
[#2884 ](https://github.com/bytecodealliance/wasmtime/pull/2884 ).
* Fixed an issue with debug info and an underflowing (trapping) offset:
[#2866 ](https://github.com/bytecodealliance/wasmtime/pull/2866 ).
* Fixed an issue with unwind information in the old x86 backend:
[#2845 ](https://github.com/bytecodealliance/wasmtime/pull/2845 ).
* Fixed i32 spilling in x64 backend:
[#2840 ](https://github.com/bytecodealliance/wasmtime/pull/2840 ).
## 0.26.0
Released 2021-04-05.
### Added
* Added the `wasmtime compile` command to support AOT compilation of Wasm
modules. This adds the `Engine::precompile_module` method. Also added the
`Config::target` method to change the compilation target of the
configuration. This can be used in conjunction with
`Engine::precompile_module` to target a different host triple than the
current one.
[#2791 ](https://github.com/bytecodealliance/wasmtime/pull/2791 )
* Support for macOS on aarch64 (Apple M1 Silicon), including Apple-specific
calling convention details and unwinding/exception handling using Mach ports.
[#2742 ](https://github.com/bytecodealliance/wasmtime/pull/2742 ),
[#2723 ](https://github.com/bytecodealliance/wasmtime/pull/2723 )
* A number of SIMD instruction implementations in the new x86-64 backend.
[#2771 ](https://github.com/bytecodealliance/wasmtime/pull/2771 )
* Added the `Config::cranelift_flag_enable` method to enable setting Cranelift
boolean flags or presets in a config.
* Added CLI option `--cranelift-enable` to enable boolean settings and ISA presets.
* Deduplicate function signatures in Wasm modules.
[#2772 ](https://github.com/bytecodealliance/wasmtime/pull/2772 )
* Optimize overheads of calling into Wasm functions.
[#2757 ](https://github.com/bytecodealliance/wasmtime/pull/2757 ),
[#2759 ](https://github.com/bytecodealliance/wasmtime/pull/2759 )
* Improvements related to Module Linking: compile fewer trampolines;
[#2774 ](https://github.com/bytecodealliance/wasmtime/pull/2774 )
* Re-export sibling crates from `wasmtime-wasi` to make embedding easier
without needing to match crate versions.
[#2776 ](https://github.com/bytecodealliance/wasmtime/pull/2776 )
### Changed
* Switched the default compiler backend on x86-64 to Cranelift's new backend.
This should not have any user-visible effects other than possibly runtime
performance improvements. The old backend is still available with the
`old-x86-backend` feature flag to the `cranelift-codegen` or `wasmtime`
crates, or programmatically with `BackendVariant::Legacy` . We plan to
maintain the old backend for at least one more release and ensure it works on
CI.
[#2718 ](https://github.com/bytecodealliance/wasmtime/pull/2718 )
* Breaking: `Module::deserialize` has been removed in favor of `Module::new` .
* Breaking: `Config::cranelift_clear_cpu_flags` was removed. Use `Config::target`
to clear the CPU flags for the host's target.
* Breaking: `Config::cranelift_other_flag` was renamed to `Config::cranelift_flag_set` .
* CLI changes:
* Wasmtime CLI options to enable WebAssembly features have been replaced with
a singular `--wasm-features` option. The previous options are still
supported, but are not displayed in help text.
* Breaking: the CLI option `--cranelift-flags` was changed to
`--cranelift-set` .
* Breaking: the CLI option `--enable-reference-types=false` has been changed
to `--wasm-features=-reference-types` .
* Breaking: the CLI option `--enable-multi-value=false` has been changed to
`--wasm-features=-multi-value` .
* Breaking: the CLI option `--enable-bulk-memory=false` has been changed to
`--wasm-features=-bulk-memory` .
* Improved error-reporting in wiggle.
[#2760 ](https://github.com/bytecodealliance/wasmtime/pull/2760 )
* Make WASI sleeping fallible (some systems do not support sleep).
[#2756 ](https://github.com/bytecodealliance/wasmtime/pull/2756 )
* WASI: Support `poll_oneoff` with a sleep.
[#2753 ](https://github.com/bytecodealliance/wasmtime/pull/2753 )
* Allow a `StackMapSink` to be passed when defining functions with
`cranelift-module` .
[#2739 ](https://github.com/bytecodealliance/wasmtime/pull/2739 )
* Some refactoring in new x86-64 backend to prepare for VEX/EVEX (e.g.,
AVX-512) instruction encodings to be supported.
[#2799 ](https://github.com/bytecodealliance/wasmtime/pull/2799 )
### Fixed
* Fixed a corner case in `srem` (signed remainder) in the new x86-64 backend:
`INT_MIN % -1` should return `0` , rather than trapping. This only occurred
when `avoid_div_traps == false` was set by the embedding.
[#2763 ](https://github.com/bytecodealliance/wasmtime/pull/2763 )
* Fixed a memory leak of the `Store` when an instance traps.
[#2803 ](https://github.com/bytecodealliance/wasmtime/pull/2803 )
* Some fuzzing-related fixes.
[#2788 ](https://github.com/bytecodealliance/wasmtime/pull/2788 ),
[#2770 ](https://github.com/bytecodealliance/wasmtime/pull/2770 )
* Fixed memory-initialization bug in uffd allocator that could copy into the
wrong destination under certain conditions. Does not affect the default
wasmtime instance allocator.
[#2801 ](https://github.com/bytecodealliance/wasmtime/pull/2801 )
* Fix printing of float values from the Wasmtime CLI.
[#2797 ](https://github.com/bytecodealliance/wasmtime/pull/2797 )
* Remove the ability for the `Linker` to instantiate modules with duplicate
import strings of different types.
[#2789 ](https://github.com/bytecodealliance/wasmtime/pull/2789 )
## 0.25.0
Released 2021-03-16.
### Added
* An implementation of a pooling instance allocator, optionally backed by
`userfaultfd` on Linux, was added to improve the performance of embeddings
that instantiate a large number of instances continuously.
[#2518 ](https://github.com/bytecodealliance/wasmtime/pull/2518 )
* Host functions can now be defined on `Config` to share the function across all
`Store` objects connected to an `Engine` . This can improve the time it takes
to instantiate instances in a short-lived `Store` .
[#2625 ](https://github.com/bytecodealliance/wasmtime/pull/2625 )
* The `Store` object now supports having typed values attached to it which can
be retrieved from host functions.
[#2625 ](https://github.com/bytecodealliance/wasmtime/pull/2625 )
* The `wiggle` code generator now supports `async` host functions.
[#2701 ](https://github.com/bytecodealliance/wasmtime/pull/2701 )
### Changed
* The `Func::getN{,_async}` APIs have all been removed in favor of a new
`Func::typed` API which should be more compact in terms of API surface area as
well as more flexible in how it can be used.
[#2719 ](https://github.com/bytecodealliance/wasmtime/pull/2719 )
* `Engine::new` has been changed from returning `Engine` to returning
`anyhow::Result<Engine>` . Callers of `Engine::new` will need to be updated to
use the `?` operator on the return value or otherwise unwrap the result to get
the `Engine` .
### Fixed
* Interpretation of timestamps in `poll_oneoff` for WASI have been fixed to
correctly use nanoseconds instead of microseconds.
[#2717 ](https://github.com/bytecodealliance/wasmtime/pull/2717 )
## 0.24.0
Released 2021-03-04.
### Added
* Implement support for `async` functions in Wasmtime
[#2434 ](https://github.com/bytecodealliance/wasmtime/pull/2434 )
### Fixed
* Fix preservation of the sigaltstack on macOS
[#2676 ](https://github.com/bytecodealliance/wasmtime/pull/2676 )
* Fix incorrect semver dependencies involving fs-set-times.
[#2705 ](https://github.com/bytecodealliance/wasmtime/pull/2705 )
* Fix some `i128` shift-related bugs in x64 backend.
[#2682 ](https://github.com/bytecodealliance/wasmtime/pull/2682 )
* Fix incomplete trap metadata due to multiple traps at one address
[#2685 ](https://github.com/bytecodealliance/wasmtime/pull/2685 )
## 0.23.0
Released 2021-02-16.
### Added
* Support for limiting WebAssembly execution with fuel was added, including
support in the C API.
[#2611 ](https://github.com/bytecodealliance/wasmtime/pull/2611 )
[#2643 ](https://github.com/bytecodealliance/wasmtime/pull/2643 )
* Wasmtime now has more knobs for limiting memory and table allocations
[#2617 ](https://github.com/bytecodealliance/wasmtime/pull/2617 )
* Added a method to share `Config` across machines
[#2608 ](https://github.com/bytecodealliance/wasmtime/pull/2608 )
* Added a safe memory read/write API
[#2528 ](https://github.com/bytecodealliance/wasmtime/pull/2528 )
* Added support for the experimental wasi-crypto APIs
[#2597 ](https://github.com/bytecodealliance/wasmtime/pull/2597 )
* Added an instance limit to `Config`
[#2593 ](https://github.com/bytecodealliance/wasmtime/pull/2593 )
* Implemented module-linking's outer module aliases
[#2590 ](https://github.com/bytecodealliance/wasmtime/pull/2590 )
* Cranelift now supports 128-bit operations for the new x64 backend.
[#2539 ](https://github.com/bytecodealliance/wasmtime/pull/2539 )
* Cranelift now has detailed debug-info (DWARF) support in new backends (initially x64).
[#2565 ](https://github.com/bytecodealliance/wasmtime/pull/2565 )
* Cranelift now uses the `POPCNT` , `TZCNT` , and `LZCNT` , as well as SSE 4.1
rounding instructions on x64 when available.
* Cranelift now uses the `CNT` , instruction on aarch64 when available.
### Changed
* A new WASI implementation built on the new
[`cap-std` ](https://github.com/bytecodealliance/cap-std ) crate was added,
replacing the previous implementation. This brings improved robustness,
portability, and performance.
* `wasmtime_wasi::WasiCtxBuilder` moved to
`wasi_cap_std_sync::WasiCtxBuilder` .
* The WebAssembly C API is updated, with a few minor API changes
[#2579 ](https://github.com/bytecodealliance/wasmtime/pull/2579 )
### Fixed
* Fixed a panic in WASI `fd_readdir` on large directories
[#2620 ](https://github.com/bytecodealliance/wasmtime/pull/2620 )
* Fixed a memory leak with command modules
[#2017 ](https://github.com/bytecodealliance/wasmtime/pull/2017 )
--------------------------------------------------------------------------------
## 0.22.0
Released 2021-01-07.
### Added
* Experimental support for [the module-linking
proposal](https://github.com/WebAssembly/module-linking) was
added. [#2094 ](https://github.com/bytecodealliance/wasmtime/pull/2094 )
* Added support for [the reference types
proposal](https://webassembly.github.io/reference-types) on the aarch64
architecture. [#2410 ](https://github.com/bytecodealliance/wasmtime/pull/2410 )
* Experimental support for [wasi-nn ](https://github.com/WebAssembly/wasi-nn ) was
added. [#2208 ](https://github.com/bytecodealliance/wasmtime/pull/2208 )
### Changed
### Fixed
* Fixed an issue where the `select` instruction didn't accept `v128` SIMD
operands. [#2391 ](https://github.com/bytecodealliance/wasmtime/pull/2391 )
* Fixed an issue where Wasmtime could potentially use the wrong stack map during
GCs, leading to a
panic. [#2396 ](https://github.com/bytecodealliance/wasmtime/pull/2396 )
* Fixed an issue where if a host-defined function erroneously returned a value
from a different store, that value would be
leaked. [#2424 ](https://github.com/bytecodealliance/wasmtime/pull/2424 )
* Fixed a bug where in certain cases if a module's instantiation failed, it
could leave trampolines in the store that referenced the no-longer-valid
instance. These trampolines could be reused in future instantiations, leading
to use after free bugs.
[#2408 ](https://github.com/bytecodealliance/wasmtime/pull/2408 )
* Fixed a miscompilation on aarch64 where certain instructions would read `SP`
instead of the zero register. This could only affect you if you explicitly
enabled the Wasm SIMD
proposal. [#2548 ](https://github.com/bytecodealliance/wasmtime/pull/2548 )
--------------------------------------------------------------------------------
## 0.21.0
Released 2020-11-05.
### Added
* Experimental support for the multi-memory proposal was added.
[#2263 ](https://github.com/bytecodealliance/wasmtime/pull/2263 )
* The `Trap::trap_code` API enables learning what kind of trap was raised.
[#2309 ](https://github.com/bytecodealliance/wasmtime/pull/2309 )
### Changed
* WebAssembly module validation is now parallelized.
[#2059 ](https://github.com/bytecodealliance/wasmtime/pull/2059 )
* Documentation is now available at docs.wasmtime.dev.
[#2317 ](https://github.com/bytecodealliance/wasmtime/pull/2317 )
* Windows now compiles like other platforms with a huge guard page instead of
having its own custom limit which made modules compile and run more slowly.
[#2326 ](https://github.com/bytecodealliance/wasmtime/pull/2326 )
* The size of the cache entry for serialized modules has been greatly reduced.
[#2321 ](https://github.com/bytecodealliance/wasmtime/pull/2321 )
[#2322 ](https://github.com/bytecodealliance/wasmtime/pull/2322 )
[#2324 ](https://github.com/bytecodealliance/wasmtime/pull/2324 )
[#2325 ](https://github.com/bytecodealliance/wasmtime/pull/2325 )
* The `FuncType` API constructor and accessors are now iterator-based.
[#2365 ](https://github.com/bytecodealliance/wasmtime/pull/2365 )
### Fixed
* A panic in compiling reference-types-using modules has been fixed.
[#2350 ](https://github.com/bytecodealliance/wasmtime/pull/2350 )
--------------------------------------------------------------------------------
## 0.20.0
Released 2020-09-23.
### Added
* Support for explicitly serializing and deserializing compiled wasm modules has
been added.
[#2020 ](https://github.com/bytecodealliance/wasmtime/pull/2020 )
* A `wasmtime_store_gc` C API was added to run GC for `externref` .
[#2052 ](https://github.com/bytecodealliance/wasmtime/pull/2052 )
* Support for atomics in Cranelift has been added. Support is not fully
implemented in Wasmtime at this time, however.
[#2077 ](https://github.com/bytecodealliance/wasmtime/pull/2077 )
* The `Caller::get_export` function is now implemented for `Func` references as
well.
[#2108 ](https://github.com/bytecodealliance/wasmtime/pull/2108 )
### Fixed
* Leaks in the C API have been fixed.
[#2040 ](https://github.com/bytecodealliance/wasmtime/pull/2040 )
* The `wasm_val_copy` C API has been fixed for reference types.
[#2041 ](https://github.com/bytecodealliance/wasmtime/pull/2041 )
* Fix a panic with `Func::new` and reference types when the store doesn't have
reference types enabled.
[#2039 ](https://github.com/bytecodealliance/wasmtime/pull/2039 )
--------------------------------------------------------------------------------
## 0.19.0
Released 2020-07-14.
### Added
* The [WebAssembly reference-types proposal][reftypes] is now supported in
Wasmtime and the C API.
[#1832 ](https://github.com/bytecodealliance/wasmtime/pull/1832 ),
[#1882 ](https://github.com/bytecodealliance/wasmtime/pull/1882 ),
[#1894 ](https://github.com/bytecodealliance/wasmtime/pull/1894 ),
[#1901 ](https://github.com/bytecodealliance/wasmtime/pull/1901 ),
[#1923 ](https://github.com/bytecodealliance/wasmtime/pull/1923 ),
[#1969 ](https://github.com/bytecodealliance/wasmtime/pull/1969 ),
[#1973 ](https://github.com/bytecodealliance/wasmtime/pull/1973 ),
[#1982 ](https://github.com/bytecodealliance/wasmtime/pull/1982 ),
[#1984 ](https://github.com/bytecodealliance/wasmtime/pull/1984 ),
[#1991 ](https://github.com/bytecodealliance/wasmtime/pull/1991 ),
[#1996 ](https://github.com/bytecodealliance/wasmtime/pull/1996 )
* The [WebAssembly simd proposal's][simd] spec tests now pass in Wasmtime.
[#1765 ](https://github.com/bytecodealliance/wasmtime/pull/1765 ),
[#1876 ](https://github.com/bytecodealliance/wasmtime/pull/1876 ),
[#1941 ](https://github.com/bytecodealliance/wasmtime/pull/1941 ),
[#1957 ](https://github.com/bytecodealliance/wasmtime/pull/1957 ),
[#1990 ](https://github.com/bytecodealliance/wasmtime/pull/1990 ),
[#1994 ](https://github.com/bytecodealliance/wasmtime/pull/1994 )
* Wasmtime can now be compiled without the usage of threads for parallel
compilation, although this is still enabled by default.
[#1903 ](https://github.com/bytecodealliance/wasmtime/pull/1903 )
* The C API is [now
documented](https://bytecodealliance.github.io/wasmtime/c-api/).
[#1928 ](https://github.com/bytecodealliance/wasmtime/pull/1928 ),
[#1959 ](https://github.com/bytecodealliance/wasmtime/pull/1959 ),
[#1968 ](https://github.com/bytecodealliance/wasmtime/pull/1968 )
* A `wasmtime_linker_get_one_by_name` function was added to the C API.
[#1897 ](https://github.com/bytecodealliance/wasmtime/pull/1897 )
* A `wasmtime_trap_exit_status` function was added to the C API.
[#1912 ](https://github.com/bytecodealliance/wasmtime/pull/1912 )
* Compilation for the `aarch64-linux-android` target should now work, although
keep in mind this platform is not fully tested still.
[#2002 ](https://github.com/bytecodealliance/wasmtime/pull/2002 )
[reftypes]: https://github.com/WebAssembly/reference-types
### Fixed
* Runtime warnings when using Wasmtime on musl have been fixed.
[#1914 ](https://github.com/bytecodealliance/wasmtime/pull/1914 )
* A bug affecting Windows unwind information with functions that have spilled
floating point registers has been fixed.
[#1983 ](https://github.com/bytecodealliance/wasmtime/pull/1983 )
### Changed
* Wasmtime's default branch and development now happens on the `main` branch
instead of `master` .
[#1924 ](https://github.com/bytecodealliance/wasmtime/pull/1924 )
### Removed
* The "host info" support in the C API has been removed since it was never fully
or correctly implemented.
[#1922 ](https://github.com/bytecodealliance/wasmtime/pull/1922 )
* Support for the `*_same` functions in the C API has been removed in the same
vein as the host info APIs.
[#1926 ](https://github.com/bytecodealliance/wasmtime/pull/1926 )
--------------------------------------------------------------------------------
## 0.18.0
Release 2020-06-09.
### Added
The `WasmTy` trait is now implemented for `u32` and `u64` .
[#1808 ](https://github.com/bytecodealliance/wasmtime/pull/1808 )
--------------------------------------------------------------------------------
## 0.17.0
Released 2020-06-01.
### Added
* The [Commands and Reactors ABI] is now supported in the Rust API. `Linker::module`
loads a module and automatically handles Commands and Reactors semantics.
[#1565 ](https://github.com/bytecodealliance/wasmtime/pull/1565 )
[Commands and Reactors ABI]: https://github.com/WebAssembly/WASI/blob/master/design/application-abi.md#current-unstable-abi
The `Table::grow` function now returns the previous table size, making it consistent
with the `table.grow` instruction.
[#1653 ](https://github.com/bytecodealliance/wasmtime/pull/1653 )
New Wasmtime-specific C APIs for working with tables were added which provide more
detailed error information and which make growing a table more consistent with the
`table.grow` instruction as well.
[#1654 ](https://github.com/bytecodealliance/wasmtime/pull/1654 )
The C API now includes support for enabling logging in Wasmtime.
[#1737 ](https://github.com/bytecodealliance/wasmtime/pull/1737 )
### Changed
The WASI `proc_exit` function no longer exits the host process. It now unwinds the
callstack back to the wasm entrypoint, and the exit value is available from the
`Trap::i32_exit_status` method.
[#1646 ](https://github.com/bytecodealliance/wasmtime/pull/1646 )
The WebAssembly [multi-value ](https://github.com/WebAssembly/multi-value/ ) proposal
is now enabled by default.
[#1667 ](https://github.com/bytecodealliance/wasmtime/pull/1667 )
The Rust API does not require a store provided during `Module::new` operation. The `Module` can be send accross threads and instantiate for a specific store. The `Instance::new` now requires the store.
[#1761 ](https://github.com/bytecodealliance/wasmtime/pull/1761 )
--------------------------------------------------------------------------------
## 0.16.0
Released 2020-04-29.
### Added
* The `Instance` struct has new accessors, `get_func` , `get_table` ,
`get_memory` , and `get_global` for quickly looking up exported
functions, tables, memories, and globals by name.
[#1524 ](https://github.com/bytecodealliance/wasmtime/pull/1524 )
* The C API has a number of new `wasmtime_*` functions which return error
objects to get detailed error information when an API fails.
[#1467 ](https://github.com/bytecodealliance/wasmtime/pull/1467 )
* Users now have fine-grained control over creation of instances of `Memory`
with a new `MemoryCreator` trait.
[#1400 ](https://github.com/bytecodealliance/wasmtime/pull/1400 )
* Go bindings for Wasmtime are [now available][go-bindings].
[#1481 ](https://github.com/bytecodealliance/wasmtime/pull/1481 )
* APIs for looking up values in a `Linker` have been added.
[#1480 ](https://github.com/bytecodealliance/wasmtime/pull/1480 )
* Preliminary support for AArch64, also known as ARM64.
[#1581 ](https://github.com/bytecodealliance/wasmtime/pull/1581 )
[go-bindings]: https://github.com/bytecodealliance/wasmtime-go
### Changed
* `Instance::exports` now returns `Export` objects which contain
the `name` s of the exports in addition to their `Extern` definitions,
so it's no longer necessary to use `Module::exports` to obtain the
export names.
[#1524 ](https://github.com/bytecodealliance/wasmtime/pull/1524 )
* The `Func::call` API has changed its error type from `Trap` to `anyhow::Error`
to distinguish between wasm traps and runtime violations (like the wrong
number of parameters).
[#1467 ](https://github.com/bytecodealliance/wasmtime/pull/1467 )
* A number of `wasmtime_linker_*` and `wasmtime_config_*` C APIs have new type
signatures which reflect returning errors.
[#1467 ](https://github.com/bytecodealliance/wasmtime/pull/1467 )
* Bindings for .NET have moved to
https://github.com/bytecodealliance/wasmtime-dotnet.
[#1477 ](https://github.com/bytecodealliance/wasmtime/pull/1477 )
* Passing too many imports to `Instance::new` is now considered an error.
[#1478 ](https://github.com/bytecodealliance/wasmtime/pull/1478 )
### Fixed
* Spurious segfaults due to out-of-stack conditions when handling signals have
been fixed.
[#1315 ](https://github.com/bytecodealliance/wasmtime/pull/1315 )
--------------------------------------------------------------------------------
## 0.15.0
Released 2020-03-31.
### Fixed
Full release produced for all artifacts to account for hiccups in 0.13.0 and
0.14.0.
--------------------------------------------------------------------------------
## 0.14.0
*This version ended up not getting a full release*
### Fixed
Fix build errors in wasi-common on Windows.
--------------------------------------------------------------------------------
## 0.13.0
Released 2020-03-24.
### Added
* Lots of documentation of `wasmtime` has been updated. Be sure to check out the
[book ](https://bytecodealliance.github.io/wasmtime/ ) and [API
documentation](https://bytecodealliance.github.io/wasmtime/api/wasmtime/)!
* All wasmtime example programs are now in a top-level `examples` directory and
are available in both C and Rust.
[#1286 ](https://github.com/bytecodealliance/wasmtime/pull/1286 )
* A `wasmtime::Linker` type was added to conveniently link link wasm modules
together and create instances that reference one another.
[#1384 ](https://github.com/bytecodealliance/wasmtime/pull/1384 )
* Wasmtime now has "jitdump" support enabled by default which allows [profiling
wasm code on linux][jitdump].
[#1310 ](https://github.com/bytecodealliance/wasmtime/pull/1310 )
* The `wasmtime::Caller` type now exists as a first-class way to access the
caller's exports, namely memory, when implementing host APIs. This can be the
first argument of functions defined with `Func::new` or `Func::wrap` which
allows easily implementing methods which take a pointer into wasm memory. Note
that this only works for accessing the caller's `Memory` for now and it must
be exported. This will eventually be replaced with a more general-purpose
mechanism like interface types.
[#1290 ](https://github.com/bytecodealliance/wasmtime/pull/1290 )
* The bulk memory proposal has been fully implemented.
[#1264 ](https://github.com/bytecodealliance/wasmtime/pull/1264 )
[#976 ](https://github.com/bytecodealliance/wasmtime/pull/976 )
* Virtual file support has been added to `wasi-common` .
[#701 ](https://github.com/bytecodealliance/wasmtime/pull/701 )
* The C API has been enhanced with a Wasmtime-specific `wasmtime_wat2wasm` to
parse `*.wat` files via the C API.
[#1206 ](https://github.com/bytecodealliance/wasmtime/pull/1206 )
[jitdump]: https://bytecodealliance.github.io/wasmtime/examples-profiling.html
### Changed
* The `wast` and `wasm2obj` standalone binaries have been removed. They're
available via the `wasmtime wast` and `wasmtime wasm2obj` subcommands.
[#1372 ](https://github.com/bytecodealliance/wasmtime/pull/1372 )
* The `wasi-common` crate now uses the new `wiggle` crate to auto-generate a
trait which is implemented for the current wasi snapshot.
[#1202 ](https://github.com/bytecodealliance/wasmtime/pull/1202 )
* Wasmtime no longer has a dependency on a C++ compiler.
[#1365 ](https://github.com/bytecodealliance/wasmtime/pull/1365 )
* The `Func::wrapN` APIs have been consolidated into one `Func::wrap` API.
[#1363 ](https://github.com/bytecodealliance/wasmtime/pull/1363 )
* The `Callable` trait has been removed and now `Func::new` takes a closure
directly.
[#1363 ](https://github.com/bytecodealliance/wasmtime/pull/1363 )
* The Cranelift repository has been merged into the Wasmtime repository.
* Support for interface types has been temporarily removed.
[#1292 ](https://github.com/bytecodealliance/wasmtime/pull/1292 )
* The exit code of the `wasmtime` CLI has changed if the program traps.
[#1274 ](https://github.com/bytecodealliance/wasmtime/pull/1274 )
* The `wasmtime` CLI now logs to stderr by default and the `-d` flag has been
renamed to `--log-to-file` .
[#1266 ](https://github.com/bytecodealliance/wasmtime/pull/1266 )
* Values cannot cross `Store` objects, meaning you can't instantiate a module
with values from different stores nor pass values from different stores into
methods.
[#1016 ](https://github.com/bytecodealliance/wasmtime/pull/1016 )
--------------------------------------------------------------------------------
## 0.12.0
Released 2020-02-26.
### Added
* Support for the [WebAssembly text annotations proposal][annotations-proposal]
has been added.
[#998 ](https://github.com/bytecodealliance/wasmtime/pull/998 )
* An initial C API for instantiating WASI modules has been added.
[#977 ](https://github.com/bytecodealliance/wasmtime/pull/977 )
* A new suite of `Func::getN` functions have been added to the `wasmtime` API to
call statically-known function signatures in a highly optimized fashion.
[#955 ](https://github.com/bytecodealliance/wasmtime/pull/955 )
* Initial support for profiling JIT code through perf jitdump has been added.
[#360 ](https://github.com/bytecodealliance/wasmtime/pull/360 )
* More CLI flags corresponding to proposed WebAssembly features have been added.
[#917 ](https://github.com/bytecodealliance/wasmtime/pull/917 )
[annotations-proposal]: https://github.com/webassembly/annotations
### Changed
* The `wasmtime` CLI as well as embedding API will optimize WebAssembly code by
default now.
[#973 ](https://github.com/bytecodealliance/wasmtime/pull/973 )
[#988 ](https://github.com/bytecodealliance/wasmtime/pull/988 )
* The `verifier` pass in Cranelift is now no longer run by default when using
the embedding API.
[#882 ](https://github.com/bytecodealliance/wasmtime/pull/882 )
### Fixed
* Code caching now accurately accounts for optimization levels, ensuring that if
you ask for optimized code you're not accidentally handed unoptimized code
from the cache.
[#974 ](https://github.com/bytecodealliance/wasmtime/pull/974 )
* Automated releases for tags should be up and running again, along with
automatic publication of the `wasmtime` Python package.
[#971 ](https://github.com/bytecodealliance/wasmtime/pull/971 )