xref: /wasmtime-44.0.1/RELEASES.md (revision 45bc7366)
1--------------------------------------------------------------------------------
2
3## 22.0.0
4
5Unreleased.
6
7### Added
8
9### Changed
10
11--------------------------------------------------------------------------------
12
13## 21.0.0
14
15Unreleased.
16
17### Added
18
19* The `wasmtime explore` subcommand now supports `*.wat` files.
20  [#8314](https://github.com/bytecodealliance/wasmtime/issues/8314)
21
22* Wasmtime now supports DWARF Fission `*.dwp` files.
23  [#8055](https://github.com/bytecodealliance/wasmtime/issues/8055)
24
25* The `wasmtime` crate now supports `#![no_std]`, and more information about
26  this transition can be found in
27  [#8341](https://github.com/bytecodealliance/wasmtime/issues/8341).
28  [#8463](https://github.com/bytecodealliance/wasmtime/issues/8463)
29  [#8483](https://github.com/bytecodealliance/wasmtime/issues/8483)
30  [#8485](https://github.com/bytecodealliance/wasmtime/issues/8485)
31  [#8528](https://github.com/bytecodealliance/wasmtime/issues/8528)
32  [#8533](https://github.com/bytecodealliance/wasmtime/issues/8533)
33
34* A `Config` knob is now available for one-entry `call_indirect` caching to
35  speed up modules with lots of `call_indirect` instructions.
36  [#8509](https://github.com/bytecodealliance/wasmtime/issues/8509)
37
38* Cranelift's riscv64 backend has initial support for the Zfa Extension.
39  [#8536](https://github.com/bytecodealliance/wasmtime/issues/8536)
40
41* The WebAssembly `tail-calls` proposal is now enabled by default when using the
42  Cranelift backend, except for the s390x architecture.
43  [#8540](https://github.com/bytecodealliance/wasmtime/issues/8540)
44
45### Changed
46
47* Support for NaN canonicalization on x64 has been optimized to avoid branches.
48  [#8313](https://github.com/bytecodealliance/wasmtime/issues/8313)
49
50* The `bindgen!` macro now defaults to assuming imports cannot trap, but this
51  behavior is configurable at macro-generation time.
52  [#8310](https://github.com/bytecodealliance/wasmtime/issues/8310)
53
54* The `fd_{read,write}` implementations in wasmtime-wasi have been optimized.
55  [#8303](https://github.com/bytecodealliance/wasmtime/issues/8303)
56
57* The `wasmtime-wasi-http` crate has been refactored and has improved
58  documentation.
59  [#8332](https://github.com/bytecodealliance/wasmtime/issues/8332)
60  [#8347](https://github.com/bytecodealliance/wasmtime/issues/8347)
61
62* Unused `with` parameters in `bindgen!` now generate an error.
63  [#8371](https://github.com/bytecodealliance/wasmtime/issues/8371)
64
65* The `fd_read` implementation in wasmtime-wasi now only reads into a single
66  iovec per call.
67  [#8415](https://github.com/bytecodealliance/wasmtime/issues/8415)
68
69* The `wasmtime_val_t` type in the C API no longer holds any allocations. This
70  type must still be manually managed to properly unroot values, however.
71  [#8451](https://github.com/bytecodealliance/wasmtime/issues/8451)
72
73* Add an optimized "sleep" path for `poll_oneoff` to wasmtime-wasi.
74  [#8429](https://github.com/bytecodealliance/wasmtime/issues/8429)
75
76* The Wasmtime-internal `wasmtime-runtime` crate has been removed.
77  [#8501](https://github.com/bytecodealliance/wasmtime/issues/8501)
78
79* The pooling allocator now allows twice as many elements as before.
80  [#8527](https://github.com/bytecodealliance/wasmtime/issues/8527)
81
82* Using CMake to build the C API has been improved along a number of axes.
83  [#8490](https://github.com/bytecodealliance/wasmtime/issues/8490)
84  [#8497](https://github.com/bytecodealliance/wasmtime/issues/8497)
85  [#8549](https://github.com/bytecodealliance/wasmtime/issues/8549)
86
87### Fixed
88
89* Pooling allocator CLI options are now respected with the `wasmtime serve`
90  subcommand.
91  [#8525](https://github.com/bytecodealliance/wasmtime/issues/8525)
92
93--------------------------------------------------------------------------------
94
95## 20.0.2
96
97Released 2024-05-07.
98
99### Added
100
101* Improve error in CMake for when Cargo is not found.
102  [#8497](https://github.com/bytecodealliance/wasmtime/issues/8497)
103
104* Use `--release` in CMake with MinSizeRel and RelWithDebInfo.
105  [#8549](https://github.com/bytecodealliance/wasmtime/issues/8549)
106
107* Add a `WASMTIME_FASTEST_RUNTIME` configuration option for CMake which enables
108  LTO and other related optimization options.
109  [#8554](https://github.com/bytecodealliance/wasmtime/issues/8554)
110
111--------------------------------------------------------------------------------
112
113## 20.0.1
114
115Released 2024-05-03.
116
117### Added
118
119* Make the c-api CMakeLists.txt easier to import.
120  [#8496](https://github.com/bytecodealliance/wasmtime/issues/8496)
121
122--------------------------------------------------------------------------------
123
124## 20.0.0
125
126Released 2024-04-22
127
128### Added
129
130* Support for shared WebAssembly memories has been added to the C API.
131  [#7940](https://github.com/bytecodealliance/wasmtime/issues/7940)
132
133* A `Component::component_type` method has been added to reflect on the imports
134  and exports of a component.
135  [#8078](https://github.com/bytecodealliance/wasmtime/issues/8078)
136
137* The `with` key in `bindgen!` now supports remapping entire packages and
138  namespaces.
139  [#8083](https://github.com/bytecodealliance/wasmtime/issues/8083)
140
141* Winch now supports the component model by using Cranelift to generate
142  trampolines.
143  [#8082](https://github.com/bytecodealliance/wasmtime/issues/8082)
144  [#8109](https://github.com/bytecodealliance/wasmtime/issues/8109)
145
146* The WASI-NN backend now supports ONNX.
147  [#7691](https://github.com/bytecodealliance/wasmtime/issues/7691)
148
149* The `wasmtime` CLI now has an `-S inherit-env` flag for inheriting the entire
150  process environment.
151  [#8168](https://github.com/bytecodealliance/wasmtime/issues/8168)
152
153* Winch now supports the WebAssembly memory64 proposal.
154  [#8194](https://github.com/bytecodealliance/wasmtime/issues/8194)
155
156* Embedders can now opt-in to allowing wasmtime-wasi to block the current thread
157  with file operations, for example.
158  [#8190](https://github.com/bytecodealliance/wasmtime/issues/8190)
159
160* A `wasmtime::CodeBuilder` type has been added to refine the configuration of
161  compiling a `Module` or a `Component`.
162  [#8181](https://github.com/bytecodealliance/wasmtime/issues/8181)
163
164* The `wasmtime serve` subcommand now enables configuring preopened directories
165  and environment variables.
166  [#8279](https://github.com/bytecodealliance/wasmtime/issues/8279)
167
168### Changed
169
170* Support for WebAssembly GC is in the process of being implemented which has
171  required refactoring and reimplementing the existing gc support for
172  `externref`. Many APIs in this area has changed, see linked PRs for more
173  details. Note that the `wasm_*` parts of the C API no longer support
174  `externref`.
175  [#8011](https://github.com/bytecodealliance/wasmtime/issues/8011)
176  [#8196](https://github.com/bytecodealliance/wasmtime/issues/8196)
177
178* The `wasmtime::component::Val` type no longer stores type information and
179  instead must be interpreted in the context of a type.
180  [#8062](https://github.com/bytecodealliance/wasmtime/issues/8062)
181
182* The arguments required for `ResourceAny::try_from_resource` have been
183  simplified by refactoring the internal representation.
184  [#8061](https://github.com/bytecodealliance/wasmtime/issues/8061)
185
186* The arguments required for `wasmtime::component::Linker::func_new` have been
187  simplified by refactoring the internal representation.
188  [#8070](https://github.com/bytecodealliance/wasmtime/issues/8070)
189
190* The pooling allocator is now enabled by default with `wasmtime serve`.
191  [#8073](https://github.com/bytecodealliance/wasmtime/issues/8073)
192
193* The error message for missing imports in has been improved with components.
194  [#7645](https://github.com/bytecodealliance/wasmtime/issues/7645)
195
196* Wasmtime's MSRV is now 1.75.0.
197  [#8205](https://github.com/bytecodealliance/wasmtime/issues/8205)
198
199* Wasmtime's translation of table-related instructions has improved codegen in
200  some common cases, especially with `call_indirect`.
201  [#8063](https://github.com/bytecodealliance/wasmtime/issues/8063)
202  [#8125](https://github.com/bytecodealliance/wasmtime/issues/8125)
203  [#8124](https://github.com/bytecodealliance/wasmtime/issues/8124)
204  [#8134](https://github.com/bytecodealliance/wasmtime/issues/8134)
205  [#8137](https://github.com/bytecodealliance/wasmtime/issues/8137)
206  [#8162](https://github.com/bytecodealliance/wasmtime/issues/8162)
207  [#8159](https://github.com/bytecodealliance/wasmtime/issues/8159)
208  [#8172](https://github.com/bytecodealliance/wasmtime/issues/8172)
209  [#8171](https://github.com/bytecodealliance/wasmtime/issues/8171)
210  [#8139](https://github.com/bytecodealliance/wasmtime/issues/8139)
211  [#8206](https://github.com/bytecodealliance/wasmtime/issues/8206)
212
213* Book-based documentation has been reordered and refactored.
214  [#8130](https://github.com/bytecodealliance/wasmtime/issues/8130)
215
216* The `-S common` flag is renamed to `-S cli`, to better reflect that it provides
217  the wasi-cli APIs. `-S common` is still accepted for now, and will be deprecated
218  in the future.
219  [#8166](https://github.com/bytecodealliance/wasmtime/issues/8166)
220
221* The tail-call calling convention now supports callee-saved registers to
222  improve performance and allow enabling this WebAssembly proposal by default in
223  the future.
224  [#8246](https://github.com/bytecodealliance/wasmtime/issues/8246)
225
226* The `wasmtime-wasi` crate has been refactored to restructure some items and
227  documentation has been added for most items.
228  [#8228](https://github.com/bytecodealliance/wasmtime/issues/8228)
229
230* Support for the WebAssembly `threads` proposal is now gated by an
231  on-by-default Cargo feature named `threads`.
232  [#8260](https://github.com/bytecodealliance/wasmtime/issues/8260)
233
234* Borrow-checking in `wiggle` has been optimized to not be as fine-grained any
235  more. This is a breaking change if users are relying on the ability to safely
236  mutably borrow disjoint regions of memory.
237  [#8277](https://github.com/bytecodealliance/wasmtime/issues/8277)
238
239### Fixed
240
241* Connection timeouts with `wasi-http` have been fixed.
242  [#8085](https://github.com/bytecodealliance/wasmtime/issues/8085)
243
244* Generating bindings with `bindgen!` now works correctly when some WIT types
245  are not used.
246  [#8065](https://github.com/bytecodealliance/wasmtime/issues/8065)
247
248* Errors in `wasi-http` are no longer accidentally returned as traps.
249  [#8272](https://github.com/bytecodealliance/wasmtime/issues/8272)
250
251--------------------------------------------------------------------------------
252
253## 19.0.2
254
255Released 2024-04-11.
256
257* Fix a panic when compiling invalid components.
258  [#8323](https://github.com/bytecodealliance/wasmtime/issues/8323)
259
260* Fix `bindgen!` with `trappable_error_type` using unversioned/versioned
261  packages.
262  [#8305](https://github.com/bytecodealliance/wasmtime/pull/8305)
263
264* cranelift: Include clobbers and outgoing args in stack limit.
265  [#8301](https://github.com/bytecodealliance/wasmtime/pull/8301)
266
267--------------------------------------------------------------------------------
268
269## 19.0.1
270
271Released 2024-04-02.
272
273* Fix a panic using tables with the wrong type.
274  [#8284](https://github.com/bytecodealliance/wasmtime/pull/8284)
275
276--------------------------------------------------------------------------------
277
278## 19.0.0
279
280Released 2024-03-20
281
282### Added
283
284* C API bindings for the sampling-based profiler in Wasmtime have been added.
285  [#7854](https://github.com/bytecodealliance/wasmtime/pull/7854)
286
287* Add the WasiP1Ctx to ease the use of `wasmtime-wasi` in place of `wasi-common`
288  [#8053](https://github.com/bytecodealliance/wasmtime/pull/8053)
289
290* The Winch compiler backend is now feature-complete for x64. Note that minor
291  issues and fuzz bugs are still being addressed, but now's a good time to test
292  if you're interested.
293  [#7894](https://github.com/bytecodealliance/wasmtime/pull/7894)
294  [#7909](https://github.com/bytecodealliance/wasmtime/pull/7909)
295  [#7927](https://github.com/bytecodealliance/wasmtime/pull/7927)
296  [#7932](https://github.com/bytecodealliance/wasmtime/pull/7932)
297  [#7949](https://github.com/bytecodealliance/wasmtime/pull/7949)
298  [#7974](https://github.com/bytecodealliance/wasmtime/pull/7974)
299  [#8001](https://github.com/bytecodealliance/wasmtime/pull/8001)
300
301* The typed function references proposal to WebAssembly is now fully
302  implemented.
303  [#7943](https://github.com/bytecodealliance/wasmtime/pull/7943)
304
305* The `component::Linker` type is now "semver aware" in that it enables loading
306  components referring to past or future versions of interfaces so long as the
307  types are compatible.
308  [#7994](https://github.com/bytecodealliance/wasmtime/pull/7994)
309
310* Wasmtime can now be built for "custom platforms" which is intended for
311  bare-metal builds.
312  [#7995](https://github.com/bytecodealliance/wasmtime/pull/7995)
313
314* The `wasmtime-wasi-nn` crate now has a backend based on WinML.
315  [#7807](https://github.com/bytecodealliance/wasmtime/pull/7807)
316
317* The `wasmtime` CLI now has flags for configuring limits of the pooling
318  allocator.
319  [#8027](https://github.com/bytecodealliance/wasmtime/pull/8027)
320
321
322### Changed
323
324* The `wasmtime serve` command no longer binds its port with `SO_REUSEADDR`
325  meaning that if it is invoked twice only one will succeed.
326  [#7863](https://github.com/bytecodealliance/wasmtime/pull/7863)
327
328* The sampling-based profiler in Wasmtime now takes an explicit argument of
329  the time delta between samples.
330  [#7873](https://github.com/bytecodealliance/wasmtime/pull/7873)
331
332* Many accessors for type information now require an `&Engine` argument to be
333  specified in preparation for an implementation of wasm GC.
334  [#7892](https://github.com/bytecodealliance/wasmtime/pull/7892)
335
336* The `host` header is now forbidden in wasi-http.
337  [#7905](https://github.com/bytecodealliance/wasmtime/pull/7905)
338
339* Stronger type-checks are now performed for host-owned resources when
340  interacting with the component model to help catch mistakes earlier.
341  [#7902](https://github.com/bytecodealliance/wasmtime/pull/7902)
342
343* Demangling Rust and C/C++ symbols in WebAssembly modules is now done by
344  default in the C API.
345  [#7962](https://github.com/bytecodealliance/wasmtime/pull/7962)
346
347* Preview2-based APIs are now located at the root of the `wasmtime_wasi` crate
348  instead of a submodule.
349  [#7933](https://github.com/bytecodealliance/wasmtime/pull/7933)
350
351* Components now reserve index 0 for handle tables to match the component model
352  specification.
353  [#7661](https://github.com/bytecodealliance/wasmtime/pull/7661)
354
355* Support for `externref` and similar features has been moved behind a new `gc`
356  Cargo feature. This will also gate support for Wasm GC in the future.
357  [#7975](https://github.com/bytecodealliance/wasmtime/pull/7975)
358
359* Require the `WASMTIME_WASI_CONFIG_PREOPEN_SOCKET_ALLOW` environment variable
360  to bet set to allow the use of `wasi_config_preopen_socket` via the c api, as
361  it will be deprecated in `20.0.0`.
362  [#8053](https://github.com/bytecodealliance/wasmtime/pull/8053)
363
364### Fixed
365
366* WIT interface names that are Rust keywords now correctly generate bindings.
367  [#7790](https://github.com/bytecodealliance/wasmtime/pull/7790)
368
369* PKRU state is now restored across await points.
370  [#7789](https://github.com/bytecodealliance/wasmtime/pull/7789)
371
372* Wasmtime now correctly supports `global.get` in all constant expressions
373  within a module.
374  [#7996](https://github.com/bytecodealliance/wasmtime/pull/7996)
375
376--------------------------------------------------------------------------------
377
378## 18.0.4
379
380Released 2024-04-11
381
382### Fixed
383
384* Fix `bindgen!` with `trappable_error_type` using unversioned/versioned
385  packages.
386  [#8305](https://github.com/bytecodealliance/wasmtime/pull/8305)
387
388* cranelift: Include clobbers and outgoing args in stack limit.
389  [#8301](https://github.com/bytecodealliance/wasmtime/pull/8301)
390
391* Fix a panic when compiling invalid components.
392  [#8323](https://github.com/bytecodealliance/wasmtime/issues/8323)
393
394--------------------------------------------------------------------------------
395
396## 18.0.3
397
398Released 2024-03-12
399
400### Fixed
401* Fix inferring native flags when a compilation target is specified.
402  [#7991](https://github.com/bytecodealliance/wasmtime/pull/7991)
403
404--------------------------------------------------------------------------------
405
406## 18.0.2
407
408Released 2024-02-28.
409
410### Fixed
411
412* Fix an egraph rule bug that was permitting an incorrect `ireduce` rewrite to
413  unary and binary operations, leading to miscompilations.
414  [#8005](https://github.com/bytecodealliance/wasmtime/pull/8005)
415
416--------------------------------------------------------------------------------
417
418## 18.0.1
419
420Released 2024-02-20.
421
422### Fixed
423
424* Fixed a mistake in the CI release process that caused the crates.io
425  publication of the 18.0.0 release to not succeed.
426  [#7966](https://github.com/bytecodealliance/wasmtime/pull/7966)
427
428--------------------------------------------------------------------------------
429
430## 18.0.0
431
432Released 2024-02-20
433
434### Added
435
436* The `wasmtime-c-api-impl` crate is now published on crates.io.
437  [#7837](https://github.com/bytecodealliance/wasmtime/pull/7837)
438
439* A new `EngineWeak` type enables holding a weak pointer to an engine with the
440  ability to dynamically and fallibly upgrade it to an `Engine`.
441  [#7797](https://github.com/bytecodealliance/wasmtime/pull/7797)
442
443* The WebAssembly tail calls proposal can now be enabled through the C API.
444  [#7811](https://github.com/bytecodealliance/wasmtime/pull/7811)
445
446* The import and export types of a `Component` can now be inspected at runtime.
447  [#7804](https://github.com/bytecodealliance/wasmtime/pull/7804)
448
449* New APIs/types have been added to support a faster version of looking up
450  module exports without using string lookups with `Module::get_export_index`.
451  [#7828](https://github.com/bytecodealliance/wasmtime/pull/7828)
452
453### Changed
454
455* Owned resources represented with `ResourceAny` can now be passed as arguments
456  to functions that require a `borrow<T>` parameter.
457  [#7783](https://github.com/bytecodealliance/wasmtime/pull/7783)
458
459* Generated structures from `wasmtime::component::bindgen!` for exported
460  interfaces are now all renamed to `Guest` to avoid conflicting with WIT names.
461  [#7794](https://github.com/bytecodealliance/wasmtime/pull/7794)
462
463* Guest profiler output will now automatically demangle symbols.
464  [#7809](https://github.com/bytecodealliance/wasmtime/pull/7809)
465
466* The `wasmtime` crate now has a `runtime` Cargo feature which, if disabled,
467  enables building Wasmtime with only the ability to compile WebAssembly
468  modules. This enables compiling Wasmtime's compilation infrastructure, for
469  example, to WebAssembly itself.
470  [#7766](https://github.com/bytecodealliance/wasmtime/pull/7766)
471
472* Support for the old `wasi-common` crate and the original implementation of
473  "WASIp1" aka "preview1" is being deprecated in the `wasmtime-wasi` crate.
474  Users should migrate to the  `wasmtime_wasi::preview2` implementation, which
475  supports both WASIp1 and WASIp2, as in the next release the
476  `wasi-common`-based reexports of `wasmtime-wasi` will be deleted.
477  [#7881](https://github.com/bytecodealliance/wasmtime/pull/7881)
478
479--------------------------------------------------------------------------------
480
481## 17.0.3
482
483Released 2024-04-11
484
485### Fixed
486
487* cranelift: Include clobbers and outgoing args in stack limit.
488  [#8301](https://github.com/bytecodealliance/wasmtime/pull/8301)
489
490* Fix a panic when compiling invalid components.
491  [#8323](https://github.com/bytecodealliance/wasmtime/issues/8323)
492
493--------------------------------------------------------------------------------
494
495## 17.0.2
496
497Released 2024-02-28
498
499### Fixed
500
501* Fix an egraph rule bug that was permitting an incorrect `ireduce` rewrite to
502  unary and binary operations, leading to miscompilations.
503  [#8005](https://github.com/bytecodealliance/wasmtime/pull/8005)
504
505--------------------------------------------------------------------------------
506
507## 17.0.1
508
509Released 2024-02-07
510
511### Fixed
512
513* Fix an egraph elaboration fuzzbug that was allowing values with dependencies
514  that shouldn't be duplicated to be chosen in a context that would make them
515  invalid.
516  [#7859](https://github.com/bytecodealliance/wasmtime/pull/7859)
517  [#7879](https://github.com/bytecodealliance/wasmtime/pull/7879)
518* Fix an egraph rule bug that was allowing unconstrained recursion through the
519  DFG to run away on large functions.
520  [#7882](https://github.com/bytecodealliance/wasmtime/pull/7882)
521
522--------------------------------------------------------------------------------
523
524## 17.0.0
525
526Released 2024-01-25
527
528The major feature of this release is that the WASI support in Wasmtime is now
529considered stable and flagged at an 0.2.0 version approved by the WASI subgroup.
530The release was delayed a few days to hold off until the WASI subgroup voted to
531approve the CLI and HTTP worlds and they're now on-by-default! Additionally the
532component model is now enabled by default in Wasmtime, for example an opt-in
533flag is no longer required on the CLI. Note that embeddings still must opt-in to
534using the component model by using the `wasmtime::component` module.
535
536### Added
537
538* Cranelift optimizations have been added for "3-way comparisons", or `Ord::cmp`
539  in Rust or `<=>` in C++.
540  [#7636](https://github.com/bytecodealliance/wasmtime/pull/7636)
541  [#7702](https://github.com/bytecodealliance/wasmtime/pull/7702)
542
543* Components now use Wasmtime's compilation cache used for core wasm modules by
544  default.
545  [#7649](https://github.com/bytecodealliance/wasmtime/pull/7649)
546
547* The `Resource<T>` and `ResourceAny` types can now be converted between each
548  other.
549  [#7649](https://github.com/bytecodealliance/wasmtime/pull/7649)
550  [#7712](https://github.com/bytecodealliance/wasmtime/pull/7712)
551
552### Changed
553
554* Minor changes have been made to a number of WITs as they progressed to their
555  official 0.2.0 status.
556  [#7625](https://github.com/bytecodealliance/wasmtime/pull/7625)
557  [#7640](https://github.com/bytecodealliance/wasmtime/pull/7640)
558  [#7690](https://github.com/bytecodealliance/wasmtime/pull/7690)
559  [#7781](https://github.com/bytecodealliance/wasmtime/pull/7781)
560  [#7817](https://github.com/bytecodealliance/wasmtime/pull/7817)
561
562* The component model is now enabled by default.
563  [#7821](https://github.com/bytecodealliance/wasmtime/pull/7821)
564
565* The implementation of `memory.atomic.{wait,notify}` has been rewritten.
566  [#7629](https://github.com/bytecodealliance/wasmtime/pull/7629)
567
568* The `wasmtime_wasi::preview2::Table` type has been moved to
569  `wasmtime::component::ResourceTable`.
570  [#7655](https://github.com/bytecodealliance/wasmtime/pull/7655)
571
572* Creating a UDP stream now validates the address being sent to.
573  [#7648](https://github.com/bytecodealliance/wasmtime/pull/7648)
574
575* Defining resource types in `Linker<T>` now takes the type to define as a
576  runtime parameter.
577  [#7680](https://github.com/bytecodealliance/wasmtime/pull/7680)
578
579* Socket address checks can now be performed dynamically at runtime.
580  [#7662](https://github.com/bytecodealliance/wasmtime/pull/7662)
581
582* Wasmtime and Cranelift's MSRV is now 1.73.0.
583  [#7739](https://github.com/bytecodealliance/wasmtime/pull/7739)
584
585### Fixed
586
587* Bindings for WIT APIs where interfaces have multiple versions are now fixed by
588  putting the version in the generated binding names.
589  [#7656](https://github.com/bytecodealliance/wasmtime/pull/7656)
590
591* The preview1 `fd_{read,write}` APIs are now fixed when a shared memory is
592  used.
593  [#7755](https://github.com/bytecodealliance/wasmtime/pull/7755)
594
595* The preview1 `fd_{read,write}` APIs no longer leak an intermediate stream
596  created.
597  [#7819](https://github.com/bytecodealliance/wasmtime/pull/7819)
598
599--------------------------------------------------------------------------------
600
601## 16.0.0
602
603Released 2023-12-20
604
605### Added
606
607* Add yielding support in `wasmtime_store_epoch_deadline_callback` in the C API.
608  [#7476](https://github.com/bytecodealliance/wasmtime/pull/7476)
609
610* Support for the `wasi_unstable` module ("wasi preview0" canonically) has been
611  added to the `-Spreview2` support in the CLI.
612  [#7548](https://github.com/bytecodealliance/wasmtime/pull/7548)
613
614* The original module can now be obtained from an "instance pre" in the C API.
615  [#7572](https://github.com/bytecodealliance/wasmtime/pull/7572)
616
617* Usage of Mach ports on macOS can now be disabled in the C API.
618  [#7595](https://github.com/bytecodealliance/wasmtime/pull/7595)
619
620### Changed
621
622* The preview1-to-preview2 component adapters now import a smaller number of
623  interfaces by default.
624  [#7543](https://github.com/bytecodealliance/wasmtime/pull/7543)
625  [#7544](https://github.com/bytecodealliance/wasmtime/pull/7544)
626
627* Wasmtime and Cranelift now require Rust 1.72.0 to build.
628  [#7554](https://github.com/bytecodealliance/wasmtime/pull/7554)
629
630* The default `world` supported by `wasmtime serve` has been slimmed down to
631  exactly what `wasi:http/proxy` specifies by default. Support for other WASI
632  APIs can be included with the `-S common` command-line flag.
633  [#7597](https://github.com/bytecodealliance/wasmtime/pull/7597)
634
635* The `wasmtime --version` CLI output will now include date/commit information
636  when Wasmtime is built from a git checkout.
637  [#7610](https://github.com/bytecodealliance/wasmtime/pull/7610)
638
639* Debug intrinsic symbols required by LLDB and GDB have been moved behind a
640  `debug-builtins` feature of the `wasmtime` crate which is enabled by default.
641  [#7626](https://github.com/bytecodealliance/wasmtime/pull/7626)
642
643### Fixed
644
645* MPK support is now explicitly disabled on AMD-based CPUs since the
646  implementation does not currently support it.
647  [#7513](https://github.com/bytecodealliance/wasmtime/pull/7513)
648
649* Initialization of a WebAssembly data segment with a negative offset is fixed
650  to zero-extend the offset instead of sign-extend.
651  [#7559](https://github.com/bytecodealliance/wasmtime/pull/7559)
652
653* The reported offset of `O_APPEND` files in preview1 has been fixed.
654  [#7586](https://github.com/bytecodealliance/wasmtime/pull/7586)
655
656* MPK support does a better job of compacting memories to minimize virtual
657  memory used.
658  [#7622](https://github.com/bytecodealliance/wasmtime/pull/7622)
659
660### Cranelift
661
662* Union node bitpacking has been fixed with egraph optimizations to ensure the
663  minimal cost node is selected.
664  [#7465](https://github.com/bytecodealliance/wasmtime/pull/7465)
665
666* Equivalent-cost expressions now have ties broken with expression depth in
667  egraphs to prefer "shallow" expression trees.
668  [#7456](https://github.com/bytecodealliance/wasmtime/pull/7456)
669
670* Long-and-narrow chains of expressions are now optimized into shallow-and-wide
671  trees.
672  [#7466](https://github.com/bytecodealliance/wasmtime/pull/7466)
673
674--------------------------------------------------------------------------------
675
676## 15.0.1
677
678Released 2023-12-01.
679
680### Fixed
681
682* The `wasi:random/insecure{,_seed}` interfaces are now available through the
683  CLI.
684  [#7614](https://github.com/bytecodealliance/wasmtime/pull/7614)
685
686* A stray debugging `println!` was removed.
687  [#7618](https://github.com/bytecodealliance/wasmtime/pull/7618)
688
689--------------------------------------------------------------------------------
690
691## 15.0.0
692
693Released 2023-11-20
694
695### Added
696
697* Multiple versions of interfaces are now supported in `bindgen!`.
698  [#7172](https://github.com/bytecodealliance/wasmtime/pull/7172)
699
700* UDP has been implemented in `wasi:sockets`.
701  [#7148](https://github.com/bytecodealliance/wasmtime/pull/7148)
702  [#7243](https://github.com/bytecodealliance/wasmtime/pull/7243)
703
704* Support for custom stack memory allocation has been added.
705  [#7209](https://github.com/bytecodealliance/wasmtime/pull/7209)
706
707* The `memory_init_cow` setting can now be configured in the C API.
708  [#7227](https://github.com/bytecodealliance/wasmtime/pull/7227)
709
710* The `splice` method of WASI streams has been implemented.
711  [#7234](https://github.com/bytecodealliance/wasmtime/pull/7234)
712
713* Wasmtime binary releases now have a `wasmtime-min` executable in addition to
714  `libwasmtime-min.*` libraries for the C API. These showcase a minimal
715  build of Wasmtime for comparison.
716  [#7282](https://github.com/bytecodealliance/wasmtime/pull/7282)
717  [#7315](https://github.com/bytecodealliance/wasmtime/pull/7315)
718  [#7350](https://github.com/bytecodealliance/wasmtime/pull/7350)
719
720### Changed
721
722* Many changes to `wasi:http` WITs have happened to keep up with the proposal as
723  it prepares to reach a more stable status.
724  [#7161](https://github.com/bytecodealliance/wasmtime/pull/7161)
725  [#7406](https://github.com/bytecodealliance/wasmtime/pull/7406)
726  [#7383](https://github.com/bytecodealliance/wasmtime/pull/7383)
727  [#7417](https://github.com/bytecodealliance/wasmtime/pull/7417)
728  [#7451](https://github.com/bytecodealliance/wasmtime/pull/7451)
729
730* Add an error resource to WASI streams.
731  [#7152](https://github.com/bytecodealliance/wasmtime/pull/7152)
732
733* Syntax in `bindgen!`'s `trappable_error_type` configuration has changed.
734  [#7170](https://github.com/bytecodealliance/wasmtime/pull/7170)
735
736* TCP errors in `wasi:sockets` have been simplified and clarified.
737  [#7120](https://github.com/bytecodealliance/wasmtime/pull/7120)
738
739* Wasmtime/Cranelift now require Rust 1.71.0 to compile.
740  [#7206](https://github.com/bytecodealliance/wasmtime/pull/7206)
741
742* Logging in Wasmtime is now configured with `WASMTIME_LOG` instead of
743  `RUST_LOG`.
744  [#7239](https://github.com/bytecodealliance/wasmtime/pull/7239)
745
746* Fuel-related APIs on `Store` have been refactored and reimplemented with two
747  new methods `set_fuel` and `reset_fuel`. Previous methods have been removed.
748  [#7240](https://github.com/bytecodealliance/wasmtime/pull/7240)
749  [#7298](https://github.com/bytecodealliance/wasmtime/pull/7298)
750
751* The `forward` method of WASI streams has been removed.
752  [#7234](https://github.com/bytecodealliance/wasmtime/pull/7234)
753
754* The WebAssembly `threads`, `multi-memory`, and `relaxed-simd` proposals are
755  now enabled by default.
756  [#7285](https://github.com/bytecodealliance/wasmtime/pull/7285)
757
758* Logging is now implemented for `wasmtime serve`.
759  [#7366](https://github.com/bytecodealliance/wasmtime/pull/7366)
760
761* Filesystem locking has been temporarily removed from WASI.
762  [#7355](https://github.com/bytecodealliance/wasmtime/pull/7355)
763
764* Wasmtime's implementation of WASI preview1 built on top of preview2
765  (`-Spreview2`) has been enabled by default.
766  [#7365](https://github.com/bytecodealliance/wasmtime/pull/7365)
767
768* The `wasi:clocks` interface now has two `subscribe` functions and a `duration`
769  type.
770  [#7358](https://github.com/bytecodealliance/wasmtime/pull/7358)
771
772* The `wasi:io/poll` interface has seen some refactoring.
773  [#7427](https://github.com/bytecodealliance/wasmtime/pull/7427)
774
775### Fixed
776
777* Profiling the first function in a module now works.
778  [#7254](https://github.com/bytecodealliance/wasmtime/pull/7254)
779
780* Consecutive writes to files in preview2 have been fixed.
781  [#7394](https://github.com/bytecodealliance/wasmtime/pull/7394)
782
783* Copy-on-write initialization of linear memories has been fixed for components.
784  [#7459](https://github.com/bytecodealliance/wasmtime/pull/7459)
785
786### Cranelift
787
788* Support for proof-carrying code has been added to Cranelift to assist with an
789  extra layer of validation about properties such as WebAssembly memory accesses
790  in the future.
791  [#7165](https://github.com/bytecodealliance/wasmtime/pull/7165)
792  [#7180](https://github.com/bytecodealliance/wasmtime/pull/7180)
793  [#7219](https://github.com/bytecodealliance/wasmtime/pull/7219)
794  [#7231](https://github.com/bytecodealliance/wasmtime/pull/7231)
795  [#7262](https://github.com/bytecodealliance/wasmtime/pull/7262)
796  [#7263](https://github.com/bytecodealliance/wasmtime/pull/7263)
797  [#7274](https://github.com/bytecodealliance/wasmtime/pull/7274)
798  [#7280](https://github.com/bytecodealliance/wasmtime/pull/7280)
799  [#7281](https://github.com/bytecodealliance/wasmtime/pull/7281)
800  [#7352](https://github.com/bytecodealliance/wasmtime/pull/7352)
801  [#7389](https://github.com/bytecodealliance/wasmtime/pull/7389)
802  [#7468](https://github.com/bytecodealliance/wasmtime/pull/7468)
803
804* Rematerialization of values no longer accidentally overrides LICM.
805  [#7306](https://github.com/bytecodealliance/wasmtime/pull/7306)
806
807* Inline stack probes no longer make Valgrind unhappy.
808  [#7470](https://github.com/bytecodealliance/wasmtime/pull/7470)
809
810--------------------------------------------------------------------------------
811
812## 14.0.4
813
814Released 2023-11-01
815
816### Fixed
817
818* Using the `--dir` argument combined with a `::`-remapped path no longer prints
819  a warning about compatibility with the old CLI and works with remapping.
820  [#7416](https://github.com/bytecodealliance/wasmtime/pull/7416)
821
822* Consecutive file writes in preview2 have been fixed.
823  [#7394](https://github.com/bytecodealliance/wasmtime/pull/7394)
824
825--------------------------------------------------------------------------------
826
827## 14.0.3
828
829Released 2023-10-29
830
831### Fixed
832
833* The `wasmtime` executable will now attempt to more gracefully handle the
834  transition from the 13.0.0 CLI arguments and parsing to the changes in 14.0.0.
835  CLI commands should now warn if they no longer work with the new parser, but
836  still execute as they previously did. This behavior can be controlled via a
837  new `WASMTIME_NEW_CLI` environment variable if necessary.
838  [#7385](https://github.com/bytecodealliance/wasmtime/pull/7385)
839
840* The `serve` subcommand of the `wasmtime` CLI is now enabled by default for the
841  `wasmtime` executable.
842  [#7392](https://github.com/bytecodealliance/wasmtime/pull/7392)
843
844--------------------------------------------------------------------------------
845
846## 14.0.2
847
848Released 2023-10-26
849
850### Fixed
851
852* Make the `wasmtime::unix` module accessible on macOS again.
853  [#7360](https://github.com/bytecodealliance/wasmtime/pull/7360)
854
855* Inter-crate dependencies between `cranelift-*` crates now disable the
856  `default` feature meaning that it's possible for embedders to depend on
857  `cranelift-codegen` as well without the `default` feature.
858  [#7369](https://github.com/bytecodealliance/wasmtime/pull/7369)
859
860--------------------------------------------------------------------------------
861
862## 14.0.1
863
864Released 2023-10-23
865
866### Fixed
867
868* Cranelift: preserve uext and sext flags for parameters on x86\_64 and apple
869  aarch64. Note that this does not affect Wasmtime and is only intended for
870  Cranelift embedders such as `rustc_codegen_cranelift`.
871  [#7333](https://github.com/bytecodealliance/wasmtime/pull/7333)
872
873--------------------------------------------------------------------------------
874
875## 14.0.0
876
877Released 2023-10-20
878
879One of the larger changes in this release is a redesign of Wasmtime's CLI
880arguments and where arguments are passed. This means that previous invocations
881of the `wasmtime` CLI executable will need to be updated. No functionality was
882removed but most of it is behind new flags. One major change is that Wasmtime
883CLI flags are now grouped behind short options like `-O`. For example
884
885    wasmtime run --opt-level 2 foo.wasm
886
887is now:
888
889    wasmtime run -O opt-level=2 foo.wasm
890
891Additionally options prefixed with `--enable-*` or `--disable-*` now
892consistently are considered boolean setters. For example:
893
894    wasmtime run --disable-cache foo.wasm
895
896is now:
897
898    wasmtime run -C cache=n foo.wasm
899
900Options can be explored with `wasmtime -C help` for example, and `wasmtime -h`
901will show all option groups that can be expanded.
902
903Another major change in the CLI is that any CLI argument which positionally
904comes after the wasm file specified will be passed as an argument to the guest
905module. For example this invocations
906
907    wasmtime run foo.wasm --epoch-interruption
908
909was previously accepted as enabling epoch interruption for the `foo.wasm` file.
910This is now interpreted as if it were `./foo.wasm --epoch-interruption`,
911however, passing the flag to the wasm file itself. Flags to Wasmtime must now
912come after Wasmtime's subcommand (in this case `run`) and before the wasm file
913that's being run, for example:
914
915    wasmtime run -W epoch-interruption foo.wasm
916
917More information about this change can be found on
918[#6925](https://github.com/bytecodealliance/wasmtime/pull/6925) and
919[#6946](https://github.com/bytecodealliance/wasmtime/pull/6946).
920
921### Added
922
923* Added the `wasmtime::FrameInfo::module` method, which returns the
924  `wasmtime::Module` associated with the stack frame.
925
926* The `wasmtime::component::Linker` type now implements `Clone`.
927  [#7032](https://github.com/bytecodealliance/wasmtime/pull/7032)
928
929* Wasmtime's `TypedFunc` API now supports the `v128` WebAssembly type on x86\_64
930  and aarch64.
931  [#7010](https://github.com/bytecodealliance/wasmtime/pull/7010)
932
933* Support for resources exported from a WebAssembly guest has been added to the
934  component `bindgen!` macro.
935  [#7050](https://github.com/bytecodealliance/wasmtime/pull/7050)
936
937* The C API now supports learning about a module's `image_range`.
938  [#7064](https://github.com/bytecodealliance/wasmtime/pull/7064)
939
940* Passing values between components is now possible with a more complete
941  implementation of type-checking of values.
942  [#7065](https://github.com/bytecodealliance/wasmtime/pull/7065)
943
944* Types representing resources can now be customized with `bindgen!`.
945  [#7069](https://github.com/bytecodealliance/wasmtime/pull/7069)
946
947* Wasm-defined globals and memories are now included in core dumps, and the
948  `wasmtime::WasmCoreDump` type is now serializable.
949  [#6935](https://github.com/bytecodealliance/wasmtime/pull/6935)
950  [#7078](https://github.com/bytecodealliance/wasmtime/pull/7078)
951
952* Initial experimental support for Intel MPK has been added to support running
953  more instances concurrently.
954  [#7072](https://github.com/bytecodealliance/wasmtime/pull/7072)
955
956* The implementation of `wasi:http` now supports inbound requests in addition to
957  outbound requests. A new `wasmtime serve` command is an example way of
958  handling http requests with wasm files.
959  [#7091](https://github.com/bytecodealliance/wasmtime/pull/7091)
960
961* The C API now supports Wasmtime's "host memory creation" API to customize the
962  allocation of linear memories.
963  [#7115](https://github.com/bytecodealliance/wasmtime/pull/7115)
964
965* The C API now supports asynchronous invocation of WebAssembly programs.
966  [#7106](https://github.com/bytecodealliance/wasmtime/pull/7106)
967
968* The C API now supports Wasmtime's `InstancePre<T>` type.
969  [#7140](https://github.com/bytecodealliance/wasmtime/pull/7140)
970
971* The `wasi:sockets/ip-name-lookup` interface is now implemented by Wasmtime.
972  [#7109](https://github.com/bytecodealliance/wasmtime/pull/7109)
973
974### Changed
975
976* Wasmtime's CLI has been significantly overhauled. See the note above.
977  [#6925](https://github.com/bytecodealliance/wasmtime/pull/6925)
978  [#6946](https://github.com/bytecodealliance/wasmtime/pull/6946)
979
980* The `wasmtime::FrameInfo::module_name` has been removed, however you can now
981  get identical results by chaining `wasmtime::FrameInfo::module` and
982  `wasmtime::Module::name`: `my_frame.module().name()`.
983
984* WASI interfaces have seen significant work since the previous release. Streams
985  for example have a new backpressure and flushing design. Additionally WIT
986  `resource`s are now used ubiquitously throughout the specification and
987  implementation.
988  [#6877](https://github.com/bytecodealliance/wasmtime/pull/6877)
989  [#7029](https://github.com/bytecodealliance/wasmtime/pull/7029)
990  [#7090](https://github.com/bytecodealliance/wasmtime/pull/7090)
991
992* The implementation of `wasi:http` now uses `{input,output}-stream` from the
993  `wasi:io/streams` interface.
994  [#7056](https://github.com/bytecodealliance/wasmtime/pull/7056)
995
996* Lifting and lowering of the `list<u8>` component values has been significantly
997  optimized.
998  [#6971](https://github.com/bytecodealliance/wasmtime/pull/6971)
999
1000* The `wasmtime-c-api` crate is now additionally built as an rlib as well as the
1001  previous cdylib/staticlib combo.
1002  [#6765](https://github.com/bytecodealliance/wasmtime/pull/6765)
1003
1004### Fixed
1005
1006* Support referencing stack slots in the DWARF debug info.
1007  [#6960](https://github.com/bytecodealliance/wasmtime/pull/6960)
1008
1009* Printing unicode to stdio on Windows has been fixed.
1010  [#6825](https://github.com/bytecodealliance/wasmtime/pull/6825)
1011
1012* Building for x86\_64-linux-android has been fixed.
1013  [#7055](https://github.com/bytecodealliance/wasmtime/pull/7055)
1014
1015* Fixed stdout/stderr becoming nonblocking by accident with WASI preview2 on
1016  macOS.
1017  [#7058](https://github.com/bytecodealliance/wasmtime/pull/7058)
1018
1019* Fixed some character boundary-related panics in the preview2 implementation of
1020  preview1.
1021  [#7011](https://github.com/bytecodealliance/wasmtime/pull/7011)
1022
1023* Fixed an issue of guests sleeping for an incorrect amount of time with
1024  preview2.
1025  [#6993](https://github.com/bytecodealliance/wasmtime/pull/6993)
1026
1027* Cranelift will now return an error when running out of temporaries in a very
1028  large function instead of panicking.
1029  [#7114](https://github.com/bytecodealliance/wasmtime/pull/7114)
1030
1031--------------------------------------------------------------------------------
1032
1033## 13.0.1
1034
1035Released 2023-10-26
1036
1037### Fixed
1038
1039* Make the `wasmtime::unix` module accessible on macOS again.
1040  [#7360](https://github.com/bytecodealliance/wasmtime/pull/7360)
1041
1042--------------------------------------------------------------------------------
1043
1044## 13.0.0
1045
1046Released 2023-09-20
1047
1048### Added
1049
1050* Configuration of mach ports vs signals on macOS is now done through a `Config`
1051  instead of at compile time.
1052  [#6807](https://github.com/bytecodealliance/wasmtime/pull/6807)
1053
1054* `Engine::detect_precompiled{,_file}` can be used to determine whether some
1055  bytes or a file look like a precompiled module or a component.
1056  [#6832](https://github.com/bytecodealliance/wasmtime/pull/6832)
1057  [#6937](https://github.com/bytecodealliance/wasmtime/pull/6937)
1058
1059* A new feature "wmemcheck" has been added to enable Valgrind-like detection of
1060  use-after-free within a WebAssembly guest module.
1061  [#6820](https://github.com/bytecodealliance/wasmtime/pull/6820)
1062  [#6856](https://github.com/bytecodealliance/wasmtime/pull/6856)
1063
1064* The `wasmtime` CLI now supports executing components.
1065  [#6836](https://github.com/bytecodealliance/wasmtime/pull/6836)
1066
1067* Support for WASI preview2's TCP sockets interface has been added.
1068  [#6837](https://github.com/bytecodealliance/wasmtime/pull/6837)
1069
1070* Wasmtime's implementation of the wasi-nn proposal now supports named models.
1071  [#6854](https://github.com/bytecodealliance/wasmtime/pull/6854)
1072
1073* The C API now supports configuring `native_unwind_info`,
1074  `dynamic_memory_reserved_for_growth`, `target`, and Cranelift settings.
1075  [#6896](https://github.com/bytecodealliance/wasmtime/pull/6896)
1076  [#6934](https://github.com/bytecodealliance/wasmtime/pull/6934)
1077
1078* The `wasmtime` crate now has initial support for component model bindings
1079  generation for the WIT `resource` type.
1080  [#6886](https://github.com/bytecodealliance/wasmtime/pull/6886)
1081
1082* Cranelift's RISC-V backend now has a complete implementation of the
1083  WebAssembly SIMD proposal. Many thanks to Afonso Bordado for all their
1084  contributions!
1085  [#6920](https://github.com/bytecodealliance/wasmtime/pull/6920)
1086  [#6924](https://github.com/bytecodealliance/wasmtime/pull/6924)
1087
1088* The `bindgen!` macro in the `wasmtime` crate now supports conditional
1089  configuration for which imports should be `async` and which should be
1090  synchronous.
1091  [#6942](https://github.com/bytecodealliance/wasmtime/pull/6942)
1092
1093### Changed
1094
1095* The pooling allocator was significantly refactored and the
1096  `PoolingAllocationConfig` has some minor breaking API changes that reflect
1097  those changes.
1098
1099  Previously, the pooling allocator had `count` slots, and each slot had `N`
1100  memories and `M` tables. Every allocated instance would reserve those `N`
1101  memories and `M` tables regardless whether it actually needed them all or
1102  not. This could lead to some waste and over-allocation when a module used less
1103  memories and tables than the pooling allocator's configured maximums.
1104
1105  After the refactors in this release, the pooling allocator doesn't have
1106  one-size-fits-all slots anymore. Instead, memories and tables are in separate
1107  pools that can be allocated from independently, and we allocate exactly as
1108  many memories and tables as are necessary for the instance being allocated.
1109
1110  To preserve your old configuration with the new methods you can do the following:
1111
1112  ```rust
1113  let mut config = PoolingAllocationConfig::default();
1114
1115  // If you used to have this old, no-longer-compiling configuration:
1116  config.count(count);
1117  config.instance_memories(n);
1118  config.instance_tables(m);
1119
1120  // You can use these equivalent settings for the new config methods:
1121  config.total_core_instances(count);
1122  config.total_stacks(count); // If using the `async` feature.
1123  config.total_memories(count * n);
1124  config.max_memories_per_module(n);
1125  config.total_tables(count * m);
1126  config.max_tables_per_module(m);
1127  ```
1128
1129  There are additionally a variety of methods to limit the maximum amount of
1130  resources a single core Wasm or component instance can take from the pool:
1131
1132  * `PoolingAllocationConfig::max_memories_per_module`
1133  * `PoolingAllocationConfig::max_tables_per_module`
1134  * `PoolingAllocationConfig::max_memories_per_component`
1135  * `PoolingAllocationConfig::max_tables_per_component`
1136  * `PoolingAllocationConfig::max_core_instances_per_component`
1137
1138  These methods do not affect the size of the pre-allocated pool.
1139  [#6835](https://github.com/bytecodealliance/wasmtime/pull/6835)
1140
1141* Builder methods for WASI contexts now use `&mut self` instead of `self`.
1142  [#6770](https://github.com/bytecodealliance/wasmtime/pull/6770)
1143
1144* Native unwinding information is now properly disabled when it is configured to
1145  be turned off.
1146  [#6547](https://github.com/bytecodealliance/wasmtime/pull/6547)
1147
1148* Wasmtime's minimum supported Rust version (MSRV) is now 1.70.0. Wasmtime's
1149  MSRV policy of supporting the last three releases of Rust (N-2) is now
1150  additionally documented. More discussion can additionally be found on the PR
1151  itself.
1152  [#6900](https://github.com/bytecodealliance/wasmtime/pull/6900)
1153
1154* Wasmtime's support for DWARF debugging information has seen some fixes for
1155  previously reported crashes.
1156  [#6931](https://github.com/bytecodealliance/wasmtime/pull/6931)
1157
1158### Removed
1159
1160* Wasmtime's experimental implementation of wasi-crypto has been removed. More
1161  discussion of this change can be found on
1162  [#6732](https://github.com/bytecodealliance/wasmtime/pull/6732)
1163  and
1164  [#6816](https://github.com/bytecodealliance/wasmtime/pull/6816)
1165
1166* Support for `union` types in the component model has been removed.
1167  [#6913](https://github.com/bytecodealliance/wasmtime/pull/6913)
1168
1169--------------------------------------------------------------------------------
1170
1171## 12.0.2
1172
1173Released 2023-09-14.
1174
1175### Fixed
1176
1177* [CVE-2023-41880] - Miscompilation of wasm `i64x2.shr_s` instruction with
1178  constant input on x86\_64
1179
1180[CVE-2023-41880]: https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-gw5p-q8mj-p7gh
1181
1182--------------------------------------------------------------------------------
1183
1184## 12.0.1
1185
1186Released 2023-08-24
1187
1188### Fixed
1189
1190* Optimized the cranelift compilation on aarch64 for large wasm modules.
1191  [#6804](https://github.com/bytecodealliance/wasmtime/pull/6804)
1192
1193--------------------------------------------------------------------------------
1194
1195## 12.0.0
1196
1197Released 2023-08-21
1198
1199### Added
1200
1201* Wasmtime now supports having multiple different versions of itself being
1202  linked into the same final executable by mangling some C symbols used by
1203  Wasmtime.
1204  [#6673](https://github.com/bytecodealliance/wasmtime/pull/6673)
1205
1206* The `perfmap` profiling option is now supported on any Unix platform instead
1207  of just Linux.
1208  [#6701](https://github.com/bytecodealliance/wasmtime/pull/6701)
1209
1210* The `wasmtime` CLI now supports `--env FOO` to inherit the value of the
1211  environment variable `FOO` which avoids needing to do `--env FOO=$FOO` for
1212  example.
1213  [#6746](https://github.com/bytecodealliance/wasmtime/pull/6746)
1214
1215* Wasmtime now supports component model resources, although support has not yet
1216  been added to `bindgen!`.
1217  [#6691](https://github.com/bytecodealliance/wasmtime/pull/6691)
1218
1219* Wasmtime now supports configuration to enable the tail calls proposal.
1220  Platform support now also includes AArch64 and RISC-V in addition to the
1221  previous x86\_64 support.
1222  [#6723](https://github.com/bytecodealliance/wasmtime/pull/6723)
1223  [#6749](https://github.com/bytecodealliance/wasmtime/pull/6749)
1224  [#6774](https://github.com/bytecodealliance/wasmtime/pull/6774)
1225
1226* Wasmtime's implementation of WASI Preview 2 now supports streams/pollables
1227  with host objects that are all backed by Rust `async`.
1228  [#6556](https://github.com/bytecodealliance/wasmtime/pull/6556)
1229
1230* Support for core dumps has now been added to the `wasmtime` crate.
1231  [#6513](https://github.com/bytecodealliance/wasmtime/pull/6513)
1232
1233* New `{Module,Component}::resources_required` APIs allow inspecting what will
1234  be required when instantiating the module or component.
1235  [#6789](https://github.com/bytecodealliance/wasmtime/pull/6789)
1236
1237### Fixed
1238
1239* Functions on instances defined through `component::Linker::func_new` are now
1240  defined correctly.
1241  [#6637](https://github.com/bytecodealliance/wasmtime/pull/6637)
1242
1243* The `async_stack_size` configuration option is no longer inspected when
1244  `async_support` is disabled at runtime.
1245  [#6771](https://github.com/bytecodealliance/wasmtime/pull/6771)
1246
1247* WASI Preview 1 APIs will now trap on misaligned or out-of-bounds pointers
1248  instead of returning an error.
1249  [#6776](https://github.com/bytecodealliance/wasmtime/pull/6776)
1250
1251### Changed
1252
1253* Empty types are no longer allowed in the component model.
1254  [#6777](https://github.com/bytecodealliance/wasmtime/pull/6777)
1255
1256--------------------------------------------------------------------------------
1257
1258## 11.0.2
1259
1260Released 2023-09-14.
1261
1262### Fixed
1263
1264* [CVE-2023-41880] - Miscompilation of wasm `i64x2.shr_s` instruction with
1265  constant input on x86\_64
1266
1267[CVE-2023-41880]: https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-gw5p-q8mj-p7gh
1268
1269--------------------------------------------------------------------------------
1270
1271## 11.0.1
1272
1273Released 2023-07-24.
1274
1275### Fixed
1276
1277* Update some minimum version requirements for Wasmtime's dependencies to fix
1278  building Wasmtime with historical versions of these dependencies.
1279  [#6758](https://github.com/bytecodealliance/wasmtime/pull/6758)
1280
1281--------------------------------------------------------------------------------
1282
1283## 11.0.0
1284
1285Released 2023-07-20
1286
1287### Changed
1288
1289* The WASI Preview 2 `WasiCtxBuilder` type has been refactored, and `WasiCtx` now has private
1290  fields.
1291  [#6652](https://github.com/bytecodealliance/wasmtime/pull/6652)
1292
1293* Component `bindgen!` now generates owned types by default instead of based on
1294  how they're used
1295  [#6648](https://github.com/bytecodealliance/wasmtime/pull/6648)
1296
1297* Wasmtime/Cranelift on x86-64 can now execute Wasm-SIMD on baseline SSE2, which
1298  all x86-64 processors support (as part of the base x86-64 spec). Previously,
1299  SSE4.2 extensions were required. This new work allows Wasm with SIMD
1300  extensions to execute on processors produced back to 2003.
1301  [#6625](https://github.com/bytecodealliance/wasmtime/pull/6625)
1302
1303
1304### Fixed
1305
1306* Only export the top-level preview2 module from wasmtime-wasi when the
1307  `preview2` feature is enabled.
1308  [#6615](https://github.com/bytecodealliance/wasmtime/pull/6615)
1309
1310
1311### Cranelift changes
1312
1313* Tail call implementation has begun in Cranelift
1314  [#6641](https://github.com/bytecodealliance/wasmtime/pull/6641)
1315  [#6666](https://github.com/bytecodealliance/wasmtime/pull/6666)
1316  [#6650](https://github.com/bytecodealliance/wasmtime/pull/6650)
1317  [#6635](https://github.com/bytecodealliance/wasmtime/pull/6635)
1318  [#6608](https://github.com/bytecodealliance/wasmtime/pull/6608)
1319  [#6586](https://github.com/bytecodealliance/wasmtime/pull/6586)
1320
1321* Work continues on SIMD support for the riscv64 backend
1322  [#6657](https://github.com/bytecodealliance/wasmtime/pull/6657)
1323  [#6643](https://github.com/bytecodealliance/wasmtime/pull/6643)
1324  [#6601](https://github.com/bytecodealliance/wasmtime/pull/6601)
1325  [#6609](https://github.com/bytecodealliance/wasmtime/pull/6609)
1326  [#6602](https://github.com/bytecodealliance/wasmtime/pull/6602)
1327  [#6598](https://github.com/bytecodealliance/wasmtime/pull/6598)
1328  [#6599](https://github.com/bytecodealliance/wasmtime/pull/6599)
1329  [#6587](https://github.com/bytecodealliance/wasmtime/pull/6587)
1330  [#6568](https://github.com/bytecodealliance/wasmtime/pull/6568)
1331  [#6515](https://github.com/bytecodealliance/wasmtime/pull/6515)
1332
1333* Fix `AuthenticatedRet` when stack bytes are popped in the aarch64 backend
1334  [#6634](https://github.com/bytecodealliance/wasmtime/pull/6634)
1335
1336* The `fcvt_low_from_sint` instruction has been removed, as it its current
1337  behavior can be recovered through a combination of `swiden_low` and
1338  `fcvt_from_sint`
1339  [#6565](https://github.com/bytecodealliance/wasmtime/pull/6565)
1340
1341--------------------------------------------------------------------------------
1342
1343## 10.0.2
1344
1345Released 2023-09-14.
1346
1347### Fixed
1348
1349* [CVE-2023-41880] - Miscompilation of wasm `i64x2.shr_s` instruction with
1350  constant input on x86\_64
1351
1352[CVE-2023-41880]: https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-gw5p-q8mj-p7gh
1353
1354--------------------------------------------------------------------------------
1355
1356## 10.0.1
1357
1358Released 2023-06-21
1359
1360### Fixed
1361
1362* Only export the top-level preview2 module from wasmtime-wasi when the
1363  `preview2` feature is enabled.
1364  [#6615](https://github.com/bytecodealliance/wasmtime/pull/6615)
1365
1366--------------------------------------------------------------------------------
1367
1368## 10.0.0
1369
1370Released 2023-06-20
1371
1372### Added
1373
1374* Expose the `Config::static_memory_forced` option through the C api
1375  [#6413](https://github.com/bytecodealliance/wasmtime/pull/6413)
1376
1377* Basic guest-profiler documentation for the book
1378  [#6394](https://github.com/bytecodealliance/wasmtime/pull/6394)
1379
1380* Merge the initial wasi-preview2 implementation
1381  [#6391](https://github.com/bytecodealliance/wasmtime/pull/6391)
1382
1383* The wasi-preview2 component adapter has been pulled into the main wasmtime
1384  repository. It is available for the first time as part of this release, but should be
1385  treated as as a beta at this time. Patch releases will not be made for bug fixes.
1386  [#6374](https://github.com/bytecodealliance/wasmtime/pull/6374)
1387
1388* A callback invoked when an epoch deadline is reached can now be configured via
1389  the C API.
1390  [#6359](https://github.com/bytecodealliance/wasmtime/pull/6359)
1391
1392* PR auto-assignment policies have been documented, to clarify the expectations of
1393  reviewers.
1394  [#6346](https://github.com/bytecodealliance/wasmtime/pull/6346)
1395
1396* Support for the function references has been added
1397  [#5288](https://github.com/bytecodealliance/wasmtime/pull/5288)
1398
1399### Changed
1400
1401* An `epoch_deadline_callback` now returns an `UpdateDeadline` enum to allow
1402  optionally yielding to the async executor after the callback runs.
1403  [#6464](https://github.com/bytecodealliance/wasmtime/pull/6464)
1404
1405* The `--profile-guest` flag has now been folded into `--profile=guest`
1406  [#6352](https://github.com/bytecodealliance/wasmtime/pull/6352)
1407
1408* Initializers are no longer tracked in the type information for globals, and
1409  instead are provided when creating the global.
1410  [#6349](https://github.com/bytecodealliance/wasmtime/pull/6349)
1411
1412* The "raw" representation of `funcref` and `externref` in the embedding API has
1413  been updated from a `usize` to a `*mut u8` to be compatible with Rust's
1414  proposed strict provenance rules. This change is additionally reflected into
1415  the C API as well.
1416  [#6338](https://github.com/bytecodealliance/wasmtime/pull/6338)
1417
1418### Fixed
1419
1420* Fixed a soundness issue with the component model and async
1421  [#6509](https://github.com/bytecodealliance/wasmtime/pull/6509)
1422
1423* Opening directories with WASI on Windows with `NONBLOCK` in flags has been
1424  fixed.
1425  [#6348](https://github.com/bytecodealliance/wasmtime/pull/6348)
1426
1427### Cranelift changes
1428
1429* Performance improvements in regalloc2 have landed, and compilation time has
1430  improved
1431  [#6483](https://github.com/bytecodealliance/wasmtime/pull/6483)
1432  [#6398](https://github.com/bytecodealliance/wasmtime/pull/6398)
1433
1434* Renamed `abi::Caller` to `abi::CallSite`
1435  [#6414](https://github.com/bytecodealliance/wasmtime/pull/6414)
1436
1437* Work has begun on SIMD support for the riscv64 backend
1438  [#6324](https://github.com/bytecodealliance/wasmtime/pull/6324)
1439  [#6366](https://github.com/bytecodealliance/wasmtime/pull/6366)
1440  [#6367](https://github.com/bytecodealliance/wasmtime/pull/6367)
1441  [#6392](https://github.com/bytecodealliance/wasmtime/pull/6392)
1442  [#6397](https://github.com/bytecodealliance/wasmtime/pull/6397)
1443  [#6403](https://github.com/bytecodealliance/wasmtime/pull/6403)
1444  [#6408](https://github.com/bytecodealliance/wasmtime/pull/6408)
1445  [#6419](https://github.com/bytecodealliance/wasmtime/pull/6419)
1446  [#6430](https://github.com/bytecodealliance/wasmtime/pull/6430)
1447  [#6507](https://github.com/bytecodealliance/wasmtime/pull/6507)
1448
1449--------------------------------------------------------------------------------
1450
1451## 9.0.3
1452
1453Released 2023-05-31.
1454
1455### Fixed
1456
1457* Fix Wasi rights system to work with wasi-testsuite, which exposed a corner case
1458  that was missed by the fixes in the 9.0.2 release.
1459  [#6479](https://github.com/bytecodealliance/wasmtime/pull/6479)
1460
1461--------------------------------------------------------------------------------
1462
1463## 9.0.2
1464
1465Released 2023-05-26.
1466
1467### Fixed
1468
1469* Fix Wasi rights system to work with wasi-libc. This regression was
1470  introduced in the 9.0.0 release.
1471  [#6462](https://github.com/bytecodealliance/wasmtime/pull/6462)
1472  [#6471](https://github.com/bytecodealliance/wasmtime/pull/6471)
1473
1474--------------------------------------------------------------------------------
1475
1476## 9.0.1
1477
1478Released 2023-05-22.
1479
1480### Fixed
1481
1482* A panic which happened when enabling support for native platform profilers was
1483  fixed.
1484  [#6435](https://github.com/bytecodealliance/wasmtime/pull/6435)
1485
1486--------------------------------------------------------------------------------
1487
1488## 9.0.0
1489
1490Released 2023-05-22.
1491
1492### Added
1493
1494* Initial integration of the Winch baseline compiler into Wasmtime is
1495  implemented. Note that Winch still does not support much of WebAssembly, but
1496  intrepid explorers may have an easier time playing around with it now.
1497  [#6119](https://github.com/bytecodealliance/wasmtime/pull/6119)
1498
1499* The `wasmtime` CLI now has flags to limit memory, instances, and tables. For
1500  example `--max-memory-size` or `--max-tables`. Additionally it has a new
1501  `--trap-on-grow-failure` option to force a trap whenever a `memory.grow` would
1502  otherwise fail which can be useful for debugging modules which may be
1503  encountering OOM.
1504  [#6149](https://github.com/bytecodealliance/wasmtime/pull/6149)
1505
1506* An initial implementation of the wasi-http proposal was added to Wasmtime in
1507  the shape of a new `wasmtime-wasi-http` crate and a
1508  `--wasi-modules=experimental-wasi-http` CLI flag.  Note that this is not
1509  on-by-default and still in an experimental status at this time.
1510  [#5929](https://github.com/bytecodealliance/wasmtime/pull/5929)
1511
1512* Wasmtime's `bindgen!` macro for components now has `interfaces` and
1513  `with` options to configure use of interfaces defined externally in separate
1514  crates.
1515  [#6160](https://github.com/bytecodealliance/wasmtime/pull/6160)
1516  [#6210](https://github.com/bytecodealliance/wasmtime/pull/6210)
1517
1518* Wasmtime's `bindgen!` macro emits trace events for arguments and results
1519  when enabled.
1520  [#6209](https://github.com/bytecodealliance/wasmtime/pull/6209)
1521
1522* A new `Engine::precompile_compatibility_hash` method has been added to assist
1523  with hashing artifacts to be compatible with versions of Wasmtime.
1524  [#5826](https://github.com/bytecodealliance/wasmtime/pull/5826)
1525
1526* Wasmtime's C API now has functions for enabling the WebAssembly relaxed-simd
1527  proposal.
1528  [#6292](https://github.com/bytecodealliance/wasmtime/pull/6292)
1529
1530* A new `--emit-clif` flag has been added to `wasmtime compile` to see the CLIF
1531  corresponding to a WebAssembly module to be used for debugging.
1532  [#6307](https://github.com/bytecodealliance/wasmtime/pull/6307)
1533
1534* Support for an in-process sampling-based profiler has been added to Wasmtime.
1535  This is intended to be used in conjunction with epochs to enable relatively
1536  simple implementations of profiling a guest module.
1537  [#6282](https://github.com/bytecodealliance/wasmtime/pull/6282)
1538
1539### Changed
1540
1541* Overhauled the way that Wasmtime calls into Wasm and Wasm calls back out to
1542  the host. Instead of chaining together trampolines to convert between calling
1543  conventions, we now represent `funcref`s with multiple function pointers, one
1544  per calling convention. This paves the way for supporting Wasm tail calls and
1545  also results in ~10% speed ups to a variety of function call benchmarks,
1546  however there are some slight compiled Wasm module code size regressions
1547  (which can be alleviated by disabling optional `.eh_frame`
1548  generation). Additionally, in the C API the `wasmtime_func_call_unchecked`
1549  function gained one more parameter, which is the capacity of the
1550  args-and-results
1551  buffer.
1552  [#6262](https://github.com/bytecodealliance/wasmtime/pull/6262)
1553
1554* The `wasmtime compile` command will now default to producing executables for
1555  the native host and its CPU features instead of the baseline feature set of
1556  the host's architecture.
1557  [#6152](https://github.com/bytecodealliance/wasmtime/pull/6152)
1558
1559* The `ResourceLimiter` trait and its `async` equivalent now support returning
1560  errors from growth to force a trap in the wasm module rather than reporting
1561  -1 to the wasm module. Note that this is primarily intended for debugging.
1562  [#6149](https://github.com/bytecodealliance/wasmtime/pull/6149)
1563
1564* The non-egraph-based optimization pipeline has been removed from Cranelift,
1565  and the corresponding `Config::use_egraphs` option is also removed.
1566  [#6167](https://github.com/bytecodealliance/wasmtime/pull/6167)
1567
1568* Generated types for WIT files now always generates owned types by default.
1569  [#6189](https://github.com/bytecodealliance/wasmtime/pull/6189)
1570
1571* Wasmtime's baseline x86\_64 CPU features required for SIMD support has been
1572  lowered from SSE 4.2 to SSE 4.1.
1573  [#6206](https://github.com/bytecodealliance/wasmtime/pull/6206)
1574
1575* The `fd_allocate` implementation in Wasmtime will now always fail with
1576  `ENOTSUP`.
1577  [#6217](https://github.com/bytecodealliance/wasmtime/pull/6217)
1578
1579* The "rights" system in WASI has been removed and rights are no longer
1580  inspected in the implementation of any WASI functions.
1581  [#6265](https://github.com/bytecodealliance/wasmtime/pull/6265)
1582
1583### Fixed
1584
1585* WASI can now open directories without `O_DIRECTORY`.
1586  [#6163](https://github.com/bytecodealliance/wasmtime/pull/6163)
1587
1588* The `poll_oneoff` function has been fixed when handling non-regular files.
1589  [#6258](https://github.com/bytecodealliance/wasmtime/pull/6258)
1590
1591* The behavior of `path_readlink` on too-small buffers has been fixed to
1592  truncate.
1593  [#6225](https://github.com/bytecodealliance/wasmtime/pull/6225)
1594
1595### Cranelift changes
1596
1597> Note: this section documents changes to Cranelift, a code generator backend
1598> that Wasmtime uses. These changes are not always applicable to Wasmtime as a
1599> WebAssembly runtime but may be interesting to other projects which embed or
1600> use Cranelift.
1601
1602* New `{u,s}{add,sub,mul}_overflow` instructions have been added.
1603  [#5784](https://github.com/bytecodealliance/wasmtime/pull/5784)
1604
1605* The `iadd_cout` and `isub_bout` instructions have been removed.
1606  [#6198](https://github.com/bytecodealliance/wasmtime/pull/6198)
1607
1608* ISLE now supports binary and octal integer literals.
1609  [#6234](https://github.com/bytecodealliance/wasmtime/pull/6234)
1610
1611* An implementation of SIMD for RISC-V has started.
1612  [#6240](https://github.com/bytecodealliance/wasmtime/pull/6240)
1613  [#6266](https://github.com/bytecodealliance/wasmtime/pull/6266)
1614  [#6268](https://github.com/bytecodealliance/wasmtime/pull/6268)
1615
1616--------------------------------------------------------------------------------
1617
1618## 8.0.1
1619
1620Released 2023-04-27.
1621
1622### Changed
1623
1624* Breaking: Files opened using Wasmtime's implementation of WASI on Windows now
1625  cannot be deleted until the file handle is closed. This was already true for
1626  open directories. The change was necessary for the bug fix in
1627  [#6163](https://github.com/bytecodealliance/wasmtime/pull/6163).
1628
1629### Fixed
1630
1631* Fixed wasi-common's implementation of the `O_DIRECTORY` flag to match POSIX.
1632  [#6163](https://github.com/bytecodealliance/wasmtime/pull/6163)
1633
1634* Undefined Behavior in Rust runtime functions
1635  [GHSA-ch89-5g45-qwc7](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-ch89-5g45-qwc7)
1636
1637--------------------------------------------------------------------------------
1638
1639## 8.0.0
1640
1641Released 2023-04-20
1642
1643### Added
1644
1645* Allow the MPL-2.0 and OpenSSL licenses in dependencies of wasmtime.
1646  [#6136](https://github.com/bytecodealliance/wasmtime/pull/6136)
1647
1648* Add a bounds-checking optimization for dynamic memories and guard pages.
1649  [#6031](https://github.com/bytecodealliance/wasmtime/pull/6031)
1650
1651* Add support for generating perf maps for simple perf profiling. Additionally,
1652  the `--jitdump` and `--vtune` flags have been replaced with a single
1653  `--profile` flags that accepts `perfmap`, `jitdump`, and `vtune` arguments.
1654  [#6030](https://github.com/bytecodealliance/wasmtime/pull/6030)
1655
1656* Validate faulting addresses are valid to fault on. As a mitigation to CVEs
1657  like `GHSA-ff4p-7xrq-q5r8`, check that the address involved in a fault is one
1658  that could be contained in a `Store`, or print a scary message and abort
1659  immediately.
1660  [#6028](https://github.com/bytecodealliance/wasmtime/pull/6028)
1661
1662* Add the `--default-values-unknown-imports` option to define unknown function
1663  imports as functions that return the default value for their result type.
1664  [#6010](https://github.com/bytecodealliance/wasmtime/pull/6010)
1665
1666* Add `Clone` for `component::InstancePre`.
1667  [#5996](https://github.com/bytecodealliance/wasmtime/issues/5996)
1668
1669* Add `--dynamic-memory-reserved-for-growth` cli flag.
1670  [#5980](https://github.com/bytecodealliance/wasmtime/issues/5980)
1671
1672* Introduce the `wasmtime-explorer` crate for investigating the compilation of
1673  wasm modules. This functionality is also exposed via the `wasmtime explore`
1674  command.
1675  [#5975](https://github.com/bytecodealliance/wasmtime/pull/5975)
1676
1677* Added support for the Relaxed SIMD proposal.
1678  [#5892](https://github.com/bytecodealliance/wasmtime/pull/5892)
1679
1680* Cranelift gained many new machine-independent optimizations.
1681  [#5909](https://github.com/bytecodealliance/wasmtime/pull/5909)
1682  [#6032](https://github.com/bytecodealliance/wasmtime/pull/6032)
1683  [#6033](https://github.com/bytecodealliance/wasmtime/pull/6033)
1684  [#6034](https://github.com/bytecodealliance/wasmtime/pull/6034)
1685  [#6037](https://github.com/bytecodealliance/wasmtime/pull/6037)
1686  [#6052](https://github.com/bytecodealliance/wasmtime/pull/6052)
1687  [#6053](https://github.com/bytecodealliance/wasmtime/pull/6053)
1688  [#6072](https://github.com/bytecodealliance/wasmtime/pull/6072)
1689  [#6095](https://github.com/bytecodealliance/wasmtime/pull/6095)
1690  [#6130](https://github.com/bytecodealliance/wasmtime/pull/6130)
1691
1692### Changed
1693
1694* Derive `Copy` on `wasmtime::ValType`.
1695  [#6138](https://github.com/bytecodealliance/wasmtime/pull/6138)
1696
1697* Make `StoreContextMut` accessible in the epoch deadline callback.
1698  [#6075](https://github.com/bytecodealliance/wasmtime/pull/6075)
1699
1700* Take SIGFPE signals for divide traps on `x86_64`.
1701  [#6026](https://github.com/bytecodealliance/wasmtime/pull/6026)
1702
1703* Use more specialized AVX instructions in the `x86_64` backend.
1704  [#5924](https://github.com/bytecodealliance/wasmtime/pull/5924)
1705  [#5930](https://github.com/bytecodealliance/wasmtime/pull/5930)
1706  [#5931](https://github.com/bytecodealliance/wasmtime/pull/5931)
1707  [#5982](https://github.com/bytecodealliance/wasmtime/pull/5982)
1708  [#5986](https://github.com/bytecodealliance/wasmtime/pull/5986)
1709  [#5999](https://github.com/bytecodealliance/wasmtime/pull/5999)
1710  [#6023](https://github.com/bytecodealliance/wasmtime/pull/6023)
1711  [#6025](https://github.com/bytecodealliance/wasmtime/pull/6025)
1712  [#6060](https://github.com/bytecodealliance/wasmtime/pull/6060)
1713  [#6086](https://github.com/bytecodealliance/wasmtime/pull/6086)
1714  [#6092](https://github.com/bytecodealliance/wasmtime/pull/6092)
1715
1716* Generate more cache-friendly code for traps.
1717  [#6011](https://github.com/bytecodealliance/wasmtime/pull/6011)
1718
1719### Fixed
1720
1721* Fixed suboptimal code generation in the `aarch64` backend.
1722  [#5976](https://github.com/bytecodealliance/wasmtime/pull/5976)
1723  [#5977](https://github.com/bytecodealliance/wasmtime/pull/5977)
1724  [#5987](https://github.com/bytecodealliance/wasmtime/pull/5987)
1725  [#5997](https://github.com/bytecodealliance/wasmtime/pull/5997)
1726  [#6078](https://github.com/bytecodealliance/wasmtime/pull/6078)
1727
1728* Fixed suboptimal code generation in the `riscv64` backend.
1729  [#5854](https://github.com/bytecodealliance/wasmtime/pull/5854)
1730  [#5857](https://github.com/bytecodealliance/wasmtime/pull/5857)
1731  [#5919](https://github.com/bytecodealliance/wasmtime/pull/5919)
1732  [#5951](https://github.com/bytecodealliance/wasmtime/pull/5951)
1733  [#5964](https://github.com/bytecodealliance/wasmtime/pull/5964)
1734  [#6087](https://github.com/bytecodealliance/wasmtime/pull/6087)
1735
1736
1737--------------------------------------------------------------------------------
1738
1739## 7.0.1
1740
1741Released 2023-04-27.
1742
1743### Fixed
1744
1745* Undefined Behavior in Rust runtime functions
1746  [GHSA-ch89-5g45-qwc7](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-ch89-5g45-qwc7)
1747
1748--------------------------------------------------------------------------------
1749
1750## 7.0.0
1751
1752Released 2023-03-20
1753
1754### Added
1755
1756* An initial implementation of the wasi-threads proposal has been implemented
1757  and landed in the Wasmtime CLI. This is available behind a
1758  `--wasi-modules experimental-wasi-threads` flag.
1759  [#5484](https://github.com/bytecodealliance/wasmtime/pull/5484)
1760
1761* Support for WASI sockets has been added to the C API.
1762  [#5624](https://github.com/bytecodealliance/wasmtime/pull/5624)
1763
1764* Support for limiting `Store`-based resource usage, such as memory, tables,
1765  etc, has been added to the C API.
1766  [#5761](https://github.com/bytecodealliance/wasmtime/pull/5761)
1767
1768* A top level alias of `anyhow::Result` as `wasmtime::Result` has been added to
1769  avoid the need to explicitly depend on `anyhow`.
1770  [#5853](https://github.com/bytecodealliance/wasmtime/pull/5853)
1771
1772* Initial support for the WebAssembly core dump format has been added to the CLI
1773  with a `--coredump-on-trap` flag.
1774  [#5868](https://github.com/bytecodealliance/wasmtime/pull/5868)
1775
1776### Changed
1777
1778* The `S` type parameter on component-related methods has been removed.
1779  [#5722](https://github.com/bytecodealliance/wasmtime/pull/5722)
1780
1781* Selection of a `world` to bindgen has been updated to select any `default
1782  world` in a WIT package if there is only one.
1783  [#5779](https://github.com/bytecodealliance/wasmtime/pull/5779)
1784
1785* WASI preopened file descriptors can now be closed.
1786  [#5828](https://github.com/bytecodealliance/wasmtime/pull/5828)
1787
1788* The host traits generated by the `bindgen!` macro are now always named `Host`,
1789  but are still scoped to each individual module.
1790  [#5890](https://github.com/bytecodealliance/wasmtime/pull/5890)
1791
1792### Fixed
1793
1794* Components which have `type` imports are now supported better and error/panic
1795  in fewer cases.
1796  [#5777](https://github.com/bytecodealliance/wasmtime/pull/5777)
1797
1798* Types referred to by `wasmtime::component::Val` are now reexported under
1799  `wasmtime::component`.
1800  [#5790](https://github.com/bytecodealliance/wasmtime/pull/5790)
1801
1802* A panic due to a race between `memory.atomic.{wait32,wait64,notify}`
1803  instructions has been fixed.
1804  [#5871](https://github.com/bytecodealliance/wasmtime/pull/5871)
1805
1806* Guest-controlled out-of-bounds read/write on x86\_64
1807  [GHSA-ff4p-7xrq-q5r8](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-ff4p-7xrq-q5r8)
1808
1809*  Miscompilation of `i8x16.select` with the same inputs on x86\_64
1810  [GHSA-xm67-587q-r2vw](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-xm67-587q-r2vw)
1811
1812--------------------------------------------------------------------------------
1813
1814## 6.0.2
1815
1816Released 2023-04-27.
1817
1818### Fixed
1819
1820* Undefined Behavior in Rust runtime functions
1821  [GHSA-ch89-5g45-qwc7](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-ch89-5g45-qwc7)
1822
1823--------------------------------------------------------------------------------
1824
1825## 6.0.1
1826
1827Released 2023-03-08.
1828
1829### Fixed
1830
1831* Guest-controlled out-of-bounds read/write on x86\_64
1832  [GHSA-ff4p-7xrq-q5r8](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-ff4p-7xrq-q5r8)
1833
1834*  Miscompilation of `i8x16.select` with the same inputs on x86\_64
1835  [GHSA-xm67-587q-r2vw](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-xm67-587q-r2vw)
1836
1837--------------------------------------------------------------------------------
1838
1839## 6.0.0
1840
1841Released 2023-02-20
1842
1843### Added
1844
1845* Wasmtime's built-in cache can now be disabled after being enabled previously.
1846  [#5542](https://github.com/bytecodealliance/wasmtime/pull/5542)
1847
1848* Older x86\_64 CPUs, without SSE4.1 for example, are now supported when the
1849  wasm SIMD proposal is disabled.
1850  [#5567](https://github.com/bytecodealliance/wasmtime/pull/5567)
1851
1852* The Wasmtime C API now has `WASMTIME_VERSION_*` macros defined in its header
1853  files.
1854  [#5651](https://github.com/bytecodealliance/wasmtime/pull/5651)
1855
1856* The `wasmtime` CLI executable as part of Wasmtime's precompiled release
1857  artifacts now has the `all-arch` feature enabled.
1858  [#5657](https://github.com/bytecodealliance/wasmtime/pull/5657)
1859
1860### Changed
1861
1862* Equality of `wasmtime::component::Val::Float{32,64}` now considers NaNs as
1863  equal for assistance when fuzzing.
1864  [#5535](https://github.com/bytecodealliance/wasmtime/pull/5535)
1865
1866* WIT syntax supported by `wasmtime::component::bindgen!` has been updated in
1867  addition to the generated code being updated.
1868  [#5565](https://github.com/bytecodealliance/wasmtime/pull/5565)
1869  [#5692](https://github.com/bytecodealliance/wasmtime/pull/5692)
1870  [#5694](https://github.com/bytecodealliance/wasmtime/pull/5694)
1871
1872* Cranelift's egraph-based optimization framework is now enabled by default.
1873  [#5587](https://github.com/bytecodealliance/wasmtime/pull/5587)
1874
1875* The old `PoolingAllocationStrategy` type has been removed in favor of a more
1876  flexible configuration via a new option
1877  `PoolingAllocationConfig::max_unused_warm_slots` which is more flexible and
1878  subsumes the previous use cases for each strategy.
1879  [#5661](https://github.com/bytecodealliance/wasmtime/pull/5661)
1880
1881* Creation of `InstancePre` through `Linker::instantiate_pre` no longer requires
1882  a `Store` to be provided. Instead a `Store`-related argument is now required
1883  on `Linker::define`-style APIs instead.
1884  [#5683](https://github.com/bytecodealliance/wasmtime/pull/5683)
1885
1886### Fixed
1887
1888* Compilation for FreeBSD on x86\_64 and AArch64 has been fixed.
1889  [#5606](https://github.com/bytecodealliance/wasmtime/pull/5606)
1890
1891--------------------------------------------------------------------------------
1892
1893## 5.0.1
1894
1895Released 2023-03-08.
1896
1897### Fixed
1898
1899* Guest-controlled out-of-bounds read/write on x86\_64
1900  [GHSA-ff4p-7xrq-q5r8](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-ff4p-7xrq-q5r8)
1901
1902*  Miscompilation of `i8x16.select` with the same inputs on x86\_64
1903  [GHSA-xm67-587q-r2vw](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-xm67-587q-r2vw)
1904
1905--------------------------------------------------------------------------------
1906
1907## 5.0.0
1908
1909Released 2023-01-20
1910
1911### Added
1912
1913* A `wasmtime::component::bingen!` macro has been added for generating bindings
1914  from `*.wit` files. Note that WIT is still heavily in development so this is
1915  more of a preview of what will be as opposed to a finished feature.
1916  [#5317](https://github.com/bytecodealliance/wasmtime/pull/5317)
1917  [#5397](https://github.com/bytecodealliance/wasmtime/pull/5397)
1918
1919* The `wasmtime settings` CLI command now has a `--json` option for
1920  machine-readable output.
1921  [#5411](https://github.com/bytecodealliance/wasmtime/pull/5411)
1922
1923* Wiggle-generated bindings can now generate the trait for either `&mut self` or
1924  `&self`.
1925  [#5428](https://github.com/bytecodealliance/wasmtime/pull/5428)
1926
1927* The `wiggle` crate has more convenience APIs for working with guest data
1928  that resides in shared memory.
1929  [#5471](https://github.com/bytecodealliance/wasmtime/pull/5471)
1930  [#5475](https://github.com/bytecodealliance/wasmtime/pull/5475)
1931
1932### Changed
1933
1934* Cranelift's egraph support has been rewritten and updated. This functionality
1935  is still gated behind a flag and may become the default in the next release.
1936  [#5382](https://github.com/bytecodealliance/wasmtime/pull/5382)
1937
1938* The implementation of codegen for WebAssembly linear memory has changed
1939  significantly internally in Cranelift, moving more responsibility to the
1940  Wasmtime embedding rather than Cranelift itself. This should have no
1941  user-visible change, however.
1942  [#5386](https://github.com/bytecodealliance/wasmtime/pull/5386)
1943
1944* The `Val::Float32` and `Val::Float64` variants for components now store `f32`
1945  and `f64` instead of the bit representation.
1946  [#5510](https://github.com/bytecodealliance/wasmtime/pull/5510)
1947
1948### Fixed
1949
1950* Handling of DWARF debugging information in components with multiple modules
1951  has been fixed to ensure the right info is used for each module.
1952  [#5358](https://github.com/bytecodealliance/wasmtime/pull/5358)
1953
1954--------------------------------------------------------------------------------
1955
1956## 4.0.1
1957
1958Released 2023-03-08.
1959
1960### Fixed
1961
1962* Guest-controlled out-of-bounds read/write on x86\_64
1963  [GHSA-ff4p-7xrq-q5r8](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-ff4p-7xrq-q5r8)
1964
1965*  Miscompilation of `i8x16.select` with the same inputs on x86\_64
1966  [GHSA-xm67-587q-r2vw](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-xm67-587q-r2vw)
1967
1968--------------------------------------------------------------------------------
1969
1970## 4.0.0
1971
1972Released 2022-12-20
1973
1974### Added
1975
1976* Dynamic memories are now supported with the pooling instance allocator which
1977  can possibly reduce the number of page faults throughout execution at the cost
1978  of slower to run code. Page faults are primarily reduced by avoiding
1979  releasing memory back to the system, relying on bounds checks to keep the
1980  memory inaccessible.
1981  [#5208](https://github.com/bytecodealliance/wasmtime/pull/5208)
1982
1983* The `wiggle` generator now supports function-level control over `tracing`
1984  calls.
1985  [#5194](https://github.com/bytecodealliance/wasmtime/pull/5194)
1986
1987* Support has been added to `wiggle` to be compatible with shared memories.
1988  [#5225](https://github.com/bytecodealliance/wasmtime/pull/5225)
1989  [#5229](https://github.com/bytecodealliance/wasmtime/pull/5229)
1990  [#5264](https://github.com/bytecodealliance/wasmtime/pull/5264)
1991  [#5268](https://github.com/bytecodealliance/wasmtime/pull/5268)
1992  [#5054](https://github.com/bytecodealliance/wasmtime/pull/5054)
1993
1994* The `wiggle` generator now supports a "trappable error" configuration to
1995  improve error conversions to guest errors and ensure that no host errors are
1996  forgotten or accidentally become traps. The `wasi-common` crate has been
1997  updated to use this.
1998  [#5276](https://github.com/bytecodealliance/wasmtime/pull/5276)
1999  [#5279](https://github.com/bytecodealliance/wasmtime/pull/5279)
2000
2001* The `memory.atomic.{notify,wait32,wait64}` instructions are now all
2002  implemented in Wasmtime.
2003  [#5255](https://github.com/bytecodealliance/wasmtime/pull/5255)
2004  [#5311](https://github.com/bytecodealliance/wasmtime/pull/5311)
2005
2006* A `wasm_config_parallel_compilation_set` configuration function has been added
2007  to the C API.
2008  [#5298](https://github.com/bytecodealliance/wasmtime/pull/5298)
2009
2010* The `wasmtime` CLI can have its input module piped into it from stdin now.
2011  [#5342](https://github.com/bytecodealliance/wasmtime/pull/5342)
2012
2013* `WasmBacktrace::{capture,force_capture}` methods have been added to
2014  programmatically capture a backtrace outside of a trapping context.
2015  [#5341](https://github.com/bytecodealliance/wasmtime/pull/5341)
2016
2017### Changed
2018
2019* The `S` type parameter on `Func::typed` and `Instance::get_typed_func` has
2020  been removed and no longer needs to be specified.
2021  [#5275](https://github.com/bytecodealliance/wasmtime/pull/5275)
2022
2023* The `SharedMemory::data` method now returns `&[UnsafeCell<u8>]` instead of the
2024  prior raw slice return.
2025  [#5240](https://github.com/bytecodealliance/wasmtime/pull/5240)
2026
2027* Creation of a `WasiCtx` will no longer unconditionally acquire randomness from
2028  the OS, instead using the `rand::thread_rng()` function in Rust which is only
2029  periodically reseeded with randomness from the OS.
2030  [#5244](https://github.com/bytecodealliance/wasmtime/pull/5244)
2031
2032* Codegen of dynamically-bounds-checked wasm memory accesses has been improved.
2033  [#5190](https://github.com/bytecodealliance/wasmtime/pull/5190)
2034
2035* Wasmtime will now emit inline stack probes in generated functions for x86\_64,
2036  aarch64, and riscv64 architectures. This guarantees a process abort if an
2037  engine was misconfigured to give wasm too much stack instead of optionally
2038  allowing wasm to skip the guard page.
2039  [#5350](https://github.com/bytecodealliance/wasmtime/pull/5350)
2040  [#5353](https://github.com/bytecodealliance/wasmtime/pull/5353)
2041
2042### Fixed
2043
2044* Dropping a `Module` will now release kernel resources in-use by the pooling
2045  allocator when enabled instead of waiting for a new instance to be
2046  re-instantiated into prior slots.
2047  [#5321](https://github.com/bytecodealliance/wasmtime/pull/5321)
2048
2049--------------------------------------------------------------------------------
2050
2051## 3.0.1
2052
2053Released 2022-12-01.
2054
2055### Fixed
2056
2057* The instruction cache is now flushed for AArch64 Android.
2058  [#5331](https://github.com/bytecodealliance/wasmtime/pull/5331)
2059
2060* Building for FreeBSD and Android has been fixed.
2061  [#5323](https://github.com/bytecodealliance/wasmtime/pull/5323)
2062
2063--------------------------------------------------------------------------------
2064
2065## 3.0.0
2066
2067Released 2022-11-21
2068
2069### Added
2070
2071* New `WasiCtx::{push_file, push_dir}` methods exist for embedders to add their
2072  own objects.
2073  [#5027](https://github.com/bytecodealliance/wasmtime/pull/5027)
2074
2075* Wasmtime's `component-model` support now supports `async` host functions and
2076  embedding in the same manner as core wasm.
2077  [#5055](https://github.com/bytecodealliance/wasmtime/pull/5055)
2078
2079* The `wasmtime` CLI executable now supports a `--max-wasm-stack` flag.
2080  [#5156](https://github.com/bytecodealliance/wasmtime/pull/5156)
2081
2082* AOT compilation support has been implemented for components (aka the
2083  `component-model` feature of the Wasmtime crate).
2084  [#5160](https://github.com/bytecodealliance/wasmtime/pull/5160)
2085
2086* A new `wasi_config_set_stdin_bytes` function is available in the C API to set
2087  the stdin of a WASI-using module from an in-memory slice.
2088  [#5179](https://github.com/bytecodealliance/wasmtime/pull/5179)
2089
2090* When using the pooling allocator there are now options to reset memory with
2091  `memset` instead of `madvisev` on Linux to keep pages resident in memory to
2092  reduce page faults when reusing linear memory slots.
2093  [#5207](https://github.com/bytecodealliance/wasmtime/pull/5207)
2094
2095### Changed
2096
2097* Consuming 0 fuel with 0 fuel left is now considered to succeed. Additionally a
2098  store may not consume its last unit of fuel.
2099  [#5013](https://github.com/bytecodealliance/wasmtime/pull/5013)
2100
2101* A number of variants in the `wasi_common::ErrorKind` enum have been removed.
2102  [#5015](https://github.com/bytecodealliance/wasmtime/pull/5015)
2103
2104* Methods on `WasiDir` now error-by-default instead of requiring a definition by
2105  default.
2106  [#5019](https://github.com/bytecodealliance/wasmtime/pull/5019)
2107
2108* Bindings generated by the `wiggle` crate now always depend on the `wasmtime`
2109  crate meaning crates like `wasi-common` no longer compile for platforms such
2110  as `wasm32-unknown-emscripten`.
2111  [#5137](https://github.com/bytecodealliance/wasmtime/pull/5137)
2112
2113* Error handling in the `wasmtime` crate's API has been changed to primarily
2114  work with `anyhow::Error` for custom errors. The `Trap` type has been replaced
2115  with a simple `enum Trap { ... }` and backtrace information is now stored as a
2116  `WasmBacktrace` type inserted as context into an `anyhow::Error`.
2117  Host-functions are expected to return `anyhow::Result<T>` instead of the prior
2118  `Trap` error return from before. Additionally the old `Trap::i32_exit`
2119  constructor is now a concrete `wasi_commont::I32Exit` type which can be tested
2120  for with a `downcast_ref` on the error returned from Wasmtime.
2121  [#5149](https://github.com/bytecodealliance/wasmtime/pull/5149)
2122
2123* Configuration of the pooling allocator is now done through a builder-style
2124  `PoolingAllocationConfig` API instead of the prior enum-variant API.
2125  [#5205](https://github.com/bytecodealliance/wasmtime/pull/5205)
2126
2127### Fixed
2128
2129* The instruction cache is now properly flushed for AArch64 on Windows.
2130  [#4997](https://github.com/bytecodealliance/wasmtime/pull/4997)
2131
2132* Backtrace capturing with many sequences of wasm->host calls on the stack no
2133  longer exhibit quadratic capturing behavior.
2134  [#5049](https://github.com/bytecodealliance/wasmtime/pull/5049)
2135
2136--------------------------------------------------------------------------------
2137
2138## 2.0.2
2139
2140Released 2022-11-10.
2141
2142### Fixed
2143
2144* [CVE-2022-39392] - modules may perform out-of-bounds reads/writes when the
2145  pooling allocator was configured with `memory_pages: 0`.
2146
2147* [CVE-2022-39393] - data can be leaked between instances when using the pooling
2148  allocator.
2149
2150* [CVE-2022-39394] - An incorrect Rust signature for the C API
2151  `wasmtime_trap_code` function could lead to an out-of-bounds write of three
2152  zero bytes.
2153
2154[CVE-2022-39392]: https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-44mr-8vmm-wjhg
2155[CVE-2022-39393]: https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-wh6w-3828-g9qf
2156[CVE-2022-39394]: https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-h84q-m8rr-3v9q
2157
2158--------------------------------------------------------------------------------
2159
2160## 2.0.1
2161
2162Released 2022-10-27.
2163
2164### Fixed
2165
2166* A compilation error when building only the `wasmtime` crate on Windows with
2167  only the default features enabled has been fixed.
2168  [#5134](https://github.com/bytecodealliance/wasmtime/pull/5134)
2169
2170### Changed
2171
2172* The `rayon` dependency added to `cranelift-isle` in 2.0.0 has been removed to
2173  improve the compile time of the `cranelift-codegen` crate.
2174  [#5101](https://github.com/bytecodealliance/wasmtime/pull/5101)
2175
2176--------------------------------------------------------------------------------
2177
2178## 2.0.0
2179
2180Released 2022-10-20
2181
2182### Added
2183
2184* Cranelift has gained support for forward-edge CFI on the AArch64 backend.
2185  [#3693](https://github.com/bytecodealliance/wasmtime/pull/3693)
2186
2187* A `--disable-parallel-compilation` CLI flag is now implemented for `wasmtime`.
2188  [#4911](https://github.com/bytecodealliance/wasmtime/pull/4911)
2189
2190* [Tier 3] support has been added for for RISC-V 64 with a new backend in
2191  Cranelift for this architecture.
2192  [#4271](https://github.com/bytecodealliance/wasmtime/pull/4271)
2193
2194* Basic [tier 3] support for Windows ARM64 has been added but features such as
2195  traps don't work at this time.
2196  [#4990](https://github.com/bytecodealliance/wasmtime/pull/4990)
2197
2198### Changed
2199
2200* The implementation of the `random_get` function in `wasi-common` is now faster
2201  by using a userspace CSPRNG rather than the OS for randomness.
2202  [#4917](https://github.com/bytecodealliance/wasmtime/pull/4917)
2203
2204* The AArch64 backend has completed its transition to ISLE.
2205  [#4851](https://github.com/bytecodealliance/wasmtime/pull/4851)
2206  [#4866](https://github.com/bytecodealliance/wasmtime/pull/4866)
2207  [#4898](https://github.com/bytecodealliance/wasmtime/pull/4898)
2208  [#4884](https://github.com/bytecodealliance/wasmtime/pull/4884)
2209  [#4820](https://github.com/bytecodealliance/wasmtime/pull/4820)
2210  [#4913](https://github.com/bytecodealliance/wasmtime/pull/4913)
2211  [#4942](https://github.com/bytecodealliance/wasmtime/pull/4942)
2212  [#4943](https://github.com/bytecodealliance/wasmtime/pull/4943)
2213
2214* The size of the `sigaltstack` allocated per-thread for signal handling has
2215  been increased from 16k to 64k.
2216  [#4964](https://github.com/bytecodealliance/wasmtime/pull/4964)
2217
2218
2219[Tier 3]: https://docs.wasmtime.dev/stability-tiers.html
2220
2221--------------------------------------------------------------------------------
2222
2223## 1.0.2
2224
2225Released 2022-11-10.
2226
2227### Fixed
2228
2229* [CVE-2022-39392] - modules may perform out-of-bounds reads/writes when the
2230  pooling allocator was configured with `memory_pages: 0`.
2231
2232* [CVE-2022-39393] - data can be leaked between instances when using the pooling
2233  allocator.
2234
2235* [CVE-2022-39394] - An incorrect Rust signature for the C API
2236  `wasmtime_trap_code` function could lead to an out-of-bounds write of three
2237  zero bytes.
2238
2239--------------------------------------------------------------------------------
2240
2241## 1.0.1
2242
2243Released 2022-09-26
2244
2245This is a patch release that incorporates a fix for a miscompilation of an
2246atomic-CAS operator on aarch64. The instruction is not usable from Wasmtime
2247with default settings, but may be used if the Wasm atomics extension is
2248enabled. The bug may also be reachable via other uses of Cranelift. Thanks to
2249@bjorn3 for reporting and debugging this issue!
2250
2251### Fixed
2252
2253* Fixed a miscompilation of `atomic_cas` on aarch64. The output register was
2254  swapped with a temporary register in the register-allocator constraints.
2255  [#4959](https://github.com/bytecodealliance/wasmtime/pull/4959)
2256  [#4960](https://github.com/bytecodealliance/wasmtime/pull/4960)
2257
2258--------------------------------------------------------------------------------
2259
2260## 1.0.0
2261
2262Released 2022-09-20
2263
2264This release marks the official 1.0 release of Wasmtime and represents the
2265culmination of the work amongst over 300 contributors. Wasmtime has been
2266battle-tested in production through multiple embeddings for quite some time now
2267and we're confident in releasing a 1.0 version to signify the stability and
2268quality of the Wasmtime engine.
2269
2270More information about Wasmtime's 1.0 release is on the [Bytecode Alliance's
2271blog][ba-blog] with separate posts on [Wasmtime's performance
2272features][ba-perf], [Wasmtime's security story][ba-security], and [the 1.0
2273release announcement][ba-1.0].
2274
2275As a reminder the 2.0 release of Wasmtime is scheduled for one month from now on
2276October 20th. For more information see the [RFC on Wasmtime's 1.0
2277release][rfc-1.0].
2278
2279[ba-blog]: https://bytecodealliance.org/articles/
2280[ba-perf]: https://bytecodealliance.org/articles/wasmtime-10-performance
2281[ba-security]: https://bytecodealliance.org/articles/security-and-correctness-in-wasmtime
2282[ba-1.0]: https://bytecodealliance.org/articles/wasmtime-1-0-fast-safe-and-now-production-ready.md
2283[rfc-1.0]: https://github.com/bytecodealliance/rfcs/blob/main/accepted/wasmtime-one-dot-oh.md
2284
2285### Added
2286
2287* An incremental compilation cache for Cranelift has been added which can be
2288  enabled with `Config::enable_incremental_compilation`, and this option is
2289  disabled by default for now. The incremental compilation cache has been
2290  measured to improve compile times for cold uncached modules as well due to
2291  some wasm modules having similar-enough functions internally.
2292  [#4551](https://github.com/bytecodealliance/wasmtime/pull/4551)
2293
2294* Source tarballs are now available as part of Wasmtime's release artifacts.
2295  [#4294](https://github.com/bytecodealliance/wasmtime/pull/4294)
2296
2297* WASI APIs that specify the REALTIME clock are now supported.
2298  [#4777](https://github.com/bytecodealliance/wasmtime/pull/4777)
2299
2300* WASI's socket functions are now fully implemented.
2301  [#4776](https://github.com/bytecodealliance/wasmtime/pull/4776)
2302
2303* The native call stack for async-executed wasm functions are no longer
2304  automatically reset to zero after the stack is returned to the pool when using
2305  the pooling allocator. A `Config::async_stack_zeroing` option has been added
2306  to restore the old behavior of zero-on-return-to-pool.
2307  [#4813](https://github.com/bytecodealliance/wasmtime/pull/4813)
2308
2309* Inline stack probing has been implemented for the Cranelift x64 backend.
2310  [#4747](https://github.com/bytecodealliance/wasmtime/pull/4747)
2311
2312### Changed
2313
2314* Generating of native unwind information has moved from a
2315  `Config::wasm_backtrace` option to a new `Config::native_unwind_info` option
2316  and is enabled by default.
2317  [#4643](https://github.com/bytecodealliance/wasmtime/pull/4643)
2318
2319* The `memory-init-cow` feature is now enabled by default in the C API.
2320  [#4690](https://github.com/bytecodealliance/wasmtime/pull/4690)
2321
2322* Back-edge CFI is now enabled by default on AArch64 macOS.
2323  [#4720](https://github.com/bytecodealliance/wasmtime/pull/4720)
2324
2325* WASI calls will no longer return NOTCAPABLE in preparation for the removal of
2326  the rights system from WASI.
2327  [#4666](https://github.com/bytecodealliance/wasmtime/pull/4666)
2328
2329### Internal
2330
2331This section of the release notes shouldn't affect external users since no
2332public-facing APIs are affected, but serves as a place to document larger
2333changes internally within Wasmtime.
2334
2335* Differential fuzzing has been refactored and improved into one fuzzing target
2336  which can execute against any of Wasmtime itself (configured differently),
2337  wasmi, V8, or the spec interpreter. Fuzzing now executes each exported
2338  function with fuzz-generated inputs and the contents of all of memory and each
2339  exported global is compared after each execution. Additionally more
2340  interesting shapes of modules are also possible to generate.
2341  [#4515](https://github.com/bytecodealliance/wasmtime/pull/4515)
2342  [#4735](https://github.com/bytecodealliance/wasmtime/pull/4735)
2343  [#4737](https://github.com/bytecodealliance/wasmtime/pull/4737)
2344  [#4739](https://github.com/bytecodealliance/wasmtime/pull/4739)
2345  [#4774](https://github.com/bytecodealliance/wasmtime/pull/4774)
2346  [#4773](https://github.com/bytecodealliance/wasmtime/pull/4773)
2347  [#4845](https://github.com/bytecodealliance/wasmtime/pull/4845)
2348  [#4672](https://github.com/bytecodealliance/wasmtime/pull/4672)
2349  [#4674](https://github.com/bytecodealliance/wasmtime/pull/4674)
2350
2351* The x64 backend for Cranelift has been fully migrated to ISLE.
2352  [#4619](https://github.com/bytecodealliance/wasmtime/pull/4619)
2353  [#4625](https://github.com/bytecodealliance/wasmtime/pull/4625)
2354  [#4645](https://github.com/bytecodealliance/wasmtime/pull/4645)
2355  [#4650](https://github.com/bytecodealliance/wasmtime/pull/4650)
2356  [#4684](https://github.com/bytecodealliance/wasmtime/pull/4684)
2357  [#4704](https://github.com/bytecodealliance/wasmtime/pull/4704)
2358  [#4718](https://github.com/bytecodealliance/wasmtime/pull/4718)
2359  [#4726](https://github.com/bytecodealliance/wasmtime/pull/4726)
2360  [#4722](https://github.com/bytecodealliance/wasmtime/pull/4722)
2361  [#4729](https://github.com/bytecodealliance/wasmtime/pull/4729)
2362  [#4730](https://github.com/bytecodealliance/wasmtime/pull/4730)
2363  [#4741](https://github.com/bytecodealliance/wasmtime/pull/4741)
2364  [#4763](https://github.com/bytecodealliance/wasmtime/pull/4763)
2365  [#4772](https://github.com/bytecodealliance/wasmtime/pull/4772)
2366  [#4780](https://github.com/bytecodealliance/wasmtime/pull/4780)
2367  [#4787](https://github.com/bytecodealliance/wasmtime/pull/4787)
2368  [#4793](https://github.com/bytecodealliance/wasmtime/pull/4793)
2369  [#4809](https://github.com/bytecodealliance/wasmtime/pull/4809)
2370
2371* The AArch64 backend for Cranelift has seen significant progress in being
2372  ported to ISLE.
2373  [#4608](https://github.com/bytecodealliance/wasmtime/pull/4608)
2374  [#4639](https://github.com/bytecodealliance/wasmtime/pull/4639)
2375  [#4634](https://github.com/bytecodealliance/wasmtime/pull/4634)
2376  [#4748](https://github.com/bytecodealliance/wasmtime/pull/4748)
2377  [#4750](https://github.com/bytecodealliance/wasmtime/pull/4750)
2378  [#4751](https://github.com/bytecodealliance/wasmtime/pull/4751)
2379  [#4753](https://github.com/bytecodealliance/wasmtime/pull/4753)
2380  [#4788](https://github.com/bytecodealliance/wasmtime/pull/4788)
2381  [#4796](https://github.com/bytecodealliance/wasmtime/pull/4796)
2382  [#4785](https://github.com/bytecodealliance/wasmtime/pull/4785)
2383  [#4819](https://github.com/bytecodealliance/wasmtime/pull/4819)
2384  [#4821](https://github.com/bytecodealliance/wasmtime/pull/4821)
2385  [#4832](https://github.com/bytecodealliance/wasmtime/pull/4832)
2386
2387* The s390x backend has seen improvements and additions to fully support the
2388  Cranelift backend for rustc.
2389  [#4682](https://github.com/bytecodealliance/wasmtime/pull/4682)
2390  [#4702](https://github.com/bytecodealliance/wasmtime/pull/4702)
2391  [#4616](https://github.com/bytecodealliance/wasmtime/pull/4616)
2392  [#4680](https://github.com/bytecodealliance/wasmtime/pull/4680)
2393
2394* Significant improvements have been made to Cranelift-based fuzzing with more
2395  supported features and more instructions being fuzzed.
2396  [#4589](https://github.com/bytecodealliance/wasmtime/pull/4589)
2397  [#4591](https://github.com/bytecodealliance/wasmtime/pull/4591)
2398  [#4665](https://github.com/bytecodealliance/wasmtime/pull/4665)
2399  [#4670](https://github.com/bytecodealliance/wasmtime/pull/4670)
2400  [#4590](https://github.com/bytecodealliance/wasmtime/pull/4590)
2401  [#4375](https://github.com/bytecodealliance/wasmtime/pull/4375)
2402  [#4519](https://github.com/bytecodealliance/wasmtime/pull/4519)
2403  [#4696](https://github.com/bytecodealliance/wasmtime/pull/4696)
2404  [#4700](https://github.com/bytecodealliance/wasmtime/pull/4700)
2405  [#4703](https://github.com/bytecodealliance/wasmtime/pull/4703)
2406  [#4602](https://github.com/bytecodealliance/wasmtime/pull/4602)
2407  [#4713](https://github.com/bytecodealliance/wasmtime/pull/4713)
2408  [#4738](https://github.com/bytecodealliance/wasmtime/pull/4738)
2409  [#4667](https://github.com/bytecodealliance/wasmtime/pull/4667)
2410  [#4782](https://github.com/bytecodealliance/wasmtime/pull/4782)
2411  [#4783](https://github.com/bytecodealliance/wasmtime/pull/4783)
2412  [#4800](https://github.com/bytecodealliance/wasmtime/pull/4800)
2413
2414* Optimization work on cranelift has continued across various dimensions for
2415  some modest compile-time improvements.
2416  [#4621](https://github.com/bytecodealliance/wasmtime/pull/4621)
2417  [#4701](https://github.com/bytecodealliance/wasmtime/pull/4701)
2418  [#4697](https://github.com/bytecodealliance/wasmtime/pull/4697)
2419  [#4711](https://github.com/bytecodealliance/wasmtime/pull/4711)
2420  [#4710](https://github.com/bytecodealliance/wasmtime/pull/4710)
2421  [#4829](https://github.com/bytecodealliance/wasmtime/pull/4829)
2422
2423--------------------------------------------------------------------------------
2424
2425## 0.40.0
2426
2427Released 2022-08-20
2428
2429This was a relatively quiet release in terms of user-facing features where most
2430of the work was around the internals of Wasmtime and Cranelift. Improvements
2431internally have been made along the lines of:
2432
2433* Many more instructions are now implemented with ISLE instead of handwritten
2434  lowerings.
2435* Many improvements to the cranelift-based fuzzing.
2436* Many platform improvements for s390x including full SIMD support, running
2437  `rustc_codegen_cranelift` with features like `i128`, supporting more
2438  ABIs, etc.
2439* Much more of the component model has been implemented and is now fuzzed.
2440
2441Finally this release is currently scheduled to be the last `0.*` release of
2442Wasmtime. The upcoming release of Wasmtime on September 20 is planned to be
2443Wasmtime's 1.0 release. More information about what 1.0 means for Wasmtime is
2444available in the [1.0 RFC]
2445
2446[1.0 RFC]: https://github.com/bytecodealliance/rfcs/blob/main/accepted/wasmtime-one-dot-oh.md
2447
2448### Added
2449
2450* Stack walking has been reimplemented with frame pointers rather than with
2451  native unwind information. This means that backtraces are feasible to capture
2452  in performance-critical environments and in general stack walking is much
2453  faster than before.
2454  [#4431](https://github.com/bytecodealliance/wasmtime/pull/4431)
2455
2456* The WebAssembly `simd` proposal is now fully implemented for the s390x
2457  backend.
2458  [#4427](https://github.com/bytecodealliance/wasmtime/pull/4427)
2459
2460* Support for AArch64 has been added in the experimental native debuginfo
2461  support that Wasmtime has.
2462  [#4468](https://github.com/bytecodealliance/wasmtime/pull/4468)
2463
2464* Support building the C API of Wasmtime with CMake has been added.
2465  [#4369](https://github.com/bytecodealliance/wasmtime/pull/4369)
2466
2467* Clarification was added to Wasmtime's documentation about "tiers of support"
2468  for various features.
2469  [#4479](https://github.com/bytecodealliance/wasmtime/pull/4479)
2470
2471### Fixed
2472
2473* Support for `filestat_get` has been improved for stdio streams in WASI.
2474  [#4531](https://github.com/bytecodealliance/wasmtime/pull/4531)
2475
2476* Enabling the `vtune` feature no longer breaks builds on AArch64.
2477  [#4533](https://github.com/bytecodealliance/wasmtime/pull/4533)
2478
2479--------------------------------------------------------------------------------
2480
2481## 0.39.1
2482
2483Released 2022-07-20.
2484
2485### Fixed
2486
2487* An s390x-specific codegen bug in addition to a mistake introduced in the fix
2488  of CVE-2022-31146 were fixed.
2489  [#4490](https://github.com/bytecodealliance/wasmtime/pull/4490)
2490
2491--------------------------------------------------------------------------------
2492
2493## 0.39.0
2494
2495Released 2022-07-20
2496
2497### Added
2498
2499* Initial support for shared memories and the `threads` WebAssembly proposal
2500  has been added. Note that this feature is still experimental and not ready
2501  for production use yet.
2502  [#4187](https://github.com/bytecodealliance/wasmtime/pull/4187)
2503
2504* A new `Linker::define_unknown_imports_as_traps` method and
2505  `--trap-unknown-imports` CLI flag have been added to conveniently support
2506  running modules with imports that aren't dynamically called at runtime.
2507  [#4312](https://github.com/bytecodealliance/wasmtime/pull/4312)
2508
2509* The VTune profiling strategy can now be selected through the C API.
2510  [#4316](https://github.com/bytecodealliance/wasmtime/pull/4316)
2511
2512### Changed
2513
2514* Some methods on the `Config` structure now return `&mut Self` instead of
2515  `Result<&mut Self>` since the validation is deferred until `Engine::new`:
2516  `profiler`, `cranelift_flag_enable`, `cranelift_flag_set`, `max_wasm_stack`,
2517  `async_stack_size`, and `strategy`.
2518  [#4252](https://github.com/bytecodealliance/wasmtime/pull/4252)
2519  [#4262](https://github.com/bytecodealliance/wasmtime/pull/4262)
2520
2521* Parallel compilation of WebAssembly modules is now enabled in the C API by
2522  default.
2523  [#4270](https://github.com/bytecodealliance/wasmtime/pull/4270)
2524
2525* Implicit Cargo features of the `wasmtime` introduced through `optional`
2526  dependencies may have been removed since namespaced features are now used.
2527  It's recommended to only used the set of named `[features]` for Wasmtime.
2528  [#4293](https://github.com/bytecodealliance/wasmtime/pull/4293)
2529
2530* Register allocation has fixed a few issues related to excessive memory usage
2531  at compile time.
2532  [#4324](https://github.com/bytecodealliance/wasmtime/pull/4324)
2533
2534### Fixed
2535
2536* A refactor of `Config` was made to fix an issue that the order of calls to `Config`
2537  matters now, which may lead to unexpected behavior.
2538  [#4252](https://github.com/bytecodealliance/wasmtime/pull/4252)
2539  [#4262](https://github.com/bytecodealliance/wasmtime/pull/4262)
2540
2541* Wasmtime has been fixed to work on SSE2-only x86\_64 platforms when the
2542  `simd` feature is disabled in `Config`.
2543  [#4231](https://github.com/bytecodealliance/wasmtime/pull/4231)
2544
2545* Generation of platform-specific unwinding information is disabled if
2546  `wasm_backtrace` and `wasm_reference_types` are both disabled.
2547  [#4351](https://github.com/bytecodealliance/wasmtime/pull/4351)
2548
2549--------------------------------------------------------------------------------
2550
2551## 0.38.3
2552
2553Released 2022-07-20.
2554
2555### Fixed.
2556
2557* An s390x-specific codegen bug in addition to a mistake introduced in the fix
2558  of CVE-2022-31146 were fixed.
2559  [#4491](https://github.com/bytecodealliance/wasmtime/pull/4491)
2560
2561--------------------------------------------------------------------------------
2562
2563## 0.38.2
2564
2565Released 2022-07-20.
2566
2567### Fixed.
2568
2569* A miscompilation when handling constant divisors on AArch64 has been fixed.
2570  [CVE-2022-31169](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-7f6x-jwh5-m9r4)
2571
2572* A use-after-free possible with accidentally missing stack maps has been fixed.
2573  [CVE-2022-31146](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-5fhj-g3p3-pq9g)
2574
2575--------------------------------------------------------------------------------
2576
2577## 0.38.1
2578
2579Released 2022-06-27.
2580
2581### Fixed.
2582
2583* A register allocator bug was fixed that could affect direct users of
2584  Cranelift who use struct-return (`sret`) arguments. The bug had to do with
2585  the handling of physical register constraints in the function prologue. No
2586  impact should be possible for users of Cranelift via the Wasm frontend,
2587  including Wasmtime.
2588  [regalloc2#60](https://github.com/bytecodealliance/regalloc2/pull/60)
2589  [#4333](https://github.com/bytecodealliance/wasmtime/pull/4333)
2590
2591* Lowering bugs for the `i8x16.swizzle` and `select`-with-`v128`-inputs
2592  instructions were fixed for the x86\_64 code generator. Note that aarch64 and
2593  s390x are unaffected.
2594  [#4334](https://github.com/bytecodealliance/wasmtime/pull/4334)
2595
2596* A bug in the 8-bit lowering of integer division on x86-64 was fixed in
2597  Cranelift that could cause a register allocator panic due to an undefined
2598  value in a register. (The divide instruction does not take a register `rdx`
2599  as a source when 8 bits but the metadata incorrectly claimed it did.) No
2600  impact on Wasm/Wasmtime users, and impact on direct Cranelift embedders
2601  limited to compilation panics.
2602  [#4332](https://github.com/bytecodealliance/wasmtime/pull/4332)
2603
2604--------------------------------------------------------------------------------
2605
2606## 0.38.0
2607
2608Released 2022-06-21
2609
2610### Added
2611
2612* Enabling or disabling NaN canonicalization in generated code is now exposed
2613  through the C API.
2614  [#4154](https://github.com/bytecodealliance/wasmtime/pull/4154)
2615
2616* A user-defined callback can now be invoked when an epoch interruption happens
2617  via the `Store::epoch_deadline_callback` API.
2618  [#4152](https://github.com/bytecodealliance/wasmtime/pull/4152)
2619
2620* Basic alias analysis with redundant-load elimintation and store-to-load
2621  forwarding optimizations has been added to Cranelift.
2622  [#4163](https://github.com/bytecodealliance/wasmtime/pull/4163)
2623
2624### Changed
2625
2626* Traps originating from epoch-based interruption are now exposed as
2627  `TrapCode::Interrupt`.
2628  [#4105](https://github.com/bytecodealliance/wasmtime/pull/4105)
2629
2630* Binary builds for AArch64 now require glibc 2.17 and for s390x require glibc
2631  2.16. Previously glibc 2.28 was required.
2632  [#4171](https://github.com/bytecodealliance/wasmtime/pull/4171)
2633
2634* The `wasmtime::ValRaw` now has all of its fields listed as private and instead
2635  constructors/accessors are provided for getting at the internal data.
2636  [#4186](https://github.com/bytecodealliance/wasmtime/pull/4186)
2637
2638* The `wasm-backtrace` Cargo feature has been removed in favor of a
2639  `Config::wasm_backtrace` runtime configuration option. Additionally backtraces
2640  are now only captured when an embedder-generated trap actually reaches a
2641  WebAssembly call stack.
2642  [#4183](https://github.com/bytecodealliance/wasmtime/pull/4183)
2643
2644* Usage of `*_unchecked` APIs for `Func` in the `wasmtime` crate and C API now
2645  take a `usize` parameter indicating the number of `ValRaw` values behind
2646  the associated pointer.
2647  [#4192](https://github.com/bytecodealliance/wasmtime/pull/4192)
2648
2649### Fixed
2650
2651* An improvement was made to the spill-slot allocation in code generation to fix
2652  an issue where some stack slots accidentally weren't reused. This issue was
2653  introduced with the landing of regalloc2 in 0.37.0 and may have resulted in
2654  larger-than-intended increases in stack frame sizes.
2655  [#4222](https://github.com/bytecodealliance/wasmtime/pull/4222)
2656
2657--------------------------------------------------------------------------------
2658
2659## 0.37.0
2660
2661Released 2022-05-20
2662
2663### Added
2664
2665* Updated Cranelift to use regalloc2, a new register allocator. This should
2666  result in ~20% faster compile times, and for programs that suffered from
2667  register-allocation pressure before, up to ~20% faster generated code.
2668  [#3989](https://github.com/bytecodealliance/wasmtime/pull/3989)
2669
2670* Pre-built binaries for macOS M1 machines are now available as release
2671  artifacts.
2672  [#3983](https://github.com/bytecodealliance/wasmtime/pull/3983)
2673
2674* Copy-on-write images of memory can now be manually initialized for a `Module`
2675  with an explicit method call, but it is still not required to call this method
2676  and will automatically otherwise happen on the first instantiation.
2677  [#3964](https://github.com/bytecodealliance/wasmtime/pull/3964)
2678
2679### Fixed
2680
2681* Using `InstancePre::instantiate` or `Linker::instantiate` will now panic as
2682  intended when used with an async-configured `Store`.
2683  [#3972](https://github.com/bytecodealliance/wasmtime/pull/3972)
2684
2685### Changed
2686
2687* The unsafe `ValRaw` type in the `wasmtime` crate now always stores its values
2688  in little-endian format instead of the prior native-endian format. Users of
2689  `ValRaw` are recommended to audit their existing code for usage to continue
2690  working on big-endian platforms.
2691  [#4035](https://github.com/bytecodealliance/wasmtime/pull/4035)
2692
2693### Removed
2694
2695* Support for `Config::paged_memory_initialization` and the `uffd` crate feature
2696  have been removed from the `wasmtime` crate. Users should migrate to using
2697  `Config::memory_init_cow` which is more portable and faster at this point.
2698  [#4040](https://github.com/bytecodealliance/wasmtime/pull/4040)
2699
2700--------------------------------------------------------------------------------
2701
2702## 0.36.0
2703
2704Released 2022-04-20
2705
2706### Added
2707
2708* Support for epoch-based interruption has been added to the C API.
2709  [#3925](https://github.com/bytecodealliance/wasmtime/pull/3925)
2710
2711* Support for disabling libunwind-based backtraces of WebAssembly code at
2712  compile time has been added.
2713  [#3932](https://github.com/bytecodealliance/wasmtime/pull/3932)
2714
2715* Async support for call hooks has been added to optionally execute "blocking"
2716  work whenever a wasm module is entered or exited relative to the host.
2717  [#3876](https://github.com/bytecodealliance/wasmtime/pull/3876)
2718
2719### Fixed
2720
2721* Loading a `Module` will now check, at runtime, that the compilation settings
2722  enabled in a `Config` are compatible with the native host. For example this
2723  ensures that if avx2 is enabled that the host actually has avx2 support.
2724  [#3899](https://github.com/bytecodealliance/wasmtime/pull/3899)
2725
2726### Removed
2727
2728* Support for `Config::interruptable` and `InterruptHandle` has been removed
2729  from the `wasmtime` crate. Users should migrate to using epoch-based
2730  interruption instead.
2731  [#3925](https://github.com/bytecodealliance/wasmtime/pull/3925)
2732
2733* The module linking implementation of Wasmtime has been removed to make room
2734  for the upcoming support for the component model.
2735  [#3958](https://github.com/bytecodealliance/wasmtime/pull/3958)
2736
2737--------------------------------------------------------------------------------
2738
2739## 0.35.3
2740
2741Released 2022-04-11.
2742
2743### Fixed
2744
2745* Backported a bugfix for an instruction lowering issue that could cause a
2746  regalloc panic due to an undefined register in some cases. No miscompilation
2747  was ever possible, but panics would result in a compilation failure.
2748  [#4012](https://github.com/bytecodealliance/wasmtime/pull/4012)
2749
2750--------------------------------------------------------------------------------
2751
2752## 0.35.2
2753
2754Released 2022-03-31.
2755
2756### Security Fixes
2757
2758* [CVE-2022-24791](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-gwc9-348x-qwv2):
2759  Fixed a use after free with `externref`s and epoch interruption.
2760
2761## 0.35.1
2762
2763Released 2022-03-09.
2764
2765### Fixed
2766
2767* Fixed a bug in the x86-64 lowering of the `uextend` opcode for narrow (`i8`,
2768  `i16`) integer sources when the value is produced by one of several
2769  arithmetic instructions.
2770  [#3906](https://github.com/bytecodealliance/wasmtime/pull/3906)
2771
2772## 0.35.0
2773
2774Released 2022-03-07.
2775
2776### Added
2777
2778* The `wasmtime_wasi::add_to_linker` function now allows providing
2779  a context object of a custom type instead of `wasmtime_wasi::WasiCtx`,
2780  as long as that type implements the required WASI snapshot traits.
2781  This allows, for example, wrapping `WasiCtx` into a struct and providing
2782  custom implementations for those traits to override the default behaviour.
2783
2784### Changed
2785
2786* WebAssembly tables of `funcref` values are now lazily initialized which can,
2787  in some cases, greatly speed up instantiation of a module.
2788  [#3733](https://github.com/bytecodealliance/wasmtime/pull/3733)
2789
2790* The `memfd` feature in 0.34.0, now renamed to `memory-init-cow`, has been
2791  enabled by default. This means that, where applicable, WebAssembly linear
2792  memories are now initialized with copy-on-write mappings. Support from this
2793  has been expanded from Linux-only to include macOS and other Unix systems when
2794  modules are loaded from precompiled `*.cwasm` files on disk.
2795  [#3777](https://github.com/bytecodealliance/wasmtime/pull/3777)
2796  [#3778](https://github.com/bytecodealliance/wasmtime/pull/3778)
2797  [#3787](https://github.com/bytecodealliance/wasmtime/pull/3787)
2798  [#3819](https://github.com/bytecodealliance/wasmtime/pull/3819)
2799  [#3831](https://github.com/bytecodealliance/wasmtime/pull/3831)
2800
2801* Clarify that SSE 4.2 (and prior) is required for running WebAssembly code with
2802  simd support enabled on x86\_64.
2803  [#3816](https://github.com/bytecodealliance/wasmtime/pull/3816)
2804  [#3817](https://github.com/bytecodealliance/wasmtime/pull/3817)
2805  [#3833](https://github.com/bytecodealliance/wasmtime/pull/3833)
2806  [#3825](https://github.com/bytecodealliance/wasmtime/pull/3825)
2807
2808* Support for profiling with VTune is now enabled at compile time by default,
2809  but it remains disabled at runtime by default.
2810  [#3821](https://github.com/bytecodealliance/wasmtime/pull/3821)
2811
2812* The `ModuleLimits` type has been removed from the configuration of the pooling
2813  allocator in favor of configuring the total size of an instance allocation
2814  rather than each individual field.
2815  [#3837](https://github.com/bytecodealliance/wasmtime/pull/3837)
2816
2817* The native stack size allowed for WebAssembly has been decreased from 1 MiB to
2818  512 KiB on all platforms to better accomodate running wasm on the main thread
2819  on Windows.
2820  [#3861](https://github.com/bytecodealliance/wasmtime/pull/3861)
2821
2822* The `wasi-common` crate now supports doing polls for both read and write
2823  interest on a file descriptor at the same time.
2824  [#3866](https://github.com/bytecodealliance/wasmtime/pull/3866)
2825
2826### Fixed
2827
2828* The `Store::call_hook` callback is now invoked when entering host functions
2829  defined with `*_unchecked` variants.
2830  [#3881](https://github.com/bytecodealliance/wasmtime/pull/3881)
2831
2832### Removed
2833
2834* The incomplete and unmaintained ARM32 backend has been removed from Cranelift.
2835  [#3799](https://github.com/bytecodealliance/wasmtime/pull/3799)
2836
2837--------------------------------------------------------------------------------
2838
2839## 0.34.2
2840
2841Released 2022-03-31.
2842
2843### Security Fixes
2844
2845* [CVE-2022-24791](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-gwc9-348x-qwv2):
2846  Fixed a use after free with `externref`s and epoch interruption.
2847
2848## 0.34.1
2849
2850Released 2022-02-16.
2851
2852### Security Fixes
2853
2854* [CVE-2022-23636](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-88xq-w8cq-xfg7):
2855  Fixed an invalid drop of a partially-initialized instance in the pooling instance
2856  allocator.
2857
2858## 0.33.1
2859
2860Released 2022-02-16.
2861
2862### Security Fixes
2863
2864* [CVE-2022-23636](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-88xq-w8cq-xfg7):
2865  Fixed an invalid drop of a partially-initialized instance in the pooling instance
2866  allocator.
2867
2868## 0.34.0
2869
2870Released 2022-02-07.
2871
2872### Fixed
2873
2874* The `wasi-common` default implementation of some attributes of files has been
2875  updated to ensure that `wasi-libc`'s `isatty` function works as intended.
2876  [#3696](https://github.com/bytecodealliance/wasmtime/pull/3696)
2877
2878* A benign debug assertion related to `externref` and garbage-collection has
2879  been fixed.
2880  [#3734](https://github.com/bytecodealliance/wasmtime/pull/3734)
2881
2882### Added
2883
2884* Function names are now automatically demangled when informing profilers of
2885  regions of JIT code to apply Rust-specific demangling rules if applicable.
2886  [#3683](https://github.com/bytecodealliance/wasmtime/pull/3683)
2887
2888* Support for profiling JIT-generated trampolines with VTune has been added.
2889  [#3687](https://github.com/bytecodealliance/wasmtime/pull/3687)
2890
2891* Wasmtime now supports a new method of async preemption dubbed "epoch-based
2892  interruption" which is intended to be much more efficient than the current
2893  fuel-based method of preemption.
2894  [#3699](https://github.com/bytecodealliance/wasmtime/pull/3699)
2895
2896* On Linux Wasmtime will now by default use copy-on-write mappings to initialize
2897  memories of wasm modules where possible, accelerating instantiation by
2898  avoiding costly memory copies. When combined with the pooling allocator this
2899  can also be used to speed up instance-reuse cases due to fewer syscalls to
2900  change memory mappings being necessary.
2901  [#3697](https://github.com/bytecodealliance/wasmtime/pull/3697)
2902  [#3738](https://github.com/bytecodealliance/wasmtime/pull/3738)
2903  [#3760](https://github.com/bytecodealliance/wasmtime/pull/3760)
2904
2905* Wasmtime now supports the recently-added `sock_accept` WASI function.
2906  [#3711](https://github.com/bytecodealliance/wasmtime/pull/3711)
2907
2908* Cranelift now has support for specifying blocks as cold.
2909  [#3698](https://github.com/bytecodealliance/wasmtime/pull/3698)
2910
2911### Changed
2912
2913* Many more instructions for the x64 backend have been migrated to ISLE,
2914  additionally with refactorings to make incorrect lowerings harder to
2915  accidentally write.
2916  [#3653](https://github.com/bytecodealliance/wasmtime/pull/3653)
2917  [#3659](https://github.com/bytecodealliance/wasmtime/pull/3659)
2918  [#3681](https://github.com/bytecodealliance/wasmtime/pull/3681)
2919  [#3686](https://github.com/bytecodealliance/wasmtime/pull/3686)
2920  [#3688](https://github.com/bytecodealliance/wasmtime/pull/3688)
2921  [#3690](https://github.com/bytecodealliance/wasmtime/pull/3690)
2922  [#3752](https://github.com/bytecodealliance/wasmtime/pull/3752)
2923
2924* More instructions in the aarch64 backend are now lowered with ISLE.
2925  [#3658](https://github.com/bytecodealliance/wasmtime/pull/3658)
2926  [#3662](https://github.com/bytecodealliance/wasmtime/pull/3662)
2927
2928* The s390x backend's lowering rules are now almost entirely defined with ISLE.
2929  [#3702](https://github.com/bytecodealliance/wasmtime/pull/3702)
2930  [#3703](https://github.com/bytecodealliance/wasmtime/pull/3703)
2931  [#3706](https://github.com/bytecodealliance/wasmtime/pull/3706)
2932  [#3717](https://github.com/bytecodealliance/wasmtime/pull/3717)
2933  [#3723](https://github.com/bytecodealliance/wasmtime/pull/3723)
2934  [#3724](https://github.com/bytecodealliance/wasmtime/pull/3724)
2935
2936* Instantiation of modules in Wasmtime has been further optimized now that the
2937  copy-on-write memory initialization removed the previously most-expensive part
2938  of instantiating a module.
2939  [#3727](https://github.com/bytecodealliance/wasmtime/pull/3727)
2940  [#3739](https://github.com/bytecodealliance/wasmtime/pull/3739)
2941  [#3741](https://github.com/bytecodealliance/wasmtime/pull/3741)
2942  [#3742](https://github.com/bytecodealliance/wasmtime/pull/3742)
2943
2944--------------------------------------------------------------------------------
2945
2946## 0.33.0
2947
2948Released 2022-01-05.
2949
2950### Added
2951
2952* Compiled wasm modules may now optionally omit debugging information about
2953  mapping addresses to source locations, resulting in smaller binaries.
2954  [#3598](https://github.com/bytecodealliance/wasmtime/pull/3598)
2955
2956* The WebAssembly SIMD proposal is now enabled by default.
2957  [#3601](https://github.com/bytecodealliance/wasmtime/pull/3601)
2958
2959--------------------------------------------------------------------------------
2960
2961## 0.32.1
2962
2963Released 2022-01-04.
2964
2965### Fixed
2966
2967* Cranelift: remove recently-added build dependency on `sha2` to allow usage in
2968  some dependency-sensitive environments, by computing ISLE manifest hashes
2969  with a different hash function.
2970  [#3619](https://github.com/bytecodealliance/wasmtime/pull/3619)
2971
2972* Cranelift: fixed 8- and 16-bit behavior of popcount (bit population count)
2973  instruction. Does not affect Wasm frontend.
2974  [#3617](https://github.com/bytecodealliance/wasmtime/pull/3617)
2975
2976* Cranelift: fixed miscompilation of 8- and 16-bit bit-rotate instructions.
2977  Does not affect Wasm frontend.
2978  [#3610](https://github.com/bytecodealliance/wasmtime/pull/3610)
2979
2980--------------------------------------------------------------------------------
2981
2982## 0.32.0
2983
2984Released 2021-12-13.
2985
2986### Added
2987
2988* A new configuration option has been added to force using a "static" memory
2989  style to automatically limit growth of memories in some configurations.
2990  [#3503](https://github.com/bytecodealliance/wasmtime/pull/3503)
2991
2992* The `InstancePre<T>` type now implements `Clone`.
2993  [#3510](https://github.com/bytecodealliance/wasmtime/pull/3510)
2994
2995* Cranelift's instruction selection process has begun to be migrated towards the
2996  ISLE compiler and definition language.
2997  [#3506](https://github.com/bytecodealliance/wasmtime/pull/3506)
2998
2999* A `pooling-allocator` feature has been added, which is on-by-default, to
3000  disable the pooling allocator at compile time.
3001  [#3514](https://github.com/bytecodealliance/wasmtime/pull/3514)
3002
3003### Fixed
3004
3005* A possible panic when parsing a WebAssembly `name` section has been fixed.
3006  [#3509](https://github.com/bytecodealliance/wasmtime/pull/3509)
3007
3008* Generating native DWARF information for some C-produced modules has been
3009  fixed, notably those where there may be DWARF about dead code.
3010  [#3498](https://github.com/bytecodealliance/wasmtime/pull/3498)
3011
3012* A number of SIMD code generation bugs have been fixed in the x64 backend
3013  by migrating their lowerings to ISLE.
3014
3015--------------------------------------------------------------------------------
3016
3017## 0.31.0
3018
3019Released 2021-10-29.
3020
3021### Added
3022
3023* New `Func::new_unchecked` and `Func::call_unchecked` APIs have been added with
3024  accompanying functions in the C API to improve the performance of calls into
3025  wasm and the host in the C API.
3026  [#3350](https://github.com/bytecodealliance/wasmtime/pull/3350)
3027
3028* Release binaries are now available for the s390x-unknown-linux-gnu
3029  architecture.
3030  [#3372](https://github.com/bytecodealliance/wasmtime/pull/3372)
3031
3032* A new `ResourceLimiterAsync` trait is added which allows asynchronous blocking
3033  of WebAssembly on instructions such as `memory.grow`.
3034  [#3393](https://github.com/bytecodealliance/wasmtime/pull/3393)
3035
3036### Changed
3037
3038* The `Func::call` method now takes a slice to write the results into rather
3039  than returning a boxed slice.
3040  [#3319](https://github.com/bytecodealliance/wasmtime/pull/3319)
3041
3042* Trampolines are now covered when jitdump profiling is enabled.
3043  [#3344](https://github.com/bytecodealliance/wasmtime/pull/3344)
3044
3045### Fixed
3046
3047* Debugging with GDB has been fixed on Windows.
3048  [#3373](https://github.com/bytecodealliance/wasmtime/pull/3373)
3049
3050* Some quadradic behavior in Wasmtime's compilation of modules has been fixed.
3051  [#3469](https://github.com/bytecodealliance/wasmtime/pull/3469)
3052  [#3466](https://github.com/bytecodealliance/wasmtime/pull/3466)
3053
3054* Bounds-checks for wasm memory accesses in certain non-default configurations
3055  have been fixed to correctly allow loads at the end of the address space.
3056  [#3462](https://github.com/bytecodealliance/wasmtime/pull/3462)
3057
3058* When type-checking memories and tables for satisfying instance imports the
3059  runtime size of the table/memory is now consulted instead of the object's
3060  original type.
3061  [#3450](https://github.com/bytecodealliance/wasmtime/pull/3450)
3062
3063### Removed
3064
3065* The Lightbeam backend has been removed, as per [RFC 14].
3066  [#3390](https://github.com/bytecodealliance/wasmtime/pull/3390)
3067
3068[RFC 14]: https://github.com/bytecodealliance/rfcs/pull/14
3069
3070* Cranelift's old x86 backend has been removed, as per [RFC 12].
3071  [#3309](https://github.com/bytecodealliance/wasmtime/pull/3009)
3072
3073[RFC 12]: https://github.com/bytecodealliance/rfcs/pull/12
3074
3075## 0.30.0
3076
3077Released 2021-09-17.
3078
3079### Security Fixes
3080
3081* [CVE-2021-39216](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-v4cp-h94r-m7xf):
3082  Fixed a use after free passing `externref`s to Wasm in Wasmtime.
3083
3084* [CVE-2021-39218](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-4873-36h9-wv49):
3085  Fixed an out-of-bounds read/write and invalid free with `externref`s and GC
3086  safepoints in Wasmtime.
3087
3088* [CVE-2021-39219](https://github.com/bytecodealliance/wasmtime/security/advisories/GHSA-q879-9g95-56mx):
3089  Fixed a bug where using two different `Engine`s with the same `Linker`-define
3090  functions caused unsafety without `unsafe` blocks.
3091
3092### Added
3093
3094* Added experimental support for the in-progress 64-bit memories Wasm proposal.
3095
3096* Added support to build Wasmtime without the compiler. This lets you run
3097  pre-compiled Wasm modules, without the ability (or potential attack surface)
3098  of compiling new Wasm modules. The compilation functionality is gated by the
3099  on-by-default `cranelift` cargo feature.
3100
3101* Added support for NaN canonicalization with SIMD vectors.
3102
3103* Added support for differential fuzzing against V8's Wasm engine.
3104
3105* Added support for fuzzing against the Wasm spec interpreter.
3106
3107* Enabled SIMD fuzzing on oss-fuzz.
3108
3109### Changed
3110
3111* A variety of performance improvements to loading pre-compiled modules.
3112
3113* A variety of performance improvements to function calls, both through Rust and
3114  the C API.
3115
3116* Leaf functions that do not use the stack no longer bump the frame pointer on
3117  aarch64 and s390x.
3118
3119* Many updates and expanded instruction support to the in-progress CLIF
3120  interpreter.
3121
3122* Expanded fuzzing of reference types and GC.
3123
3124### Fixed
3125
3126* A number of fixes to both aarch64 and x86_64 support for the Wasm SIMD
3127  proposal and the underlying CLIF vector instructions.
3128
3129* Fixed a potential infinite loop in the SSA computation for
3130  `cranelift-frontend`. This was not reachable from `cranelift-wasm` or
3131  Wasmtime, but might have affected general Cranelift users.
3132
3133### Removed
3134
3135* The `wasmtime wasm2obj` subcommand has been removed. Generating raw object
3136  files for linking natively is no longer supported. Use the `wasmtime compile`
3137  subcommand to pre-compile a Wasm module and `wasmtime run` to run pre-compiled
3138  Wasm modules.
3139
3140## 0.29.0
3141
3142Released 2021-08-02.
3143
3144### Changed
3145
3146* Instance exports are now loaded lazily from instances instead of eagerly as
3147  they were before. This is an internal-only change and is not a breaking
3148  change.
3149  [#2984](https://github.com/bytecodealliance/wasmtime/pull/2984)
3150
3151* All linear memories created by Wasmtime will now, by default, have guard pages
3152  in front of them in addition to after them. This is intended to help mitigate
3153  future bugs in Cranelift, should they arise.
3154  [#2977](https://github.com/bytecodealliance/wasmtime/pull/2977)
3155
3156* Linear memories now correctly support a maximum size of 4GB. Previously, the
3157  limit field was 32 bits, which did not properly support a full 4GB memory.
3158  This update is also a necessary change in preparation for future memory64
3159  support.
3160  [#3013](https://github.com/bytecodealliance/wasmtime/pull/3013)
3161  [#3134](https://github.com/bytecodealliance/wasmtime/pull/3134)
3162
3163* Injection counts of fuel into a `wasmtime::Store` now uses a u64 instead of a
3164  u32.
3165  [#3048](https://github.com/bytecodealliance/wasmtime/pull/3048)
3166
3167### Added
3168
3169* Support for `i128` has improved in the AArch64 backend.
3170  [#2959](https://github.com/bytecodealliance/wasmtime/pull/2959)
3171  [#2975](https://github.com/bytecodealliance/wasmtime/pull/2975)
3172  [#2985](https://github.com/bytecodealliance/wasmtime/pull/2985)
3173  [#2990](https://github.com/bytecodealliance/wasmtime/pull/2990)
3174  [#3002](https://github.com/bytecodealliance/wasmtime/pull/3002)
3175  [#3004](https://github.com/bytecodealliance/wasmtime/pull/3004)
3176  [#3005](https://github.com/bytecodealliance/wasmtime/pull/3005)
3177  [#3008](https://github.com/bytecodealliance/wasmtime/pull/3008)
3178  [#3027](https://github.com/bytecodealliance/wasmtime/pull/3027)
3179
3180* The s390x backend now supports z14 and atomics.
3181  [#2988](https://github.com/bytecodealliance/wasmtime/pull/2988)
3182  [#2991](https://github.com/bytecodealliance/wasmtime/pull/2991)
3183
3184* The `wasmtime::Linker` type now implements `Clone`.
3185  [#2993](https://github.com/bytecodealliance/wasmtime/pull/2993)
3186
3187* Support for the SIMD proposal on both x86\_64 and AArch64 has improved. On
3188  x86\_64, all SIMD opcodes are now supported.
3189  [#2997](https://github.com/bytecodealliance/wasmtime/pull/2997)
3190  [#3035](https://github.com/bytecodealliance/wasmtime/pull/3035)
3191  [#2982](https://github.com/bytecodealliance/wasmtime/pull/2982)
3192  [#3084](https://github.com/bytecodealliance/wasmtime/pull/3084)
3193  [#3082](https://github.com/bytecodealliance/wasmtime/pull/3082)
3194  [#3107](https://github.com/bytecodealliance/wasmtime/pull/3107)
3195  [#3105](https://github.com/bytecodealliance/wasmtime/pull/3105)
3196  [#3114](https://github.com/bytecodealliance/wasmtime/pull/3114)
3197  [#3070](https://github.com/bytecodealliance/wasmtime/pull/3070)
3198  [#3126](https://github.com/bytecodealliance/wasmtime/pull/3126)
3199
3200* A `Trap` can now display its reason without also displaying the backtrace.
3201  [#3033](https://github.com/bytecodealliance/wasmtime/pull/3033)
3202
3203* An initiall fuzzer for CLIF has been added.
3204  [#3038](https://github.com/bytecodealliance/wasmtime/pull/3038)
3205
3206* High-level architecture documentation has been added for Wasmtime.
3207  [#3019](https://github.com/bytecodealliance/wasmtime/pull/3019)
3208
3209* Support for multi-memory can now be configured in Wasmtime's C API.
3210  [#3071](https://github.com/bytecodealliance/wasmtime/pull/3071)
3211
3212* The `wasmtime` crate now supports a `posix-signals-on-macos` feature to force
3213  the usage of signals instead of mach ports to handle traps on macOS.
3214  [#3063](https://github.com/bytecodealliance/wasmtime/pull/3063)
3215
3216* Wasmtime's C API now has a `wasmtime_trap_code` function to get the raw trap
3217  code, if present, for a trap.
3218  [#3086](https://github.com/bytecodealliance/wasmtime/pull/3086)
3219
3220* Wasmtime's C API now has a `wasmtime_linker_define_func` function to define a
3221  store-independent function within a linker.
3222  [#3122](https://github.com/bytecodealliance/wasmtime/pull/3122)
3223
3224* A `wasmtime::Linker::module_async` function was added as the asynchronous
3225  counterpart to `wasmtime::Linker::module`.
3226  [#3121](https://github.com/bytecodealliance/wasmtime/pull/3121)
3227
3228### Fixed
3229
3230* Compiling the `wasmtime` crate into a `dylib` crate type has been fixed.
3231  [#3010](https://github.com/bytecodealliance/wasmtime/pull/3010)
3232
3233* The enter/exit hooks for WebAssembly are now executed for an instance's
3234  `start` function, if present.
3235  [#3001](https://github.com/bytecodealliance/wasmtime/pull/3001)
3236
3237* Some WASI functions in `wasi-common` have been fixed for big-endian platforms.
3238  [#3016](https://github.com/bytecodealliance/wasmtime/pull/3016)
3239
3240* Wasmtime no longer erroneously assumes that all custom sections may contain
3241  DWARF information, reducing instances of `Trap`'s `Display` implementation
3242  providing misleading information to set an env var to get more information.
3243  [#3083](https://github.com/bytecodealliance/wasmtime/pull/3083)
3244
3245* Some issues with parsing DWARF debug information have been fixed.
3246  [#3116](https://github.com/bytecodealliance/wasmtime/pull/3116)
3247
3248## 0.28.0
3249
3250Released 2021-06-09.
3251
3252### Changed
3253
3254* Breaking: Wasmtime's embedding API has been redesigned, as specified in [RFC
3255  11]. Rust users can now enjoy easier times with `Send` and `Sync`, and all
3256  users can now more clearly manage memory, especially in the C API. Language
3257  embeddings have been updated to the new API as well.
3258  [#2897](https://github.com/bytecodealliance/wasmtime/pull/2897)
3259
3260[RFC 11]: https://github.com/bytecodealliance/rfcs/pull/11
3261
3262### Added
3263
3264* A new `InstancePre` type, created with `Linker::instantiate_pre`, has been
3265  added to perform type-checking of an instance once and reduce the work done
3266  for each instantiation of a module:
3267  [#2962](https://github.com/bytecodealliance/wasmtime/pull/2962)
3268
3269* Deserialization of a module can now optionally skip checking the wasmtime
3270  version string:
3271  [#2945](https://github.com/bytecodealliance/wasmtime/pull/2945)
3272
3273* A method has been exposed to frontload per-thread initialization costs if the
3274  latency of every last wasm call is important:
3275  [#2946](https://github.com/bytecodealliance/wasmtime/pull/2946)
3276
3277* Hooks have been added for entry/exit into wasm code to allow embeddings to
3278  track time and other properties about execution in a wasm environment:
3279  [#2952](https://github.com/bytecodealliance/wasmtime/pull/2952)
3280
3281* A [C++ embedding of Wasmtime has been written][cpp].
3282
3283[RFC 11]: https://github.com/bytecodealliance/rfcs/pull/11
3284[cpp]: https://github.com/bytecodealliance/wasmtime-cpp
3285
3286### Fixed
3287
3288* Multiple returns on macOS AArch64 have been fixed:
3289  [#2956](https://github.com/bytecodealliance/wasmtime/pull/2956)
3290
3291## 0.27.0
3292
3293Released 2021-05-21.
3294
3295### Security Fixes
3296
3297* Fixed a security issue in Cranelift's x64 backend that could result in a heap
3298  sandbox escape due to an incorrect sign-extension:
3299  [#2913](https://github.com/bytecodealliance/wasmtime/issues/2913).
3300
3301### Added
3302
3303* Support for IBM z/Archiecture (`s390x`) machines in Cranelift and Wasmtime:
3304  [#2836](https://github.com/bytecodealliance/wasmtime/pull/2836),
3305  [#2837](https://github.com/bytecodealliance/wasmtime/pull/2837),
3306  [#2838](https://github.com/bytecodealliance/wasmtime/pull/2838),
3307  [#2843](https://github.com/bytecodealliance/wasmtime/pull/2843),
3308  [#2854](https://github.com/bytecodealliance/wasmtime/pull/2854),
3309  [#2870](https://github.com/bytecodealliance/wasmtime/pull/2870),
3310  [#2871](https://github.com/bytecodealliance/wasmtime/pull/2871),
3311  [#2872](https://github.com/bytecodealliance/wasmtime/pull/2872),
3312  [#2874](https://github.com/bytecodealliance/wasmtime/pull/2874).
3313
3314* Improved async support in wasi-common runtime:
3315  [#2832](https://github.com/bytecodealliance/wasmtime/pull/2832).
3316
3317* Added `Store::with_limits`, `StoreLimits`, and `ResourceLimiter` to the
3318  Wasmtime API to help with enforcing resource limits at runtime. The
3319  `ResourceLimiter` trait can be implemented by custom resource limiters to
3320  decide if linear memories or tables can be grown.
3321
3322* Added `allow-unknown-exports` option for the run command:
3323  [#2879](https://github.com/bytecodealliance/wasmtime/pull/2879).
3324
3325* Added API to notify that a `Store` has moved to a new thread:
3326  [#2822](https://github.com/bytecodealliance/wasmtime/pull/2822).
3327
3328* Documented guidance around using Wasmtime in multithreaded contexts:
3329  [#2812](https://github.com/bytecodealliance/wasmtime/pull/2812).
3330  In the future, the Wasmtime API will change to allow some of its core types
3331  to be Send/Sync; see the in-progress
3332  [#2897](https://github.com/bytecodealliance/wasmtime/pull/2897) for details.
3333
3334* Support calls from native code to multiple-return-value functions:
3335  [#2806](https://github.com/bytecodealliance/wasmtime/pull/2806).
3336
3337### Changed
3338
3339* Breaking: `Memory::new` has been changed to return `Result` as creating a
3340  host memory object is now a fallible operation when the initial size of
3341  the memory exceeds the store limits.
3342
3343### Fixed
3344
3345* Many instruction selection improvements on x64 and aarch64:
3346  [#2819](https://github.com/bytecodealliance/wasmtime/pull/2819),
3347  [#2828](https://github.com/bytecodealliance/wasmtime/pull/2828),
3348  [#2823](https://github.com/bytecodealliance/wasmtime/pull/2823),
3349  [#2862](https://github.com/bytecodealliance/wasmtime/pull/2862),
3350  [#2886](https://github.com/bytecodealliance/wasmtime/pull/2886),
3351  [#2889](https://github.com/bytecodealliance/wasmtime/pull/2889),
3352  [#2905](https://github.com/bytecodealliance/wasmtime/pull/2905).
3353
3354* Improved performance of Wasmtime runtime substantially:
3355  [#2811](https://github.com/bytecodealliance/wasmtime/pull/2811),
3356  [#2818](https://github.com/bytecodealliance/wasmtime/pull/2818),
3357  [#2821](https://github.com/bytecodealliance/wasmtime/pull/2821),
3358  [#2847](https://github.com/bytecodealliance/wasmtime/pull/2847),
3359  [#2900](https://github.com/bytecodealliance/wasmtime/pull/2900).
3360
3361* Fixed WASI issue with file metadata on Windows:
3362  [#2884](https://github.com/bytecodealliance/wasmtime/pull/2884).
3363
3364* Fixed an issue with debug info and an underflowing (trapping) offset:
3365  [#2866](https://github.com/bytecodealliance/wasmtime/pull/2866).
3366
3367* Fixed an issue with unwind information in the old x86 backend:
3368  [#2845](https://github.com/bytecodealliance/wasmtime/pull/2845).
3369
3370* Fixed i32 spilling in x64 backend:
3371  [#2840](https://github.com/bytecodealliance/wasmtime/pull/2840).
3372
3373## 0.26.0
3374
3375Released 2021-04-05.
3376
3377### Added
3378
3379* Added the `wasmtime compile` command to support AOT compilation of Wasm
3380  modules. This adds the `Engine::precompile_module` method. Also added the
3381  `Config::target` method to change the compilation target of the
3382  configuration. This can be used in conjunction with
3383  `Engine::precompile_module` to target a different host triple than the
3384  current one.
3385  [#2791](https://github.com/bytecodealliance/wasmtime/pull/2791)
3386
3387* Support for macOS on aarch64 (Apple M1 Silicon), including Apple-specific
3388  calling convention details and unwinding/exception handling using Mach ports.
3389  [#2742](https://github.com/bytecodealliance/wasmtime/pull/2742),
3390  [#2723](https://github.com/bytecodealliance/wasmtime/pull/2723)
3391
3392* A number of SIMD instruction implementations in the new x86-64 backend.
3393  [#2771](https://github.com/bytecodealliance/wasmtime/pull/2771)
3394
3395* Added the `Config::cranelift_flag_enable` method to enable setting Cranelift
3396  boolean flags or presets in a config.
3397
3398* Added CLI option `--cranelift-enable` to enable boolean settings and ISA presets.
3399
3400* Deduplicate function signatures in Wasm modules.
3401  [#2772](https://github.com/bytecodealliance/wasmtime/pull/2772)
3402
3403* Optimize overheads of calling into Wasm functions.
3404  [#2757](https://github.com/bytecodealliance/wasmtime/pull/2757),
3405  [#2759](https://github.com/bytecodealliance/wasmtime/pull/2759)
3406
3407* Improvements related to Module Linking: compile fewer trampolines;
3408
3409  [#2774](https://github.com/bytecodealliance/wasmtime/pull/2774)
3410
3411* Re-export sibling crates from `wasmtime-wasi` to make embedding easier
3412  without needing to match crate versions.
3413  [#2776](https://github.com/bytecodealliance/wasmtime/pull/2776)
3414
3415### Changed
3416
3417* Switched the default compiler backend on x86-64 to Cranelift's new backend.
3418  This should not have any user-visible effects other than possibly runtime
3419  performance improvements. The old backend is still available with the
3420  `old-x86-backend` feature flag to the `cranelift-codegen` or `wasmtime`
3421  crates, or programmatically with `BackendVariant::Legacy`. We plan to
3422  maintain the old backend for at least one more release and ensure it works on
3423  CI.
3424  [#2718](https://github.com/bytecodealliance/wasmtime/pull/2718)
3425
3426* Breaking: `Module::deserialize` has been removed in favor of `Module::new`.
3427
3428* Breaking: `Config::cranelift_clear_cpu_flags` was removed. Use `Config::target`
3429  to clear the CPU flags for the host's target.
3430
3431* Breaking: `Config::cranelift_other_flag` was renamed to `Config::cranelift_flag_set`.
3432
3433* CLI changes:
3434  * Wasmtime CLI options to enable WebAssembly features have been replaced with
3435    a singular `--wasm-features` option. The previous options are still
3436    supported, but are not displayed in help text.
3437  * Breaking: the CLI option `--cranelift-flags` was changed to
3438    `--cranelift-set`.
3439  * Breaking: the CLI option `--enable-reference-types=false` has been changed
3440    to `--wasm-features=-reference-types`.
3441  * Breaking: the CLI option `--enable-multi-value=false` has been changed to
3442    `--wasm-features=-multi-value`.
3443  * Breaking: the CLI option `--enable-bulk-memory=false` has been changed to
3444    `--wasm-features=-bulk-memory`.
3445
3446* Improved error-reporting in wiggle.
3447  [#2760](https://github.com/bytecodealliance/wasmtime/pull/2760)
3448
3449* Make WASI sleeping fallible (some systems do not support sleep).
3450  [#2756](https://github.com/bytecodealliance/wasmtime/pull/2756)
3451
3452* WASI: Support `poll_oneoff` with a sleep.
3453  [#2753](https://github.com/bytecodealliance/wasmtime/pull/2753)
3454
3455* Allow a `StackMapSink` to be passed when defining functions with
3456  `cranelift-module`.
3457  [#2739](https://github.com/bytecodealliance/wasmtime/pull/2739)
3458
3459* Some refactoring in new x86-64 backend to prepare for VEX/EVEX (e.g.,
3460  AVX-512) instruction encodings to be supported.
3461  [#2799](https://github.com/bytecodealliance/wasmtime/pull/2799)
3462
3463### Fixed
3464
3465* Fixed a corner case in `srem` (signed remainder) in the new x86-64 backend:
3466  `INT_MIN % -1` should return `0`, rather than trapping. This only occurred
3467  when `avoid_div_traps == false` was set by the embedding.
3468  [#2763](https://github.com/bytecodealliance/wasmtime/pull/2763)
3469
3470* Fixed a memory leak of the `Store` when an instance traps.
3471  [#2803](https://github.com/bytecodealliance/wasmtime/pull/2803)
3472
3473* Some fuzzing-related fixes.
3474  [#2788](https://github.com/bytecodealliance/wasmtime/pull/2788),
3475  [#2770](https://github.com/bytecodealliance/wasmtime/pull/2770)
3476
3477* Fixed memory-initialization bug in uffd allocator that could copy into the
3478  wrong destination under certain conditions. Does not affect the default
3479  wasmtime instance allocator.
3480  [#2801](https://github.com/bytecodealliance/wasmtime/pull/2801)
3481
3482* Fix printing of float values from the Wasmtime CLI.
3483  [#2797](https://github.com/bytecodealliance/wasmtime/pull/2797)
3484
3485* Remove the ability for the `Linker` to instantiate modules with duplicate
3486  import strings of different types.
3487  [#2789](https://github.com/bytecodealliance/wasmtime/pull/2789)
3488
3489## 0.25.0
3490
3491Released 2021-03-16.
3492
3493### Added
3494
3495* An implementation of a pooling instance allocator, optionally backed by
3496  `userfaultfd` on Linux, was added to improve the performance of embeddings
3497  that instantiate a large number of instances continuously.
3498  [#2518](https://github.com/bytecodealliance/wasmtime/pull/2518)
3499
3500* Host functions can now be defined on `Config` to share the function across all
3501  `Store` objects connected to an `Engine`. This can improve the time it takes
3502  to instantiate instances in a short-lived `Store`.
3503  [#2625](https://github.com/bytecodealliance/wasmtime/pull/2625)
3504
3505* The `Store` object now supports having typed values attached to it which can
3506  be retrieved from host functions.
3507  [#2625](https://github.com/bytecodealliance/wasmtime/pull/2625)
3508
3509* The `wiggle` code generator now supports `async` host functions.
3510  [#2701](https://github.com/bytecodealliance/wasmtime/pull/2701)
3511
3512### Changed
3513
3514* The `Func::getN{,_async}` APIs have all been removed in favor of a new
3515  `Func::typed` API which should be more compact in terms of API surface area as
3516  well as more flexible in how it can be used.
3517  [#2719](https://github.com/bytecodealliance/wasmtime/pull/2719)
3518
3519* `Engine::new` has been changed from returning `Engine` to returning
3520  `anyhow::Result<Engine>`. Callers of `Engine::new` will need to be updated to
3521  use the `?` operator on the return value or otherwise unwrap the result to get
3522  the `Engine`.
3523
3524### Fixed
3525
3526* Interpretation of timestamps in `poll_oneoff` for WASI have been fixed to
3527  correctly use nanoseconds instead of microseconds.
3528  [#2717](https://github.com/bytecodealliance/wasmtime/pull/2717)
3529
3530## 0.24.0
3531
3532Released 2021-03-04.
3533
3534### Added
3535
3536* Implement support for `async` functions in Wasmtime
3537  [#2434](https://github.com/bytecodealliance/wasmtime/pull/2434)
3538
3539### Fixed
3540
3541* Fix preservation of the sigaltstack on macOS
3542  [#2676](https://github.com/bytecodealliance/wasmtime/pull/2676)
3543* Fix incorrect semver dependencies involving fs-set-times.
3544  [#2705](https://github.com/bytecodealliance/wasmtime/pull/2705)
3545* Fix some `i128` shift-related bugs in x64 backend.
3546  [#2682](https://github.com/bytecodealliance/wasmtime/pull/2682)
3547* Fix incomplete trap metadata due to multiple traps at one address
3548  [#2685](https://github.com/bytecodealliance/wasmtime/pull/2685)
3549
3550## 0.23.0
3551
3552Released 2021-02-16.
3553
3554### Added
3555
3556* Support for limiting WebAssembly execution with fuel was added, including
3557  support in the C API.
3558  [#2611](https://github.com/bytecodealliance/wasmtime/pull/2611)
3559  [#2643](https://github.com/bytecodealliance/wasmtime/pull/2643)
3560* Wasmtime now has more knobs for limiting memory and table allocations
3561  [#2617](https://github.com/bytecodealliance/wasmtime/pull/2617)
3562* Added a method to share `Config` across machines
3563  [#2608](https://github.com/bytecodealliance/wasmtime/pull/2608)
3564* Added a safe memory read/write API
3565  [#2528](https://github.com/bytecodealliance/wasmtime/pull/2528)
3566* Added support for the experimental wasi-crypto APIs
3567  [#2597](https://github.com/bytecodealliance/wasmtime/pull/2597)
3568* Added an instance limit to `Config`
3569  [#2593](https://github.com/bytecodealliance/wasmtime/pull/2593)
3570* Implemented module-linking's outer module aliases
3571  [#2590](https://github.com/bytecodealliance/wasmtime/pull/2590)
3572* Cranelift now supports 128-bit operations for the new x64 backend.
3573  [#2539](https://github.com/bytecodealliance/wasmtime/pull/2539)
3574* Cranelift now has detailed debug-info (DWARF) support in new backends (initially x64).
3575  [#2565](https://github.com/bytecodealliance/wasmtime/pull/2565)
3576* Cranelift now uses the `POPCNT`, `TZCNT`, and `LZCNT`, as well as SSE 4.1
3577  rounding instructions on x64 when available.
3578* Cranelift now uses the `CNT`, instruction on aarch64 when available.
3579
3580### Changed
3581
3582* A new WASI implementation built on the new
3583  [`cap-std`](https://github.com/bytecodealliance/cap-std) crate was added,
3584  replacing the previous implementation. This brings improved robustness,
3585  portability, and performance.
3586
3587* `wasmtime_wasi::WasiCtxBuilder` moved to
3588  `wasi_cap_std_sync::WasiCtxBuilder`.
3589
3590* The WebAssembly C API is updated, with a few minor API changes
3591  [#2579](https://github.com/bytecodealliance/wasmtime/pull/2579)
3592
3593### Fixed
3594
3595* Fixed a panic in WASI `fd_readdir` on large directories
3596  [#2620](https://github.com/bytecodealliance/wasmtime/pull/2620)
3597* Fixed a memory leak with command modules
3598  [#2017](https://github.com/bytecodealliance/wasmtime/pull/2017)
3599
3600--------------------------------------------------------------------------------
3601
3602## 0.22.0
3603
3604Released 2021-01-07.
3605
3606### Added
3607
3608* Experimental support for [the module-linking
3609  proposal](https://github.com/WebAssembly/module-linking) was
3610  added. [#2094](https://github.com/bytecodealliance/wasmtime/pull/2094)
3611
3612* Added support for [the reference types
3613  proposal](https://webassembly.github.io/reference-types) on the aarch64
3614  architecture. [#2410](https://github.com/bytecodealliance/wasmtime/pull/2410)
3615
3616* Experimental support for [wasi-nn](https://github.com/WebAssembly/wasi-nn) was
3617  added. [#2208](https://github.com/bytecodealliance/wasmtime/pull/2208)
3618
3619### Changed
3620
3621### Fixed
3622
3623* Fixed an issue where the `select` instruction didn't accept `v128` SIMD
3624  operands. [#2391](https://github.com/bytecodealliance/wasmtime/pull/2391)
3625
3626* Fixed an issue where Wasmtime could potentially use the wrong stack map during
3627  GCs, leading to a
3628  panic. [#2396](https://github.com/bytecodealliance/wasmtime/pull/2396)
3629
3630* Fixed an issue where if a host-defined function erroneously returned a value
3631  from a different store, that value would be
3632  leaked. [#2424](https://github.com/bytecodealliance/wasmtime/pull/2424)
3633
3634* Fixed a bug where in certain cases if a module's instantiation failed, it
3635  could leave trampolines in the store that referenced the no-longer-valid
3636  instance. These trampolines could be reused in future instantiations, leading
3637  to use after free bugs.
3638  [#2408](https://github.com/bytecodealliance/wasmtime/pull/2408)
3639
3640* Fixed a miscompilation on aarch64 where certain instructions would read `SP`
3641  instead of the zero register. This could only affect you if you explicitly
3642  enabled the Wasm SIMD
3643  proposal. [#2548](https://github.com/bytecodealliance/wasmtime/pull/2548)
3644
3645--------------------------------------------------------------------------------
3646
3647## 0.21.0
3648
3649Released 2020-11-05.
3650
3651### Added
3652
3653* Experimental support for the multi-memory proposal was added.
3654  [#2263](https://github.com/bytecodealliance/wasmtime/pull/2263)
3655
3656* The `Trap::trap_code` API enables learning what kind of trap was raised.
3657  [#2309](https://github.com/bytecodealliance/wasmtime/pull/2309)
3658
3659### Changed
3660
3661* WebAssembly module validation is now parallelized.
3662  [#2059](https://github.com/bytecodealliance/wasmtime/pull/2059)
3663
3664* Documentation is now available at docs.wasmtime.dev.
3665  [#2317](https://github.com/bytecodealliance/wasmtime/pull/2317)
3666
3667* Windows now compiles like other platforms with a huge guard page instead of
3668  having its own custom limit which made modules compile and run more slowly.
3669  [#2326](https://github.com/bytecodealliance/wasmtime/pull/2326)
3670
3671* The size of the cache entry for serialized modules has been greatly reduced.
3672  [#2321](https://github.com/bytecodealliance/wasmtime/pull/2321)
3673  [#2322](https://github.com/bytecodealliance/wasmtime/pull/2322)
3674  [#2324](https://github.com/bytecodealliance/wasmtime/pull/2324)
3675  [#2325](https://github.com/bytecodealliance/wasmtime/pull/2325)
3676
3677* The `FuncType` API constructor and accessors are now iterator-based.
3678  [#2365](https://github.com/bytecodealliance/wasmtime/pull/2365)
3679
3680### Fixed
3681
3682* A panic in compiling reference-types-using modules has been fixed.
3683  [#2350](https://github.com/bytecodealliance/wasmtime/pull/2350)
3684
3685--------------------------------------------------------------------------------
3686
3687## 0.20.0
3688
3689Released 2020-09-23.
3690
3691### Added
3692
3693* Support for explicitly serializing and deserializing compiled wasm modules has
3694  been added.
3695  [#2020](https://github.com/bytecodealliance/wasmtime/pull/2020)
3696
3697* A `wasmtime_store_gc` C API was added to run GC for `externref`.
3698  [#2052](https://github.com/bytecodealliance/wasmtime/pull/2052)
3699
3700* Support for atomics in Cranelift has been added. Support is not fully
3701  implemented in Wasmtime at this time, however.
3702  [#2077](https://github.com/bytecodealliance/wasmtime/pull/2077)
3703
3704* The `Caller::get_export` function is now implemented for `Func` references as
3705  well.
3706  [#2108](https://github.com/bytecodealliance/wasmtime/pull/2108)
3707
3708### Fixed
3709
3710* Leaks in the C API have been fixed.
3711  [#2040](https://github.com/bytecodealliance/wasmtime/pull/2040)
3712
3713* The `wasm_val_copy` C API has been fixed for reference types.
3714  [#2041](https://github.com/bytecodealliance/wasmtime/pull/2041)
3715
3716* Fix a panic with `Func::new` and reference types when the store doesn't have
3717  reference types enabled.
3718  [#2039](https://github.com/bytecodealliance/wasmtime/pull/2039)
3719
3720--------------------------------------------------------------------------------
3721
3722## 0.19.0
3723
3724Released 2020-07-14.
3725
3726### Added
3727
3728* The [WebAssembly reference-types proposal][reftypes] is now supported in
3729  Wasmtime and the C API.
3730  [#1832](https://github.com/bytecodealliance/wasmtime/pull/1832),
3731  [#1882](https://github.com/bytecodealliance/wasmtime/pull/1882),
3732  [#1894](https://github.com/bytecodealliance/wasmtime/pull/1894),
3733  [#1901](https://github.com/bytecodealliance/wasmtime/pull/1901),
3734  [#1923](https://github.com/bytecodealliance/wasmtime/pull/1923),
3735  [#1969](https://github.com/bytecodealliance/wasmtime/pull/1969),
3736  [#1973](https://github.com/bytecodealliance/wasmtime/pull/1973),
3737  [#1982](https://github.com/bytecodealliance/wasmtime/pull/1982),
3738  [#1984](https://github.com/bytecodealliance/wasmtime/pull/1984),
3739  [#1991](https://github.com/bytecodealliance/wasmtime/pull/1991),
3740  [#1996](https://github.com/bytecodealliance/wasmtime/pull/1996)
3741
3742* The [WebAssembly simd proposal's][simd] spec tests now pass in Wasmtime.
3743  [#1765](https://github.com/bytecodealliance/wasmtime/pull/1765),
3744  [#1876](https://github.com/bytecodealliance/wasmtime/pull/1876),
3745  [#1941](https://github.com/bytecodealliance/wasmtime/pull/1941),
3746  [#1957](https://github.com/bytecodealliance/wasmtime/pull/1957),
3747  [#1990](https://github.com/bytecodealliance/wasmtime/pull/1990),
3748  [#1994](https://github.com/bytecodealliance/wasmtime/pull/1994)
3749
3750* Wasmtime can now be compiled without the usage of threads for parallel
3751  compilation, although this is still enabled by default.
3752  [#1903](https://github.com/bytecodealliance/wasmtime/pull/1903)
3753
3754* The C API is [now
3755  documented](https://bytecodealliance.github.io/wasmtime/c-api/).
3756  [#1928](https://github.com/bytecodealliance/wasmtime/pull/1928),
3757  [#1959](https://github.com/bytecodealliance/wasmtime/pull/1959),
3758  [#1968](https://github.com/bytecodealliance/wasmtime/pull/1968)
3759
3760* A `wasmtime_linker_get_one_by_name` function was added to the C API.
3761  [#1897](https://github.com/bytecodealliance/wasmtime/pull/1897)
3762
3763* A `wasmtime_trap_exit_status` function was added to the C API.
3764  [#1912](https://github.com/bytecodealliance/wasmtime/pull/1912)
3765
3766* Compilation for the `aarch64-linux-android` target should now work, although
3767  keep in mind this platform is not fully tested still.
3768  [#2002](https://github.com/bytecodealliance/wasmtime/pull/2002)
3769
3770[reftypes]: https://github.com/WebAssembly/reference-types
3771
3772### Fixed
3773
3774* Runtime warnings when using Wasmtime on musl have been fixed.
3775  [#1914](https://github.com/bytecodealliance/wasmtime/pull/1914)
3776
3777* A bug affecting Windows unwind information with functions that have spilled
3778  floating point registers has been fixed.
3779  [#1983](https://github.com/bytecodealliance/wasmtime/pull/1983)
3780
3781### Changed
3782
3783* Wasmtime's default branch and development now happens on the `main` branch
3784  instead of `master`.
3785  [#1924](https://github.com/bytecodealliance/wasmtime/pull/1924)
3786
3787### Removed
3788
3789* The "host info" support in the C API has been removed since it was never fully
3790  or correctly implemented.
3791  [#1922](https://github.com/bytecodealliance/wasmtime/pull/1922)
3792
3793* Support for the `*_same` functions in the C API has been removed in the same
3794  vein as the host info APIs.
3795  [#1926](https://github.com/bytecodealliance/wasmtime/pull/1926)
3796
3797--------------------------------------------------------------------------------
3798
3799## 0.18.0
3800
3801Release 2020-06-09.
3802
3803### Added
3804
3805The `WasmTy` trait is now implemented for `u32` and `u64`.
3806
3807  [#1808](https://github.com/bytecodealliance/wasmtime/pull/1808)
3808
3809--------------------------------------------------------------------------------
3810
3811## 0.17.0
3812
3813Released 2020-06-01.
3814
3815### Added
3816
3817* The [Commands and Reactors ABI] is now supported in the Rust API. `Linker::module`
3818  loads a module and automatically handles Commands and Reactors semantics.
3819
3820  [#1565](https://github.com/bytecodealliance/wasmtime/pull/1565)
3821
3822[Commands and Reactors ABI]: https://github.com/WebAssembly/WASI/blob/master/design/application-abi.md#current-unstable-abi
3823
3824The `Table::grow` function now returns the previous table size, making it consistent
3825with the `table.grow` instruction.
3826
3827  [#1653](https://github.com/bytecodealliance/wasmtime/pull/1653)
3828
3829New Wasmtime-specific C APIs for working with tables were added which provide more
3830detailed error information and which make growing a table more consistent with the
3831`table.grow` instruction as well.
3832
3833  [#1654](https://github.com/bytecodealliance/wasmtime/pull/1654)
3834
3835The C API now includes support for enabling logging in Wasmtime.
3836
3837  [#1737](https://github.com/bytecodealliance/wasmtime/pull/1737)
3838
3839### Changed
3840
3841The WASI `proc_exit` function no longer exits the host process. It now unwinds the
3842callstack back to the wasm entrypoint, and the exit value is available from the
3843`Trap::i32_exit_status` method.
3844
3845  [#1646](https://github.com/bytecodealliance/wasmtime/pull/1646)
3846
3847The WebAssembly [multi-value](https://github.com/WebAssembly/multi-value/) proposal
3848is now enabled by default.
3849
3850  [#1667](https://github.com/bytecodealliance/wasmtime/pull/1667)
3851
3852The 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.
3853
3854  [#1761](https://github.com/bytecodealliance/wasmtime/pull/1761)
3855
3856--------------------------------------------------------------------------------
3857
3858## 0.16.0
3859
3860Released 2020-04-29.
3861
3862### Added
3863
3864* The `Instance` struct has new accessors, `get_func`, `get_table`,
3865  `get_memory`, and `get_global` for quickly looking up exported
3866  functions, tables, memories, and globals by name.
3867  [#1524](https://github.com/bytecodealliance/wasmtime/pull/1524)
3868
3869* The C API has a number of new `wasmtime_*` functions which return error
3870  objects to get detailed error information when an API fails.
3871  [#1467](https://github.com/bytecodealliance/wasmtime/pull/1467)
3872
3873* Users now have fine-grained control over creation of instances of `Memory`
3874  with a new `MemoryCreator` trait.
3875  [#1400](https://github.com/bytecodealliance/wasmtime/pull/1400)
3876
3877* Go bindings for Wasmtime are [now available][go-bindings].
3878  [#1481](https://github.com/bytecodealliance/wasmtime/pull/1481)
3879
3880* APIs for looking up values in a `Linker` have been added.
3881  [#1480](https://github.com/bytecodealliance/wasmtime/pull/1480)
3882
3883* Preliminary support for AArch64, also known as ARM64.
3884  [#1581](https://github.com/bytecodealliance/wasmtime/pull/1581)
3885
3886[go-bindings]: https://github.com/bytecodealliance/wasmtime-go
3887
3888### Changed
3889
3890* `Instance::exports` now returns `Export` objects which contain
3891  the `name`s of the exports in addition to their `Extern` definitions,
3892  so it's no longer necessary to use `Module::exports` to obtain the
3893  export names.
3894  [#1524](https://github.com/bytecodealliance/wasmtime/pull/1524)
3895
3896* The `Func::call` API has changed its error type from `Trap` to `anyhow::Error`
3897  to distinguish between wasm traps and runtime violations (like the wrong
3898  number of parameters).
3899  [#1467](https://github.com/bytecodealliance/wasmtime/pull/1467)
3900
3901* A number of `wasmtime_linker_*` and `wasmtime_config_*` C APIs have new type
3902  signatures which reflect returning errors.
3903  [#1467](https://github.com/bytecodealliance/wasmtime/pull/1467)
3904
3905* Bindings for .NET have moved to
3906  https://github.com/bytecodealliance/wasmtime-dotnet.
3907  [#1477](https://github.com/bytecodealliance/wasmtime/pull/1477)
3908
3909* Passing too many imports to `Instance::new` is now considered an error.
3910  [#1478](https://github.com/bytecodealliance/wasmtime/pull/1478)
3911
3912### Fixed
3913
3914* Spurious segfaults due to out-of-stack conditions when handling signals have
3915  been fixed.
3916  [#1315](https://github.com/bytecodealliance/wasmtime/pull/1315)
3917
3918--------------------------------------------------------------------------------
3919
3920## 0.15.0
3921
3922Released 2020-03-31.
3923
3924### Fixed
3925
3926Full release produced for all artifacts to account for hiccups in 0.13.0 and
39270.14.0.
3928
3929--------------------------------------------------------------------------------
3930
3931## 0.14.0
3932
3933*This version ended up not getting a full release*
3934
3935### Fixed
3936
3937Fix build errors in wasi-common on Windows.
3938
3939--------------------------------------------------------------------------------
3940
3941## 0.13.0
3942
3943Released 2020-03-24.
3944
3945### Added
3946
3947* Lots of documentation of `wasmtime` has been updated. Be sure to check out the
3948  [book](https://bytecodealliance.github.io/wasmtime/) and [API
3949  documentation](https://bytecodealliance.github.io/wasmtime/api/wasmtime/)!
3950
3951* All wasmtime example programs are now in a top-level `examples` directory and
3952  are available in both C and Rust.
3953  [#1286](https://github.com/bytecodealliance/wasmtime/pull/1286)
3954
3955* A `wasmtime::Linker` type was added to conveniently link link wasm modules
3956  together and create instances that reference one another.
3957  [#1384](https://github.com/bytecodealliance/wasmtime/pull/1384)
3958
3959* Wasmtime now has "jitdump" support enabled by default which allows [profiling
3960  wasm code on linux][jitdump].
3961  [#1310](https://github.com/bytecodealliance/wasmtime/pull/1310)
3962
3963* The `wasmtime::Caller` type now exists as a first-class way to access the
3964  caller's exports, namely memory, when implementing host APIs. This can be the
3965  first argument of functions defined with `Func::new` or `Func::wrap` which
3966  allows easily implementing methods which take a pointer into wasm memory. Note
3967  that this only works for accessing the caller's `Memory` for now and it must
3968  be exported. This will eventually be replaced with a more general-purpose
3969  mechanism like interface types.
3970  [#1290](https://github.com/bytecodealliance/wasmtime/pull/1290)
3971
3972* The bulk memory proposal has been fully implemented.
3973  [#1264](https://github.com/bytecodealliance/wasmtime/pull/1264)
3974  [#976](https://github.com/bytecodealliance/wasmtime/pull/976)
3975
3976* Virtual file support has been added to `wasi-common`.
3977  [#701](https://github.com/bytecodealliance/wasmtime/pull/701)
3978
3979* The C API has been enhanced with a Wasmtime-specific `wasmtime_wat2wasm` to
3980  parse `*.wat` files via the C API.
3981  [#1206](https://github.com/bytecodealliance/wasmtime/pull/1206)
3982
3983[jitdump]: https://bytecodealliance.github.io/wasmtime/examples-profiling.html
3984
3985### Changed
3986
3987* The `wast` and `wasm2obj` standalone binaries have been removed. They're
3988  available via the `wasmtime wast` and `wasmtime wasm2obj` subcommands.
3989  [#1372](https://github.com/bytecodealliance/wasmtime/pull/1372)
3990
3991* The `wasi-common` crate now uses the new `wiggle` crate to auto-generate a
3992  trait which is implemented for the current wasi snapshot.
3993  [#1202](https://github.com/bytecodealliance/wasmtime/pull/1202)
3994
3995* Wasmtime no longer has a dependency on a C++ compiler.
3996  [#1365](https://github.com/bytecodealliance/wasmtime/pull/1365)
3997
3998* The `Func::wrapN` APIs have been consolidated into one `Func::wrap` API.
3999  [#1363](https://github.com/bytecodealliance/wasmtime/pull/1363)
4000
4001* The `Callable` trait has been removed and now `Func::new` takes a closure
4002  directly.
4003  [#1363](https://github.com/bytecodealliance/wasmtime/pull/1363)
4004
4005* The Cranelift repository has been merged into the Wasmtime repository.
4006
4007* Support for interface types has been temporarily removed.
4008  [#1292](https://github.com/bytecodealliance/wasmtime/pull/1292)
4009
4010* The exit code of the `wasmtime` CLI has changed if the program traps.
4011  [#1274](https://github.com/bytecodealliance/wasmtime/pull/1274)
4012
4013* The `wasmtime` CLI now logs to stderr by default and the `-d` flag has been
4014  renamed to `--log-to-file`.
4015  [#1266](https://github.com/bytecodealliance/wasmtime/pull/1266)
4016
4017* Values cannot cross `Store` objects, meaning you can't instantiate a module
4018  with values from different stores nor pass values from different stores into
4019  methods.
4020  [#1016](https://github.com/bytecodealliance/wasmtime/pull/1016)
4021
4022--------------------------------------------------------------------------------
4023
4024## 0.12.0
4025
4026Released 2020-02-26.
4027
4028### Added
4029
4030* Support for the [WebAssembly text annotations proposal][annotations-proposal]
4031  has been added.
4032  [#998](https://github.com/bytecodealliance/wasmtime/pull/998)
4033
4034* An initial C API for instantiating WASI modules has been added.
4035  [#977](https://github.com/bytecodealliance/wasmtime/pull/977)
4036
4037* A new suite of `Func::getN` functions have been added to the `wasmtime` API to
4038  call statically-known function signatures in a highly optimized fashion.
4039  [#955](https://github.com/bytecodealliance/wasmtime/pull/955)
4040
4041* Initial support for profiling JIT code through perf jitdump has been added.
4042  [#360](https://github.com/bytecodealliance/wasmtime/pull/360)
4043
4044* More CLI flags corresponding to proposed WebAssembly features have been added.
4045  [#917](https://github.com/bytecodealliance/wasmtime/pull/917)
4046
4047[annotations-proposal]: https://github.com/webassembly/annotations
4048
4049### Changed
4050
4051* The `wasmtime` CLI as well as embedding API will optimize WebAssembly code by
4052  default now.
4053  [#973](https://github.com/bytecodealliance/wasmtime/pull/973)
4054  [#988](https://github.com/bytecodealliance/wasmtime/pull/988)
4055
4056* The `verifier` pass in Cranelift is now no longer run by default when using
4057  the embedding API.
4058  [#882](https://github.com/bytecodealliance/wasmtime/pull/882)
4059
4060### Fixed
4061
4062* Code caching now accurately accounts for optimization levels, ensuring that if
4063  you ask for optimized code you're not accidentally handed unoptimized code
4064  from the cache.
4065  [#974](https://github.com/bytecodealliance/wasmtime/pull/974)
4066
4067* Automated releases for tags should be up and running again, along with
4068  automatic publication of the `wasmtime` Python package.
4069  [#971](https://github.com/bytecodealliance/wasmtime/pull/971)
4070