# Component Model Async MVP Implementation Plan ## Scope This is a brief outline of a plan to implement an MVP of Component Model async support, including: - Support for "the callback ABI", i.e. stackless coroutines - Stackful coroutines (e.g. Goroutines and Java fibers) will be addressed post-MVP - async->async, sync->async, and async->sync calls - `stream<T>`, `future<T>`, and `error` - _or_ stick with `wasi:io` to start with - Canonical ABI async lifting and lowering - Wasmtime host support for the above (including `wasmtime-wit-bindgen`) - `wit-parser`, `wasmparser`, `wasmencoder` and `wasm-compose` (or `wac`) support for the above - Guest tooling support for one or more of Rust, JS, Python, and C# via `wit-bindgen`, `jco`, `componentize-py`, etc. ## Plan The overall plan is to pursue this from two directions concurrently: - The "host and tooling track": implement support for the ABI in `wasmtime` and `wasm-tools` - The "guest track": use `isyswasfa` to prototype and get feedback on the guest experience for one or more languages using e.g. `wasi-http` as a real-world usecase. ### The "host and tooling track" - Add non-default build time and/or runtime feature flags to `wasmtime`, `wasm-tools`, etc. - Start implementing the ABI in those repos - This will initially lean more on tests than thorough code review to keep things moving quickly - Later, when we're ready to make the feature flags default, we'll want to review more thoroughly and add fuzz tests if we haven't already - We'll want to document the status of the feature early and often e.g. in the mdbook for Wasmtime ### The "guest track" - Create a `0.3.0-draft-2024-02-XX` snapshot of `wasi-http`, update `isyswasfa` and (a temporary fork of) `wasmtime-wasi-http` to support it, and add some examples of using it in one or more guest languages - This will help us gather early feedback on the guest experience, which might prompt design tweaks to the Component Model async design