Шпаргалка по синтаксису mermaid
У mermaid большой справочник и маленькое подмножество, которое покрывает почти всё, что люди рисуют. Эта страница — то самое подмножество: формы, стрелки, группировка, цвета и один пример-для-копирования на каждый тип диаграммы. Каждый фрагмент ниже рендерится как есть — вставьте его в редактор, чтобы увидеть.
Самая короткая рабочая диаграмма
Flowchart нужна одна строка объявления и одна стрелка. TD значит сверху вниз; для широких процессов лучше подходит LR — слева направо.
flowchart TD
A[Start] --> B{Ready?}
B -->|Yes| C[Ship it]
B -->|No| AA, 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.