# 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