"Creates professional software diagrams using Mermaid's text-based syntax. Use when users request diagrams, visualizations, or documentation of software architecture including class diagrams, sequence diagrams, flowcharts, ERDs, C4 architecture diagrams, state machines, git graphs, or gantt charts. Triggers: 'diagram', 'visualize', 'model', 'map out', 'show the flow', database design, code structure."
Resources
1Install
npx skillscat add costa-marcello/skillkit/mermaid-diagrams Install via the SkillsCat registry.
Mermaid Diagramming
Create professional software diagrams using Mermaid's text-based syntax.
Core Syntax Structure
All Mermaid diagrams follow this pattern:
diagramType
definition contentKey principles:
- First line declares diagram type (e.g.,
classDiagram,sequenceDiagram,flowchart) - Use
%%for comments - Whitespace aids readability; not required
- Typos break diagrams silently -- validate in Mermaid Live
Diagram Type Selection Guide
| Type | When to use | Reference |
|---|---|---|
| Class Diagram | Domain modelling, OOP design, entity relationships | references/class-diagrams.md |
| Sequence Diagram | API flows, authentication, component interactions | references/sequence-diagrams.md |
| Flowchart | Processes, algorithms, decision trees, user journeys | references/flowcharts-basic.md, references/flowcharts-advanced.md |
| ERD | Database schemas, table relationships, data modelling | references/erd-basic.md, references/erd-patterns.md |
| C4 Diagram | Software architecture at Context, Container, Component levels | references/c4-diagrams.md |
| State Diagram | State machines, lifecycle states, workflow status | references/other-diagrams.md |
| Git Graph | Branching strategies, commit history | references/other-diagrams.md |
| Gantt Chart | Project timelines, scheduling, sprint planning | references/other-diagrams.md |
| Pie/Quadrant | Data distribution, prioritisation matrices | references/other-diagrams.md |
Default to flowchart when the user's intent is unclear. Flowcharts cover the widest range of use cases.
Class Diagram
classDiagram
Title -- Genre
Title *-- Season
Title *-- Review
User --> Review : creates
class Title {
+string name
+int releaseYear
+play()
}
class Genre {
+string name
+getTopTitles()
}
Sequence Diagram
sequenceDiagram
participant User
participant API
participant Database
User->>API: POST /login
API->>Database: Query credentials
Database-->>API: Return user data
alt Valid credentials
API-->>User: 200 OK + JWT token
else Invalid credentials
API-->>User: 401 Unauthorized
end
Flowchart
flowchart TD
Start([User visits site]) --> Auth{Authenticated?}
Auth -->|No| Login[Show login page]
Auth -->|Yes| Dashboard[Show dashboard]
Login --> Creds[Enter credentials]
Creds --> Validate{Valid?}
Validate -->|Yes| Dashboard
Validate -->|No| Error[Show error]
Error --> Login
ERD
erDiagram
USER ||--o{ ORDER : places
ORDER ||--|{ LINE_ITEM : contains
PRODUCT ||--o{ LINE_ITEM : includes
USER {
int id PK
string email UK
string name
datetime created_at
}
ORDER {
int id PK
int user_id FK
decimal total
datetime created_at
}
State Diagram
stateDiagram-v2
[*] --> Draft
Draft --> Submitted : submit
Draft --> Cancelled : cancel
Submitted --> Processing : approve
Processing --> Shipped : ship
Shipped --> Delivered : confirm
Delivered --> [*]
Cancelled --> [*]
Detailed References
- references/class-diagrams.md - Domain modelling, relationships (association, composition, aggregation, inheritance), multiplicity, methods/properties
- references/sequence-diagrams.md - Actors, participants, messages (sync/async), activations, loops, alt/opt/par blocks, notes
- references/flowcharts-basic.md - Node shapes, connections, subgraphs
- references/flowcharts-advanced.md - Styling, comprehensive examples, patterns
- references/erd-basic.md - Entities, relationships, cardinality, attributes
- references/erd-patterns.md - Schema examples, design patterns
- references/c4-diagrams.md - System context, container, component diagrams, boundaries
- references/advanced-features.md - Configuration, layout, export options
- references/theming.md - Themes, colours, visual styling
- references/other-diagrams.md - State diagrams, git graphs, gantt charts, pie/quadrant
Best Practices
- Draft core entities first - Add 3-5 main nodes, then connect. Add attributes and detail in a second pass.
- Label every node and edge - Unlabelled arrows force readers to guess the relationship.
- Add
%%comments above complex sections - Explain why, not what. Future editors read comments before syntax. - Split at 15 nodes - Diagrams with more than 15 nodes lose clarity. Break into focused views linked by a parent diagram.
- Store
.mmdfiles next to the code they describe - Keep diagrams and source in the same PR so they stay in sync. - Set a title on every diagram - Use the
titlekeyword or a Markdown heading directly above the code block. - Test in Mermaid Live before committing - Paste the diagram into mermaid.live to catch silent failures.
- Check colour contrast - Verify foreground/background pairs meet WCAG AA (4.5:1 ratio). Do not rely on colour alone to convey meaning.
Validation Loop (Required)
Every diagram passes through this generate-validate-repair cycle before output.
Step 1: Generate
Write the diagram using strict Mermaid syntax. Apply these rules during generation:
| Rule | Wrong | Correct | Why |
|---|---|---|---|
| Escape parentheses in labels | node[Node (example)] |
node["Node (example)"] |
Bare parentheses crash the parser |
| Quote text with special characters | A[Price: $100] |
A["Price: $100"] |
$, %, &, <, > break parsing |
Quote the reserved word end |
A --> end |
A --> End["end"] |
Unquoted end silently breaks diagrams |
| Use HTML entities when quotes fail | A["alert()"] |
A["alert()"] |
Nested parens inside quotes still fail |
Avoid {} in comments |
%% config: {dark} |
%% config dark theme |
Curly braces in comments break parsing |
| Use unique node IDs | Reusing A across subgraphs |
A1, A2 for distinct nodes |
Duplicate IDs cause silent overwrites |
Step 2: Validate
Self-check the generated diagram against these failure patterns:
- Scan all node labels for unescaped special characters:
( ) { } $ % & < > # - Check for bare
endused as a node name or label (not as a block closer) - Verify arrow syntax matches the diagram type (e.g.,
-->for flowchart,->>for sequence) - Confirm diagram type keyword is spelled correctly on line 1
- Check participant/actor names for spaces (wrap in quotes if present)
If any issue is found, fix it before output. Do not ask the user to fix syntax.
Step 3: Render verification
After outputting the diagram, recommend the user verify rendering:
- Quick check: paste into Mermaid Live
- CLI validation:
npx @mermaid-js/mermaid-cli -i diagram.mmd -o test.png - MCP tools: if a Mermaid MCP server is available, use it for in-session validation
Step 4: Repair (if rendering fails)
If the user reports a rendering failure:
- Read the error message (if available) and identify the failing line
- Check the syntax rules table above for the matching pattern
- Fix and re-output the corrected diagram
- Never output the same broken syntax twice
Configuration and Theming
Configure diagrams using frontmatter:
---
config:
theme: base
themeVariables:
primaryColor: "#ff6b6b"
---
flowchart LR
A --> BThemes (default to default; use base for full colour control):
| Theme | When to use |
|---|---|
default |
General-purpose diagrams (recommended) |
forest |
Green earth tones for environmental or organic topics |
dark |
Dark-mode pages or presentations |
neutral |
Grayscale professional documentation |
base |
Full colour customisation via themeVariables |
Layout: Default to dagre. Switch to elk when dagre produces crossed lines on 20+ node diagrams.
Look: Default to classic. Use handDrawn for informal docs or whiteboard-style presentations.
Exporting and Rendering
Platform support:
| Platform | Status | Notes |
|---|---|---|
| GitHub README/Issues | Works | Wiki rendering broken. C4 diagrams often fail. |
| GitLab | Works | May need cache refresh after adding new diagrams. |
| VS Code | Works | Requires Markdown Mermaid extension. |
| Obsidian | Partial | Desktop works. iOS fails entirely. Pie charts render as empty boxes. |
| Azure DevOps | Works | Requires ::: mermaid syntax, not backtick fences. |
| PDF export | Fails | Export as PNG/SVG from mermaid.live first. |
Export commands:
- Online: Mermaid Live Editor with PNG/SVG export
- CLI:
mmdc -i input.mmd -o output.png(install vianpm install -g @mermaid-js/mermaid-cli) - Docker:
docker run --rm -v $(pwd):/data minlag/mermaid-cli -i /data/input.mmd -o /data/output.png
Common Pitfalls
Syntax failures (most frequent):
- Unescaped special characters - Parentheses, brackets,
$,%in node labels crash the parser. Always quote labels containing these characters. - Reserved word
end- Usingendas a node name breaks diagrams silently. Wrap in quotes or rename. - Misspelled diagram types -
classDiagramnotclassdiagram. Case matters for the type keyword. - Wrong arrow syntax - Each diagram type uses different arrows. Flowcharts use
-->, sequence uses->>, class uses..>.
Platform-specific failures:
- GitHub Wiki - Mermaid rendering is broken despite documentation claiming support. Use README or Pages instead.
- Azure DevOps - Requires
::: mermaidsyntax, not standard backtick fences. - Obsidian iOS - Mermaid fails to render entirely on iOS. Desktop works.
- C4 diagrams on GitHub - C4 is experimental in Mermaid. Renders in mermaid.live but often fails on GitHub.
Structural issues:
- Overcomplexity - Split diagrams with more than 15 nodes into multiple focused views.
- Nested subgraphs - Deep nesting fails on some platforms. Keep to 2 levels maximum.