Шпаргалка по синтаксису mermaid

У mermaid большой справочник и маленькое подмножество, которое покрывает почти всё, что люди рисуют. Эта страница — то самое подмножество: формы, стрелки, группировка, цвета и один пример-для-копирования на каждый тип диаграммы. Каждый фрагмент ниже рендерится как есть — вставьте его в редактор, чтобы увидеть.

Самая короткая рабочая диаграмма

Flowchart нужна одна строка объявления и одна стрелка. TD значит сверху вниз; для широких процессов лучше подходит LR — слева направо.

flowchart TD
  A[Start] --> B{Ready?}
  B -->|Yes| C[Ship it]
  B -->|No| A
Flowchart из трёх узлов, сверху вниз.

A, B и C — это id узлов, внутренние имена, которые никогда не рисуются. Текст в скобках — подпись, а стиль скобок как раз и определяет форму.

Формы узлов

Форма выбирается парой скобок вокруг подписи. Вот те, что стоит запомнить:

СинтаксисФормаОбычное значение
A[Text]ПрямоугольникШаг или действие
A(Text)СкруглённыйТочка старта или финиша
A([Text])ТаблеткаТерминатор
A[[Text]]ПодпрограммаВызов другого процесса
A[(Text)]ЦилиндрБаза данных или хранилище
A((Text))КругТочка соединения
A{Text}РомбРешение
A{{Text}}ШестиугольникПодготовительный шаг
A[/Text/]ПараллелограммВвод или вывод
A[/Text\]ТрапецияРучная операция

Берите подпись в кавычки, если в ней есть скобки, двоеточия или кавычки: A["Load (raw) data"]. Без кавычек парсер примет вашу пунктуацию за синтаксис.

Стрелки

СинтаксисРезультат
A --> BСтрелка
A --- BЛиния без наконечника
A -.-> BПунктирная стрелка
A ==> BТолстая стрелка
A -->|label| BСтрелка с подписью
A --> B --> CЦепочка в одну строку
A --> B & CОдин источник, две цели

Длина стрелки тоже имеет значение: --> — один уровень, ---> отодвигает цель на уровень дальше. Это самый простой способ управлять раскладкой в mermaid.

Группировка через подграфы

subgraph рисует подписанную рамку вокруг узлов. Подграфы можно вкладывать друг в друга, а стрелки свободно пересекают их границы.

flowchart LR
  subgraph api["API"]
    H[Handler] --> S[(Postgres)]
  end
  subgraph worker["Worker"]
    Q[Queue] --> W[Job]
  end
  H --> Q
Два сервиса, у каждого своё хранилище.

Цвет и стили

style красит один узел. classDef вместе с class красит целый набор — это нужно уже после трёх-четырёх узлов.

flowchart TD
  A[OK] --> B[Failed]
  style A fill:#16a34a,stroke:#333,color:#fff
  classDef bad fill:#dc2626,stroke:#333,color:#fff
  class B bad

Цвета — часть исходника диаграммы, поэтому они переживают экспорт и путешествуют вместе с файлом. Ничего здесь не зависит от настройки темы в инструменте, который это рендерит.

По одному примеру на тип диаграммы

Sequence-диаграмма

sequenceDiagram
  participant User
  participant API
  participant DB
  User->>API: request
  API->>DB: query
  DB-->>API: rows
  API-->>User: response

Диаграмма классов

classDiagram
  class Animal {
    +String name
    +move()
  }
  class Dog {
    +bark()
  }
  Animal <|-- Dog

Диаграмма состояний

stateDiagram-v2
  [*] --> Idle
  Idle --> Running: start
  Running --> Idle: stop
  Running --> [*]: finish

Диаграмма «сущность-связь»

erDiagram
  CUSTOMER ||--o{ ORDER : places
  ORDER ||--|{ LINE_ITEM : contains
  CUSTOMER {
    string name
    string email
  }

Диаграмма Ганта

gantt
  title Project
  dateFormat YYYY-MM-DD
  section Phase 1
  Task 1 :a1, 2026-01-01, 5d
  Task 2 :after a1, 5d

Где mermaid рендерится сам по себе

  • GitHub — блок в тройных кавычках ```mermaid рендерится в issues, pull request'ах, комментариях и README.
  • GitLab — тот же блок, в issues, merge request'ах и вики.
  • Notion — блок кода с языком Mermaid рендерится рядом с исходником.
  • Obsidian — блок mermaid рендерится в режиме предпросмотра.
  • Сайты документации — Docusaurus, MkDocs Material и VitePress поддерживают блоки mermaid.

Вот настоящая причина держать диаграммы как mermaid, а не как картинки: диаграмма живёт в том же текстовом файле, что и то, что она описывает, и код-ревью видит, что в ней изменилось.

Попробуйте любой пример с этой страницы

Вставьте его во вкладку кода — он отрисуется мгновенно, либо соберите ту же диаграмму на холсте и прочитайте синтаксис в обратную сторону.

Частые вопросы

Как сделать перенос строки внутри подписи узла?

Используйте <br> внутри подписи в кавычках: A["First line<br>Second line"]. Mermaid рендерит подпись как HTML, поэтому тег работает, хотя остальной синтаксис не HTML.

Почему моя подпись ломает диаграмму?

Почти всегда виновата скобка, двоеточие или кавычка внутри подписи без кавычек вокруг неё. Возьмите всю подпись в двойные кавычки — и парсер перестанет принимать вашу пунктуацию за синтаксис.

Можно ли управлять раскладкой?

Только косвенно. Выберите направление (TD, LR, BT, RL), используйте более длинные стрелки (--->), чтобы раздвинуть узлы дальше, и группируйте связанные узлы в подграфы. Остальное mermaid считает сам — координат здесь нет.

Какую версию mermaid использует этот редактор?

Mermaid 11, текущую основную версию, так что рендерится всё, что задокументировано для синтаксиса v10 и v11.

Ещё гайды

  1. Экспорт mermaid в PNG или SVG

    Четыре способа получить диаграмму mermaid из редактора — PNG, SVG, исходник .mmd и блок Markdown — и когда какой из них правильный.

  2. Sequence-диаграммы mermaid

    Участники, типы стрелок, полосы активации, циклы и alt-блоки — весь синтаксис sequence-диаграммы с рабочими примерами.

Откройте редактор. Бесплатно — без регистрации.

Чистый холст, вкладка кода и все варианты экспорта — бесплатно, в браузере, прямо сейчас.