2021-08-25 11:33:29 +00:00
+++
2021-09-11 13:46:14 +00:00
description = "Generation of diagram and flowchart from text in a similar manner as Markdown"
2021-08-25 11:33:29 +00:00
title = "Mermaid"
+++
2017-08-20 15:10:29 +00:00
[Mermaid ](https://mermaidjs.github.io/ ) is a library helping you to generate diagram and flowcharts from text, in a similar manner as Markdown.
2022-03-19 19:18:21 +00:00
{{% notice warning %}}
Due to limitations with [Mermaid ](https://github.com/mermaid-js/mermaid/issues/1846 ), it is currently not possible to use Mermaid code fences in an initially collapsed `expand` shortcode. This is a know issue and [can't be fixed by this theme ](https://github.com/McShelby/hugo-theme-relearn/issues/187 ).
{{% /notice %}}
2021-07-26 08:10:10 +00:00
## Usage
2017-08-20 15:10:29 +00:00
2021-09-11 13:46:14 +00:00
Just insert your Mermaid code in the `mermaid` shortcode like this:
2021-07-02 21:01:38 +00:00
2021-08-23 21:32:34 +00:00
````go
2021-10-24 09:34:29 +00:00
{{< /* mermaid [ align=("left"|"right"|"center"|"justify") ] */>}}
2021-07-26 08:10:10 +00:00
classDiagram
Person *-- Dog
{{< /* /mermaid */>}}
````
2020-09-20 12:37:19 +00:00
2021-10-24 09:34:29 +00:00
You can set an optional `align` attribute which defaults to `"center"` .
2019-02-18 11:47:01 +00:00
2021-10-07 21:01:04 +00:00
If you don't need alignment you can use the alternative syntax using code fences if you have turned off `guessSyntax` for the `markup.highlight` setting (see below):
2017-08-20 15:10:29 +00:00
2021-07-26 08:10:10 +00:00
````plaintext
```mermaid
classDiagram
Person *-- Dog
```
````
2017-08-20 15:10:29 +00:00
2021-07-26 08:10:10 +00:00
The generated graphs can be be panned by dragging them and zoomed by using the mousewheel. On mobile devices you can use finger gestures.
## Examples
### Flowchart
{{< mermaid align = "left" > }}
2022-03-19 19:18:21 +00:00
%%{init:{"theme":"forest"}}%%
2017-08-20 15:10:29 +00:00
graph LR;
2020-09-10 16:12:32 +00:00
A[Hard edge] -->|Link text| B(Round edge)
2020-09-20 12:37:19 +00:00
B --> C{< strong > Decision< / strong > }
2017-08-20 15:10:29 +00:00
C -->|One| D[Result one]
C -->|Two| E[Result two]
2021-07-26 08:10:10 +00:00
{{< / mermaid > }}
2017-08-20 15:10:29 +00:00
2021-07-26 08:10:10 +00:00
{{% expand "Show markup" "true" %}}
2021-08-23 21:32:34 +00:00
````go
2021-07-26 08:10:10 +00:00
{{< /* mermaid align="left" */>}}
2022-03-19 19:18:21 +00:00
%%{init:{"theme":"forest"}}%%
2020-09-13 10:11:31 +00:00
graph LR;
A[Hard edge] -->|Link text| B(Round edge)
2021-07-26 08:10:10 +00:00
B --> C{< strong > Decision< / strong > }
2020-09-13 10:11:31 +00:00
C -->|One| D[Result one]
C -->|Two| E[Result two]
2021-07-26 08:10:10 +00:00
{{< /* /mermaid */>}}
````
{{% /expand %}}
2020-09-13 10:11:31 +00:00
2021-07-26 08:10:10 +00:00
### Sequence
{{< mermaid > }}
2017-08-20 15:10:29 +00:00
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!
2021-07-26 08:10:10 +00:00
{{< / mermaid > }}
{{% expand "Show markup" "true" %}}
2021-08-23 21:32:34 +00:00
````go
2021-07-26 08:10:10 +00:00
{{< /* 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 */>}}
````
{{% /expand %}}
### GANTT
{{< mermaid > }}
gantt
dateFormat YYYY-MM-DD
2021-09-11 13:46:14 +00:00
title Adding GANTT diagram functionality to Mermaid
2021-07-26 08:10:10 +00:00
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
2021-09-11 13:46:14 +00:00
Add to Mermaid :1d
2021-07-26 08:10:10 +00:00
{{< / mermaid > }}
{{% expand "Show markup" "true" %}}
2021-08-23 21:32:34 +00:00
````go
2021-07-26 08:10:10 +00:00
{{< /* mermaid */>}}
2017-08-20 15:10:29 +00:00
gantt
dateFormat YYYY-MM-DD
2021-09-11 13:46:14 +00:00
title Adding GANTT diagram functionality to Mermaid
2017-08-20 15:10:29 +00:00
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
2021-07-26 08:10:10 +00:00
Future task2 : des4, after des3, 5d
2017-08-20 15:10:29 +00:00
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
2021-09-11 13:46:14 +00:00
Add to Mermaid :1d
2021-07-26 08:10:10 +00:00
{{< /* /mermaid */>}}
````
{{% /expand %}}
### Class
{{< mermaid > }}
2019-02-18 11:47:01 +00:00
classDiagram
Class01 < |-- AveryLongClass : Cool
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 --> C2 : Where am i?
Class09 --* C3
Class09 --|> Class07
Class07 : equals()
Class07 : Object[] elementData
Class01 : size()
Class01 : int chimp
Class01 : int gorilla
Class08 < -- > C2: Cool label
2021-07-26 08:10:10 +00:00
{{< / mermaid > }}
2020-09-10 16:12:32 +00:00
2021-07-26 08:10:10 +00:00
{{% expand "Show markup" "true" %}}
2021-08-23 21:32:34 +00:00
````go
2021-07-26 08:10:10 +00:00
{{< /* mermaid */>}}
classDiagram
Class01 < |-- AveryLongClass : Cool
Class03 *-- Class04
Class05 o-- Class06
Class07 .. Class08
Class09 --> C2 : Where am i?
Class09 --* C3
Class09 --|> Class07
Class07 : equals()
Class07 : Object[] elementData
Class01 : size()
Class01 : int chimp
Class01 : int gorilla
Class08 < -- > C2: Cool label
{{< /* /mermaid */>}}
````
{{% /expand %}}
2019-02-18 11:47:01 +00:00
2021-07-26 08:10:10 +00:00
### State
2017-08-20 15:10:29 +00:00
2021-10-07 21:01:04 +00:00
````mermaid
2020-09-10 16:12:32 +00:00
stateDiagram-v2
open: Open Door
closed: Closed Door
locked: Locked Door
open --> closed: Close
closed --> locked: Lock
locked --> closed: Unlock
closed --> open: Open
2021-10-07 21:01:04 +00:00
````
2021-07-26 08:10:10 +00:00
{{% expand "Show markup" "true" %}}
2021-08-23 21:32:34 +00:00
````go
2021-10-07 21:01:04 +00:00
```mermaid
2021-07-26 08:10:10 +00:00
stateDiagram-v2
open: Open Door
closed: Closed Door
locked: Locked Door
open --> closed: Close
closed --> locked: Lock
locked --> closed: Unlock
closed --> open: Open
2021-10-07 21:01:04 +00:00
```
2021-07-26 08:10:10 +00:00
````
{{% /expand %}}
2020-09-20 12:37:19 +00:00
## Configuration
2022-03-19 19:18:21 +00:00
Mermaid is configured with default settings. You can customize Mermaid's default settings for all of your files thru a JSON object in your `config.toml` , override these settings per page thru your pages frontmatter or override these setting per diagramm thru [diagram directives ](https://mermaid-js.github.io/mermaid/#/directives?id=directives ).
2020-09-20 12:37:19 +00:00
2022-03-19 19:18:21 +00:00
The JSON object of your `config.toml` / frontmatter is forwarded into Mermaid's `mermaid.initialize()` function.
2020-09-20 12:37:19 +00:00
2022-03-19 19:18:21 +00:00
See [Mermaid documentation ](http://mermaid-js.github.io/mermaid/#/Setup?id=mermaidapi-configuration-defaults ) for all allowed settings.
2020-09-20 12:37:19 +00:00
2022-03-19 19:18:21 +00:00
The `theme` setting is somewhat special as it can be set by your used color variant. This will be the sitewide default and can - again - be overridden by your settings in `config.toml` , frontmatter or diagram directives.
2021-10-07 21:01:04 +00:00
2022-03-19 19:18:21 +00:00
{{% notice note %}}
If you want to use mermaid codefences, you have to turn off `guessSyntax` for the `markup.highlight` setting.
2022-02-20 11:51:19 +00:00
{{% /notice %}}
2021-07-02 20:05:35 +00:00
### Example
2020-09-20 12:37:19 +00:00
````toml
[params]
2021-07-02 20:05:35 +00:00
mermaidInitialize = "{ \"theme\": \"dark\" }"
2021-10-07 21:01:04 +00:00
[markup]
[markup.highlight]
2022-02-10 23:59:40 +00:00
# if set to `guessSyntax = true` , there will be no unstyled code even if no language
# was given BUT mermaid code fences will not work anymore! So this is a mandatory
# setting for your site
guessSyntax = false
2020-09-20 12:37:19 +00:00
````
or pages frontmatter
````toml
+++
2021-07-02 20:05:35 +00:00
mermaidInitialize = "{ \"theme\": \"dark\" }"
2020-09-20 12:37:19 +00:00
+++
````