Status: accepted as the target · as built: a JSON ABI over core modules instead — ADR-0013 JSON ABI before components (2026-10-01)
Context
Extensions must be distributable, sandboxed, and portable across desktop/web/server. Options in WASM Extension Runtimes: native dylibs (unsafe, platform-specific), scripting (Lua/JS — a second language), WASM core modules (extism), WASM components (WIT).
Decision
Two runtimes, one API: static Rust crates (built-ins, full Dioxus) and WASM components implementing a WIT world generated from ext-api. wasmtime on desktop/server; wasm_component_layer in a Worker on web; not on mobile in v1.
Consequences
- Sandboxing and capability enforcement are natural.
- WIT gives non-Rust extension authors a path.
- Panels from wasm use a declarative
ui::Tree, not Dioxus — less expressive, but portable and cheap over a Worker. - Browser-side component hosting is the least mature piece; ranked very high difficulty in Problem Ranking.