--- name: vendor-submodules description: Locate and sync the reference specs and runtimes vendored under vendor/ — the Wasm, WASI P3, and Component Model specs, and the wasm-tools and wasmtime sources. Use whenever an answer should come from one of those sources rather than memory, and whenever vendor/ is missing or stale. --- ## What is under `vendor/` - `vendor/wasm/` - WebAssembly/spec - `vendor/wasi/` - WebAssembly/WASI - `vendor/component-model/` - WebAssembly/component-model (CM spec) - Canonical built-ins: `vendor/component-model/design/mvp/CanonicalABI.md` - Concurrency (async, streams, futures): `vendor/component-model/design/mvp/Concurrency.md` - Explainer: `vendor/component-model/design/mvp/Explainer.md` - `vendor/wasmtime/` - a Wasm runtime with WASI P3 support - `vendor/wasm-tools/` - the Wasm toolchain the Wado compiler builds on - `vendor/antlr4/` - ANTLR4, the grammar dialect Gale targets. Read `package-gale/AGENTS.md` first: most of this tree must not be read - `vendor/wasi-webgpu/` - the `wasi:webgpu` proposal - `vendor/protobuf-spec/` - protobuf.dev's source, which is the protobuf spec - Wire format: `vendor/protobuf-spec/content/programming-guides/encoding.md` - The `.proto` grammar, one file per syntax and edition: `vendor/protobuf-spec/content/reference/protobuf/{proto2,proto3,edition-2023,edition-2024}-spec.md` - Edition features: `vendor/protobuf-spec/content/editions/features.md` - `vendor/protobuf/` - protocolbuffers/protobuf, for the `.proto` files the spec does not carry: `src/google/protobuf/descriptor.proto`, the well-known types, and the `unittest*.proto` / `test_messages_*.proto` Grog parses as a corpus `git submodule update --init --recommend-shallow` fetches them. ## Syncing ```sh mise run sync-vendor ``` `vendor/wasmtime` goes to the exact version in `Cargo.lock`, which WASI P3 compatibility requires. The other submodules go to their remote HEAD. ## Building against a patched wasmtime To test a change to wasmtime itself, edit `vendor/wasmtime` in place and add to the workspace `Cargo.toml`: ```toml [patch.crates-io] wasmtime = { path = "vendor/wasmtime/crates/wasmtime" } wasmtime-wasi = { path = "vendor/wasmtime/crates/wasi" } wasmtime-wasi-http = { path = "vendor/wasmtime/crates/wasi-http" } wasmtime-wasi-tls = { path = "vendor/wasmtime/crates/wasi-tls" } ``` Those four names redirect 31 crates. The `cranelift-*`, `pulley-*`, `wasmtime-internal-*` and `wiggle*` crates follow through the dependency graph. `sync-vendor` already holds the submodule at the `Cargo.lock` version, so the sources match what the workspace expects and nothing needs porting. Keep the stanza on a throwaway branch. CI checks out without submodules (`submodules: false`, also `actions/checkout`'s default), so on `main` every job dies while parsing the manifest. Landing it means turning submodule checkout on across every workflow. `reference/` holds patches written this way, each with its measurement: - `current_thread_split.patch` — splits the cold deferred-frame replay out of `StoreOpaque::current_thread` so the fast path inlines. Removes ~1 point of CPU; throughput flat. - `trace_fiber_roots.patch` — tracks fiber-owning reps instead of scanning the whole component `ResourceTable` per GC. Not measurable.