Archyno
ExportsModelling practice

UML in a repository: Mermaid

The export that gives up the most and buys the one thing the others cannot: a diagram that lives beside the code and changes in the same pull request.

5 min readXMI 2.5.13 of 3

01The trade, stated plainly

Mermaid is the worst of the three export formats at carrying a model and the only one of them that solves the problem most documentation actually has. XMI carries the metamodel; .qea carries the metamodel and the layout; Mermaid carries roughly what fits in a paragraph of text - and renders in a README without a build step.

That is the whole argument, and it is a good one. A diagram exported as PNG into a wiki is wrong within a quarter and nobody notices, because nothing about changing the code obliges anyone to look at it. A diagram in docs/architecture.md shows up in a diff when its file is touched, and a reviewer who can read the change can see the diagram disagree with it.

02What Mermaid can and cannot draw

ElementNotationWhat it means
Class diagramGoodClasses, members, visibility, all six relationship kinds and multiplicities. The closest match to UML in the whole syntax.
Sequence diagramGoodParticipants, sync and async messages, activations, and alt, opt, loop and par blocks.
State diagramGoodStates, transitions with guards, composite states and history.
ER diagramGoodCrow's foot cardinality and attribute lists. A close match to the ER article.
Use case diagramPartialActors and cases, but no first-class include or extend.
Component, deployment, timingAbsentNo syntax at all. A flowchart approximation is possible and is not the same diagram.

What is lost even in the good rows is worth naming: stereotypes, notes, constraints, and every trace of layout. Mermaid lays out its own diagrams, so the arrangement you spent an hour on does not survive - and for a diagram that is going to be regenerated on every change, that is a feature rather than a loss.

03Making it stick

Export the views a developer would actually open, which is almost never all of them. One class diagram of the core domain and one sequence diagram of the flow that everybody debugs is a better repository than fourteen files nobody reads.

Commit the Mermaid, not a rendered image. GitHub, GitLab and most static site generators render fenced mermaid blocks directly. An image checked in beside the source is a second copy that will disagree with it.

Regenerate rather than hand-edit. The moment somebody fixes a class name in the Markdown instead of in the model, the export has stopped being an export and the two versions begin to drift - which is the failure mode keeping a model current is entirely about.

In one line each

  1. 01Mermaid carries the least of the three formats and is the only one that lives in a diff.
  2. 02Class, sequence, state and ER map well; component, deployment and timing have no syntax.
  3. 03Stereotypes, notes, constraints and layout are all lost - and losing layout is fine here.
  4. 04Export the two or three views developers consult, not the whole model.
  5. 05Commit the text, never a rendered image, and regenerate rather than hand-edit.

04Common questions

Which UML diagrams does Mermaid support?

Class, sequence, state and use case have direct equivalents, and there is an entity-relationship diagram too. Component, deployment, timing, composite structure and the rest have no syntax, so a model containing them exports partially or not at all.

Why export to Mermaid at all if it loses detail?

Because it is text, and text goes in the repository. A Mermaid diagram appears in a pull request diff, renders natively on GitHub and GitLab, and gets reviewed alongside the change it describes - which is the only mechanism that reliably keeps a diagram true.

Is Mermaid a replacement for a modelling tool?

No. Mermaid draws diagrams; a modelling tool holds one model behind many views. Rename a class in Mermaid and you have edited one file - rename it in a model and every view that shows it updates. Use Mermaid for the views that need to live in the repo.

All articles