Repository: bytecodealliance/wasmtime
Pull request #8045 (2024-03-04 20:02:17)

wasmtime-wasi: move bindings to its own file, move runtime to its own mod
Nonfunctonal change, just code motion: put `pub mod bindings` into its own file, and move all the runtime related stuff into its own `pub mod runtime`. Wrote a doc comment for runtime.

<!--
Please make sure you include the following information:

- If this work has been discussed elsewhere, please include a link to that
  conversation. If it was discussed in an issue, just mention "issue #...".

- Explain why this change is needed. If the details are in an issue already,
  this can be brief.

Our development process is documented in the Wasmtime book:
https://docs.wasmtime.dev/contributing-development-process.html

Please ensure all communication follows the code of conduct:
https://github.com/bytecodealliance/wasmtime/blob/main/CODE_OF_CONDUCT.md
-->



Patch:
diff --git a/Cargo.lock b/Cargo.lock
index def959fc7..338273db2 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -225,7 +225,7 @@ checksum = "7f30e7476521f6f8af1a1c4c0b8cc94f0bee37d91763d0ca2665f299b6cd8aec"
 
 [[package]]
 name = "byte-array-literals"
-version = "19.0.0"
+version = "20.0.0"
 
 [[package]]
 name = "byteorder"
@@ -559,7 +559,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift"
-version = "0.106.0"
+version = "0.107.0"
 dependencies = [
  "cranelift-codegen",
  "cranelift-frontend",
@@ -567,14 +567,14 @@ dependencies = [
 
 [[package]]
 name = "cranelift-bforest"
-version = "0.106.0"
+version = "0.107.0"
 dependencies = [
  "cranelift-entity",
 ]
 
 [[package]]
 name = "cranelift-codegen"
-version = "0.106.0"
+version = "0.107.0"
 dependencies = [
  "anyhow",
  "bincode",
@@ -602,25 +602,25 @@ dependencies = [
 
 [[package]]
 name = "cranelift-codegen-meta"
-version = "0.106.0"
+version = "0.107.0"
 dependencies = [
  "cranelift-codegen-shared",
 ]
 
 [[package]]
 name = "cranelift-codegen-shared"
-version = "0.106.0"
+version = "0.107.0"
 
 [[package]]
 name = "cranelift-control"
-version = "0.106.0"
+version = "0.107.0"
 dependencies = [
  "arbitrary",
 ]
 
 [[package]]
 name = "cranelift-entity"
-version = "0.106.0"
+version = "0.107.0"
 dependencies = [
  "serde",
  "serde_derive",
@@ -659,7 +659,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-frontend"
-version = "0.106.0"
+version = "0.107.0"
 dependencies = [
  "cranelift-codegen",
  "hashbrown 0.14.0",
@@ -683,7 +683,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-interpreter"
-version = "0.106.0"
+version = "0.107.0"
 dependencies = [
  "cranelift-codegen",
  "cranelift-entity",
@@ -697,7 +697,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-isle"
-version = "0.106.0"
+version = "0.107.0"
 dependencies = [
  "codespan-reporting",
  "log",
@@ -706,7 +706,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-jit"
-version = "0.106.0"
+version = "0.107.0"
 dependencies = [
  "anyhow",
  "cranelift",
@@ -727,7 +727,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-module"
-version = "0.106.0"
+version = "0.107.0"
 dependencies = [
  "anyhow",
  "cranelift-codegen",
@@ -739,7 +739,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-native"
-version = "0.106.0"
+version = "0.107.0"
 dependencies = [
  "cranelift-codegen",
  "libc",
@@ -748,7 +748,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-object"
-version = "0.106.0"
+version = "0.107.0"
 dependencies = [
  "anyhow",
  "cranelift-codegen",
@@ -763,7 +763,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-reader"
-version = "0.106.0"
+version = "0.107.0"
 dependencies = [
  "anyhow",
  "cranelift-codegen",
@@ -773,7 +773,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-serde"
-version = "0.106.0"
+version = "0.107.0"
 dependencies = [
  "clap",
  "cranelift-codegen",
@@ -820,7 +820,7 @@ dependencies = [
 
 [[package]]
 name = "cranelift-wasm"
-version = "0.106.0"
+version = "0.107.0"
 dependencies = [
  "cranelift-codegen",
  "cranelift-entity",
@@ -1030,7 +1030,7 @@ checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457"
 
 [[package]]
 name = "embedding"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "dlmalloc",
@@ -1785,7 +1785,7 @@ dependencies = [
 
 [[package]]
 name = "min-platform-host"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "libloading",
@@ -2954,7 +2954,7 @@ checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
 
 [[package]]
 name = "verify-component-adapter"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "wasmparser",
@@ -3004,7 +3004,7 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
 
 [[package]]
 name = "wasi-common"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "bitflags 2.4.1",
@@ -3043,7 +3043,7 @@ dependencies = [
 
 [[package]]
 name = "wasi-preview1-component-adapter"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "byte-array-literals",
  "object",
@@ -3231,7 +3231,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "addr2line",
  "anyhow",
@@ -3277,14 +3277,14 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-asm-macros"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "cfg-if",
 ]
 
 [[package]]
 name = "wasmtime-bench-api"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "cap-std",
@@ -3300,14 +3300,14 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-c-api"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "wasmtime-c-api-impl",
 ]
 
 [[package]]
 name = "wasmtime-c-api-impl"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "cap-std",
@@ -3324,7 +3324,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-c-api-macros"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -3332,7 +3332,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-cache"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "base64",
@@ -3354,7 +3354,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-cli"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -3412,7 +3412,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-cli-flags"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "clap",
@@ -3425,7 +3425,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-component-macro"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "component-macro-test-helpers",
@@ -3441,11 +3441,11 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-component-util"
-version = "19.0.0"
+version = "20.0.0"
 
 [[package]]
 name = "wasmtime-cranelift"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "cfg-if",
@@ -3468,7 +3468,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-cranelift-shared"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "cranelift-codegen",
@@ -3482,7 +3482,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-environ"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "bincode",
@@ -3523,7 +3523,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-explorer"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "capstone",
@@ -3537,7 +3537,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-fiber"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "backtrace",
@@ -3606,7 +3606,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-jit-debug"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "object",
  "once_cell",
@@ -3616,7 +3616,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-jit-icache-coherence"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "cfg-if",
  "libc",
@@ -3625,7 +3625,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-runtime"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "cc",
@@ -3656,11 +3656,11 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-slab"
-version = "19.0.0"
+version = "20.0.0"
 
 [[package]]
 name = "wasmtime-types"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "cranelift-entity",
  "serde",
@@ -3671,7 +3671,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-versioned-export-macros"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -3680,7 +3680,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-wasi"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -3713,7 +3713,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-wasi-http"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -3739,7 +3739,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-wasi-nn"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "cap-std",
@@ -3756,7 +3756,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-wasi-threads"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "log",
@@ -3767,7 +3767,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-wast"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "log",
@@ -3777,7 +3777,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-winch"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "cranelift-codegen",
@@ -3792,7 +3792,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-wit-bindgen"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "heck",
@@ -3802,7 +3802,7 @@ dependencies = [
 
 [[package]]
 name = "wasmtime-wmemcheck"
-version = "19.0.0"
+version = "20.0.0"
 
 [[package]]
 name = "wast"
@@ -3864,7 +3864,7 @@ dependencies = [
 
 [[package]]
 name = "wiggle"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "async-trait",
@@ -3881,7 +3881,7 @@ dependencies = [
 
 [[package]]
 name = "wiggle-generate"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "anyhow",
  "heck",
@@ -3894,7 +3894,7 @@ dependencies = [
 
 [[package]]
 name = "wiggle-macro"
-version = "19.0.0"
+version = "20.0.0"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -3949,7 +3949,7 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
 
 [[package]]
 name = "winch-codegen"
-version = "0.17.0"
+version = "0.18.0"
 dependencies = [
  "anyhow",
  "cranelift-codegen",
diff --git a/Cargo.toml b/Cargo.toml
index 6412d17a7..f68a5278e 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -130,7 +130,7 @@ exclude = [
 ]
 
 [workspace.package]
-version = "19.0.0"
+version = "20.0.0"
 authors = ["The Wasmtime Project Developers"]
 edition = "2021"
 # Wasmtime's current policy is that this number can be no larger than the
@@ -152,58 +152,58 @@ all = 'allow'
 
 [workspace.dependencies]
 arbitrary = { version = "1.3.1" }
-wasmtime-wmemcheck = { path = "crates/wmemcheck", version = "=19.0.0" }
-wasmtime = { path = "crates/wasmtime", version = "19.0.0", default-features = false }
-wasmtime-c-api-macros = { path = "crates/c-api-macros", version = "=19.0.0" }
-wasmtime-cache = { path = "crates/cache", version = "=19.0.0" }
-wasmtime-cli-flags = { path = "crates/cli-flags", version = "=19.0.0" }
-wasmtime-cranelift = { path = "crates/cranelift", version = "=19.0.0" }
-wasmtime-cranelift-shared = { path = "crates/cranelift-shared", version = "=19.0.0" }
-wasmtime-winch = { path = "crates/winch", version = "=19.0.0" }
-wasmtime-environ = { path = "crates/environ", version = "=19.0.0" }
-wasmtime-explorer = { path = "crates/explorer", version = "=19.0.0" }
-wasmtime-fiber = { path = "crates/fiber", version = "=19.0.0" }
-wasmtime-types = { path = "crates/types", version = "19.0.0" }
-wasmtime-jit-debug = { path = "crates/jit-debug", version = "=19.0.0" }
-wasmtime-runtime = { path = "crates/runtime", version = "=19.0.0" }
-wasmtime-wast = { path = "crates/wast", version = "=19.0.0" }
-wasmtime-wasi = { path = "crates/wasi", version = "19.0.0", default-features = false }
-wasmtime-wasi-http = { path = "crates/wasi-http", version = "=19.0.0", default-features = false }
-wasmtime-wasi-nn = { path = "crates/wasi-nn", version = "19.0.0" }
-wasmtime-wasi-threads = { path = "crates/wasi-threads", version = "19.0.0" }
-wasmtime-component-util = { path = "crates/component-util", version = "=19.0.0" }
-wasmtime-component-macro = { path = "crates/component-macro", version = "=19.0.0" }
-wasmtime-asm-macros = { path = "crates/asm-macros", version = "=19.0.0" }
-wasmtime-versioned-export-macros = { path = "crates/versioned-export-macros", version = "=19.0.0" }
-wasmtime-slab = { path = "crates/slab", version = "=19.0.0" }
+wasmtime-wmemcheck = { path = "crates/wmemcheck", version = "=20.0.0" }
+wasmtime = { path = "crates/wasmtime", version = "20.0.0", default-features = false }
+wasmtime-c-api-macros = { path = "crates/c-api-macros", version = "=20.0.0" }
+wasmtime-cache = { path = "crates/cache", version = "=20.0.0" }
+wasmtime-cli-flags = { path = "crates/cli-flags", version = "=20.0.0" }
+wasmtime-cranelift = { path = "crates/cranelift", version = "=20.0.0" }
+wasmtime-cranelift-shared = { path = "crates/cranelift-shared", version = "=20.0.0" }
+wasmtime-winch = { path = "crates/winch", version = "=20.0.0" }
+wasmtime-environ = { path = "crates/environ", version = "=20.0.0" }
+wasmtime-explorer = { path = "crates/explorer", version = "=20.0.0" }
+wasmtime-fiber = { path = "crates/fiber", version = "=20.0.0" }
+wasmtime-types = { path = "crates/types", version = "20.0.0" }
+wasmtime-jit-debug = { path = "crates/jit-debug", version = "=20.0.0" }
+wasmtime-runtime = { path = "crates/runtime", version = "=20.0.0" }
+wasmtime-wast = { path = "crates/wast", version = "=20.0.0" }
+wasmtime-wasi = { path = "crates/wasi", version = "20.0.0", default-features = false }
+wasmtime-wasi-http = { path = "crates/wasi-http", version = "=20.0.0", default-features = false }
+wasmtime-wasi-nn = { path = "crates/wasi-nn", version = "20.0.0" }
+wasmtime-wasi-threads = { path = "crates/wasi-threads", version = "20.0.0" }
+wasmtime-component-util = { path = "crates/component-util", version = "=20.0.0" }
+wasmtime-component-macro = { path = "crates/component-macro", version = "=20.0.0" }
+wasmtime-asm-macros = { path = "crates/asm-macros", version = "=20.0.0" }
+wasmtime-versioned-export-macros = { path = "crates/versioned-export-macros", version = "=20.0.0" }
+wasmtime-slab = { path = "crates/slab", version = "=20.0.0" }
 component-test-util = { path = "crates/misc/component-test-util" }
 component-fuzz-util = { path = "crates/misc/component-fuzz-util" }
-wiggle = { path = "crates/wiggle", version = "=19.0.0", default-features = false }
-wiggle-macro = { path = "crates/wiggle/macro", version = "=19.0.0" }
-wiggle-generate = { path = "crates/wiggle/generate", version = "=19.0.0" }
-wasi-common = { path = "crates/wasi-common", version = "=19.0.0", default-features = false }
+wiggle = { path = "crates/wiggle", version = "=20.0.0", default-features = false }
+wiggle-macro = { path = "crates/wiggle/macro", version = "=20.0.0" }
+wiggle-generate = { path = "crates/wiggle/generate", version = "=20.0.0" }
+wasi-common = { path = "crates/wasi-common", version = "=20.0.0", default-features = false }
 wasmtime-fuzzing = { path = "crates/fuzzing" }
-wasmtime-jit-icache-coherence = { path = "crates/jit-icache-coherence", version = "=19.0.0" }
-wasmtime-wit-bindgen = { path = "crates/wit-bindgen", version = "=19.0.0" }
+wasmtime-jit-icache-coherence = { path = "crates/jit-icache-coherence", version = "=20.0.0" }
+wasmtime-wit-bindgen = { path = "crates/wit-bindgen", version = "=20.0.0" }
 test-programs-artifacts = { path = 'crates/test-programs/artifacts' }
 
-cranelift-wasm = { path = "cranelift/wasm", version = "0.106.0" }
-cranelift-codegen = { path = "cranelift/codegen", version = "0.106.0", default-features = false, features = ["std", "unwind"] }
-cranelift-frontend = { path = "cranelift/frontend", version = "0.106.0" }
-cranelift-entity = { path = "cranelift/entity", version = "0.106.0" }
-cranelift-native = { path = "cranelift/native", version = "0.106.0" }
-cranelift-module = { path = "cranelift/module", version = "0.106.0" }
-cranelift-interpreter = { path = "cranelift/interpreter", version = "0.106.0" }
-cranelift-reader = { path = "cranelift/reader", version = "0.106.0" }
+cranelift-wasm = { path = "cranelift/wasm", version = "0.107.0" }
+cranelift-codegen = { path = "cranelift/codegen", version = "0.107.0", default-features = false, features = ["std", "unwind"] }
+cranelift-frontend = { path = "cranelift/frontend", version = "0.107.0" }
+cranelift-entity = { path = "cranelift/entity", version = "0.107.0" }
+cranelift-native = { path = "cranelift/native", version = "0.107.0" }
+cranelift-module = { path = "cranelift/module", version = "0.107.0" }
+cranelift-interpreter = { path = "cranelift/interpreter", version = "0.107.0" }
+cranelift-reader = { path = "cranelift/reader", version = "0.107.0" }
 cranelift-filetests = { path = "cranelift/filetests" }
-cranelift-object = { path = "cranelift/object", version = "0.106.0" }
-cranelift-jit = { path = "cranelift/jit", version = "0.106.0" }
+cranelift-object = { path = "cranelift/object", version = "0.107.0" }
+cranelift-jit = { path = "cranelift/jit", version = "0.107.0" }
 cranelift-fuzzgen = { path = "cranelift/fuzzgen" }
-cranelift-bforest = { path = "cranelift/bforest", version = "0.106.0" }
-cranelift-control = { path = "cranelift/control", version = "0.106.0" }
-cranelift = { path = "cranelift/umbrella", version = "0.106.0" }
+cranelift-bforest = { path = "cranelift/bforest", version = "0.107.0" }
+cranelift-control = { path = "cranelift/control", version = "0.107.0" }
+cranelift = { path = "cranelift/umbrella", version = "0.107.0" }
 
-winch-codegen = { path = "winch/codegen", version = "=0.17.0" }
+winch-codegen = { path = "winch/codegen", version = "=0.18.0" }
 winch-filetests = { path = "winch/filetests" }
 winch-test-macros = { path = "winch/test-macros" }
 
diff --git a/RELEASES.md b/RELEASES.md
index c76d641ec..93af3bd3f 100644
--- a/RELEASES.md
+++ b/RELEASES.md
@@ -1,5 +1,15 @@
 --------------------------------------------------------------------------------
 
+## 20.0.0
+
+Unreleased.
+
+### Added
+
+### Changed
+
+--------------------------------------------------------------------------------
+
 ## 19.0.0
 
 Unreleased.
diff --git a/cranelift/bforest/Cargo.toml b/cranelift/bforest/Cargo.toml
index 1fa5bcac9..88051cd9a 100644
--- a/cranelift/bforest/Cargo.toml
+++ b/cranelift/bforest/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-bforest"
-version = "0.106.0"
+version = "0.107.0"
 description = "A forest of B+-trees"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-bforest"
diff --git a/cranelift/codegen/Cargo.toml b/cranelift/codegen/Cargo.toml
index 5c99c9faa..b6b915fc1 100644
--- a/cranelift/codegen/Cargo.toml
+++ b/cranelift/codegen/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-codegen"
-version = "0.106.0"
+version = "0.107.0"
 description = "Low-level code generator library"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-codegen"
@@ -19,7 +19,7 @@ workspace = true
 anyhow = { workspace = true, optional = true }
 bumpalo = "3"
 capstone = { workspace = true, optional = true }
-cranelift-codegen-shared = { path = "./shared", version = "0.106.0" }
+cranelift-codegen-shared = { path = "./shared", version = "0.107.0" }
 cranelift-entity = { workspace = true }
 cranelift-bforest = { workspace = true }
 cranelift-control = { workspace = true }
@@ -44,8 +44,8 @@ criterion = { version = "0.5.0", features = ["html_reports"] }
 similar = "2.1.0"
 
 [build-dependencies]
-cranelift-codegen-meta = { path = "meta", version = "0.106.0" }
-cranelift-isle = { path = "../isle/isle", version = "=0.106.0" }
+cranelift-codegen-meta = { path = "meta", version = "0.107.0" }
+cranelift-isle = { path = "../isle/isle", version = "=0.107.0" }
 
 [features]
 default = ["std", "unwind", "host-arch", "timing"]
diff --git a/cranelift/codegen/meta/Cargo.toml b/cranelift/codegen/meta/Cargo.toml
index d0f0ee6bb..1c32bc356 100644
--- a/cranelift/codegen/meta/Cargo.toml
+++ b/cranelift/codegen/meta/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 name = "cranelift-codegen-meta"
 authors = ["The Cranelift Project Developers"]
-version = "0.106.0"
+version = "0.107.0"
 description = "Metaprogram for cranelift-codegen code generator library"
 license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
@@ -15,4 +15,4 @@ workspace = true
 rustdoc-args = [ "--document-private-items" ]
 
 [dependencies]
-cranelift-codegen-shared = { path = "../shared", version = "0.106.0" }
+cranelift-codegen-shared = { path = "../shared", version = "0.107.0" }
diff --git a/cranelift/codegen/shared/Cargo.toml b/cranelift/codegen/shared/Cargo.toml
index 59e5e22ec..a4e2db9be 100644
--- a/cranelift/codegen/shared/Cargo.toml
+++ b/cranelift/codegen/shared/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-codegen-shared"
-version = "0.106.0"
+version = "0.107.0"
 description = "For code shared between cranelift-codegen-meta and cranelift-codegen"
 license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
diff --git a/cranelift/control/Cargo.toml b/cranelift/control/Cargo.toml
index 64a6bf7dc..f72296146 100644
--- a/cranelift/control/Cargo.toml
+++ b/cranelift/control/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-control"
-version = "0.106.0"
+version = "0.107.0"
 description = "White-box fuzz testing framework"
 license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
diff --git a/cranelift/entity/Cargo.toml b/cranelift/entity/Cargo.toml
index 4b16b6a0a..c0d9ade9c 100644
--- a/cranelift/entity/Cargo.toml
+++ b/cranelift/entity/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-entity"
-version = "0.106.0"
+version = "0.107.0"
 description = "Data structures using entity references as mapping keys"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-entity"
diff --git a/cranelift/frontend/Cargo.toml b/cranelift/frontend/Cargo.toml
index 896168e36..366644e25 100644
--- a/cranelift/frontend/Cargo.toml
+++ b/cranelift/frontend/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-frontend"
-version = "0.106.0"
+version = "0.107.0"
 description = "Cranelift IR builder helper"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-frontend"
diff --git a/cranelift/interpreter/Cargo.toml b/cranelift/interpreter/Cargo.toml
index e59b31040..0f840a3ca 100644
--- a/cranelift/interpreter/Cargo.toml
+++ b/cranelift/interpreter/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-interpreter"
-version = "0.106.0"
+version = "0.107.0"
 authors = ["The Cranelift Project Developers"]
 description = "Interpret Cranelift IR"
 repository = "https://github.com/bytecodealliance/wasmtime"
diff --git a/cranelift/isle/isle/Cargo.toml b/cranelift/isle/isle/Cargo.toml
index 08fa18a2b..eb92a1ac1 100644
--- a/cranelift/isle/isle/Cargo.toml
+++ b/cranelift/isle/isle/Cargo.toml
@@ -6,7 +6,7 @@ license = "Apache-2.0 WITH LLVM-exception"
 name = "cranelift-isle"
 readme = "../README.md"
 repository = "https://github.com/bytecodealliance/wasmtime/tree/main/cranelift/isle"
-version = "0.106.0"
+version = "0.107.0"
 
 [lints]
 workspace = true
diff --git a/cranelift/jit/Cargo.toml b/cranelift/jit/Cargo.toml
index c06898fc9..1bdeecea4 100644
--- a/cranelift/jit/Cargo.toml
+++ b/cranelift/jit/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-jit"
-version = "0.106.0"
+version = "0.107.0"
 authors = ["The Cranelift Project Developers"]
 description = "A JIT library backed by Cranelift"
 repository = "https://github.com/bytecodealliance/wasmtime"
diff --git a/cranelift/module/Cargo.toml b/cranelift/module/Cargo.toml
index 66ec7e2fe..1d6b49dfe 100644
--- a/cranelift/module/Cargo.toml
+++ b/cranelift/module/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-module"
-version = "0.106.0"
+version = "0.107.0"
 authors = ["The Cranelift Project Developers"]
 description = "Support for linking functions and data with Cranelift"
 repository = "https://github.com/bytecodealliance/wasmtime"
diff --git a/cranelift/native/Cargo.toml b/cranelift/native/Cargo.toml
index be8c2a5e5..ccab301fd 100644
--- a/cranelift/native/Cargo.toml
+++ b/cranelift/native/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-native"
-version = "0.106.0"
+version = "0.107.0"
 authors = ["The Cranelift Project Developers"]
 description = "Support for targeting the host with Cranelift"
 documentation = "https://docs.rs/cranelift-native"
diff --git a/cranelift/object/Cargo.toml b/cranelift/object/Cargo.toml
index 1086055a6..6b254fa51 100644
--- a/cranelift/object/Cargo.toml
+++ b/cranelift/object/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-object"
-version = "0.106.0"
+version = "0.107.0"
 authors = ["The Cranelift Project Developers"]
 description = "Emit Cranelift output to native object files with `object`"
 repository = "https://github.com/bytecodealliance/wasmtime"
diff --git a/cranelift/reader/Cargo.toml b/cranelift/reader/Cargo.toml
index efbd15335..04da710e6 100644
--- a/cranelift/reader/Cargo.toml
+++ b/cranelift/reader/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift-reader"
-version = "0.106.0"
+version = "0.107.0"
 description = "Cranelift textual IR reader"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift-reader"
diff --git a/cranelift/serde/Cargo.toml b/cranelift/serde/Cargo.toml
index 8577674ea..3f81e697e 100644
--- a/cranelift/serde/Cargo.toml
+++ b/cranelift/serde/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-serde"
-version = "0.106.0"
+version = "0.107.0"
 authors = ["The Cranelift Project Developers"]
 description = "Serializer/Deserializer for Cranelift IR"
 repository = "https://github.com/bytecodealliance/wasmtime"
diff --git a/cranelift/umbrella/Cargo.toml b/cranelift/umbrella/Cargo.toml
index 83b6d8536..498b23591 100644
--- a/cranelift/umbrella/Cargo.toml
+++ b/cranelift/umbrella/Cargo.toml
@@ -1,7 +1,7 @@
 [package]
 authors = ["The Cranelift Project Developers"]
 name = "cranelift"
-version = "0.106.0"
+version = "0.107.0"
 description = "Umbrella for commonly-used cranelift crates"
 license = "Apache-2.0 WITH LLVM-exception"
 documentation = "https://docs.rs/cranelift"
diff --git a/cranelift/wasm/Cargo.toml b/cranelift/wasm/Cargo.toml
index d71ef1d2f..115618cf2 100644
--- a/cranelift/wasm/Cargo.toml
+++ b/cranelift/wasm/Cargo.toml
@@ -1,6 +1,6 @@
 [package]
 name = "cranelift-wasm"
-version = "0.106.0"
+version = "0.107.0"
 authors = ["The Cranelift Project Developers"]
 description = "Translator from WebAssembly to Cranelift IR"
 documentation = "https://docs.rs/cranelift-wasm"
diff --git a/crates/c-api/include/wasmtime.h b/crates/c-api/include/wasmtime.h
index 6ba3e76b8..66ee2408b 100644
--- a/crates/c-api/include/wasmtime.h
+++ b/crates/c-api/include/wasmtime.h
@@ -206,11 +206,11 @@
 /**
  * \brief Wasmtime version string.
  */
-#define WASMTIME_VERSION "19.0.0"
+#define WASMTIME_VERSION "20.0.0"
 /**
  * \brief Wasmtime major version number.
  */
-#define WASMTIME_VERSION_MAJOR 19
+#define WASMTIME_VERSION_MAJOR 20
 /**
  * \brief Wasmtime minor version number.
  */
diff --git a/crates/wasi-http/src/body.rs b/crates/wasi-http/src/body.rs
index ae8e9ff9a..64819e027 100644
--- a/crates/wasi-http/src/body.rs
+++ b/crates/wasi-http/src/body.rs
@@ -10,7 +10,8 @@ use std::task::{Context, Poll};
 use std::{pin::Pin, sync::Arc, time::Duration};
 use tokio::sync::{mpsc, oneshot};
 use wasmtime_wasi::{
-    poll_noop, AbortOnDropJoinHandle, HostInputStream, HostOutputStream, StreamError, Subscribe,
+    runtime::{poll_noop, AbortOnDropJoinHandle},
+    HostInputStream, HostOutputStream, StreamError, Subscribe,
 };
 
 pub type HyperIncomingBody = BoxBody<Bytes, types::ErrorCode>;
@@ -35,7 +36,7 @@ impl BodyWithTimeout {
             inner,
             between_bytes_timeout,
             reset_sleep: true,
-            timeout: Box::pin(wasmtime_wasi::with_ambient_tokio_runtime(|| {
+            timeout: Box::pin(wasmtime_wasi::runtime::with_ambient_tokio_runtime(|| {
                 tokio::time::sleep(Duration::new(0, 0))
             })),
         }
diff --git a/crates/wasi-http/src/types.rs b/crates/wasi-http/src/types.rs
index 5d8e9e5c4..6966ed08b 100644
--- a/crates/wasi-http/src/types.rs
+++ b/crates/wasi-http/src/types.rs
@@ -15,7 +15,7 @@ use std::time::Duration;
 use tokio::net::TcpStream;
 use tokio::time::timeout;
 use wasmtime::component::{Resource, ResourceTable};
-use wasmtime_wasi::{AbortOnDropJoinHandle, Subscribe};
+use wasmtime_wasi::{runtime::AbortOnDropJoinHandle, Subscribe};
 
 /// Capture the state necessary for use in the wasi-http API implementation.
 pub struct WasiHttpCtx;
@@ -122,7 +122,7 @@ pub fn default_send_request(
         between_bytes_timeout,
     }: OutgoingRequest,
 ) -> wasmtime::Result<Resource<HostFutureIncomingResponse>> {
-    let handle = wasmtime_wasi::spawn(async move {
+    let handle = wasmtime_wasi::runtime::spawn(async move {
         let resp = handler(
             authority,
             use_tls,
@@ -212,7 +212,7 @@ async fn handler(
             .map_err(|_| types::ErrorCode::ConnectionTimeout)?
             .map_err(hyper_request_error)?;
 
-            let worker = wasmtime_wasi::spawn(async move {
+            let worker = wasmtime_wasi::runtime::spawn(async move {
                 match conn.await {
                     Ok(()) => {}
                     // TODO: shouldn't throw away this error and ideally should
@@ -234,7 +234,7 @@ async fn handler(
         .map_err(|_| types::ErrorCode::ConnectionTimeout)?
         .map_err(hyper_request_error)?;
 
-        let worker = wasmtime_wasi::spawn(async move {
+        let worker = wasmtime_wasi::runtime::spawn(async move {
             match conn.await {
                 Ok(()) => {}
                 // TODO: same as above, shouldn't throw this error away.
diff --git a/crates/wasi/src/bindings.rs b/crates/wasi/src/bindings.rs
new file mode 100644
index 000000000..034aaa92d
--- /dev/null
+++ b/crates/wasi/src/bindings.rs
@@ -0,0 +1,120 @@
+// Generate traits for synchronous bindings.
+//
+// Note that this is only done for interfaces which can block, or those which
+// have some functions in `only_imports` below for being async.
+pub mod sync_io {
+    pub(crate) mod _internal {
+        use crate::{FsError, StreamError};
+
+        wasmtime::component::bindgen!({
+            path: "wit",
+            interfaces: "
+                    import wasi:io/poll@0.2.0;
+                    import wasi:io/streams@0.2.0;
+                    import wasi:filesystem/types@0.2.0;
+                ",
+            tracing: true,
+            trappable_error_type: {
+                "wasi:io/streams/stream-error" => StreamError,
+                "wasi:filesystem/types/error-code" => FsError,
+            },
+            with: {
+                "wasi:clocks/wall-clock": crate::bindings::clocks::wall_clock,
+                "wasi:filesystem/types/descriptor": super::super::filesystem::types::Descriptor,
+                "wasi:filesystem/types/directory-entry-stream": super::super::filesystem::types::DirectoryEntryStream,
+                "wasi:io/poll/pollable": super::super::io::poll::Pollable,
+                "wasi:io/streams/input-stream": super::super::io::streams::InputStream,
+                "wasi:io/streams/output-stream": super::super::io::streams::OutputStream,
+                "wasi:io/error/error": super::super::io::error::Error,
+            }
+        });
+    }
+    pub use self::_internal::wasi::{filesystem, io};
+}
+
+wasmtime::component::bindgen!({
+    path: "wit",
+    world: "wasi:cli/imports",
+    tracing: true,
+    async: {
+        // Only these functions are `async` and everything else is sync
+        // meaning that it basically doesn't need to block. These functions
+        // are the only ones that need to block.
+        //
+        // Note that at this time `only_imports` works on function names
+        // which in theory can be shared across interfaces, so this may
+        // need fancier syntax in the future.
+        only_imports: [
+            "[method]descriptor.access-at",
+            "[method]descriptor.advise",
+            "[method]descriptor.change-directory-permissions-at",
+            "[method]descriptor.change-file-permissions-at",
+            "[method]descriptor.create-directory-at",
+            "[method]descriptor.get-flags",
+            "[method]descriptor.get-type",
+            "[method]descriptor.is-same-object",
+            "[method]descriptor.link-at",
+            "[method]descriptor.lock-exclusive",
+            "[method]descriptor.lock-shared",
+            "[method]descriptor.metadata-hash",
+            "[method]descriptor.metadata-hash-at",
+            "[method]descriptor.open-at",
+            "[method]descriptor.read",
+            "[method]descriptor.read-directory",
+            "[method]descriptor.readlink-at",
+            "[method]descriptor.remove-directory-at",
+            "[method]descriptor.rename-at",
+            "[method]descriptor.set-size",
+            "[method]descriptor.set-times",
+            "[method]descriptor.set-times-at",
+            "[method]descriptor.stat",
+            "[method]descriptor.stat-at",
+            "[method]descriptor.symlink-at",
+            "[method]descriptor.sync",
+            "[method]descriptor.sync-data",
+            "[method]descriptor.try-lock-exclusive",
+            "[method]descriptor.try-lock-shared",
+            "[method]descriptor.unlink-file-at",
+            "[method]descriptor.unlock",
+            "[method]descriptor.write",
+            "[method]input-stream.read",
+            "[method]input-stream.blocking-read",
+            "[method]input-stream.blocking-skip",
+            "[method]input-stream.skip",
+            "[method]output-stream.forward",
+            "[method]output-stream.splice",
+            "[method]output-stream.blocking-splice",
+            "[method]output-stream.blocking-flush",
+            "[method]output-stream.blocking-write",
+            "[method]output-stream.blocking-write-and-flush",
+            "[method]output-stream.blocking-write-zeroes-and-flush",
+            "[method]directory-entry-stream.read-directory-entry",
+            "poll",
+            "[method]pollable.block",
+            "[method]pollable.ready",
+        ],
+    },
+    trappable_error_type: {
+        "wasi:io/streams/stream-error" => crate::StreamError,
+        "wasi:filesystem/types/error-code" => crate::FsError,
+        "wasi:sockets/network/error-code" => crate::SocketError,
+    },
+    with: {
+        "wasi:sockets/network/network": super::network::Network,
+        "wasi:sockets/tcp/tcp-socket": super::tcp::TcpSocket,
+        "wasi:sockets/udp/udp-socket": super::udp::UdpSocket,
+        "wasi:sockets/udp/incoming-datagram-stream": super::udp::IncomingDatagramStream,
+        "wasi:sockets/udp/outgoing-datagram-stream": super::udp::OutgoingDatagramStream,
+        "wasi:sockets/ip-name-lookup/resolve-address-stream": super::ip_name_lookup::ResolveAddressStream,
+        "wasi:filesystem/types/directory-entry-stream": super::filesystem::ReaddirIterator,
+        "wasi:filesystem/types/descriptor": super::filesystem::Descriptor,
+        "wasi:io/streams/input-stream": super::stream::InputStream,
+        "wasi:io/streams/output-stream": super::stream::OutputStream,
+        "wasi:io/error/error": super::stream::Error,
+        "wasi:io/poll/pollable": super::poll::Pollable,
+        "wasi:cli/terminal-input/terminal-input": super::stdio::TerminalInput,
+        "wasi:cli/terminal-output/terminal-output": super::stdio::TerminalOutput,
+    },
+});
+
+pub use wasi::*;
diff --git a/crates/wasi/src/filesystem.rs b/crates/wasi/src/filesystem.rs
index a71305501..86bd9398d 100644
--- a/crates/wasi/src/filesystem.rs
+++ b/crates/wasi/src/filesystem.rs
@@ -1,7 +1,6 @@
 use crate::bindings::filesystem::types;
-use crate::{
-    spawn_blocking, AbortOnDropJoinHandle, HostOutputStream, StreamError, Subscribe, TrappableError,
-};
+use crate::runtime::{spawn_blocking, AbortOnDropJoinHandle};
+use crate::{HostOutputStream, StreamError, Subscribe, TrappableError};
 use anyhow::anyhow;
 use bytes::{Bytes, BytesMut};
 use std::io;
diff --git a/crates/wasi/src/host/filesystem/sync.rs b/crates/wasi/src/host/filesystem/sync.rs
index 08b446e45..6d12e50dd 100644
--- a/crates/wasi/src/host/filesystem/sync.rs
+++ b/crates/wasi/src/host/filesystem/sync.rs
@@ -1,7 +1,8 @@
 use crate::bindings::filesystem::types as async_filesystem;
 use crate::bindings::sync_io::filesystem::types as sync_filesystem;
 use crate::bindings::sync_io::io::streams;
-use crate::{in_tokio, FsError, FsResult};
+use crate::runtime::in_tokio;
+use crate::{FsError, FsResult};
 use wasmtime::component::Resource;
 
 impl<T: async_filesystem::Host> sync_filesystem::Host for T {
diff --git a/crates/wasi/src/host/io.rs b/crates/wasi/src/host/io.rs
index 656b31bad..168088d9b 100644
--- a/crates/wasi/src/host/io.rs
+++ b/crates/wasi/src/host/io.rs
@@ -232,7 +232,8 @@ pub mod sync {
         },
         bindings::sync_io::io::poll::Pollable,
         bindings::sync_io::io::streams::{self, InputStream, OutputStream},
-        in_tokio, StreamError, StreamResult, WasiView,
+        runtime::in_tokio,
+        StreamError, StreamResult, WasiView,
     };
     use wasmtime::component::Resource;
 
diff --git a/crates/wasi/src/host/tcp.rs b/crates/wasi/src/host/tcp.rs
index 0f08862f7..11d44d882 100644
--- a/crates/wasi/src/host/tcp.rs
+++ b/crates/wasi/src/host/tcp.rs
@@ -1,5 +1,6 @@
 use crate::host::network::util;
 use crate::network::SocketAddrUse;
+use crate::runtime::with_ambient_tokio_runtime;
 use crate::tcp::{TcpReadStream, TcpSocket, TcpState, TcpWriteStream};
 use crate::{
     bindings::{
@@ -9,7 +10,7 @@ use crate::{
     },
     network::SocketAddressFamily,
 };
-use crate::{with_ambient_tokio_runtime, Pollable, SocketResult, WasiView};
+use crate::{Pollable, SocketResult, WasiView};
 use io_lifetimes::AsSocketlike;
 use rustix::io::Errno;
 use rustix::net::sockopt;
diff --git a/crates/wasi/src/ip_name_lookup.rs b/crates/wasi/src/ip_name_lookup.rs
index 85f5e8e6e..1ab3099a8 100644
--- a/crates/wasi/src/ip_name_lookup.rs
+++ b/crates/wasi/src/ip_name_lookup.rs
@@ -2,7 +2,8 @@ use crate::bindings::sockets::ip_name_lookup::{Host, HostResolveAddressStream};
 use crate::bindings::sockets::network::{ErrorCode, IpAddress, Network};
 use crate::host::network::util;
 use crate::poll::{subscribe, Pollable, Subscribe};
-use crate::{spawn_blocking, AbortOnDropJoinHandle, SocketError, WasiView};
+use crate::runtime::{spawn_blocking, AbortOnDropJoinHandle};
+use crate::{SocketError, WasiView};
 use anyhow::Result;
 use std::mem;
 use std::net::{Ipv6Addr, ToSocketAddrs};
@@ -48,12 +49,14 @@ impl<T: WasiView> HostResolveAddressStream for T {
         let stream: &mut ResolveAddressStream = self.table().get_mut(&resource)?;
         loop {
             match stream {
-                ResolveAddressStream::Waiting(future) => match crate::poll_noop(Pin::new(future)) {
-                    Some(result) => {
-                        *stream = ResolveAddressStream::Done(result.map(|v| v.into_iter()));
+                ResolveAddressStream::Waiting(future) => {
+                    match crate::runtime::poll_noop(Pin::new(future)) {
+                        Some(result) => {
+                            *stream = ResolveAddressStream::Done(result.map(|v| v.into_iter()));
+                        }
+                        None => return Err(ErrorCode::WouldBlock.into()),
                     }
-                    None => return Err(ErrorCode::WouldBlock.into()),
-                },
+                }
                 ResolveAddressStream::Done(slot @ Err(_)) => {
                     mem::replace(slot, Ok(Vec::new().into_iter()))?;
                     unreachable!();
diff --git a/crates/wasi/src/lib.rs b/crates/wasi/src/lib.rs
index 8262d889b..225245b47 100644
--- a/crates/wasi/src/lib.rs
+++ b/crates/wasi/src/lib.rs
@@ -6,10 +6,7 @@
 //!
 //!
 
-use std::future::Future;
-use std::pin::Pin;
-use std::task::{Context, Poll};
-
+pub mod bindings;
 mod clocks;
 pub mod command;
 mod ctx;
@@ -25,6 +22,7 @@ pub mod preview0;
 #[cfg(feature = "preview1")]
 pub mod preview1;
 mod random;
+pub mod runtime;
 mod stdio;
 mod stream;
 mod tcp;
@@ -47,272 +45,3 @@ pub use self::stream::{
 pub use cap_fs_ext::SystemTimeSpec;
 pub use cap_rand::RngCore;
 pub use wasmtime::component::{ResourceTable, ResourceTableError};
-
-pub mod bindings {
-    // Generate traits for synchronous bindings.
-    //
-    // Note that this is only done for interfaces which can block, or those which
-    // have some functions in `only_imports` below for being async.
-    pub mod sync_io {
-        pub(crate) mod _internal {
-            use crate::{FsError, StreamError};
-
-            wasmtime::component::bindgen!({
-                path: "wit",
-                interfaces: "
-                    import wasi:io/poll@0.2.0;
-                    import wasi:io/streams@0.2.0;
-                    import wasi:filesystem/types@0.2.0;
-                ",
-                tracing: true,
-                trappable_error_type: {
-                    "wasi:io/streams/stream-error" => StreamError,
-                    "wasi:filesystem/types/error-code" => FsError,
-                },
-                with: {
-                    "wasi:clocks/wall-clock": crate::bindings::clocks::wall_clock,
-                    "wasi:filesystem/types/descriptor": super::super::filesystem::types::Descriptor,
-                    "wasi:filesystem/types/directory-entry-stream": super::super::filesystem::types::DirectoryEntryStream,
-                    "wasi:io/poll/pollable": super::super::io::poll::Pollable,
-                    "wasi:io/streams/input-stream": super::super::io::streams::InputStream,
-                    "wasi:io/streams/output-stream": super::super::io::streams::OutputStream,
-                    "wasi:io/error/error": super::super::io::error::Error,
-                }
-            });
-        }
-        pub use self::_internal::wasi::{filesystem, io};
-    }
-
-    wasmtime::component::bindgen!({
-        path: "wit",
-        world: "wasi:cli/imports",
-        tracing: true,
-        async: {
-            // Only these functions are `async` and everything else is sync
-            // meaning that it basically doesn't need to block. These functions
-            // are the only ones that need to block.
-            //
-            // Note that at this time `only_imports` works on function names
-            // which in theory can be shared across interfaces, so this may
-            // need fancier syntax in the future.
-            only_imports: [
-                "[method]descriptor.access-at",
-                "[method]descriptor.advise",
-                "[method]descriptor.change-directory-permissions-at",
-                "[method]descriptor.change-file-permissions-at",
-                "[method]descriptor.create-directory-at",
-                "[method]descriptor.get-flags",
-                "[method]descriptor.get-type",
-                "[method]descriptor.is-same-object",
-                "[method]descriptor.link-at",
-                "[method]descriptor.lock-exclusive",
-                "[method]descriptor.lock-shared",
-                "[method]descriptor.metadata-hash",
-                "[method]descriptor.metadata-hash-at",
-                "[method]descriptor.open-at",
-                "[method]descriptor.read",
-                "[method]descriptor.read-directory",
-                "[method]descriptor.readlink-at",
-                "[method]descriptor.remove-directory-at",
-                "[method]descriptor.rename-at",
-                "[method]descriptor.set-size",
-                "[method]descriptor.set-times",
-                "[method]descriptor.set-times-at",
-                "[method]descriptor.stat",
-                "[method]descriptor.stat-at",
-                "[method]descriptor.symlink-at",
-                "[method]descriptor.sync",
-                "[method]descriptor.sync-data",
-                "[method]descriptor.try-lock-exclusive",
-                "[method]descriptor.try-lock-shared",
-                "[method]descriptor.unlink-file-at",
-                "[method]descriptor.unlock",
-                "[method]descriptor.write",
-                "[method]input-stream.read",
-                "[method]input-stream.blocking-read",
-                "[method]input-stream.blocking-skip",
-                "[method]input-stream.skip",
-                "[method]output-stream.forward",
-                "[method]output-stream.splice",
-                "[method]output-stream.blocking-splice",
-                "[method]output-stream.blocking-flush",
-                "[method]output-stream.blocking-write",
-                "[method]output-stream.blocking-write-and-flush",
-                "[method]output-stream.blocking-write-zeroes-and-flush",
-                "[method]directory-entry-stream.read-directory-entry",
-                "poll",
-                "[method]pollable.block",
-                "[method]pollable.ready",
-            ],
-        },
-        trappable_error_type: {
-            "wasi:io/streams/stream-error" => crate::StreamError,
-            "wasi:filesystem/types/error-code" => crate::FsError,
-            "wasi:sockets/network/error-code" => crate::SocketError,
-        },
-        with: {
-            "wasi:sockets/network/network": super::network::Network,
-            "wasi:sockets/tcp/tcp-socket": super::tcp::TcpSocket,
-            "wasi:sockets/udp/udp-socket": super::udp::UdpSocket,
-            "wasi:sockets/udp/incoming-datagram-stream": super::udp::IncomingDatagramStream,
-            "wasi:sockets/udp/outgoing-datagram-stream": super::udp::OutgoingDatagramStream,
-            "wasi:sockets/ip-name-lookup/resolve-address-stream": super::ip_name_lookup::ResolveAddressStream,
-            "wasi:filesystem/types/directory-entry-stream": super::filesystem::ReaddirIterator,
-            "wasi:filesystem/types/descriptor": super::filesystem::Descriptor,
-            "wasi:io/streams/input-stream": super::stream::InputStream,
-            "wasi:io/streams/output-stream": super::stream::OutputStream,
-            "wasi:io/error/error": super::stream::Error,
-            "wasi:io/poll/pollable": super::poll::Pollable,
-            "wasi:cli/terminal-input/terminal-input": super::stdio::TerminalInput,
-            "wasi:cli/terminal-output/terminal-output": super::stdio::TerminalOutput,
-        },
-    });
-
-    pub use wasi::*;
-}
-
-pub(crate) static RUNTIME: once_cell::sync::Lazy<tokio::runtime::Runtime> =
-    once_cell::sync::Lazy::new(|| {
-        tokio::runtime::Builder::new_current_thread()
-            .enable_time()
-            .enable_io()
-            .build()
-            .unwrap()
-    });
-
-pub struct AbortOnDropJoinHandle<T>(tokio::task::JoinHandle<T>);
-impl<T> Drop for AbortOnDropJoinHandle<T> {
-    fn drop(&mut self) {
-        self.0.abort()
-    }
-}
-impl<T> std::ops::Deref for AbortOnDropJoinHandle<T> {
-    type Target = tokio::task::JoinHandle<T>;
-    fn deref(&self) -> &Self::Target {
-        &self.0
-    }
-}
-impl<T> std::ops::DerefMut for AbortOnDropJoinHandle<T> {
-    fn deref_mut(&mut self) -> &mut tokio::task::JoinHandle<T> {
-        &mut self.0
-    }
-}
-impl<T> From<tokio::task::JoinHandle<T>> for AbortOnDropJoinHandle<T> {
-    fn from(jh: tokio::task::JoinHandle<T>) -> Self {
-        AbortOnDropJoinHandle(jh)
-    }
-}
-impl<T> Future for AbortOnDropJoinHandle<T> {
-    type Output = T;
-    fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
-        match Pin::new(&mut self.as_mut().0).poll(cx) {
-            Poll::Pending => Poll::Pending,
-            Poll::Ready(r) => Poll::Ready(r.expect("child task panicked")),
-        }
-    }
-}
-
-pub fn spawn<F>(f: F) -> AbortOnDropJoinHandle<F::Output>
-where
-    F: Future + Send + 'static,
-    F::Output: Send + 'static,
-{
-    let j = with_ambient_tokio_runtime(|| tokio::task::spawn(f));
-    AbortOnDropJoinHandle(j)
-}
-
-pub fn spawn_blocking<F, R>(f: F) -> AbortOnDropJoinHandle<R>
-where
-    F: FnOnce() -> R + Send + 'static,
-    R: Send + 'static,
-{
-    let j = with_ambient_tokio_runtime(|| tokio::task::spawn_blocking(f));
-    AbortOnDropJoinHandle(j)
-}
-
-pub fn in_tokio<F: Future>(f: F) -> F::Output {
-    match tokio::runtime::Handle::try_current() {
-        Ok(h) => {
-            let _enter = h.enter();
-            h.block_on(f)
-        }
-        // The `yield_now` here is non-obvious and if you're reading this
-        // you're likely curious about why it's here. This is currently required
-        // to get some features of "sync mode" working correctly, such as with
-        // the CLI. To illustrate why this is required, consider a program
-        // organized as:
-        //
-        // * A program has a `pollable` that it's waiting on.
-        // * This `pollable` is always ready .
-        // * Actually making the corresponding operation ready, however,
-        //   requires some background work on Tokio's part.
-        // * The program is looping on "wait for readiness" coupled with
-        //   performing the operation.
-        //
-        // In this situation this program ends up infinitely looping in waiting
-        // for pollables. The reason appears to be that when we enter the tokio
-        // runtime here it doesn't necessary yield to background work because
-        // the provided future `f` is ready immediately. The future `f` will run
-        // through the list of pollables and determine one of them is ready.
-        //
-        // Historically this happened with UDP sockets. A test send a datagram
-        // from one socket to another and the other socket infinitely didn't
-        // receive the data. This appeared to be because the server socket was
-        // waiting on `READABLE | WRITABLE` (which is itself a bug but ignore
-        // that) and the socket was currently in the "writable" state but never
-        // ended up receiving a notification for the "readable" state. Moving
-        // the socket to "readable" would require Tokio to perform some
-        // background work via epoll/kqueue/handle events but if the future
-        // provided here is always ready, then that never happened.
-        //
-        // Thus the `yield_now()` is an attempt to force Tokio to go do some
-        // background work eventually and look at new interest masks for
-        // example. This is a bit of a kludge but everything's already a bit
-        // wonky in synchronous mode anyway. Note that this is hypothesized to
-        // not be an issue in async mode because async mode typically has the
-        // Tokio runtime in a separate thread or otherwise participating in a
-        // larger application, it's only here in synchronous mode where we
-        // effectively own the runtime that we need some special care.
-        Err(_) => {
-            let _enter = RUNTIME.enter();
-            RUNTIME.block_on(async move {
-                tokio::task::yield_now().await;
-                f.await
-            })
-        }
-    }
-}
-
-/// Executes the closure `f` with an "ambient Tokio runtime" which basically
-/// means that if code in `f` tries to get a runtime `Handle` it'll succeed.
-///
-/// If a `Handle` is already available, e.g. in async contexts, then `f` is run
-/// immediately. Otherwise for synchronous contexts this crate's fallback
-/// runtime is configured and then `f` is executed.
-pub fn with_ambient_tokio_runtime<R>(f: impl FnOnce() -> R) -> R {
-    match tokio::runtime::Handle::try_current() {
-        Ok(_) => f(),
-        Err(_) => {
-            let _enter = RUNTIME.enter();
-            f()
-        }
-    }
-}
-
-/// Attempts to get the result of a `future`.
-///
-/// This function does not block and will poll the provided future once. If the
-/// result is here then `Some` is returned, otherwise `None` is returned.
-///
-/// Note that by polling `future` this means that `future` must be re-polled
-/// later if it's to wake up a task.
-pub fn poll_noop<F>(future: Pin<&mut F>) -> Option<F::Output>
-where
-    F: Future,
-{
-    let mut task = Context::from_waker(futures::task::noop_waker_ref());
-    match future.poll(&mut task) {
-        Poll::Ready(result) => Some(result),
-        Poll::Pending => None,
-    }
-}
diff --git a/crates/wasi/src/pipe.rs b/crates/wasi/src/pipe.rs
index 48706a2c8..819455c59 100644
--- a/crates/wasi/src/pipe.rs
+++ b/crates/wasi/src/pipe.rs
@@ -112,7 +112,7 @@ pub struct AsyncReadStream {
     closed: bool,
     buffer: Option<Result<Bytes, StreamError>>,
     receiver: mpsc::Receiver<Result<Bytes, StreamError>>,
-    _join_handle: crate::AbortOnDropJoinHandle<()>,
+    _join_handle: crate::runtime::AbortOnDropJoinHandle<()>,
 }
 
 impl AsyncReadStream {
@@ -120,7 +120,7 @@ impl AsyncReadStream {
     /// provided by this struct, the argument must impl [`tokio::io::AsyncRead`].
     pub fn new<T: tokio::io::AsyncRead + Send + Unpin + 'static>(mut reader: T) -> Self {
         let (sender, receiver) = mpsc::channel(1);
-        let join_handle = crate::spawn(async move {
+        let join_handle = crate::runtime::spawn(async move {
             loop {
                 use tokio::io::AsyncReadExt;
                 let mut buf = bytes::BytesMut::with_capacity(4096);
diff --git a/crates/wasi/src/poll.rs b/crates/wasi/src/poll.rs
index 1edeae693..6d89e7fee 100644
--- a/crates/wasi/src/poll.rs
+++ b/crates/wasi/src/poll.rs
@@ -154,7 +154,8 @@ pub mod sync {
     use crate::{
         bindings::io::poll as async_poll,
         bindings::sync_io::io::poll::{self, Pollable},
-        in_tokio, WasiView,
+        runtime::in_tokio,
+        WasiView,
     };
     use anyhow::Result;
     use wasmtime::component::Resource;
diff --git a/crates/wasi/src/preview0.rs b/crates/wasi/src/preview0.rs
index 64c28aeb7..b7c8c40a7 100644
--- a/crates/wasi/src/preview0.rs
+++ b/crates/wasi/src/preview0.rs
@@ -52,7 +52,7 @@ mod sync {
     // Small wrapper around `in_tokio` to add a `Result` layer which is always
     // `Ok`
     fn in_tokio<F: Future>(future: F) -> Result<F::Output> {
-        Ok(crate::in_tokio(future))
+        Ok(crate::runtime::in_tokio(future))
     }
 }
 
diff --git a/crates/wasi/src/preview1.rs b/crates/wasi/src/preview1.rs
index 2d0f0fb7b..16a5e58ee 100644
--- a/crates/wasi/src/preview1.rs
+++ b/crates/wasi/src/preview1.rs
@@ -542,7 +542,7 @@ mod sync {
     // Small wrapper around `in_tokio` to add a `Result` layer which is always
     // `Ok`
     fn in_tokio<F: Future>(future: F) -> Result<F::Output> {
-        Ok(crate::in_tokio(future))
+        Ok(crate::runtime::in_tokio(future))
     }
 }
 
diff --git a/crates/wasi/src/runtime.rs b/crates/wasi/src/runtime.rs
new file mode 100644
index 000000000..31d8135ff
--- /dev/null
+++ b/crates/wasi/src/runtime.rs
@@ -0,0 +1,175 @@
+//! This module provides an "ambient Tokio runtime"
+//! [`with_ambient_tokio_runtime`]. Embedders of wasmtime-wasi may do so from
+//! synchronous Rust, and not use tokio directly. The implementation of
+//! wasmtime-wasi requires a tokio executor in a way that is [deeply tied to
+//! its
+//! design](https://github.com/bytecodealliance/wasmtime/issues/7973#issuecomment-1960513214).
+//! When used from a sychrnonous wasmtime context, this module provides the
+//! wrapper function [`in_tokio`] used throughout the shim implementations of
+//! synchronous component binding `Host` traits in terms of the async ones.
+//!
+//! This module also provides a thin wrapper on tokio's tasks.
+//! [`AbortOnDropJoinHandle`], which is exactly like a
+//! [`tokio::task::JoinHandle`] except for the obvious behavioral change. This
+//! whole crate, and any child crates which spawn tasks as part of their
+//! implementations, should please use this crate's [`spawn`] and
+//! [`spawn_blocking`] over tokio's. so we wanted the type name to stick out
+//! if someone misses it.
+//!
+//! Each of these facilities should be used by dependencies of wasmtime-wasi
+//! which when implementing component bindings.
+
+use std::future::Future;
+use std::pin::Pin;
+use std::task::{Context, Poll};
+
+pub(crate) static RUNTIME: once_cell::sync::Lazy<tokio::runtime::Runtime> =
+    once_cell::sync::Lazy::new(|| {
+        tokio::runtime::Builder::new_current_thread()
+            .enable_time()
+            .enable_io()
+            .build()
+            .unwrap()
+    });
+
+/// Exactly like a [`tokio::task::JoinHandle`], except that it aborts the task when
+/// the handle is dropped.
+///
+/// This behavior makes it easier to tie a worker task to the lifetime of a Resource
+/// by keeping this handle owned by the Resource.
+pub struct AbortOnDropJoinHandle<T>(tokio::task::JoinHandle<T>);
+impl<T> Drop for AbortOnDropJoinHandle<T> {
+    fn drop(&mut self) {
+        self.0.abort()
+    }
+}
+impl<T> std::ops::Deref for AbortOnDropJoinHandle<T> {
+    type Target = tokio::task::JoinHandle<T>;
+    fn deref(&self) -> &Self::Target {
+        &self.0
+    }
+}
+impl<T> std::ops::DerefMut for AbortOnDropJoinHandle<T> {
+    fn deref_mut(&mut self) -> &mut tokio::task::JoinHandle<T> {
+        &mut self.0
+    }
+}
+impl<T> From<tokio::task::JoinHandle<T>> for AbortOnDropJoinHandle<T> {
+    fn from(jh: tokio::task::JoinHandle<T>) -> Self {
+        AbortOnDropJoinHandle(jh)
+    }
+}
+impl<T> Future for AbortOnDropJoinHandle<T> {
+    type Output = T;
+    fn poll(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
+        match Pin::new(&mut self.as_mut().0).poll(cx) {
+            Poll::Pending => Poll::Pending,
+            Poll::Ready(r) => Poll::Ready(r.expect("child task panicked")),
+        }
+    }
+}
+
+pub fn spawn<F>(f: F) -> AbortOnDropJoinHandle<F::Output>
+where
+    F: Future + Send + 'static,
+    F::Output: Send + 'static,
+{
+    let j = with_ambient_tokio_runtime(|| tokio::task::spawn(f));
+    AbortOnDropJoinHandle(j)
+}
+
+pub fn spawn_blocking<F, R>(f: F) -> AbortOnDropJoinHandle<R>
+where
+    F: FnOnce() -> R + Send + 'static,
+    R: Send + 'static,
+{
+    let j = with_ambient_tokio_runtime(|| tokio::task::spawn_blocking(f));
+    AbortOnDropJoinHandle(j)
+}
+
+pub fn in_tokio<F: Future>(f: F) -> F::Output {
+    match tokio::runtime::Handle::try_current() {
+        Ok(h) => {
+            let _enter = h.enter();
+            h.block_on(f)
+        }
+        // The `yield_now` here is non-obvious and if you're reading this
+        // you're likely curious about why it's here. This is currently required
+        // to get some features of "sync mode" working correctly, such as with
+        // the CLI. To illustrate why this is required, consider a program
+        // organized as:
+        //
+        // * A program has a `pollable` that it's waiting on.
+        // * This `pollable` is always ready .
+        // * Actually making the corresponding operation ready, however,
+        //   requires some background work on Tokio's part.
+        // * The program is looping on "wait for readiness" coupled with
+        //   performing the operation.
+        //
+        // In this situation this program ends up infinitely looping in waiting
+        // for pollables. The reason appears to be that when we enter the tokio
+        // runtime here it doesn't necessary yield to background work because
+        // the provided future `f` is ready immediately. The future `f` will run
+        // through the list of pollables and determine one of them is ready.
+        //
+        // Historically this happened with UDP sockets. A test send a datagram
+        // from one socket to another and the other socket infinitely didn't
+        // receive the data. This appeared to be because the server socket was
+        // waiting on `READABLE | WRITABLE` (which is itself a bug but ignore
+        // that) and the socket was currently in the "writable" state but never
+        // ended up receiving a notification for the "readable" state. Moving
+        // the socket to "readable" would require Tokio to perform some
+        // background work via epoll/kqueue/handle events but if the future
+        // provided here is always ready, then that never happened.
+        //
+        // Thus the `yield_now()` is an attempt to force Tokio to go do some
+        // background work eventually and look at new interest masks for
+        // example. This is a bit of a kludge but everything's already a bit
+        // wonky in synchronous mode anyway. Note that this is hypothesized to
+        // not be an issue in async mode because async mode typically has the
+        // Tokio runtime in a separate thread or otherwise participating in a
+        // larger application, it's only here in synchronous mode where we
+        // effectively own the runtime that we need some special care.
+        Err(_) => {
+            let _enter = RUNTIME.enter();
+            RUNTIME.block_on(async move {
+                tokio::task::yield_now().await;
+                f.await
+            })
+        }
+    }
+}
+
+/// Executes the closure `f` with an "ambient Tokio runtime" which basically
+/// means that if code in `f` tries to get a runtime `Handle` it'll succeed.
+///
+/// If a `Handle` is already available, e.g. in async contexts, then `f` is run
+/// immediately. Otherwise for synchronous contexts this crate's fallback
+/// runtime is configured and then `f` is executed.
+pub fn with_ambient_tokio_runtime<R>(f: impl FnOnce() -> R) -> R {
+    match tokio::runtime::Handle::try_current() {
+        Ok(_) => f(),
+        Err(_) => {
+            let _enter = RUNTIME.enter();
+            f()
+        }
+    }
+}
+
+/// Attempts to get the result of a `future`.
+///
+/// This function does not block and will poll the provided future once. If the
+/// result is here then `Some` is returned, otherwise `None` is returned.
+///
+/// Note that by polling `future` this means that `future` must be re-polled
+/// later if it's to wake up a task.
+pub fn poll_noop<F>(future: Pin<&mut F>) -> Option<F::Output>
+where
+    F: Future,
+{
+    let mut task = Context::from_waker(futures::task::noop_waker_ref());
+    match future.poll(&mut task) {
+        Poll::Ready(result) => Some(result),
+        Poll::Pending => None,
+    }
+}
diff --git a/crates/wasi/src/tcp.rs b/crates/wasi/src/tcp.rs
index 468bbb75c..bc970c3bf 100644
--- a/crates/wasi/src/tcp.rs
+++ b/crates/wasi/src/tcp.rs
@@ -1,8 +1,6 @@
-use super::network::SocketAddressFamily;
-use super::{
-    with_ambient_tokio_runtime, HostInputStream, HostOutputStream, SocketResult, StreamError,
-};
-use crate::{AbortOnDropJoinHandle, Subscribe};
+use crate::network::SocketAddressFamily;
+use crate::runtime::{with_ambient_tokio_runtime, AbortOnDropJoinHandle};
+use crate::{HostInputStream, HostOutputStream, SocketResult, StreamError, Subscribe};
 use anyhow::{Error, Result};
 use cap_net_ext::AddressFamily;
 use futures::Future;
@@ -164,7 +162,7 @@ impl TcpWriteStream {
         assert!(matches!(self.last_write, LastWrite::Done));
 
         let stream = self.stream.clone();
-        self.last_write = LastWrite::Waiting(crate::spawn(async move {
+        self.last_write = LastWrite::Waiting(crate::runtime::spawn(async move {
             // Note: we are not using the AsyncWrite impl here, and instead using the TcpStream
             // primitive try_write, which goes directly to attempt a write with mio. This has
             // two advantages: 1. this operation takes a &TcpStream instead of a &mut TcpStream
@@ -236,7 +234,7 @@ impl HostOutputStream for TcpWriteStream {
 
         let writable = self.stream.writable();
         futures::pin_mut!(writable);
-        if super::poll_noop(writable).is_none() {
+        if crate::runtime::poll_noop(writable).is_none() {
             return Ok(0);
         }
         Ok(SOCKET_READY_SIZE)
diff --git a/crates/wasi/src/udp.rs b/crates/wasi/src/udp.rs
index bb9819f2e..1e0b1a199 100644
--- a/crates/wasi/src/udp.rs
+++ b/crates/wasi/src/udp.rs
@@ -1,6 +1,6 @@
 use crate::host::network::util;
 use crate::poll::Subscribe;
-use crate::with_ambient_tokio_runtime;
+use crate::runtime::with_ambient_tokio_runtime;
 use async_trait::async_trait;
 use cap_net_ext::{AddressFamily, Blocking};
 use io_lifetimes::raw::{FromRawSocketlike, IntoRawSocketlike};
diff --git a/crates/wasi/src/write_stream.rs b/crates/wasi/src/write_stream.rs
index eb76e2c3b..e08546b60 100644
--- a/crates/wasi/src/write_stream.rs
+++ b/crates/wasi/src/write_stream.rs
@@ -139,7 +139,7 @@ impl Worker {
 /// Provides a [`HostOutputStream`] impl from a [`tokio::io::AsyncWrite`] impl
 pub struct AsyncWriteStream {
     worker: Arc<Worker>,
-    _join_handle: crate::AbortOnDropJoinHandle<()>,
+    _join_handle: crate::runtime::AbortOnDropJoinHandle<()>,
 }
 
 impl AsyncWriteStream {
@@ -152,7 +152,7 @@ impl AsyncWriteStream {
         let worker = Arc::new(Worker::new(write_budget));
 
         let w = Arc::clone(&worker);
-        let join_handle = crate::spawn(async move { w.work(writer).await });
+        let join_handle = crate::runtime::spawn(async move { w.work(writer).await });
 
         AsyncWriteStream {
             worker,
diff --git a/supply-chain/imports.lock b/supply-chain/imports.lock
index af9fad91c..14d7058cb 100644
--- a/supply-chain/imports.lock
+++ b/supply-chain/imports.lock
@@ -5,82 +5,162 @@
 version = "0.106.0"
 audited_as = "0.104.1"
 
+[[unpublished.cranelift]]
+version = "0.107.0"
+audited_as = "0.105.2"
+
 [[unpublished.cranelift-bforest]]
 version = "0.106.0"
 audited_as = "0.104.1"
 
+[[unpublished.cranelift-bforest]]
+version = "0.107.0"
+audited_as = "0.105.2"
+
 [[unpublished.cranelift-codegen]]
 version = "0.106.0"
 audited_as = "0.104.1"
 
+[[unpublished.cranelift-codegen]]
+version = "0.107.0"
+audited_as = "0.105.2"
+
 [[unpublished.cranelift-codegen-meta]]
 version = "0.106.0"
 audited_as = "0.104.1"
 
+[[unpublished.cranelift-codegen-meta]]
+version = "0.107.0"
+audited_as = "0.105.2"
+
 [[unpublished.cranelift-codegen-shared]]
 version = "0.106.0"
 audited_as = "0.104.1"
 
+[[unpublished.cranelift-codegen-shared]]
+version = "0.107.0"
+audited_as = "0.105.2"
+
 [[unpublished.cranelift-control]]
 version = "0.106.0"
 audited_as = "0.104.1"
 
+[[unpublished.cranelift-control]]
+version = "0.107.0"
+audited_as = "0.105.2"
+
 [[unpublished.cranelift-entity]]
 version = "0.106.0"
 audited_as = "0.104.1"
 
+[[unpublished.cranelift-entity]]
+version = "0.107.0"
+audited_as = "0.105.2"
+
 [[unpublished.cranelift-frontend]]
 version = "0.106.0"
 audited_as = "0.104.1"
 
+[[unpublished.cranelift-frontend]]
+version = "0.107.0"
+audited_as = "0.105.2"
+
 [[unpublished.cranelift-interpreter]]
 version = "0.106.0"
 audited_as = "0.104.1"
 
+[[unpublished.cranelift-interpreter]]
+version = "0.107.0"
+audited_as = "0.105.2"
+
 [[unpublished.cranelift-isle]]
 version = "0.106.0"
 audited_as = "0.104.1"
 
+[[unpublished.cranelift-isle]]
+version = "0.107.0"
+audited_as = "0.105.2"
+
 [[unpublished.cranelift-jit]]
 version = "0.106.0"
 audited_as = "0.104.1"
 
+[[unpublished.cranelift-jit]]
+version = "0.107.0"
+audited_as = "0.105.2"
+
 [[unpublished.cranelift-module]]
 version = "0.106.0"
 audited_as = "0.104.1"
 
+[[unpublished.cranelift-module]]
+version = "0.107.0"
+audited_as = "0.105.2"
+
 [[unpublished.cranelift-native]]
 version = "0.106.0"
 audited_as = "0.104.1"
 
+[[unpublished.cranelift-native]]
+version = "0.107.0"
+audited_as = "0.105.2"
+
 [[unpublished.cranelift-object]]
 version = "0.106.0"
 audited_as = "0.104.1"
 
+[[unpublished.cranelift-object]]
+version = "0.107.0"
+audited_as = "0.105.2"
+
 [[unpublished.cranelift-reader]]
 version = "0.106.0"
 audited_as = "0.104.1"
 
+[[unpublished.cranelift-reader]]
+version = "0.107.0"
+audited_as = "0.105.2"
+
 [[unpublished.cranelift-serde]]
 version = "0.106.0"
 audited_as = "0.104.1"
 
+[[unpublished.cranelift-serde]]
+version = "0.107.0"
+audited_as = "0.105.2"
+
 [[unpublished.cranelift-wasm]]
 version = "0.106.0"
 audited_as = "0.104.1"
 
+[[unpublished.cranelift-wasm]]
+version = "0.107.0"
+audited_as = "0.105.2"
+
 [[unpublished.wasi-common]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasi-common]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-asm-macros]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-asm-macros]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-c-api-impl]]
 version = "19.0.0"
 audited_as = "18.0.1"
@@ -93,102 +173,202 @@ audited_as = "18.0.1"
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-cache]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-cli]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-cli]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-cli-flags]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-cli-flags]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-component-macro]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-component-macro]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-component-util]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-component-util]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-cranelift]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-cranelift]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-cranelift-shared]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-cranelift-shared]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-environ]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-environ]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-explorer]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-explorer]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-fiber]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-fiber]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-jit-debug]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-jit-debug]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-jit-icache-coherence]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-jit-icache-coherence]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-runtime]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-runtime]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-types]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-types]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-wasi]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-wasi]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-wasi-http]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-wasi-http]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-wasi-nn]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-wasi-nn]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-wasi-threads]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-wasi-threads]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-wast]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-wast]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-winch]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-winch]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-wit-bindgen]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-wit-bindgen]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wasmtime-wmemcheck]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wasmtime-wmemcheck]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wiggle]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wiggle]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wiggle-generate]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wiggle-generate]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wiggle-macro]]
 version = "19.0.0"
 audited_as = "17.0.1"
 
+[[unpublished.wiggle-macro]]
+version = "20.0.0"
+audited_as = "18.0.2"
+
 [[unpublished.wiggle-test]]
 version = "0.0.0"
 audited_as = "0.1.0"
@@ -197,6 +377,10 @@ audited_as = "0.1.0"
 version = "0.17.0"
 audited_as = "0.15.1"
 
+[[unpublished.winch-codegen]]
+version = "0.18.0"
+audited_as = "0.16.2"
+
 [[publisher.aho-corasick]]
 version = "1.0.2"
 when = "2023-06-04"
@@ -371,102 +555,204 @@ when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift]]
+version = "0.105.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-bforest]]
 version = "0.104.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-bforest]]
+version = "0.105.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-codegen]]
 version = "0.104.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-codegen]]
+version = "0.105.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-codegen-meta]]
 version = "0.104.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-codegen-meta]]
+version = "0.105.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-codegen-shared]]
 version = "0.104.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-codegen-shared]]
+version = "0.105.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-control]]
 version = "0.104.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-control]]
+version = "0.105.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-entity]]
 version = "0.104.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-entity]]
+version = "0.105.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-frontend]]
 version = "0.104.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-frontend]]
+version = "0.105.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-interpreter]]
 version = "0.104.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-interpreter]]
+version = "0.105.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-isle]]
 version = "0.104.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-isle]]
+version = "0.105.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-jit]]
 version = "0.104.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-jit]]
+version = "0.105.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-module]]
 version = "0.104.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-module]]
+version = "0.105.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-native]]
 version = "0.104.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-native]]
+version = "0.105.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-object]]
 version = "0.104.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-object]]
+version = "0.105.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-reader]]
 version = "0.104.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-reader]]
+version = "0.105.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-serde]]
 version = "0.104.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-serde]]
+version = "0.105.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.cranelift-wasm]]
 version = "0.104.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.cranelift-wasm]]
+version = "0.105.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.derive_arbitrary]]
 version = "1.3.0"
 when = "2023-03-13"
@@ -815,6 +1101,12 @@ when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasi-common]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasm-bindgen]]
 version = "0.2.87"
 when = "2023-06-12"
@@ -970,144 +1262,288 @@ when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-asm-macros]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-asm-macros]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-cache]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-cache]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-cli]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-cli]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-cli-flags]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-cli-flags]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-component-macro]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-component-macro]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-component-util]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-component-util]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-cranelift]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-cranelift]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-cranelift-shared]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-cranelift-shared]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-environ]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-environ]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-explorer]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-explorer]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-fiber]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-fiber]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-jit-debug]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-jit-debug]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-jit-icache-coherence]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-jit-icache-coherence]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-runtime]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-runtime]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-types]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-types]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-wasi]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-wasi]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-wasi-http]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-wasi-http]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-wasi-nn]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-wasi-nn]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-wasi-threads]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-wasi-threads]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-wast]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-wast]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-winch]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-winch]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-wit-bindgen]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-wit-bindgen]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wasmtime-wmemcheck]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wasmtime-wmemcheck]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wast]]
 version = "71.0.1"
 when = "2024-02-12"
@@ -1152,18 +1588,36 @@ when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wiggle]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wiggle-generate]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wiggle-generate]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wiggle-macro]]
 version = "17.0.1"
 when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.wiggle-macro]]
+version = "18.0.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.wiggle-test]]
 version = "0.1.0"
 when = "2020-03-12"
@@ -1184,6 +1638,12 @@ when = "2024-02-07"
 user-id = 73222
 user-login = "wasmtime-publish"
 
+[[publisher.winch-codegen]]
+version = "0.16.2"
+when = "2024-02-28"
+user-id = 73222
+user-login = "wasmtime-publish"
+
 [[publisher.windows]]
 version = "0.52.0"
 when = "2023-11-15"
diff --git a/winch/codegen/Cargo.toml b/winch/codegen/Cargo.toml
index fe7347655..c36530fcc 100644
--- a/winch/codegen/Cargo.toml
+++ b/winch/codegen/Cargo.toml
@@ -4,7 +4,7 @@ name = "winch-codegen"
 description = "Winch code generation library"
 license = "Apache-2.0 WITH LLVM-exception"
 repository = "https://github.com/bytecodealliance/wasmtime"
-version = "0.17.0"
+version = "0.18.0"
 edition.workspace = true
 
 [lints]


Test patch:
diff --git a/crates/wasi-http/tests/all/main.rs b/crates/wasi-http/tests/all/main.rs
index af1a4d457..800f3a0bc 100644
--- a/crates/wasi-http/tests/all/main.rs
+++ b/crates/wasi-http/tests/all/main.rs
@@ -170,7 +170,7 @@ async fn run_wasi_http(
     let (sender, receiver) = tokio::sync::oneshot::channel();
     let out = store.data_mut().new_response_outparam(sender)?;
 
-    let handle = wasmtime_wasi::spawn(async move {
+    let handle = wasmtime_wasi::runtime::spawn(async move {
         proxy
             .wasi_http_incoming_handler()
             .call_handle(&mut store, req, out)
@@ -278,7 +278,7 @@ async fn do_wasi_http_hash_all(override_send_request: bool) -> Result<()> {
                 let response = handle(request.into_parts().0).map(|resp| {
                     Ok(IncomingResponseInternal {
                         resp,
-                        worker: Arc::new(wasmtime_wasi::spawn(future::ready(()))),
+                        worker: Arc::new(wasmtime_wasi::runtime::spawn(future::ready(()))),
                         between_bytes_timeout,
                     })
                 });