Kroki-rs uses the Provider Pattern to decouple the API from rendering logic.
The Provider PatternΒΆ
All providers implement the DiagramProvider trait. This ensures a consistent interface for validation and generation.
#[async_trait]
impl DiagramProvider for MyProvider {
fn validate(&self, source: &str) -> DiagramResult<()> { ... }
async fn generate(&self, source: &str, format: &str) -> DiagramResult<Vec<u8>> { ... }
}System DependenciesΒΆ
Kroki-rs delegates rendering to specialized external tools. Here is the dependency map:
| Provider | Runtime | External Dependency | Status |
|---|---|---|---|
| Graphviz | Native (C) | graphviz (dot) | Core |
| D2 | Native (Go) | d2 | Core |
| Ditaa | JRE (Java) | ditaa | Legacy Support |
| Mermaid | Browser (JS) | chromium | Native Browser |
| BPMN | Browser (JS) | chromium | Native Browser |
| Vega | Browser (JS) | chromium | Native Browser |
Adding a New ProviderΒΆ
Create
src/diagrams/providers/new_tool.rs.Use
define_provider!(NewToolProvider).Register in
registry.rsand updatecapabilities.rs.
See Coding Standards for implementation details.