A diagram toolkit for MoonBit with Dagre, ELK, and Railway layout engines, rendering SVG, ASCII, and Unicode outputs.
Dependencies
moon update
moon buildmoon run cmd/diago -- render diagram.txt///|
test {
let ascii = @diago.compile(
"a -> b",
options=@diago.CompileOptions::new().with_output_mode(Ascii),
)
inspect(
ascii,
content=(
#|+----+
#|| a |
#|| |
#|+----+
#| |
#|+----+
#|| b |
#|| |
#|+----+
#|
),
)
}///|
async fn main {
let svg = @diago_fs.compile_file("diagram.d2")
}import MarkdownIt from 'markdown-it'
import diago from 'diago/markdown-it'
const md = new MarkdownIt().use(diago)
const html = md.render('```diago\na -> b\n```', {
path: 'docs/example.md',
})moon run cmd/diago -- --help# 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 -- versionserver: Web Server
database: Database {
shape: cylinder
}
cache: Cache {
shape: oval
}
server -> database: queries
server -> cache: reads
cache -> database: fallbackmoon run cmd/diago -- render example.txt example.svgSource → Lexer → Parser → AST → IR → Graph → Layout (dagre/elk/railway) → Render (SVG/ASCII/Unicode)moon check --target all --deny-warn
moon test --target all
moon build cmd/diago --target native --release
moon build cmd/wasm --target wasm --release
node scripts/wasm_smoke.mjs _build/wasm/release/build/cmd/wasm/wasm.wasm
npm ci --prefix web
npm test --prefix web
npm ci --prefix markdown
npm test --prefix markdown
npm run test:corpus --prefix markdown
npm run test:package --prefix markdownpub struct CompileOptions {
output_mode : OutputMode
layout_engine : LayoutEngine
direction : Direction
target_spec : String?
layout_plugin : LayoutPlugin?
route_plugin : RoutePlugin?
parse_options : ParseOptions
theme_name : String?
dark_theme_id : Int?
sketch : Bool?
pad : Double?
center : Bool?
theme_overrides : ThemeOverrides?
dark_theme_overrides : ThemeOverrides?
scale : Double?
no_xml_tag : Bool?
salt : String?
omit_version : Bool?
}fn CompileOptions::with_dark_theme_id(self : CompileOptions, dark_theme_id : Int?) -> CompileOptionsfn CompileOptions::with_dark_theme_overrides(self : CompileOptions, dark_theme_overrides : ThemeOverrides?) -> CompileOptionsfn CompileOptions::with_layout_engine(self : CompileOptions, layout_engine : LayoutEngine) -> CompileOptionsfn CompileOptions::with_layout_plugin(self : CompileOptions, layout_plugin : LayoutPlugin?) -> CompileOptionsfn CompileOptions::with_output_mode(self : CompileOptions, output_mode : OutputMode) -> CompileOptionsfn CompileOptions::with_parse_options(self : CompileOptions, parse_options : ParseOptions) -> CompileOptionsfn CompileOptions::with_route_plugin(self : CompileOptions, route_plugin : RoutePlugin?) -> CompileOptionsfn CompileOptions::with_theme_overrides(self : CompileOptions, theme_overrides : ThemeOverrides?) -> CompileOptionspub struct CompletionItem {
label : String
kind : CompletionKind
detail : String
insert_text : String
} derive(Eq, Debug)fn LayoutPlugin::new(f : (GraphInput, LayoutConfig, Direction) -> Result[GraphInput, String]) -> LayoutPluginfn LayoutPlugin::run(self : LayoutPlugin, graph : GraphInput, config : LayoutConfig, direction : Direction) -> Result[GraphInput, String]fn ParseOptions::with_import_resolver(_self : ParseOptions, import_resolver : ImportResolver?) -> ParseOptionsfn get_ref_ranges(source : String, key : String, board_path? : Array[String], options? : ParseOptions) -> Array[Range] raise DiagoErrorA diagram toolkit for MoonBit with Dagre, ELK, and Railway layout engines, rendering SVG, ASCII, and Unicode outputs.
Dependencies