9.8 KiB
Mermaid Syntax Rules Reference
This reference provides comprehensive syntax rules and error prevention strategies for Mermaid diagrams. Load this when encountering syntax errors or needing detailed syntax information.
Table of Contents
- Critical Error Prevention
- Node Syntax
- Subgraph Syntax
- Arrow and Connection Types
- Styling and Colors
- Layout and Direction
- Advanced Patterns
- Troubleshooting
Critical Error Prevention
List Syntax Conflict (Most Common Error)
Problem: Mermaid parser interprets number. space as Markdown ordered list syntax.
Error Message: Parse error: Unsupported markdown: list
Solutions:
❌ [1. Perception]
❌ [2. Planning]
❌ [3. Reasoning]
✅ [1.Perception] # Remove space
✅ [① Perception] # Use circled numbers
✅ [(1) Perception] # Use parentheses
✅ [Step 1: Perception] # Use prefix
✅ [Step 1 - Perception] # Use dash
✅ [Perception] # Remove numbering
Circled number reference:
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳
Subgraph Naming Rules
Rule: Subgraphs with spaces must use ID + display name format.
❌ subgraph Core Process
A --> B
end
✅ subgraph core["Core Process"]
A --> B
end
✅ subgraph core_process
A --> B
end
Referencing subgraphs:
❌ Title --> Core Process # Cannot reference display name
✅ Title --> core # Must reference ID
Node Reference Rules
Rule: Always reference nodes by ID, never by display text.
# Define nodes
A[Display Text A]
B["Display Text B"]
# Reference nodes
A --> B ✅ Use node IDs
Display Text A --> Display Text B ❌ Cannot use display text
Node Syntax
Basic Node Types
# Rectangle (default)
A[Rectangle Text]
# Rectangle with rounded corners
B(Rounded Text)
# Stadium shape
C([Stadium Text])
# Circle
D((Circle<br/>Text))
# Asymmetric shape
E>Right Arrow]
# Rhombus (decision)
F{Decision?}
# Hexagon
G{{Hexagon}}
# Parallelogram
H[/Parallelogram/]
# Database
I[(Database)]
# Trapezoid
J[/Trapezoid\]
Node Text Rules
Line breaks:
<br/>only works in circle nodes:((Text<br/>Break))- For other nodes, use separate annotation nodes or keep text concise
Special characters:
- Spaces: Use quotes if needed:
["Text with spaces"] - Quotes: Replace with 『』or avoid
- Parentheses: Replace with 「」or avoid
- Colons: Generally safe but avoid if causing issues
- Hyphens/dashes: Safe to use
Length guidelines:
- Keep node text under 50 characters
- Use multiple lines (circle nodes) or separate annotation nodes for longer content
- Consider splitting into multiple nodes if text is too long
Subgraph Syntax
Basic Structure
graph TB
# Correct format with ID and display name
subgraph id["Display Name"]
direction TB
A --> B
end
# Simple ID only (no spaces)
subgraph simple
C --> D
end
# Can set direction inside subgraph
subgraph horiz["Horizontal"]
direction LR
E --> F
end
Nested Subgraphs
graph TB
subgraph outer["Outer Group"]
direction TB
subgraph inner1["Inner 1"]
A --> B
end
subgraph inner2["Inner 2"]
C --> D
end
inner1 -.-> inner2
end
Limitation: Keep nesting to 2 levels maximum for readability.
Connecting Subgraphs
graph TB
subgraph g1["Group 1"]
A[Node A]
end
subgraph g2["Group 2"]
B[Node B]
end
# Connect individual nodes (recommended)
A --> B
# Connect subgraphs (creates invisible link for layout)
g1 -.-> g2
Arrow and Connection Types
Basic Arrows
A --> B # Solid arrow
A -.-> B # Dashed arrow
A ==> B # Thick arrow
A ~~~> B # Invisible link (layout only, not rendered)
Arrow Labels
A -->|Label Text| B
A -.->|Optional| B
A ==>|Important| B
Multi-target Connections
# One to many
A --> B & C & D
# Many to one
A & B & C --> D
# Chaining
A --> B --> C --> D
Bidirectional
A <--> B # Bidirectional solid
A <-.-> B # Bidirectional dashed
Styling and Colors
Inline Styling
style NodeID fill:#color,stroke:#color,stroke-width:2px
Color Format
- Hex colors:
#ff0000or#f00 - RGB:
rgb(255,0,0) - Color names:
red,blue, etc. (limited support)
Common Style Patterns
# Professional look
style A fill:#d3f9d8,stroke:#2f9e44,stroke-width:2px
# Emphasis
style B fill:#ffe3e3,stroke:#c92a2a,stroke-width:3px
# Muted/secondary
style C fill:#f8f9fa,stroke:#dee2e6,stroke-width:1px
# Title/header
style D fill:#1971c2,stroke:#1971c2,stroke-width:3px,color:#ffffff
Styling Multiple Nodes
# Apply same style to multiple nodes
style A,B,C fill:#d3f9d8,stroke:#2f9e44,stroke-width:2px
Layout and Direction
Direction Codes
graph TB # Top to Bottom (vertical)
graph BT # Bottom to Top
graph LR # Left to Right (horizontal)
graph RL # Right to Left
graph TD # Top Down (same as TB)
Layout Control Tips
- Vertical layouts (TB/BT): Best for sequential processes, hierarchies
- Horizontal layouts (LR/RL): Best for timelines, wide displays
- Mixed directions: Set different directions in subgraphs
graph TB
subgraph vertical["Vertical Flow"]
direction TB
A --> B --> C
end
subgraph horizontal["Horizontal Flow"]
direction LR
D --> E --> F
end
Advanced Patterns
Feedback Loop Pattern
graph TB
A[Start] --> B[Process]
B --> C[Output]
C -.->|Feedback| A
style A fill:#d3f9d8,stroke:#2f9e44,stroke-width:2px
style B fill:#e5dbff,stroke:#5f3dc4,stroke-width:2px
style C fill:#c5f6fa,stroke:#0c8599,stroke-width:2px
Swimlane Pattern
graph TB
subgraph lane1["Lane 1"]
A[Step 1] --> B[Step 2]
end
subgraph lane2["Lane 2"]
C[Step 3] --> D[Step 4]
end
B --> C
Hub and Spoke
graph TB
Hub[Central Hub]
A[Spoke 1] --> Hub
B[Spoke 2] --> Hub
C[Spoke 3] --> Hub
Hub --> D[Output]
Decision Tree
graph TB
Start[Start] --> Decision{Decision Point?}
Decision -->|Option A| PathA[Path A]
Decision -->|Option B| PathB[Path B]
Decision -->|Option C| PathC[Path C]
PathA --> End[End]
PathB --> End
PathC --> End
Comparison Layout
graph TB
Title[Comparison]
subgraph left["System A"]
A1[Feature 1]
A2[Feature 2]
A3[Feature 3]
end
subgraph right["System B"]
B1[Feature 1]
B2[Feature 2]
B3[Feature 3]
end
Title --> left
Title --> right
subgraph compare["Key Differences"]
Diff[Difference Summary]
end
left --> compare
right --> compare
Troubleshooting
Common Errors and Solutions
Error: "Parse error on line X: Expecting 'SEMI', 'NEWLINE', 'EOF'"
Causes:
- Subgraph name with spaces not using ID format
- Node reference using display text instead of ID
- Invalid special characters in node text
Solutions:
- Use
subgraph id["Display Name"]format - Reference nodes by ID only
- Quote node text with special characters
Error: "Unsupported markdown: list"
Cause: Using number. space pattern in node text
Solution: Remove space or use alternatives (①, (1), Step 1:)
Error: "Parse error: unexpected character"
Causes:
- Unescaped special characters
- Improper quotes
- Invalid Mermaid syntax
Solutions:
- Replace problematic characters (quotes → 『』, parens → 「」)
- Use proper node definition syntax
- Check arrow syntax
Diagram doesn't render correctly
Causes:
- Missing style declarations
- Incorrect direction specification
- Invalid connections
Solutions:
- Verify all style declarations use valid syntax
- Check direction is set in graph declaration or subgraph
- Ensure all node IDs are defined before referencing
Validation Checklist
Before finalizing any diagram:
- No
number. spacepatterns in node text - All subgraphs use proper ID syntax if they contain spaces
- All node references use IDs not display text
- All arrows use valid syntax (-->, -.->)
- All style declarations are syntactically correct
- Direction is explicitly set
- No unescaped special characters in node text
- All connections reference defined nodes
Platform-Specific Notes
Obsidian:
- Older Mermaid version, more strict parsing
- Limited support for
<br/>(only in circle nodes) - Test diagrams before finalizing
GitHub:
- Good Mermaid support
- Renders most modern syntax
- May differ slightly from Obsidian rendering
Mermaid Live Editor:
- Most up-to-date parser
- Best for testing new syntax
- May support features not available in Obsidian/GitHub
Quick Reference
Safe Numbering Methods
✅ 1.Text ①Text (1)Text Step 1:Text
❌ 1. Text
Safe Subgraph Syntax
✅ subgraph id["Name"] subgraph simple_name
❌ subgraph Name With Spaces
Safe Node References
✅ NodeID --> AnotherID
❌ "Display Text" --> "Other Text"
Safe Special Characters
✅ 『』 for quotes, 「」 for parentheses
❌ " unescaped quotes, () in problematic contexts