Mermaid.js allows you to create diagrams using text-based syntax. This post shows how to create various diagram types, from simple flowcharts to complex system architectures. Each example includes both the code and its rendered result.
1. Basic Flowchart
Here’s the code:
flowchart LR
A[Start] --> B{Is it working?}
B -->|Yes| C[Great!]
B -->|No| D[Debug]
D --> B
Which renders as:
2. Sequence Diagram
The code:
sequenceDiagram
participant Browser
participant API
participant DB
Browser->>API: GET /data
API->>DB: Query
DB-->>API: Results
API-->>Browser: Response
Renders as:
3. State Diagram
The code:
stateDiagram-v2
[*] --> Still
Still --> [*]
Still --> Moving
Moving --> Still
Moving --> Crash
Crash --> [*]
Renders as:
4. Class Diagram
The code:
classDiagram
Animal <|-- Duck
Animal <|-- Fish
Animal : +String species
Animal : +int age
Animal: +makeSound()
class Duck{
+String beakColor
+swim()
+quack()
}
Renders as:
5. Gantt Chart
The code:
gantt
title A Gantt Chart
dateFormat YYYY-MM-DD
section Section 1
Task 1 :a1, 2024-01-01, 30d
Task 2 :after a1, 20d
section Section 2
Task 3 :2024-02-01, 12d
Task 4 :24d
Renders as:
6. Git Graph
The code:
gitGraph
commit
commit
branch develop
checkout develop
commit
commit
checkout main
merge develop
commit
Renders as:
7. Entity Relationship Diagram
The code:
erDiagram
CUSTOMER ||--o{ ORDER : places
ORDER ||--|{ LINE_ITEM : contains
CUSTOMER {
string name
string email
}
ORDER {
int id
string status
}
LINE_ITEM {
string product
int quantity
}
Renders as:
8. Pie Chart
The code:
pie
title What do we spend time on?
"Development" : 40
"Testing" : 20
"Documentation" : 15
"Meetings" : 25
Renders as:
9. User Journey
The code:
journey
title My working day
section Go to work
Make tea: 5: Me
Go upstairs: 3: Me
Do work: 1: Me, Cat
section Go home
Go downstairs: 5: Me
Sit down: 3: Me
Renders as:
10. Flowchart with Styling
The code:
flowchart LR
A[Hard] -->|Text| B(Round)
B --> C{Decision}
C -->|One| D[Result 1]
C -->|Two| E[Result 2]
style A fill:#f9f,stroke:#333,stroke-width:4px
style B fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff
style C fill:#9f9,stroke:#333,stroke-width:2px
Renders as:
11. Quadrant Chart
The code:
quadrantChart
title Prioritize Features
x-axis Low Priority --> High Priority
y-axis Low Impact --> High Impact
quadrant-1 Quick Wins
quadrant-2 Major Projects
quadrant-3 Time Sinks
quadrant-4 Back Burner
User Authentication: [0.4, 0.3]
Search Feature: [0.95, 0.95]
Dark Mode: [0.2, 0.15]
File Export: [0.85, 0.35]
Mobile Support: [0.9, 0.8]
Renders as:
12. Mindmap
The code:
mindmap
root((DevOps))
Development
Version Control
Git
SVN
Languages
JavaScript
Python
Go
Testing
Unit Tests
Integration Tests
Operations
Infrastructure
Servers
Cloud
AWS
Azure
GCP
Monitoring
Logging
Metrics
Alerts
Deployment
CI/CD
Containers
Docker
Kubernetes
Renders as:
13. Timeline
The code:
timeline
title History of Programming Languages
section 1950s
FORTRAN : 1957
LISP : 1958
section 1960s
BASIC : 1964
Pascal : 1969
section 1970s
C : 1972
SQL : 1974
section 1980s
C++ : 1983
Perl : 1987
section 1990s
Python : 1991
Java : 1995
JavaScript : 1995
section 2000s
C# : 2000
Scala : 2004
Renders as:
14. Requirement Diagram
The code:
requirementDiagram
requirement test_req {
id: 1
text: Authentication System
risk: high
verifymethod: test
}
functionalRequirement test_req2 {
id: 1.1
text: User Login
risk: medium
verifymethod: demonstration
}
performanceRequirement test_req3 {
id: 1.2
text: Password Encryption
risk: high
verifymethod: test
}
element test_entity {
type: simulation
}
test_req - satisfies -> test_req2
test_req2 - traces -> test_req3
test_req - contains -> test_req3
test_entity - verifies -> test_req
Renders as:
15. C4 Basic Diagram
The code:
C4Context
title System Context diagram for Internet Banking System
Person(customerA, "Banking Customer", "A customer of the bank, with personal bank accounts")
Container_Boundary(c1, "Internet Banking") {
System(systemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.")
}
Boundary(b1, "Bank") {
SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
}
BiRel(customerA, systemAA, "Uses")
Rel(systemAA, SystemE, "Uses")
Renders as:
16. C4 Complex Diagram
The code:
C4Context
title Complex System Architecture
Person(user, "End User", "A user of the system")
Enterprise_Boundary(eb1, "Company System") {
System_Boundary(sb1, "Frontend") {
Container(web, "Web Application", "React", "Provides user interface")
Container(mobile, "Mobile App", "React Native", "Mobile interface")
}
System_Boundary(sb2, "Backend") {
Container(api, "API Gateway", "Node.js", "Handles API requests")
ContainerDb(db1, "User Database", "PostgreSQL", "Stores user data")
Container(auth, "Auth Service", "Go", "Handles authentication")
ContainerQueue(queue, "Message Queue", "RabbitMQ", "Message broker")
}
System_Boundary(sb3, "Processing") {
Container(worker, "Worker Service", "Python", "Processes background jobs")
ContainerDb(db2, "Analytics DB", "MongoDB", "Stores analytics")
}
}
System_Ext(email, "Email System", "Sends emails to users")
System_Ext(payment, "Payment Gateway", "Processes payments")
Rel(user, web, "Uses", "HTTPS")
Rel(user, mobile, "Uses", "HTTPS")
BiRel(web, api, "API calls", "REST/HTTPS")
BiRel(mobile, api, "API calls", "REST/HTTPS")
Rel(api, auth, "Authenticates", "gRPC")
Rel(api, db1, "Reads/Writes", "SQL")
Rel(api, queue, "Publishes", "AMQP")
Rel(worker, queue, "Subscribes", "AMQP")
Rel(worker, db2, "Stores results", "MongoDB Protocol")
Rel(api, email, "Sends emails", "SMTP")
Rel(api, payment, "Processes", "HTTPS")
Renders as:
17. Complex Flowchart with Subgraphs
The code:
flowchart TB
subgraph one
a1-->a2
subgraph two
b1-->b2
end
subgraph three
c1-->c2
end
two --> three
a2 --> two
end
subgraph main
m1-->m2
m2-->m3
end
one --> main
style one fill:#f9f,stroke:#333,stroke-width:2px
style main fill:#bbf,stroke:#333,stroke-width:2px
style two fill:#bfb,stroke:#333,stroke-width:2px
style three fill:#fbb,stroke:#333,stroke-width:2px
Renders as:
18. Complex Sequence Diagram with Loops and Alt
The code:
sequenceDiagram
participant Client
participant Server
participant Database
Client->>+Server: Login Request
rect rgb(200, 220, 240)
Server->>Server: Validate Input
end
alt valid credentials
Server->>+Database: Query User
Database-->>-Server: Return User Data
loop Token Generation
Server->>Server: Generate Session
Server->>Server: Create JWT
end
Server-->>-Client: Login Success + Token
else invalid credentials
Server-->>Client: Login Failed
end
Note over Client,Server: Subsequent requests will include token
Renders as:
19. State Diagram with Composite States
The code:
stateDiagram-v2
[*] --> PowerOff
PowerOff --> Starting : Power On
Starting --> Running : System Ready
state Running {
[*] --> Idle
Idle --> Processing : New Task
Processing --> Idle : Task Complete
Processing --> Error : Task Failed
Error --> Idle : Retry
}
Running --> PowerOff : Power Off
Running --> Starting : Restart
note right of Running : System can handle\nmultiple states
Renders as:
These examples demonstrate the versatility of Mermaid.js for creating various types of diagrams. The syntax is clear and maintainable, making it a great choice for documentation in code repositories, technical blogs, and project wikis. For the complete and up-to-date syntax reference, check out the official Mermaid.js documentation.