Extension System Design
This document describes the Morphir extension system, including current implementation and future vision.
Overview
The Morphir extension system allows adding support for new languages and targets through WASM-based extensions. Extensions implement the Frontend and/or Backend traits to provide language-specific functionality.
Current Implementation
Architecture
The current implementation uses:
- Extism: WASM runtime for loading and executing extensions
- Extension Registry: Manages loaded extensions
- Extension Container: Wraps Extism plugin with Morphir-specific functionality
Extension Types
Extensions can implement:
- Frontend: Converts source code → Morphir IR V4
- Backend: Converts Morphir IR V4 → Generated code
- Transform: IR-to-IR transformations
- Validator: IR validation
Extension Discovery
Extensions are discovered in this order:
- Builtin Extensions: Bundled with CLI (e.g., Gleam)
- Config Extensions: Specified in
morphir.toml - Registry Extensions: Installed from extension registry
Extension Loading
// Discover extension
let extension = registry.find_extension_by_language("gleam").await?;
// Call extension method
let result: serde_json::Value = extension
.call("morphir.frontend.compile", params)
.await?;
Future Vision: Actor Model
The design documents describe a sophisticated actor-based architecture:
Extension Manager
Central coordinator as a singleton Kameo actor:
- Manages extension lifecycle
- Routes extension requests
- Coordinates extension hosts
Extension Hosts
One actor per protocol type:
- JSON-RPC Host: JSON-RPC protocol extensions
- gRPC Host: gRPC protocol extensions
- Stdio Host: Standard I/O extensions
- Extism WASM Host: Current WASM extensions
- WASM Component Host: Future WASM Component Model extensions
Benefits of Actor Model
- Isolation: Each component is an independent actor
- Concurrency: Parallel processing across actors
- Supervision: Automatic failure recovery
- Scalability: Easy to add new protocol types
Migration Path
The current implementation is designed to be compatible with the future actor model:
- Current: Direct
ExtensionRegistryusage - Future: Extension Manager actor routes requests
- Compatibility: Current API can be wrapped in actor messages
Extension Development
See Extension Development Tutorial for how to create extensions.
Next Steps
- Read Extension Host Interface
- See Extism WASM Host
- Check Extension Manager