# Mermaid Integration

Mermaid is a tool that lets you generate flow charts, sequence diagrams, gantt
charts, class diagrams and vcs graphs from a simple markup language. This
allows charts and diagrams to be embedded and edited directly in the
documentation source files rather than creating them as images using some
external tool and checking the images into the tree.

To add a diagram, simply put something like this into your page:

% These two examples come from the upstream website (<https://mermaid-js.github.io/mermaid/#/>)

```rst
.. mermaid::

    graph TD;
        A-->B;
        A-->C;
        B-->D;
        C-->D;
```

````md
```{mermaid}
graph TD;
    A-->B;
    A-->C;
    B-->D;
    C-->D;
```
````

The result will be:

```{mermaid}
graph TD;
    A-->B;
    A-->C;
    B-->D;
    C-->D;
```

Or

```{code-block} rst
:caption: .rst

.. 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!
```

````{code-block} markdown
:caption: .md

```{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!
```
````

will show:

```{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!
```

See [Mermaid's official](https://mermaid-js.github.io/mermaid/#/) docs for
more details on the syntax, and use the
[Mermaid Live Editor](https://mermaidjs.github.io/mermaid-live-editor/) to
experiment with creating your own diagrams.
