Mermaid
Generate and validate Mermaid.js diagrams from text descriptions.
by greedychipmunk · MIT
The skill
Generate and validate Mermaid.js diagrams from text descriptions. Use when creating flowcharts, sequence diagrams, Gantt charts, class diagrams, state diagrams, ER diagrams, git graphs, user journeys, quadrant charts, XY charts, pie charts, architecture diagrams, block diagrams, requirement diagrams, treemaps, mindmaps, timelines, or Sankey diagrams. Also use when converting structured descriptions into visual diagrams or validating existing Mermaid syntax.
Mermaid.js
Generate Mermaid.js diagrams from text descriptions and validate existing Mermaid syntax.
When to Use
- Creating any of the 18 Mermaid diagram types from structured descriptions
- Converting plain-language descriptions into visual diagrams
- Validating existing Mermaid syntax for common errors
- Choosing the right diagram type for a given scenario
- Styling or theming Mermaid diagrams
Diagram Types at a Glance
| Diagram | Keyword | Use For |
|---|---|---|
| Flowchart | flowchart / graph |
Process flows, decision trees, system logic |
| Sequence | sequenceDiagram |
Message passing between actors over time |
| Gantt | gantt |
Project schedules, task timelines |
| Class | classDiagram |
OOP class structure, inheritance, relationships |
| State | stateDiagram-v2 |
State machines, transitions, lifecycle |
| ER | erDiagram |
Database schemas, entity relationships |
| Git Graph | gitGraph |
Git branching and merge strategies |
| User Journey | journey |
User experience across task steps |
| Quadrant | quadrantChart |
2D prioritization (e.g. impact vs. effort) |
| XY Chart | xychart-beta |
Bar charts, line charts with axes |
| Pie | pie |
Proportional data, percentage breakdowns |
| Architecture | architecture-beta |
Cloud/CI-CD service topology |
| Block | block-beta |
Fixed-position block layouts |
| Requirement | requirementDiagram |
SysML requirement traceability |
| Treemap | treemap-beta |
Hierarchical proportional data |
| Mindmap | mindmap |
Brainstorming, concept hierarchy |
| Timeline | timeline |
Chronological events |
| Sankey | sankey-beta |
Flow quantities between nodes |
Universal Syntax
Every diagram begins with a diagram type keyword. Optional frontmatter and directives can configure the diagram before content.
Frontmatter
YAML between --- lines at the very start. Used for layout, look, and theme configuration.
---
config:
layout: elk
look: handDrawn
theme: forest
---
flowchart LR
A --> B
Directives
Inline configuration via %%{ }%%. Can appear above or below the diagram definition.
%%{init: {'theme': 'dark'}}%%
flowchart LR
A --> B
Comments
%% starts a comment — everything after it on that line is ignored.
Diagram-Breaking Words
The word end inside flowchart and sequence diagrams breaks parsing. Wrap node text containing end in quotes: A["weekend"].
Layouts
dagre(default) — standard layout engineelk— Eclipse Layout Kernel, better for complex diagrams (requires frontmatter config)
Looks
classic(default)handDrawn— sketch-style rendering
Quick Syntax by Diagram Type
Flowchart
flowchart TD
A[Start] --> B{Decision}
B -->|Yes| C[Action]
B -->|No| D[End]
Directions: TD/TB (top-down), BT, LR, RL. Node shapes: A[rect], A(rounded), A((circle)), A{diamond}, A>flag], A[/parallelogram/], A[\trapezoid\]. Links: -->, ---, -.->, ==>, -- text -->. Subgraphs: subgraph Name ... end. Styling: classDef name fill:#f9f,stroke:#333 then class nodeId name. Icons: A@{ icon: fa:database }. New shapes (v11.3.0+): A@{ shape: rect }.
See references/flowchart.md for all 30+ shapes, link types, subgraph options, and styling.
Sequence Diagram
sequenceDiagram
Alice->>Bob: Hello
Bob-->>Alice: Hi
Alice->>Bob: How are you?
Bob-->>Alice: Great!
Participants: participant Name or actor Name. Arrows: ->, -->, ->>, -->>, -x, --x, -), --). Half-arrows (v11.12.3+): ->>, -->> with half-arrow variants. Loops: loop Description ... end. Conditionals: alt Condition ... else ... end, opt Condition ... end. Parallel: par ... and ... end. Critical: critical ... option ... end. Break: break ... end. Notes: note left/right/over of Participant: text. Activation: activate/deactivate or +/- shorthand. autonumber adds sequence numbers.
See references/sequence.md for all arrow types, message grouping, notes, activations, and styling.
Gantt Chart
gantt
title Project Schedule
dateFormat YYYY-MM-DD
section Design
Task 1 :a1, 2024-01-01, 30d
Task 2 :after a1, 20d
section Development
Task 3 :2024-02-15, 45d
Milestone :milestone, 2024-04-01, 0d
dateFormat: YYYY-MM-DD (default). Duration units: ms, s, m, h, d, w, M, y. Excludes: excludes weekends. Today marker: todayMarker off or todayMarker stroke:#f00,stroke-width:2px. Compact mode: compact keyword. axisFormat for date display formatting.
See references/gantt.md for metadata syntax, section handling, dependencies, and styling.
Class Diagram
classDiagram
class Animal {
+String name
-int age
#makeSound() void
}
class Dog {
+bark() void
}
Dog --|> Animal
Dog --> Toy
Visibility: + public, - private, # protected, ~ package. Modifiers: * abstract, $ static. Relationships: --|> inheritance, *-- composition, o-- aggregation, --> association, ..> dependency, ..|> realization. Cardinality: Animal "1" --> "0..*" Dog. Generics: class List~T~. Namespaces: namespace Name { ... }. Notes: note for Class "text".
See references/class.md for all relationship types, annotations, generics, and styling.
State Diagram
stateDiagram-v2
[*] --> Still
Still --> Moving
Moving --> Crash
Crash --> [*]
States: stateId or state "Description" as id. Transitions: A --> B or A --> B : label. Start/end: [*]. Composite states: state Parent { ... }. Choice: state choiceState <<choice>>. Fork: state forkState <<fork>>. Notes: note left/right of StateId : text. Concurrency: -- separator inside composite states. Direction: direction LR.
See references/state.md for composite states, choice, fork, concurrency, and styling.
ER Diagram
erDiagram
CUSTOMER ||--o{ ORDER : places
ORDER ||--|{ LINE-ITEM : contains
CUSTOMER {
string name
string email PK
}
ORDER {
int order_id PK
date order_date
}
Cardinality (left/right): |o/o| zero-or-one, ||/|| exactly-one, }o/o{ zero-or-more, }|/|{ one-or-more. Identification: -- identifying (solid), .. non-identifying (dashed). Attributes: type name inside {}. Keys: PK, FK, UK. Comments: "comment" at end of attribute. Aliases: one or more, zero or one, etc. Direction: direction LR/RL/TB/BT.
See references/er.md for cardinality, identification, attributes, keys, subgraphs, and styling.
Git Graph
gitGraph
commit
commit
branch develop
checkout develop
commit
checkout main
merge develop
Commands: commit, branch name, checkout name (or switch), merge name, cherry-pick id: "id". Commit attributes: id: "custom_id", type: NORMAL|REVERSE|HIGHLIGHT, tag: "v1.0". Merge attributes: same as commit. Orientation: gitGraph LR: / TB: / BT:. Config: showBranches, showCommitLabel, mainBranchName, parallelCommits.
See references/gitgraph.md for commit types, cherry-pick, branch ordering, orientation, and theming.
User Journey
journey
title User shops online
section Browse
Visit homepage: 5: User
Search product: 4: User
section Purchase
Add to cart: 5: User
Checkout: 3: User, System
Tasks: Task name: score: actor. Score is 1–5 (higher = better sentiment). Sections group related tasks.
See references/journey.md for full syntax.
Quadrant Chart
quadrantChart
title Impact vs Effort
x-axis Low Effort --> High Effort
y-axis Low Impact --> High Impact
quadrant-1 Do First
quadrant-2 Schedule
quadrant-3 Delegate
quadrant-4 Drop
Task A: [0.3, 0.8]
Task B: [0.7, 0.2]
Points: Name: [x, y] where x and y are 0–1. Axes: x-axis left --> right, y-axis bottom --> top. Quadrants: quadrant-1 through quadrant-4. Point styling: Name: [x, y] radius: 12, color: #ff0000. Classes: classDef name color: #109060 then Point:::className: [x, y].
See references/quadrant.md for axis config, point styling, classes, and theme variables.
XY Chart
xychart-beta
title "Sales Q1"
x-axis ["Jan", "Feb", "Mar"]
y-axis "Revenue" 0 --> 10000
bar [5000, 7000, 9000]
line [3000, 6000, 8500]
Orientation: xychart-beta horizontal or vertical (default). x-axis: categorical [cat1, cat2] or numeric min --> max. y-axis: numeric range. Plots: line [values] or bar [values]. Named plots: line "Series" [values] (adds to legend). Per-point labels (v11.16.0+): line [2.3 "label1", 45 "label2"].
See references/xychart.md for config options, axis config, theme variables, and data labels.
Pie Chart
pie showData
title Market Share
"Product A" : 40
"Product B" : 35
"Product C" : 25
showData renders values after legend. Donut mode (v11.16.0+): set donutHole config (0 to 0.9). Legend position: legendPosition config (top/bottom/left/right/center). Highlight slice: highlightSlice config.
See references/pie.md for config options.
Architecture Diagram
architecture-beta
group api(cloud)[API Layer]
service db(database)[Database] in api
service server(server)[Server] in api
db:R --> L:server
Groups: group id(icon)[title] in parent. Services: service id(icon)[title] in parent. Edges: serviceId:side -- side:serviceId where side is T|B|L|R. Arrows: --> for directional. Edges from groups: serviceId{group}:B --> T:otherService{group}. Junctions: junction id. Align: align row idA idB or align column idA idB. Icons: cloud, database, disk, internet, server or custom via iconify.design.
See references/architecture.md for edges, groups, junctions, alignment, layout tuning, and icons.
Block Diagram
block-beta
columns 3
A B C
D["Wide"] E F
A --> D
B --> E
Columns: columns N. Blocks: id or id["label"]. Shapes: block:rounded, block:circle, block:hexagon, etc. Width: block:width N. Composite: block Parent { block Child }. Edges: -->, ---. Space: space or space:N. Styling: classDef name fill:#f9f then class nodeId name.
See references/block.md for shapes, edges, composite blocks, styling, and layout.
Requirement Diagram
requirementDiagram
requirement Test Req {
id: 1
text: The system shall test
risk: High
verifymethod: Test
}
element Entity {
type: Software
docref: spec.md
}
Test Req - satisfies -> Entity
Types: requirement, functionalRequirement, interfaceRequirement, performanceRequirement, physicalRequirement, designConstraint. Risk: Low/Medium/High. VerifyMethod: Analysis/Inspection/Test/Demonstration. Relationships: contains, copies, derives, satisfies, verifies, refines, traces. Direction: direction LR/RL/TB/BT.
See references/requirement.md for types, relationships, styling, and direction.
Treemap
treemap-beta
"Section 1"
"Leaf 1.1": 12
"Leaf 1.2": 8
"Section 2"
"Leaf 2.1": 20
"Leaf 2.2": 25
Nodes: quoted text for sections, "name": value for leaves. Hierarchy via indentation. Styling: classDef name fill:#f9f then "node":::className. Value formatting: valueFormat config (,, $, .1%, etc.).
See references/treemap.md for config options, value formatting, and styling.
Mindmap
mindmap
Root
A
B
C
D
Hierarchy via indentation. Shapes: id[square], id(rounded), id((circle)), id)bang(, id)cloud(, id{{hexagon}}. Icons: id::icon(fa:database). Classes: id:::className. Markdown strings supported.
See references/mindmap.md for shapes, icons, classes, and layouts.
Timeline
timeline
title History of Computing
section Early Era
1940s : ENIAC
1950s : FORTRAN
section Modern Era
2000s : Cloud Computing
2010s : AI Revolution
Time periods: period : event or period : event : event. Sections: section Name. Direction: timeline LR (default) or timeline TD. Multi-color: default on, disableMultiColor to disable.
See references/timeline.md for sections, direction, styling, and themes.
Sankey
sankey-beta
Source,Target,Value
Electricity,Heating,40
Electricity,Lights,15
Gas,Heating,30
CSV format: 3 columns (source, target, value). Commas in values: wrap in double quotes. Double quotes in values: use "". Config: linkColor (source/target/gradient/hex), nodeAlignment (justify/center/left/right), labelStyle (legacy/outlined), nodeWidth, nodePadding, nodeColors.
See references/sankey.md for CSV syntax, config, and node colors.
Common Gotchas
endbreaks diagrams. In flowcharts and sequence diagrams,endis a keyword. Wrap any node text containing "end" in quotes:A["weekend"].- Frontmatter must be first. The
---lines must be the very first characters in the diagram. No blank lines before. - Indentation matters in mindmaps and treemaps. The hierarchy is defined by indentation relative to the previous line, not absolute column position.
- Sequence diagram
autonumbermust come early. Placeautonumberright aftersequenceDiagramand before any participants. - Gantt
dateFormatis required. Without it, date parsing fails silently. - ER cardinality order matters.
||--o{means "exactly one to zero-or-more" — the left cardinality comes first. - Sankey values must be numeric. The third CSV column must be a number, not a string.
- Pie values must be positive. Zero or negative values cause errors.
- Quadrant point coordinates are 0–1. Not pixel values, not percentages — a float between 0 and 1.
- Architecture diagram identifiers must be declared before use. You cannot reference a service in an edge before declaring it.
Validation
The bundled scripts/validate.py checks Mermaid syntax for common errors:
uv run scripts/validate.py --input diagram.mmd
Or pipe via stdin:
cat diagram.mmd | uv run scripts/validate.py --stdin
Checks include: valid diagram type keyword, balanced braces/brackets/parentheses, unquoted diagram-breaking words, frontmatter YAML validity, and common syntax pitfalls per diagram type.
Output is structured JSON to stdout, diagnostics to stderr. Exit code 0 = valid, 1 = invalid, 2 = usage error.
Detailed References
Load these when you need full syntax details, edge cases, or examples for a specific diagram type:
references/flowchart.md— All node shapes (30+), link types, subgraphs, styling, icons, markdown stringsreferences/sequence.md— Arrow types, loops, alt/par/critical/break, notes, activations, stylingreferences/gantt.md— Date format, axis format, duration units, excludes, milestones, compact mode, today markerreferences/class.md— Visibility, generics, relationships, cardinality, namespaces, annotations, notesreferences/state.md— Composite states, choice, fork, concurrency, notes, direction, classDefsreferences/er.md— Cardinality, identification, attributes, keys, comments, aliases, subgraphs, directionreferences/gitgraph.md— Commit types, tags, cherry-pick, branch ordering, orientation, config, themesreferences/journey.md— Sections, tasks, scores, actorsreferences/quadrant.md— Axes, quadrants, points, styling, classes, config, theme variablesreferences/xychart.md— Orientation, axes, line/bar plots, legends, data labels, config, theme variablesreferences/pie.md— showData, donut mode, legend position, highlight slice, configreferences/architecture.md— Groups, services, edges, junctions, alignment, layout tuning, iconsreferences/block.md— Columns, shapes, composite blocks, edges, space blocks, stylingreferences/requirement.md— Types, elements, relationships, direction, stylingreferences/treemap.md— Node hierarchy, styling, value formatting, config optionsreferences/mindmap.md— Shapes, icons, classes, markdown strings, layoutsreferences/timeline.md— Time periods, events, sections, direction, styling, themesreferences/sankey.md— CSV syntax, link colors, node alignment, label style, node colors
Available Scripts
scripts/validate.py— Validates Mermaid diagram syntax. Run withuv run scripts/validate.py --input <file>or--stdin.
Use this skill
Connect your agent to the Skill Store MCP server and ask for it by ref: greedychipmunk/mermaid-32126715514.
Details
- Publisher
- greedychipmunk
- Category
- Software Development › Developer docs & tooling
- License
- MIT
- Updated
- 2026-10-15
References
More from greedychipmunk
- Agent Development Design and build AI agents with persistent memory, tool use, and multi-turn conversation.
- Ansible Automate configuration management and application deployment with Ansible.
- Argocd Deploy Kubernetes apps declaratively with Argo CD applications and projects.
- Astryx Generate Astryx design system components, themes, and layouts for React 19 applications.