Diago is a diagram toolkit for MoonBit. It supports a D2-compatible text format and renders diagrams through multiple layout engines.
This repository contains:
- A CLI (
cmd/diago) with explicit subcommands (render,fmt,validate,layout,themes,version) - A WASM-based playground (
web/) deployed via GitHub Pages - Multiple layout engines:
dagre,elk, andrailway
moon update
moon buildmoon run cmd/diago -- render diagram.txtShow help:
moon run cmd/diago -- --helpCommon usage:
# Render SVG (default output: input.svg)
moon run cmd/diago -- render diagram.txt
moon run cmd/diago -- render diagram.txt diagram.svg
moon run cmd/diago -- render diagram.txt --output diagram.svg
# Choose layout engine
moon run cmd/diago -- render --layout elk diagram.txt diagram.svg
moon run cmd/diago -- render -l dagre diagram.txt diagram.svg
# ASCII / Unicode text
moon run cmd/diago -- render --format ascii diagram.txt --output diagram.ascii.txt
moon run cmd/diago -- render --format unicode diagram.txt --output diagram.unicode.txt
# Format / validate
moon run cmd/diago -- fmt diagram.txt
moon run cmd/diago -- fmt --check diagram.txt
moon run cmd/diago -- validate diagram.txt
# Watch mode (rebuilds output on file changes)
moon run cmd/diago -- render --watch diagram.txt
# Introspection
moon run cmd/diago -- layout
moon run cmd/diago -- layout elk
moon run cmd/diago -- themes
moon run cmd/diago -- versionCreate a file example.txt:
server: Web Server
database: Database {
shape: cylinder
}
cache: Cache {
shape: oval
}
server -> database: queries
server -> cache: reads
cache -> database: fallback
Compile it:
moon run cmd/diago -- render example.txt example.svgAt a high level:
Source → Lexer → Parser → AST → IR → Graph → Layout (dagre/elk/railway) → Render (SVG/ASCII/Unicode)
moon test # Run all tests
moon test -v # Verbose outputApache-2.0 (see LICENSE).