668 lines
No EOL
16 KiB
Markdown
668 lines
No EOL
16 KiB
Markdown
+++
|
|
title = "Mermaid"
|
|
weight = 8
|
|
description = "Generate diagrams, flowcharts, and piecharts from text in a similar manner as markdown."
|
|
+++
|
|
|
|
[Mermaid](https://mermaidjs.github.io/) is library that helps you generate diagrams, flowcharts, and piecharts from text in a similar manner as markdown.
|
|
|
|
With compose theme, you can use mermaid using a custom shortcode as follows:
|
|
|
|
### Sequence Diagrams
|
|
|
|
**Snippet**
|
|
|
|
```tpl
|
|
{{</* mermaid */>}}
|
|
sequenceDiagram
|
|
participant Alice
|
|
participant Bob
|
|
Alice->>John: Hello John, how are you?
|
|
loop Healthcheck
|
|
John->>John: Fight against hypochondria
|
|
end
|
|
Note right of John: Rational thoughts<br/>prevail...
|
|
John-->>Alice: Great!
|
|
John->>Bob: How about you?
|
|
Bob-->>John: Jolly good!
|
|
{{</* /mermaid */>}}
|
|
```
|
|
|
|
**Result**
|
|
|
|
{{< mermaid >}}
|
|
sequenceDiagram
|
|
participant Alice
|
|
participant Bob
|
|
Alice->>John: Hello John, how are you?
|
|
loop Healthcheck
|
|
John->>John: Fight against hypochondria
|
|
end
|
|
Note right of John: Rational thoughts<br/>prevail...
|
|
John-->>Alice: Great!
|
|
John->>Bob: How about you?
|
|
Bob-->>John: Jolly good!
|
|
{{< /mermaid >}}
|
|
|
|
### Flow Charts
|
|
|
|
**Snippet**
|
|
|
|
```tpl
|
|
{{</* mermaid */>}}
|
|
flowchart TB
|
|
c1-->a2
|
|
subgraph one
|
|
a1-->a2
|
|
end
|
|
subgraph two
|
|
b1-->b2
|
|
end
|
|
subgraph three
|
|
c1-->c2
|
|
end
|
|
one --> two
|
|
three --> two
|
|
two --> c2
|
|
{{</* /mermaid */>}}
|
|
```
|
|
**Result**
|
|
|
|
{{< mermaid >}}
|
|
flowchart TB
|
|
c1-->a2
|
|
subgraph one
|
|
a1-->a2
|
|
end
|
|
subgraph two
|
|
b1-->b2
|
|
end
|
|
subgraph three
|
|
c1-->c2
|
|
end
|
|
one --> two
|
|
three --> two
|
|
two --> c2
|
|
{{< /mermaid >}}
|
|
|
|
### Graphs
|
|
|
|
**Snippet**
|
|
|
|
```tpl
|
|
{{</* mermaid */>}}
|
|
graph TB
|
|
sq[Square shape] --> ci((Circle shape))
|
|
|
|
subgraph A
|
|
od>Odd shape]-- Two line<br/>edge comment --> ro
|
|
di{Diamond with <br/> line break} -.-> ro(Rounded<br>square<br>shape)
|
|
di==>ro2(Rounded square shape)
|
|
end
|
|
|
|
%% Notice that no text in shape are added here instead that is appended further down
|
|
e --> od3>Really long text with linebreak<br>in an Odd shape]
|
|
|
|
%% Comments after double percent signs
|
|
e((Inner / circle<br>and some odd <br>special characters)) --> f(,.?!+-*ز)
|
|
|
|
cyr[Cyrillic]-->cyr2((Circle shape Начало));
|
|
|
|
classDef green fill:#9f6,stroke:#333,stroke-width:2px;
|
|
classDef orange fill:#f96,stroke:#333,stroke-width:4px;
|
|
class sq,e green
|
|
class di orange
|
|
{{</* /mermaid */>}}
|
|
```
|
|
|
|
**Result**
|
|
|
|
{{< mermaid >}}
|
|
graph TB
|
|
sq[Square shape] --> ci((Circle shape))
|
|
|
|
subgraph A
|
|
od>Odd shape]-- Two line<br/>edge comment --> ro
|
|
di{Diamond with <br/> line break} -.-> ro(Rounded<br>square<br>shape)
|
|
di==>ro2(Rounded square shape)
|
|
end
|
|
|
|
%% Notice that no text in shape are added here instead that is appended further down
|
|
e --> od3>Really long text with linebreak<br>in an Odd shape]
|
|
|
|
%% Comments after double percent signs
|
|
e((Inner / circle<br>and some odd <br>special characters)) --> f(,.?!+-*ز)
|
|
|
|
cyr[Cyrillic]-->cyr2((Circle shape Начало));
|
|
|
|
classDef green fill:#9f6,stroke:#333,stroke-width:2px;
|
|
classDef orange fill:#f96,stroke:#333,stroke-width:4px;
|
|
class sq,e green
|
|
class di orange
|
|
{{< /mermaid >}}
|
|
|
|
**Snippet**
|
|
|
|
```tpl
|
|
{{</* mermaid */>}}
|
|
graph LR
|
|
A[Hard edge] -->|Link text| B(Round edge)
|
|
B --> C{Decision}
|
|
C -->|One| D[Result one]
|
|
C -->|Two| E[Result two]
|
|
{{</* /mermaid */>}}
|
|
```
|
|
|
|
**Result**
|
|
|
|
{{< mermaid >}}
|
|
graph LR
|
|
A[Hard edge] -->|Link text| B(Round edge)
|
|
B --> C{Decision}
|
|
C -->|One| D[Result one]
|
|
C -->|Two| E[Result two]
|
|
{{< /mermaid >}}
|
|
|
|
### Class Diagram
|
|
|
|
{{< mermaid >}}
|
|
classDiagram
|
|
Animal <|-- Duck
|
|
Animal <|-- Fish
|
|
Animal <|-- Zebra
|
|
Animal : +int age
|
|
Animal : +String gender
|
|
Animal: +isMammal()
|
|
Animal: +mate()
|
|
class Duck{
|
|
+String beakColor
|
|
+swim()
|
|
+quack()
|
|
}
|
|
class Fish{
|
|
-int sizeInFeet
|
|
-canEat()
|
|
}
|
|
class Zebra{
|
|
+bool is_wild
|
|
+run()
|
|
}
|
|
{{< /mermaid >}}
|
|
|
|
|
|
### State Diagram
|
|
|
|
{{< mermaid >}}
|
|
stateDiagram-v2
|
|
[*] --> Active
|
|
|
|
state Active {
|
|
[*] --> NumLockOff
|
|
NumLockOff --> NumLockOn : EvNumLockPressed
|
|
NumLockOn --> NumLockOff : EvNumLockPressed
|
|
--
|
|
[*] --> CapsLockOff
|
|
CapsLockOff --> CapsLockOn : EvCapsLockPressed
|
|
CapsLockOn --> CapsLockOff : EvCapsLockPressed
|
|
--
|
|
[*] --> ScrollLockOff
|
|
ScrollLockOff --> ScrollLockOn : EvScrollLockPressed
|
|
ScrollLockOn --> ScrollLockOff : EvScrollLockPressed
|
|
}
|
|
{{< /mermaid >}}
|
|
|
|
{{< mermaid >}}
|
|
stateDiagram-v2
|
|
State1: The state with a note
|
|
note right of State1
|
|
Important information! You can write
|
|
notes.
|
|
end note
|
|
State1 --> State2
|
|
note left of State2 : This is the note to the left.
|
|
{{< /mermaid >}}
|
|
|
|
### Relationship Diagrams
|
|
|
|
**Snippet**
|
|
|
|
```tpl
|
|
{{</* mermaid */>}}
|
|
erDiagram
|
|
CUSTOMER ||--o{ ORDER : places
|
|
ORDER ||--|{ LINE-ITEM : contains
|
|
CUSTOMER }|..|{ DELIVERY-ADDRESS : uses
|
|
{{</* /mermaid */>}}
|
|
```
|
|
|
|
**Result**
|
|
|
|
{{< mermaid >}}
|
|
erDiagram
|
|
CUSTOMER ||--o{ ORDER : places
|
|
ORDER ||--|{ LINE-ITEM : contains
|
|
CUSTOMER }|..|{ DELIVERY-ADDRESS : uses
|
|
{{< /mermaid >}}
|
|
|
|
### User Journey
|
|
|
|
**Snippet**
|
|
|
|
```tpl
|
|
{{</* mermaid */>}}
|
|
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: 5: Me
|
|
{{</* /mermaid */>}}
|
|
|
|
```
|
|
|
|
**Result**
|
|
|
|
{{< mermaid >}}
|
|
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: 5: Me
|
|
{{< /mermaid >}}
|
|
|
|
### Gantt
|
|
|
|
**Snippet**
|
|
|
|
```tpl
|
|
{{</* mermaid */>}}
|
|
gantt
|
|
dateFormat YYYY-MM-DD
|
|
title Adding GANTT diagram functionality to mermaid
|
|
excludes weekends
|
|
%% (`excludes` accepts specific dates in YYYY-MM-DD format, days of the week ("sunday") or "weekends", but not the word "weekdays".)
|
|
|
|
section A section
|
|
Completed task :done, des1, 2014-01-06,2014-01-08
|
|
Active task :active, des2, 2014-01-09, 3d
|
|
Future task : des3, after des2, 5d
|
|
Future task2 : des4, after des3, 5d
|
|
|
|
section Critical tasks
|
|
Completed task in the critical line :crit, done, 2014-01-06,24h
|
|
Implement parser and jison :crit, done, after des1, 2d
|
|
Create tests for parser :crit, active, 3d
|
|
Future task in critical line :crit, 5d
|
|
Create tests for renderer :2d
|
|
Add to mermaid :1d
|
|
|
|
section Documentation
|
|
Describe gantt syntax :active, a1, after des1, 3d
|
|
Add gantt diagram to demo page :after a1 , 20h
|
|
Add another diagram to demo page :doc1, after a1 , 48h
|
|
|
|
section Last section
|
|
Describe gantt syntax :after doc1, 3d
|
|
Add gantt diagram to demo page :20h
|
|
Add another diagram to demo page :48h
|
|
{{</* /mermaid */>}}
|
|
```
|
|
|
|
**Result**
|
|
|
|
{{< mermaid >}}
|
|
gantt
|
|
dateFormat YYYY-MM-DD
|
|
title Adding GANTT diagram functionality to mermaid
|
|
excludes weekends
|
|
%% (`excludes` accepts specific dates in YYYY-MM-DD format, days of the week ("sunday") or "weekends", but not the word "weekdays".)
|
|
|
|
section A section
|
|
Completed task :done, des1, 2014-01-06,2014-01-08
|
|
Active task :active, des2, 2014-01-09, 3d
|
|
Future task : des3, after des2, 5d
|
|
Future task2 : des4, after des3, 5d
|
|
|
|
section Critical tasks
|
|
Completed task in the critical line :crit, done, 2014-01-06,24h
|
|
Implement parser and jison :crit, done, after des1, 2d
|
|
Create tests for parser :crit, active, 3d
|
|
Future task in critical line :crit, 5d
|
|
Create tests for renderer :2d
|
|
Add to mermaid :1d
|
|
|
|
section Documentation
|
|
Describe gantt syntax :active, a1, after des1, 3d
|
|
Add gantt diagram to demo page :after a1 , 20h
|
|
Add another diagram to demo page :doc1, after a1 , 48h
|
|
|
|
section Last section
|
|
Describe gantt syntax :after doc1, 3d
|
|
Add gantt diagram to demo page :20h
|
|
Add another diagram to demo page :48h
|
|
{{< /mermaid >}}
|
|
|
|
### Pie Chart
|
|
|
|
```tpl
|
|
{{</* mermaid */>}}
|
|
pie
|
|
title Key elements in Product X
|
|
"Calcium" : 42.96
|
|
"Potassium" : 50.05
|
|
"Magnesium" : 10.01
|
|
"Iron" : 5
|
|
{{</* /mermaid */>}}
|
|
|
|
```
|
|
|
|
**Result**
|
|
|
|
{{< mermaid >}}
|
|
pie
|
|
title Key elements in Product X
|
|
"Calcium" : 42.96
|
|
"Potassium" : 50.05
|
|
"Magnesium" : 10.01
|
|
"Iron" : 5
|
|
{{< /mermaid >}}
|
|
|
|
|
|
### Mindmap
|
|
|
|
__Snippet__
|
|
|
|
```tpl
|
|
{{</* mermaid */>}}
|
|
mindmap
|
|
root((mindmap))
|
|
Origins
|
|
Long history
|
|
::icon(fa fa-book)
|
|
Popularisation
|
|
British popular psychology author Tony Buzan
|
|
Research
|
|
On effectiveness<br/>and features
|
|
On Automatic creation
|
|
Uses
|
|
Creative techniques
|
|
Strategic planning
|
|
Argument mapping
|
|
Tools
|
|
Pen and paper
|
|
Mermaid
|
|
|
|
{{</* /mermaid */>}}
|
|
```
|
|
|
|
__Result__
|
|
|
|
{{< mermaid >}}
|
|
mindmap
|
|
root((mindmap))
|
|
Origins
|
|
Long history
|
|
::icon(fa fa-book)
|
|
Popularisation
|
|
British popular psychology author Tony Buzan
|
|
Research
|
|
On effectiveness<br/>and features
|
|
On Automatic creation
|
|
Uses
|
|
Creative techniques
|
|
Strategic planning
|
|
Argument mapping
|
|
Tools
|
|
Pen and paper
|
|
Mermaid
|
|
|
|
{{< /mermaid >}}
|
|
|
|
### Timeline
|
|
|
|
__Snippet I__
|
|
|
|
```tpl
|
|
{{</* mermaid */>}}
|
|
timeline
|
|
title History of Social Media Platform
|
|
2002 : LinkedIn
|
|
2004 : Facebook : Google
|
|
2005 : Youtube
|
|
2006 : Twitter
|
|
{{</* /mermaid */>}}
|
|
```
|
|
|
|
__Result I__
|
|
|
|
{{< mermaid >}}
|
|
timeline
|
|
title History of Social Media Platform
|
|
2002 : LinkedIn
|
|
2004 : Facebook : Google
|
|
2005 : Youtube
|
|
2006 : Twitter
|
|
{{< /mermaid >}}
|
|
|
|
__Snippet II__
|
|
|
|
```tpl
|
|
{{</* mermaid */>}}
|
|
timeline
|
|
title MermaidChart 2023 Timeline
|
|
section 2023 Q1 <br> Release Personal Tier
|
|
Buttet 1 : sub-point 1a : sub-point 1b
|
|
: sub-point 1c
|
|
Bullet 2 : sub-point 2a : sub-point 2b
|
|
section 2023 Q2 <br> Release XYZ Tier
|
|
Buttet 3 : sub-point <br> 3a : sub-point 3b
|
|
: sub-point 3c
|
|
Bullet 4 : sub-point 4a : sub-point 4b
|
|
|
|
{{</* /mermaid */>}}
|
|
```
|
|
|
|
__Result II__
|
|
{{< mermaid >}}
|
|
timeline
|
|
title MermaidChart 2023 Timeline
|
|
section 2023 Q1 <br> Release Personal Tier
|
|
Buttet 1 : sub-point 1a : sub-point 1b
|
|
: sub-point 1c
|
|
Bullet 2 : sub-point 2a : sub-point 2b
|
|
section 2023 Q2 <br> Release XYZ Tier
|
|
Buttet 3 : sub-point <br> 3a : sub-point 3b
|
|
: sub-point 3c
|
|
Bullet 4 : sub-point 4a : sub-point 4b
|
|
|
|
{{< /mermaid >}}
|
|
|
|
### Gitgraph
|
|
|
|
__Snippet__
|
|
|
|
```tpl
|
|
{{</* mermaid */>}}
|
|
---
|
|
title: Example Git diagram
|
|
---
|
|
gitGraph
|
|
commit
|
|
commit
|
|
branch develop
|
|
checkout develop
|
|
commit
|
|
commit
|
|
checkout main
|
|
merge develop
|
|
commit
|
|
commit
|
|
|
|
{{</* /mermaid */>}}
|
|
```
|
|
|
|
__Result__
|
|
|
|
{{< mermaid >}}
|
|
---
|
|
title: Example Git diagram
|
|
---
|
|
gitGraph
|
|
commit
|
|
commit
|
|
branch develop
|
|
checkout develop
|
|
commit
|
|
commit
|
|
checkout main
|
|
merge develop
|
|
commit
|
|
commit
|
|
|
|
{{< /mermaid >}}
|
|
|
|
### Requirement Diagram
|
|
|
|
__Snippet__
|
|
|
|
```tpl
|
|
{{</* mermaid */>}}
|
|
requirementDiagram
|
|
|
|
requirement test_req {
|
|
id: 1
|
|
text: the test text.
|
|
risk: high
|
|
verifymethod: test
|
|
}
|
|
|
|
element test_entity {
|
|
type: simulation
|
|
}
|
|
|
|
test_entity - satisfies -> test_req
|
|
{{</* /mermaid */>}}
|
|
```
|
|
|
|
__Result__
|
|
|
|
{{< mermaid >}}
|
|
requirementDiagram
|
|
|
|
requirement test_req {
|
|
id: 1
|
|
text: the test text.
|
|
risk: high
|
|
verifymethod: test
|
|
}
|
|
|
|
element test_entity {
|
|
type: simulation
|
|
}
|
|
|
|
test_entity - satisfies -> test_req
|
|
{{< /mermaid >}}
|
|
|
|
|
|
### C4C Diagram
|
|
|
|
```tpl
|
|
{{</* mermaid */>}}
|
|
C4Context
|
|
title System Context diagram for Internet Banking System
|
|
Enterprise_Boundary(b0, "BankBoundary0") {
|
|
Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.")
|
|
Person(customerB, "Banking Customer B")
|
|
Person_Ext(customerC, "Banking Customer C", "desc")
|
|
|
|
Person(customerD, "Banking Customer D", "A customer of the bank, <br/> with personal bank accounts.")
|
|
|
|
System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.")
|
|
|
|
Enterprise_Boundary(b1, "BankBoundary") {
|
|
|
|
SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
|
|
|
|
System_Boundary(b2, "BankBoundary2") {
|
|
System(SystemA, "Banking System A")
|
|
System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts. next line.")
|
|
}
|
|
|
|
System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.")
|
|
SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.")
|
|
|
|
Boundary(b3, "BankBoundary3", "boundary") {
|
|
SystemQueue(SystemF, "Banking System F Queue", "A system of the bank.")
|
|
SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.")
|
|
}
|
|
}
|
|
}
|
|
|
|
BiRel(customerA, SystemAA, "Uses")
|
|
BiRel(SystemAA, SystemE, "Uses")
|
|
Rel(SystemAA, SystemC, "Sends e-mails", "SMTP")
|
|
Rel(SystemC, customerA, "Sends e-mails to")
|
|
|
|
UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red")
|
|
UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5")
|
|
UpdateRelStyle(SystemAA, SystemE, $textColor="blue", $lineColor="blue", $offsetY="-10")
|
|
UpdateRelStyle(SystemAA, SystemC, $textColor="blue", $lineColor="blue", $offsetY="-40", $offsetX="-50")
|
|
UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20")
|
|
|
|
UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1")
|
|
{{</* /mermaid */>}}
|
|
```
|
|
|
|
__Result__
|
|
|
|
{{< mermaid >}}
|
|
C4Context
|
|
title System Context diagram for Internet Banking System
|
|
Enterprise_Boundary(b0, "BankBoundary0") {
|
|
Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.")
|
|
Person(customerB, "Banking Customer B")
|
|
Person_Ext(customerC, "Banking Customer C", "desc")
|
|
|
|
Person(customerD, "Banking Customer D", "A customer of the bank, <br/> with personal bank accounts.")
|
|
|
|
System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.")
|
|
|
|
Enterprise_Boundary(b1, "BankBoundary") {
|
|
|
|
SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
|
|
|
|
System_Boundary(b2, "BankBoundary2") {
|
|
System(SystemA, "Banking System A")
|
|
System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts. next line.")
|
|
}
|
|
|
|
System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.")
|
|
SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.")
|
|
|
|
Boundary(b3, "BankBoundary3", "boundary") {
|
|
SystemQueue(SystemF, "Banking System F Queue", "A system of the bank.")
|
|
SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.")
|
|
}
|
|
}
|
|
}
|
|
|
|
BiRel(customerA, SystemAA, "Uses")
|
|
BiRel(SystemAA, SystemE, "Uses")
|
|
Rel(SystemAA, SystemC, "Sends e-mails", "SMTP")
|
|
Rel(SystemC, customerA, "Sends e-mails to")
|
|
|
|
UpdateElementStyle(customerA, $fontColor="red", $bgColor="grey", $borderColor="red")
|
|
UpdateRelStyle(customerA, SystemAA, $textColor="blue", $lineColor="blue", $offsetX="5")
|
|
UpdateRelStyle(SystemAA, SystemE, $textColor="blue", $lineColor="blue", $offsetY="-10")
|
|
UpdateRelStyle(SystemAA, SystemC, $textColor="blue", $lineColor="blue", $offsetY="-40", $offsetX="-50")
|
|
UpdateRelStyle(SystemC, customerA, $textColor="red", $lineColor="red", $offsetX="-50", $offsetY="20")
|
|
|
|
UpdateLayoutConfig($c4ShapeInRow="3", $c4BoundaryInRow="1")
|
|
{{< /mermaid >}} |