---
# System prepended metadata

title: Component Model Async MVP Implementation Plan

---

# 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