UNPKG

mermaid

Version:

Markdownish syntax for generating flowcharts, sequence diagrams and gantt charts.

441 lines (403 loc) 23.9 kB
<!DOCTYPE html> <html> <head> <title>sequenceDiagram.md</title> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" media="all" href="../doc-style.css" /> <script src="../doc-filelist.js"></script> <script> var relativeDir = "../", thisFile = "Users/knut/Documents/source/mermaid/docs/sequenceDiagram.md", defaultSidebar = true; </script> <script src="../doc-script.js"></script> <script src="../mermaid.js"></script> <link rel="stylesheet" href="../mermaid.css" /> </head> <body> <div id="sidebar_wrapper"> <div id="sidebar_switch"> <span class="tree">Files</span> <span class="headings">Headings</span> </div> <div id="tree"></div> <div id="headings"> <div class="heading h2"> <a href="#order: 3">order: 3</a> </div> <div class="heading h1"> <a href="#Sequence diagrams">Sequence diagrams</a> </div> <div class="heading h1"> <a href="#Syntax">Syntax</a> </div> <div class="heading h3"> <a href="#Participants">Participants</a> </div> <div class="heading h2"> <a href="#Messages">Messages</a> </div> <div class="heading h2"> <a href="#Notes">Notes</a> </div> <div class="heading h2"> <a href="#Loops">Loops</a> </div> <div class="heading h2"> <a href="#Alt">Alt</a> </div> <div class="heading h2"> <a href="#Styling">Styling</a> </div> <div class="heading h3"> <a href="#Classes used">Classes used</a> </div> <div class="heading h3"> <a href="#Sample stylesheet">Sample stylesheet</a> </div> <div class="heading h2"> <a href="#Configuration">Configuration</a> </div> <div class="heading h3"> <a href="#Possible configration params:">Possible configration params:</a> </div> </div> </div> <div id="sidebar-toggle"></div> <div id="container"><div class="docs markdown"><hr> <p>title: Sequence Diagram</p> <div class="pilwrap" id="order: 3"> <h2> <a href="#order: 3" name="order: 3" class="pilcrow">&#182;</a> order: 3</h2> </div> <div class="pilwrap" id="Sequence diagrams"> <h1> <a href="#Sequence diagrams" name="Sequence diagrams" class="pilcrow">&#182;</a> Sequence diagrams</h1> </div> <blockquote> <p>A Sequence diagram is an interaction diagram that shows how processes operate with one another and in what order.</p> </blockquote> <p>Mermaid can render sequence diagrams. The code snippet below:</p> <div class="highlight"><pre><code><span class="o">%%</span> <span class="nx">Example</span> <span class="nx">of</span> <span class="nx">sequence</span> <span class="nx">diagram</span> <span class="nx">sequenceDiagram</span> <span class="nx">Alice</span><span class="o">-</span><span class="nx">John</span><span class="o">:</span> <span class="nx">Hello</span> <span class="nx">John</span><span class="p">,</span> <span class="nx">how</span> <span class="nx">are</span> <span class="nx">you</span><span class="o">?</span> <span class="nx">John</span><span class="o">--</span><span class="nx">Alice</span><span class="o">:</span> <span class="nx">Great</span><span class="o">!</span> </code></pre></div> <p>Renders the following diagram:</p> <script>mermaid.initialize({startOnLoad:true});</script><div class="mermaid">sequenceDiagram Alice->>John: Hello John, how are you? John-->>Alice: Great!</div><div class="pilwrap" id="Syntax"> <h1> <a href="#Syntax" name="Syntax" class="pilcrow">&#182;</a> Syntax</h1> </div> <div class="pilwrap" id="Participants"> <h3> <a href="#Participants" name="Participants" class="pilcrow">&#182;</a> Participants</h3> </div> <p>The participants can be defined implicitly as in the first example on this page. The participants or actors are rendered in order of appearance in the diagram source text. Sometimes you might want to show the participants in a different order than how they appear in the first message. It is possible to specify the actor&#39;s order of appearance by doing the following:</p> <div class="highlight"><pre><code><span class="o">%%</span> <span class="nx">Example</span> <span class="nx">of</span> <span class="nx">sequence</span> <span class="nx">diagram</span> <span class="nx">sequenceDiagram</span> <span class="nx">participant</span> <span class="nx">John</span> <span class="nx">participant</span> <span class="nx">Alice</span> <span class="nx">Alice</span><span class="o">-</span><span class="nx">John</span><span class="o">:</span> <span class="nx">Hello</span> <span class="nx">John</span><span class="p">,</span> <span class="nx">how</span> <span class="nx">are</span> <span class="nx">you</span><span class="o">?</span> <span class="nx">John</span><span class="o">--</span><span class="nx">Alice</span><span class="o">:</span> <span class="nx">Great</span><span class="o">!</span> </code></pre></div> <p>Renders to the diagram below:</p> <div class="mermaid">sequenceDiagram participant John participant Alice Alice->>John: Hello John, how are you? John-->>Alice: Great!</div><div class="pilwrap" id="Messages"> <h2> <a href="#Messages" name="Messages" class="pilcrow">&#182;</a> Messages</h2> </div> <p>Messages can be of two displayed either solid or with a dotted line.</p> <div class="highlight"><pre><code><span class="p">[</span><span class="nx">Actor</span><span class="p">][</span><span class="nx">Arrow</span><span class="p">][</span><span class="nx">Actor</span><span class="p">]</span><span class="o">:</span><span class="nx">Message</span> <span class="nx">text</span> </code></pre></div> <p>There are six types of arrows currently supported:</p> <p>-&gt; which will render a solid line without arrow</p> <p>--&gt; which will render a dotted line without arrow</p> <p>-&gt;&gt; which will render a solid line with arrowhead</p> <p>--&gt;&gt; which will render a dotted line with arrowhead</p> <p>-x which will render a solid line with a cross at the end (async)</p> <p>--x which will render a dotted line with a cross at the end (async)</p> <div class="pilwrap" id="Notes"> <h2> <a href="#Notes" name="Notes" class="pilcrow">&#182;</a> Notes</h2> </div> <p>It is possible to add notes to a sequence diagram. This is done by the notation Note [ right | left ] of [Actor]: Text in note content</p> <p>See the example below:</p> <div class="highlight"><pre><code><span class="o">%%</span> <span class="nx">Example</span> <span class="nx">of</span> <span class="nx">sequence</span> <span class="nx">diagram</span> <span class="nx">sequenceDiagram</span> <span class="nx">participant</span> <span class="nx">John</span> <span class="nx">Note</span> <span class="nx">right</span> <span class="nx">of</span> <span class="nx">John</span><span class="o">:</span> <span class="nx">Text</span> <span class="k">in</span> <span class="nx">note</span> </code></pre></div> <p>Renders to the diagram below:</p> <div class="mermaid">sequenceDiagram participant John Note right of John: Text in note</div><p>It is possible to break text into different rows by using &lt;br/&gt; as a line breaker.</p> <div class="highlight"><pre><code><span class="o">%%</span> <span class="nx">Example</span> <span class="nx">of</span> <span class="nx">sequence</span> <span class="nx">diagram</span> <span class="nx">sequenceDiagram</span> <span class="nx">participant</span> <span class="nx">John</span> <span class="nx">Note</span> <span class="nx">left</span> <span class="nx">of</span> <span class="nx">John</span><span class="o">:</span> <span class="nx">Text</span> <span class="k">in</span> <span class="nx">note</span> <span class="nx">spanning</span> <span class="nx">several</span> <span class="nx">rows</span><span class="p">.</span> </code></pre></div> <div class="mermaid">sequenceDiagram participant John Note left of John: Text in note spanning several rows.</div><div class="pilwrap" id="Loops"> <h2> <a href="#Loops" name="Loops" class="pilcrow">&#182;</a> Loops</h2> </div> <p>It is possible to express loops in a sequence diagram. This is done by the notation</p> <div class="highlight"><pre><code><span class="nx">loop</span> <span class="nx">Loop</span> <span class="nx">text</span> <span class="p">...</span> <span class="nx">statements</span> <span class="p">...</span> <span class="nx">end</span> </code></pre></div> <p>See the example below</p> <div class="highlight"><pre><code><span class="o">%%</span> <span class="nx">Example</span> <span class="nx">of</span> <span class="nx">sequence</span> <span class="nx">diagram</span> <span class="nx">sequenceDiagram</span> <span class="nx">Alice</span><span class="o">-</span><span class="nx">John</span><span class="o">:</span> <span class="nx">Hello</span> <span class="nx">John</span><span class="p">,</span> <span class="nx">how</span> <span class="nx">are</span> <span class="nx">you</span><span class="o">?</span> <span class="nx">loop</span> <span class="nx">Reply</span> <span class="nx">every</span> <span class="nx">minute</span> <span class="nx">John</span><span class="o">--</span><span class="nx">Alice</span><span class="o">:</span> <span class="nx">Great</span><span class="o">!</span> <span class="nx">end</span> </code></pre></div> <div class="mermaid">sequenceDiagram Alice->John: Hello John, how are you? loop Every minute John-->Alice: Great! end</div><div class="pilwrap" id="Alt"> <h2> <a href="#Alt" name="Alt" class="pilcrow">&#182;</a> Alt</h2> </div> <p>It is possible to express alternative paths in a sequence diagram. This is done by the notation</p> <div class="highlight"><pre><code><span class="nx">alt</span> <span class="nx">Describing</span> <span class="nx">text</span> <span class="p">...</span> <span class="nx">statements</span> <span class="p">...</span> <span class="k">else</span> <span class="p">...</span> <span class="nx">statements</span> <span class="p">...</span> <span class="nx">end</span> </code></pre></div> <p>or if there is sequence that is optionat (if without else).</p> <div class="highlight"><pre><code><span class="nx">opt</span> <span class="nx">Describing</span> <span class="nx">text</span> <span class="p">...</span> <span class="nx">statements</span> <span class="p">...</span> <span class="nx">end</span> </code></pre></div> <p>See the example below</p> <div class="highlight"><pre><code><span class="o">%%</span> <span class="nx">Example</span> <span class="nx">of</span> <span class="nx">sequence</span> <span class="nx">diagram</span> <span class="nx">sequenceDiagram</span> <span class="nx">Alice</span><span class="o">-</span><span class="nx">Bob</span><span class="o">:</span> <span class="nx">Hello</span> <span class="nx">Bob</span><span class="p">,</span> <span class="nx">how</span> <span class="nx">are</span> <span class="nx">you</span><span class="o">?</span> <span class="nx">alt</span> <span class="nx">is</span> <span class="nx">sick</span> <span class="nx">Bob</span><span class="o">-</span><span class="nx">Alice</span><span class="o">:</span> <span class="nx">Not</span> <span class="nx">so</span> <span class="nx">good</span> <span class="o">:</span><span class="p">(</span> <span class="k">else</span> <span class="nx">is</span> <span class="nx">well</span> <span class="nx">Bob</span><span class="o">-</span><span class="nx">Alice</span><span class="o">:</span> <span class="nx">Feeling</span> <span class="nx">fresh</span> <span class="nx">like</span> <span class="nx">a</span> <span class="nx">daisy</span> <span class="nx">end</span> <span class="nx">opt</span> <span class="nx">Extra</span> <span class="nx">response</span> <span class="nx">Bob</span><span class="o">-</span><span class="nx">Alice</span><span class="o">:</span> <span class="nx">Thanks</span> <span class="k">for</span> <span class="nx">asking</span> <span class="nx">end</span> </code></pre></div> <div class="mermaid">sequenceDiagram Alice->>Bob: Hello Bob, how are you? alt is sick Bob->>Alice: Not so good :( else is well Bob->>Alice: Feeling fresh like a daisy end opt Extra response Bob->>Alice: Thanks for asking end</div><div class="pilwrap" id="Styling"> <h2> <a href="#Styling" name="Styling" class="pilcrow">&#182;</a> Styling</h2> </div> <p>Styling of the a sequence diagram is done by defining a number of css classes. During rendering these classes are extracted from the</p> <div class="pilwrap" id="Classes used"> <h3> <a href="#Classes used" name="Classes used" class="pilcrow">&#182;</a> Classes used</h3> </div> <table> <thead> <tr> <th>Class</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td>actor</td> <td>Style for the actor box at the top of the diagram.</td> </tr> <tr> <td>text.actor</td> <td>Styles for text in the actor box at the top of the diagram.</td> </tr> <tr> <td>actor-line</td> <td>The vertical line for an actor.</td> </tr> <tr> <td>messageLine0</td> <td>Styles for the solid message line.</td> </tr> <tr> <td>messageLine1</td> <td>Styles for the dotted message line.</td> </tr> <tr> <td>messageText</td> <td>Defines styles for the text on the message arrows.</td> </tr> <tr> <td>labelBox</td> <td>Defines styles label to left in a loop.</td> </tr> <tr> <td>labelText</td> <td>Styles for the text in label for loops.</td> </tr> <tr> <td>loopText</td> <td>Styles for the text in the loop box.</td> </tr> <tr> <td>loopLine</td> <td>Defines styles for the lines in the loop box.</td> </tr> <tr> <td>note</td> <td>Styles for the note box.</td> </tr> <tr> <td>noteText</td> <td>Styles for the text on in the note boxes.</td> </tr> </tbody> </table> <div class="pilwrap" id="Sample stylesheet"> <h3> <a href="#Sample stylesheet" name="Sample stylesheet" class="pilcrow">&#182;</a> Sample stylesheet</h3> </div> <div class="highlight"><pre><code><span class="nx">body</span> <span class="p">{</span> <span class="nx">background</span><span class="o">:</span> <span class="nx">white</span><span class="p">;</span> <span class="p">}</span> <span class="p">.</span><span class="nx">actor</span> <span class="p">{</span> <span class="nx">stroke</span><span class="o">:</span> <span class="err">#</span><span class="nx">CCCCFF</span><span class="p">;</span> <span class="nx">fill</span><span class="o">:</span> <span class="err">#</span><span class="nx">ECECFF</span><span class="p">;</span> <span class="p">}</span> <span class="nx">text</span><span class="p">.</span><span class="nx">actor</span> <span class="p">{</span> <span class="nx">fill</span><span class="o">:</span><span class="nx">black</span><span class="p">;</span> <span class="nx">stroke</span><span class="o">:</span><span class="nx">none</span><span class="p">;</span> <span class="nx">font</span><span class="o">-</span><span class="nx">family</span><span class="o">:</span> <span class="nx">Helvetica</span><span class="p">;</span> <span class="p">}</span> <span class="p">.</span><span class="nx">actor</span><span class="o">-</span><span class="nx">line</span> <span class="p">{</span> <span class="nx">stroke</span><span class="o">:</span><span class="nx">grey</span><span class="p">;</span> <span class="p">}</span> <span class="p">.</span><span class="nx">messageLine0</span> <span class="p">{</span> <span class="nx">stroke</span><span class="o">-</span><span class="nx">width</span><span class="o">:</span><span class="mf">1.5</span><span class="p">;</span> <span class="nx">stroke</span><span class="o">-</span><span class="nx">dasharray</span><span class="o">:</span> <span class="mi">2</span> <span class="mi">2</span><span class="p">;</span> <span class="nx">marker</span><span class="o">-</span><span class="nx">end</span><span class="o">:</span><span class="nx">url</span><span class="p">(</span><span class="err">#</span><span class="nx">arrowhead</span><span class="p">);</span> <span class="nx">stroke</span><span class="o">:</span><span class="nx">black</span><span class="p">;</span> <span class="p">}</span> <span class="p">.</span><span class="nx">messageLine1</span> <span class="p">{</span> <span class="nx">stroke</span><span class="o">-</span><span class="nx">width</span><span class="o">:</span><span class="mf">1.5</span><span class="p">;</span> <span class="nx">stroke</span><span class="o">-</span><span class="nx">dasharray</span><span class="o">:</span> <span class="mi">2</span> <span class="mi">2</span><span class="p">;</span> <span class="nx">stroke</span><span class="o">:</span><span class="nx">black</span><span class="p">;</span> <span class="p">}</span> <span class="err">#</span><span class="nx">arrowhead</span> <span class="p">{</span> <span class="nx">fill</span><span class="o">:</span><span class="nx">black</span><span class="p">;</span> <span class="p">}</span> <span class="p">.</span><span class="nx">messageText</span> <span class="p">{</span> <span class="nx">fill</span><span class="o">:</span><span class="nx">black</span><span class="p">;</span> <span class="nx">stroke</span><span class="o">:</span><span class="nx">none</span><span class="p">;</span> <span class="nx">font</span><span class="o">-</span><span class="nx">family</span><span class="o">:</span> <span class="s1">&#39;trebuchet ms&#39;</span><span class="p">,</span> <span class="nx">verdana</span><span class="p">,</span> <span class="nx">arial</span><span class="p">;</span> <span class="nx">font</span><span class="o">-</span><span class="nx">size</span><span class="o">:</span><span class="mi">14</span><span class="nx">px</span><span class="p">;</span> <span class="p">}</span> <span class="p">.</span><span class="nx">labelBox</span> <span class="p">{</span> <span class="nx">stroke</span><span class="o">:</span> <span class="err">#</span><span class="nx">CCCCFF</span><span class="p">;</span> <span class="nx">fill</span><span class="o">:</span> <span class="err">#</span><span class="nx">ECECFF</span><span class="p">;</span> <span class="p">}</span> <span class="p">.</span><span class="nx">labelText</span> <span class="p">{</span> <span class="nx">fill</span><span class="o">:</span><span class="nx">black</span><span class="p">;</span> <span class="nx">stroke</span><span class="o">:</span><span class="nx">none</span><span class="p">;</span> <span class="nx">font</span><span class="o">-</span><span class="nx">family</span><span class="o">:</span> <span class="s1">&#39;trebuchet ms&#39;</span><span class="p">,</span> <span class="nx">verdana</span><span class="p">,</span> <span class="nx">arial</span><span class="p">;</span> <span class="p">}</span> <span class="p">.</span><span class="nx">loopText</span> <span class="p">{</span> <span class="nx">fill</span><span class="o">:</span><span class="nx">black</span><span class="p">;</span> <span class="nx">stroke</span><span class="o">:</span><span class="nx">none</span><span class="p">;</span> <span class="nx">font</span><span class="o">-</span><span class="nx">family</span><span class="o">:</span> <span class="s1">&#39;trebuchet ms&#39;</span><span class="p">,</span> <span class="nx">verdana</span><span class="p">,</span> <span class="nx">arial</span><span class="p">;</span> <span class="p">}</span> <span class="p">.</span><span class="nx">loopLine</span> <span class="p">{</span> <span class="nx">stroke</span><span class="o">-</span><span class="nx">width</span><span class="o">:</span><span class="mi">2</span><span class="p">;</span> <span class="nx">stroke</span><span class="o">-</span><span class="nx">dasharray</span><span class="o">:</span> <span class="mi">2</span> <span class="mi">2</span><span class="p">;</span> <span class="nx">marker</span><span class="o">-</span><span class="nx">end</span><span class="o">:</span><span class="nx">url</span><span class="p">(</span><span class="err">#</span><span class="nx">arrowhead</span><span class="p">);</span> <span class="nx">stroke</span><span class="o">:</span> <span class="err">#</span><span class="nx">CCCCFF</span><span class="p">;</span> <span class="p">}</span> <span class="p">.</span><span class="nx">note</span> <span class="p">{</span> <span class="nx">stroke</span><span class="o">:</span> <span class="err">#</span><span class="nx">decc93</span><span class="p">;</span> <span class="nx">stroke</span><span class="o">:</span> <span class="err">#</span><span class="nx">CCCCFF</span><span class="p">;</span> <span class="nx">fill</span><span class="o">:</span> <span class="err">#</span><span class="nx">fff5ad</span><span class="p">;</span> <span class="p">}</span> <span class="p">.</span><span class="nx">noteText</span> <span class="p">{</span> <span class="nx">fill</span><span class="o">:</span><span class="nx">black</span><span class="p">;</span> <span class="nx">stroke</span><span class="o">:</span><span class="nx">none</span><span class="p">;</span> <span class="nx">font</span><span class="o">-</span><span class="nx">family</span><span class="o">:</span> <span class="s1">&#39;trebuchet ms&#39;</span><span class="p">,</span> <span class="nx">verdana</span><span class="p">,</span> <span class="nx">arial</span><span class="p">;</span> <span class="nx">font</span><span class="o">-</span><span class="nx">size</span><span class="o">:</span><span class="mi">14</span><span class="nx">px</span><span class="p">;</span> <span class="p">}</span> </code></pre></div> <div class="pilwrap" id="Configuration"> <h2> <a href="#Configuration" name="Configuration" class="pilcrow">&#182;</a> Configuration</h2> </div> <p>Is it possible to adjust the margins for rendering the sequence diagram.</p> <p>This is done by defining <strong>mermaid.sequenceConfig</strong> or by the CLI to use a json file with the configuration. How to use the CLI is described in the mermaidCLI page. mermaid.sequenceConfig can be set to a JSON string with config parameters or the corresponding object.</p> <div class="highlight"><pre><code><span class="nx">mermaid</span><span class="p">.</span><span class="nx">sequenceConfig</span> <span class="o">=</span> <span class="p">{</span> <span class="nx">diagramMarginX</span><span class="o">:</span><span class="mi">50</span><span class="p">,</span> <span class="nx">diagramMarginY</span><span class="o">:</span><span class="mi">10</span><span class="p">,</span> <span class="nx">boxTextMargin</span><span class="o">:</span><span class="mi">5</span><span class="p">,</span> <span class="nx">noteMargin</span><span class="o">:</span><span class="mi">10</span><span class="p">,</span> <span class="nx">messageMargin</span><span class="o">:</span><span class="mi">35</span><span class="p">,</span> <span class="nx">mirrorActors</span><span class="o">:</span><span class="kc">true</span> <span class="p">};</span> </code></pre></div> <div class="pilwrap" id="Possible configration params:"> <h3> <a href="#Possible configration params:" name="Possible configration params:" class="pilcrow">&#182;</a> Possible configration params:</h3> </div> <table> <thead> <tr> <th>Param</th> <th>Descriotion</th> <th>Default value</th> </tr> </thead> <tbody> <tr> <td>mirrorActor</td> <td>Turns on/off the rendering of actors below the diagram as well as above it</td> <td>false</td> </tr> <tr> <td>bottomMarginAdj</td> <td>Adjusts how far down the graph ended. Wide borders styles with css could generate unwantewd clipping which is why this config param exists.</td> <td>1</td> </tr> </tbody> </table> </div> </div> </body> </html>