[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-74683":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":9,"pushedAt":9,"updatedAt":32,"readmeContent":33,"aiSummary":34,"trendingCount":15,"starSnapshotCount":15,"syncStatus":13,"lastSyncTime":35,"discoverSource":36},74683,"mermaid-rs-renderer","1jehuang\u002Fmermaid-rs-renderer","1jehuang","A fast native Rust Mermaid diagram renderer. No browser required. 500-1000x faster than mermaid-cli.",null,"Rust",1383,65,2,25,0,7,23,75,21,18.46,"MIT License",false,"master",true,[26,27,28,29,30,31],"cli","diagram","flowchart","mermaid","rust","svg","2026-06-12 02:03:26","\u003Cdiv align=\"center\">\n\n# mmdr\n\n**100–1400x faster Mermaid rendering. Pure Rust. Zero browser dependencies.**\n\n[Installation](#installation) | [Quick Start](#quick-start) | [Benchmarks](#performance) | [Examples](#diagram-types)\n\n\u003C\u002Fdiv>\n\n> **Note:** This library is under active early development. Visual output quality is improving rapidly but may not yet match mermaid-cli in all cases. Bug reports and PRs are welcome.\n\n## Performance\n\nmmdr renders diagrams **100–1400x faster** than mermaid-cli by eliminating browser overhead.\nWith the built-in font cache (warm after first run), tiny diagrams reach **500–900×** (and `--fastText` exceeds **1600×**).\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fbenchmarks\u002Fcomparison.svg\" alt=\"Performance comparison\" width=\"600\">\n\u003C\u002Fp>\n\n\u003Cdiv align=\"center\">\n\n| Diagram | mmdr | mermaid-cli | Speedup |\n|:--------|-----:|------------:|--------:|\n| Flowchart | 4.49 ms | 1,971 ms | **439x** |\n| Class Diagram | 4.67 ms | 1,907 ms | **408x** |\n| State Diagram | 3.97 ms | 1,968 ms | **496x** |\n| Sequence Diagram | 2.71 ms | 1,906 ms | **704x** |\n\n\u003Csub>Tested on Intel Core Ultra 7 265V, Linux 6.18.7 | mermaid-cli 11.4.2 via Puppeteer\u002FChromium\u003C\u002Fsub>\n\n\u003C\u002Fdiv>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Font cache (default, warm after first run)\u003C\u002Fstrong>\u003C\u002Fsummary>\n\nOnce the font cache is populated, tiny\u002Fcommon diagrams reach **500–900×**:\n\n| Diagram (tiny) | mmdr (warm cache) | mermaid-cli | Speedup |\n|:--|--:|--:|--:|\n| Flowchart | 2.96 ms | 2,259 ms | **764×** |\n| Class | 2.55 ms | 2,347 ms | **919×** |\n| State | 2.67 ms | 2,111 ms | **789×** |\n| Sequence | 3.75 ms | 2,010 ms | **536×** |\n\n\u003Csub>Measured Feb 2, 2026 on the same machine.\u003C\u002Fsub>\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Fast text metrics (optional, fastest)\u003C\u002Fstrong>\u003C\u002Fsummary>\n\nEnable `--fastText` to use calibrated fallback widths for ASCII labels (avoids font DB load).\nOn tiny\u002Fcommon diagrams this reaches **1600–2069×** speedups:\n\n| Diagram (tiny) | mmdr `--fastText` | mermaid-cli | Speedup |\n|:--|--:|--:|--:|\n| Flowchart | 1.32 ms | 2,116 ms | **1,601×** |\n| Class | 1.23 ms | 2,314 ms | **1,880×** |\n| State | 1.09 ms | 2,258 ms | **2,069×** |\n| Sequence | 1.16 ms | 2,158 ms | **1,868×** |\n\n\u003Csub>Measured Feb 2, 2026 on the same machine.\u003C\u002Fsub>\n\u003C\u002Fdetails>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fbenchmarks\u002Fbreakdown.svg\" alt=\"Pipeline breakdown\" width=\"500\">\n\u003C\u002Fp>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Library Performance (no CLI overhead)\u003C\u002Fstrong>\u003C\u002Fsummary>\n\nWhen used as a Rust library, mmdr is even faster with no process spawn overhead:\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fbenchmarks\u002Flibrary.svg\" alt=\"Library performance\" width=\"500\">\n\u003C\u002Fp>\n\n| Diagram | Library Time |\n|:--------|-------------:|\n| Flowchart | 1.49 ms |\n| Class Diagram | 2.51 ms |\n| State Diagram | 2.04 ms |\n| Sequence Diagram | 0.07 ms |\n\nThese are raw render times measured with Criterion, ideal for embedding in applications.\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Extended Benchmarks\u003C\u002Fstrong>\u003C\u002Fsummary>\n\nPerformance on larger diagrams:\n\n| Diagram | Nodes | mmdr | mermaid-cli | Speedup |\n|:--------|------:|-----:|------------:|--------:|\n| flowchart (small) | 10 | 3.38 ms | 1,910 ms | 565x |\n| flowchart (medium) | 50 | 8.71 ms | 2,018 ms | 232x |\n| flowchart (large) | 200 | 47.00 ms | 2,276 ms | 48x |\n\nThe speedup advantage decreases for very large diagrams as actual layout computation becomes more significant relative to browser startup overhead. Still, mmdr remains **100x+ faster** even for 200-node diagrams.\n\n\u003C\u002Fdetails>\n\n## Why mmdr?\n\nThe official `mermaid-cli` spawns a **headless Chromium browser** for every diagram, adding 2-3 seconds of startup overhead.\n\n| Use Case | mermaid-cli | mmdr |\n|:---------|:------------|:-----|\n| CI\u002FCD pipeline with 50 diagrams | ~2 minutes | **\u003C 1 second** |\n| Real-time editor preview | Unusable lag | **Instant** |\n| Batch doc generation | Coffee break | **Blink of an eye** |\n\nmmdr parses Mermaid syntax natively in Rust and renders directly to SVG. No browser. No Node.js. No Puppeteer.\n\n## Installation\n\n```bash\n# crates.io (recommended)\ncargo install mermaid-rs-renderer\n\n# From source\ncargo install --path .\n\n# Homebrew (macOS\u002FLinux)\nbrew tap 1jehuang\u002Fmmdr && brew install mmdr\n\n# Scoop (Windows)\nscoop bucket add mmdr https:\u002F\u002Fgithub.com\u002F1jehuang\u002Fscoop-mmdr && scoop install mmdr\n\n# AUR (Arch)\nyay -S mmdr-bin\n```\n\n## Quick Start\n\n```bash\n# Pipe diagram to stdout\necho 'flowchart LR; A-->B-->C' | mmdr -e svg\n\n# File to file\nmmdr -i diagram.mmd -o output.svg -e svg\nmmdr -i diagram.mmd -o output.png -e png\n\n# Render all diagrams from a Markdown file\nmmdr -i README.md -o .\u002Fdiagrams\u002F -e svg\n```\n\n## Diagram Types\n\nmmdr supports **23 Mermaid diagram types**:\n\n| Category | Diagrams |\n|:---------|:---------|\n| **Core** | Flowchart, Sequence, Class, State |\n| **Data** | ER Diagram, Pie Chart, XY Chart, Quadrant Chart, Sankey |\n| **Planning** | Gantt, Timeline, Journey, Kanban |\n| **Architecture** | C4, Block, Architecture, Requirement |\n| **Other** | Mindmap, Git Graph, ZenUML, Packet, Radar, Treemap |\n\n\u003Ctable>\n\u003Ctr>\n\u003Ctd align=\"center\" width=\"50%\">\n\u003Cstrong>Flowchart\u003C\u002Fstrong>\u003Cbr>\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fflowchart_mmdr.svg\" alt=\"Flowchart\" width=\"100%\">\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"50%\">\n\u003Cstrong>Class Diagram\u003C\u002Fstrong>\u003Cbr>\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fclass_mmdr.svg\" alt=\"Class Diagram\" width=\"100%\">\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003Ctr>\n\u003Ctd align=\"center\" width=\"50%\">\n\u003Cstrong>State Diagram\u003C\u002Fstrong>\u003Cbr>\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fstate_mmdr.svg\" alt=\"State Diagram\" width=\"100%\">\n\u003C\u002Ftd>\n\u003Ctd align=\"center\" width=\"50%\">\n\u003Cstrong>Sequence Diagram\u003C\u002Fstrong>\u003Cbr>\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fsequence_mmdr.svg\" alt=\"Sequence Diagram\" width=\"100%\">\n\u003C\u002Ftd>\n\u003C\u002Ftr>\n\u003C\u002Ftable>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Compare with mermaid-cli output\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n| Type | mmdr | mermaid-cli |\n|:-----|:----:|:-----------:|\n| Flowchart | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fflowchart_mmdr.svg\" width=\"350\"> | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fflowchart_official.svg\" width=\"350\"> |\n| Class | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fclass_mmdr.svg\" width=\"350\"> | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fclass_official.svg\" width=\"350\"> |\n| State | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fstate_mmdr.svg\" width=\"350\"> | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fstate_official.svg\" width=\"350\"> |\n| Sequence | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fsequence_mmdr.svg\" width=\"350\"> | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fsequence_official.svg\" width=\"350\"> |\n| ER Diagram | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fer_mmdr.svg\" width=\"350\"> | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fer_official.svg\" width=\"350\"> |\n| Pie Chart | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fpie_mmdr.svg\" width=\"350\"> | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fpie_official.svg\" width=\"350\"> |\n| Gantt | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fgantt_mmdr.svg\" width=\"350\"> | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fgantt_official.svg\" width=\"350\"> |\n| Mindmap | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fmindmap_mmdr.svg\" width=\"350\"> | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fmindmap_official.svg\" width=\"350\"> |\n| Timeline | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Ftimeline_mmdr.svg\" width=\"350\"> | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Ftimeline_official.svg\" width=\"350\"> |\n| Journey | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fjourney_mmdr.svg\" width=\"350\"> | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fjourney_official.svg\" width=\"350\"> |\n| Git Graph | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fgitgraph_mmdr.svg\" width=\"350\"> | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fgitgraph_official.svg\" width=\"350\"> |\n| XY Chart | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fxychart_mmdr.svg\" width=\"350\"> | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fxychart_official.svg\" width=\"350\"> |\n| Quadrant | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fquadrant_mmdr.svg\" width=\"350\"> | \u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fcomparisons\u002Fquadrant_official.svg\" width=\"350\"> |\n\n\u003C\u002Fdetails>\n\n## More Diagrams\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Node Shapes\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n| Shape | Syntax |\n|:------|:-------|\n| Rectangle | `[text]` |\n| Round | `(text)` |\n| Stadium | `([text])` |\n| Diamond | `{text}` |\n| Hexagon | `{{text}}` |\n| Cylinder | `[(text)]` |\n| Circle | `((text))` |\n| Double Circle | `(((text)))` |\n| Subroutine | `[[text]]` |\n| Parallelogram | `[\u002Ftext\u002F]` |\n| Trapezoid | `[\u002Ftext\\]` |\n| Asymmetric | `>text]` |\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Edge Styles\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n| Type | Syntax | Description |\n|:-----|:-------|:------------|\n| Arrow | `-->` | Standard arrow |\n| Open | `---` | No arrowhead |\n| Dotted | `-.->` | Dashed line with arrow |\n| Thick | `==>` | Bold arrow |\n| Circle end | `--o` | Circle decoration |\n| Cross end | `--x` | X decoration |\n| Diamond end | `\u003C-->` | Bidirectional |\n| With label | `--\\|text\\|-->` | Labeled edge |\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Subgraphs\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n```\nflowchart TB\n    subgraph Frontend\n        A[React App] --> B[API Client]\n    end\n    subgraph Backend\n        C[Express Server] --> D[(PostgreSQL)]\n    end\n    B --> C\n```\n\nSubgraphs support:\n- Custom labels\n- Direction override (`direction LR`)\n- Nesting\n- Styling\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Styling Directives\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n```\nflowchart LR\n    A[Start] --> B[End]\n\n    classDef highlight fill:#f9f,stroke:#333\n    class A highlight\n\n    style B fill:#bbf,stroke:#333\n    linkStyle 0 stroke:red,stroke-width:2px\n```\n\nSupported:\n- `classDef` - Define CSS classes\n- `class` - Apply classes to nodes\n- `:::class` - Inline class syntax\n- `style` - Direct node styling\n- `linkStyle` - Edge styling\n- `%%{init}%%` - Theme configuration\n\n\u003C\u002Fdetails>\n\n## Features\n\n**Diagram types:** `flowchart` \u002F `graph` | `sequenceDiagram` | `classDiagram` | `stateDiagram-v2` | `erDiagram` | `pie` | `gantt` | `journey` | `timeline` | `mindmap` | `gitGraph` | `xychart-beta` | `quadrantChart` | `sankey-beta` | `kanban` | `C4Context` | `block-beta` | `architecture-beta` | `requirementDiagram` | `zenuml` | `packet-beta` | `radar-beta` | `treemap`\n\n**Node shapes:** rectangle, round-rect, stadium, circle, double-circle, diamond, hexagon, cylinder, subroutine, trapezoid, parallelogram, asymmetric\n\n**Edges:** solid, dotted, thick | Decorations: arrow, circle, cross, diamond | Labels\n\n**Styling:** `classDef`, `class`, `:::class`, `style`, `linkStyle`, `%%{init}%%`\n\n**Layout:** subgraphs with direction, nested subgraphs, automatic spacing\n\n## Configuration\n\n```bash\nmmdr -i diagram.mmd -o out.svg -c config.json\nmmdr -i diagram.mmd -o out.svg --nodeSpacing 60 --rankSpacing 120\nmmdr -i diagram.mmd -o out.svg --preferredAspectRatio 16:9\n```\n\n`preferredAspectRatio` is layout-aware for graph diagrams: the renderer first rebalances geometry toward the target ratio, then fits final SVG dimensions to that ratio.\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>config.json example\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n```json\n{\n  \"themeVariables\": {\n    \"primaryColor\": \"#F8FAFF\",\n    \"primaryTextColor\": \"#1C2430\",\n    \"primaryBorderColor\": \"#C7D2E5\",\n    \"lineColor\": \"#7A8AA6\",\n    \"secondaryColor\": \"#F0F4FF\",\n    \"tertiaryColor\": \"#E8EEFF\",\n    \"edgeLabelBackground\": \"#FFFFFF\",\n    \"clusterBkg\": \"#F8FAFF\",\n    \"clusterBorder\": \"#C7D2E5\",\n    \"background\": \"#FFFFFF\",\n    \"fontFamily\": \"Inter, system-ui, sans-serif\",\n    \"fontSize\": 13\n  },\n  \"preferredAspectRatio\": \"16:9\",\n  \"flowchart\": {\n    \"nodeSpacing\": 50,\n    \"rankSpacing\": 50\n  }\n}\n```\n\n\u003C\u002Fdetails>\n\n## How It Works\n\n\u003Cimg src=\"https:\u002F\u002Fraw.githubusercontent.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fmaster\u002Fdocs\u002Fdiagrams\u002Farchitecture.svg\" alt=\"Architecture comparison\" width=\"100%\">\n\n**mmdr** implements the entire Mermaid pipeline natively:\n\n```\n.mmd → parser.rs → ir.rs → layout.rs → render.rs → SVG → resvg → PNG\n```\n\n**mermaid-cli** requires browser infrastructure:\n\n```\n.mmd → mermaid-js → layout → Browser DOM → Puppeteer → Chromium → Screenshot → PNG\n```\n\n| | mmdr | mermaid-cli |\n|:--|:-----|:------------|\n| Runtime | Native binary | Node.js + Chromium |\n| Cold start | ~3 ms | ~2,000 ms |\n| Memory | ~15 MB | ~300+ MB |\n| Dependencies | None | Node.js, npm, Chromium |\n\n## Library Usage\n\nUse mmdr as a Rust library in your project:\n\n```toml\n[dependencies]\nmermaid-rs-renderer = \"0.2.2\"\n```\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Minimal dependencies (for embedding)\u003C\u002Fstrong>\u003C\u002Fsummary>\n\nFor tools like Zola that only need SVG rendering, disable default features to avoid CLI and PNG dependencies:\n\n```toml\n[dependencies]\nmermaid-rs-renderer = { version = \"0.2.2\", default-features = false }\n```\n\n| Feature | Default | Description |\n|:--------|:-------:|:------------|\n| `cli` | Yes | CLI binary and clap dependency |\n| `png` | Yes | PNG output via resvg\u002Fusvg |\n\nWith current locked dependencies, this reduces the dependency graph from about 123 crates to about 71 crates.\n\n\u003C\u002Fdetails>\n\nFor unreleased commits only:\n\n```toml\n[dependencies]\nmermaid-rs-renderer = { git = \"https:\u002F\u002Fgithub.com\u002F1jehuang\u002Fmermaid-rs-renderer\", rev = \"\u003Ccommit-sha>\" }\n```\n\n```rust\nuse mermaid_rs_renderer::{render, render_with_options, RenderOptions};\n\n\u002F\u002F Simple one-liner\nlet svg = render(\"flowchart LR; A-->B-->C\").unwrap();\n\n\u002F\u002F With custom options\nlet opts = RenderOptions::modern()\n    .with_node_spacing(60.0)\n    .with_rank_spacing(80.0);\nlet svg = render_with_options(\"flowchart TD; X-->Y\", opts).unwrap();\n```\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>Full pipeline control\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n```rust\nuse mermaid_rs_renderer::{\n    parse_mermaid, compute_layout, render_svg,\n    Theme, LayoutConfig,\n};\n\nlet diagram = \"flowchart LR; A-->B-->C\";\n\n\u002F\u002F Stage 1: Parse\nlet parsed = parse_mermaid(diagram).unwrap();\nprintln!(\"Parsed {} nodes\", parsed.graph.nodes.len());\n\n\u002F\u002F Stage 2: Layout\nlet theme = Theme::modern();\nlet config = LayoutConfig::default();\nlet layout = compute_layout(&parsed.graph, &theme, &config);\n\n\u002F\u002F Stage 3: Render\nlet svg = render_svg(&layout, &theme, &config);\n```\n\n\u003C\u002Fdetails>\n\n\u003Cdetails>\n\u003Csummary>\u003Cstrong>With timing information\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n```rust\nuse mermaid_rs_renderer::{render_with_timing, RenderOptions};\n\nlet result = render_with_timing(\n    \"flowchart LR; A-->B\",\n    RenderOptions::default()\n).unwrap();\n\nprintln!(\"Rendered in {:.2}ms\", result.total_ms());\nprintln!(\"  Parse:  {}us\", result.parse_us);\nprintln!(\"  Layout: {}us\", result.layout_us);\nprintln!(\"  Render: {}us\", result.render_us);\n```\n\n\u003C\u002Fdetails>\n\n## Development\n\n```bash\ncargo test\ncargo run -- -i docs\u002Fdiagrams\u002Farchitecture.mmd -o \u002Ftmp\u002Fout.svg -e svg\n```\n\n**Remote build\u002Ftest over SSH (optional):**\n```bash\nscripts\u002Fremote-cargo.sh test\nscripts\u002Fremote-cargo.sh build --release\nscripts\u002Fremote-cargo.sh bench --bench renderer\n\n# Optional override\nMMDR_REMOTE_HOST=my-builder scripts\u002Fremote-cargo.sh test\n```\n\nThe wrapper uses `rsync` + `ssh` and keeps host\u002FIP details in your local environment\nor `~\u002F.ssh\u002Fconfig`, not in this repository. By default it syncs into an isolated\ndirectory under remote `~\u002F.cache` with `rsync --delete`, so it will not\ntouch your normal remote working copy unless you set `MMDR_REMOTE_DIR` to that path.\n\n**Benchmarks:**\n```bash\ncargo bench --bench renderer              # Microbenchmarks\ncargo build --release && python scripts\u002Fbench_compare.py  # vs mermaid-cli\n```\n\nRelease process: see [docs\u002Frelease.md](https:\u002F\u002Fgithub.com\u002F1jehuang\u002Fmermaid-rs-renderer\u002Fblob\u002Fmaster\u002Fdocs\u002Frelease.md).\n\n## License\n\nMIT\n","mmdr 是一个基于 Rust 的快速 Mermaid 图表渲染工具，无需浏览器环境即可运行。该项目的核心功能是利用纯 Rust 实现的高效渲染引擎，比传统的 mermaid-cli 渲染速度快 100 到 1400 倍。通过内置字体缓存和可选的快速文本度量模式，mmdr 能够显著减少渲染时间，特别适合需要高性能图表生成的应用场景，如自动化文档生成、CI\u002FCD 流水线中的图表渲染等。尽管项目尚处于早期开发阶段，但其在性能上的优势已经非常突出。","2026-06-11 03:50:25","high_star"]