Diagram¶
Generates and renders diagrams using Kroki as the unified backend, supporting Mermaid, PlantUML, D2, and 25+ other diagram types.
Short alias: diag
Experimental
This pack is experimental. Behaviour and tool signatures may change between releases.
Highlights¶
- Two-stage pipeline (generate source, then render)
- Config-driven instructions and templates
- Policy rules for LLM guidance
- Batch operations for self-hosted backends
- Playground URL generation for debugging
Two-Stage Pipeline¶
| Function | Description |
|---|---|
diagram.generate_source(source, provider, name) |
Save source for review |
diagram.render_diagram(source, provider, name) |
Render via Kroki |
diagram.get_render_status(task_id) |
Check async render progress |
Batch Operations (Self-Hosted Only)¶
| Function | Description |
|---|---|
diagram.batch_render(sources) |
Render multiple diagrams concurrently |
diagram.render_directory(directory) |
Render all source files in a directory |
Configuration Tools¶
| Function | Description |
|---|---|
diagram.get_diagram_policy() |
Get policy rules for diagram generation |
diagram.get_diagram_instructions(provider) |
Get provider-specific guidance |
diagram.get_output_config() |
Get output settings |
diagram.get_template(name) |
Load a named template |
diagram.list_providers(focus_only) |
List available providers |
Utility Tools¶
| Function | Description |
|---|---|
diagram.get_playground_url(source, provider) |
Get interactive editor URL |
Focus Providers¶
- Mermaid: Flowcharts, sequences, state diagrams, Gantt, mindmaps
- PlantUML: UML diagrams, C4 architecture (via stdlib)
- D2: Modern architecture diagrams with auto-layout
All 28+ Kroki providers are available for advanced use.
Key Parameters¶
| Parameter | Type | Description |
|---|---|---|
source |
str | Diagram source code |
provider |
str | mermaid, plantuml, d2, graphviz, etc. |
output_format |
str | svg (default), png, pdf |
output_dir |
str | Override default output directory |
async_mode |
bool | Render in background thread, return task ID for status polling |
Configuration¶
Required¶
- No required
tools.diagramsettings.
Optional¶
| Key | Type | Default | Description |
|---|---|---|---|
tools.diagram.backend.type |
"kroki" |
"kroki" |
Backend type. Only Kroki is currently supported. |
tools.diagram.backend.remote_url |
string | https://kroki.io |
Remote Kroki base URL. |
tools.diagram.backend.self_hosted_url |
string | http://localhost:8000 |
Self-hosted Kroki base URL. |
tools.diagram.backend.prefer |
enum | remote |
Backend preference: remote, self_hosted, or auto. |
tools.diagram.backend.timeout |
float | 30.0 |
Backend request timeout in seconds. |
tools.diagram.policy.rules |
string | built-in policy text | Guidance returned by diagram.get_diagram_policy(). |
tools.diagram.policy.preferred_format |
enum | svg |
Preferred output format: svg, png, or pdf. |
tools.diagram.policy.preferred_providers |
string[] | ["mermaid", "d2", "plantuml"] |
Provider preference order. |
tools.diagram.output.dir |
string | diagrams |
Output directory for rendered files. |
tools.diagram.output.naming |
string | {provider}_{name}_{timestamp} |
Filename template. |
tools.diagram.output.default_format |
enum | svg |
Default output format. |
tools.diagram.output.save_source |
bool | true |
Save source files alongside rendered output. |
tools.diagram.instructions |
object |
{} |
Provider-specific guidance overrides. |
tools.diagram.templates |
object |
{} |
Named template references. |
tools:
diagram:
backend:
prefer: remote
timeout: 30.0
output:
dir: diagrams
default_format: svg
policy:
preferred_providers: [mermaid, d2, plantuml]
Or use include: to load from a shared config file:
Defaults¶
- If
tools.diagramis omitted, OneTool uses the built-in backend, policy, output, and template defaults shown above.
Examples¶
# Generate source for review
diagram.generate_source(
source="graph TD\n A --> B",
provider="mermaid",
name="flow"
)
# Render diagram
diagram.render_diagram(
source="graph TD\n A --> B",
provider="mermaid",
name="flow"
)
# Get playground URL for debugging
diagram.get_playground_url(source="graph TD\n A --> B", provider="mermaid")
# List available providers
diagram.list_providers(focus_only=True)
Templates¶
OneTool includes built-in diagram templates for common patterns. Templates are installed to a diagram-templates/ directory inside your config directory during onetool init.
Available templates:
| Name | Provider | Type | Description |
|---|---|---|---|
api-flow |
mermaid | sequence | REST API request/response flow |
microservices |
d2 | architecture | Microservices architecture layout |
c4-context |
plantuml | c4 | C4 system context diagram |
state-machine |
mermaid | state | State machine diagram |
class-diagram |
mermaid | class | Class/data model diagram |
project-gantt |
mermaid | gantt | Project timeline Gantt chart |
feature-mindmap |
mermaid | mindmap | Feature brainstorming mindmap |
Load a template:
Templates can be customized by editing files in the diagram-templates/ directory inside your config directory.
Self-Hosted Setup¶
For batch operations or high-volume rendering, use the Kroki docker-compose from kroki.io:
# Download Kroki docker-compose
curl -LO https://raw.githubusercontent.com/yuzutech/kroki/main/docker-compose.yml
# Start Kroki
docker compose up -d
Then configure onetool.yaml: