Разделы документацииСхема из текста (Mermaid)

Практикум

Схема из текста: Mermaid с нуля

Опишем схему несколькими строками текста — и получим на доске настоящие блоки, связи и группы. Mermaid учить не нужно: девять коротких уроков с примерами, которые можно скопировать, готовые рецепты, частые ошибки и дорога обратно — из доски в текст для README.

Обновлено 4 октября 202617 мин чтения

На этой странице

Что это и зачем#

Mermaid — способ нарисовать схему текстом. Вместо того чтобы таскать мышью прямоугольники и стрелки, вы пишете A --> B — «из A стрелка в B». Строка — одна связь или один блок. Схему из десяти шагов так можно набросать за минуту.

Такой текст программисты хранят рядом с кодом: GitHub и GitLab рисуют его прямо в README, Notion и Obsidian — в заметках, в Confluence — через расширения. Нейросети тоже часто отвечают схемой Mermaid. Но текст неудобно двигать, обсуждать и показывать на встрече.

NodePanel превращает такой текст в живую доску: каждый блок становится фигурой или карточкой, стрелки — связями, группы — рамками. Дальше это обычная доска: двигайте, перекрашивайте, комментируйте, показывайте команде. А когда схема готова — копируйте её обратно в текст и вставляйте в документацию.

Удобно, когда

  • схема уже есть текстом — в README, вики или ответе нейросети;
  • шагов много, а связи простые: процесс, путь пользователя, зависимости;
  • схему нужно держать в репозитории рядом с кодом и иногда обновлять.

Проще мышью, когда

  • нужны стикеры, фото, таблицы — их на доске добавить быстрее;
  • важна точная раскладка — после вставки блоки всё равно можно сдвинуть руками;
  • это не блок-схема, а другая диаграмма Mermaid (последовательность, таблицы базы, диаграмма Ганта).

Где вставить схему#

  1. Откройте доску и окно вставки

    Меню доски — три точки в шапке → «Вставить Mermaid…». Если текст уже скопирован, ещё проще: щёлкните по пустому месту холста и нажмите CtrlV (на Mac — ⌘V). Когда первая строка текста — flowchart или graph (пустые строки и комментарии перед ней не мешают), окно откроется само, уже с этим текстом.

  2. Напишите или вставьте схему

    Поле «Текст Mermaid» — моноширинное, стрелки в нём выглядят как набраны. Пока поле пустое, над ним есть кнопка «Вставить пример»: она подставит небольшую схему с развилкой и группой — с неё удобно начать.

  3. Посмотрите, что получится

    Справа сразу видно, сколько будет блоков, связей и групп (для примера из окна — 6 блоков · 6 связей · 1 группа), и направление: «Сверху вниз» или «Слева направо». Всё в порядке — «Всё понятно — можно вставлять». Если строку не удалось понять, ниже появится замечание с её номером: «Строка 4: Не понял стрелку» и сам кусок текста. Такая строка пропускается, остальное вставится.

  4. Нажмите «Вставить»

    Или CtrlEnter прямо в поле. Схема ляжет в центр экрана уже разложенной по направлению из текста и будет выделена — её можно сразу перетащить целиком. Появится уведомление — для примера из окна «Вставлено: 6 блоков и 6 связей».

  5. Передумали — одна отмена

    Вся вставка — одно действие: CtrlZ убирает её целиком, вместе со связями и группами.

Уроки по шагам#

Каждый пример ниже можно скопировать кнопкой «Скопировать», вставить в окно и посмотреть, что получится. Под примером — что покажет окно, под некоторыми — как схема ляжет на доску. Отступы в начале строк не обязательны, они только для красоты.

Урок 1. Первая схема#

Схема всегда начинается со строки flowchart и направления. Дальше — связи: A --> B значит «блок A, стрелка, блок B». Блоков заранее объявлять не нужно: они появляются, как только их упомянули.

Mermaid
flowchart LR
  A --> B
Окно покажет: 2 блока · 1 связь · Слева направо и «Всё понятно — можно вставлять».

На доске появятся два синих прямоугольника с надписями «A» и «B» и стрелка между ними. Если в тексте у блока нет названия, надписью становится его имя.

Урок 2. Имя блока и надпись#

У блока два текста: имя — короткое слово, по которому на блок ссылаются другие строки, и надпись в скобках — то, что видно на доске. idea[Идея] — блок с именем idea и надписью «Идея». Надпись пишут один раз, при первом упоминании, а дальше — только имя.

Mermaid
flowchart LR
  idea[Идея] --> check[Проверка]
  check --> launch[Запуск]
Окно покажет: 3 блока · 2 связи · Слева направо и «Всё понятно — можно вставлять».
Так пример ляжет на доску после «Вставить».
  • Имя — буквы, цифры и _; дефис внутри тоже можно: user-service. Пробелов в имени быть не может — для пробелов есть надпись.
  • Одно имя — один блок. Упомянули check в пяти строках — на доске всё равно один блок «Проверка».
  • Если надпись указать ещё раз, блок получит последнюю — так легко случайно переименовать блок.

Урок 3. Направление#

Слово после flowchart — куда идёт схема: TD или TB — сверху вниз, LR — слева направо, BT — снизу вверх, RL — справа налево. Раскладку по направлению NodePanel делает сам: координаты в тексте не нужны.

Mermaid
flowchart TD
  morning[Утро] --> coffee[Кофе]
  coffee --> work[Работа]
Окно покажет: 3 блока · 2 связи · Сверху вниз и «Всё понятно — можно вставлять».
Так пример ляжет на доску после «Вставить».

Урок 4. Формы блоков#

Форму задают скобки вокруг надписи. На доске они становятся фигурами — каждая своего цвета, чтобы схема сразу читалась.

Mermaid
flowchart TD
  start([Старт]) --> step[Шаг процесса]
  step --> ok{Всё в порядке?}
  ok --> task[[Карточка задачи]]
  ok --> done((Готово))
Окно покажет: 5 блоков · 4 связи · Сверху вниз и «Всё понятно — можно вставлять».
Так пример ляжет на доску после «Вставить».
Скобки Mermaid и что получится на доске
Как написатьНа доскеДля чего обычно
a[Текст]Фигура «Прямоугольник», синяяШаг, действие
a(Текст) или a([Текст])Фигура «Капсула», зелёнаяНачало и конец процесса
a{Текст}Фигура «Ромб», жёлтаяВопрос, развилка «да / нет»
a((Текст))Фигура «Эллипс», фиолетоваяСобытие, система, хранилище
a[[Текст]]Карточка, фиолетоваяКомпонент, задача — у карточки потом можно добавить описание, статус, чек-лист
a[(Текст)], a{{Текст}}, a[/Текст/], a>Текст]ПрямоугольникЦилиндра, шестиугольника, параллелограмма и флажка на доске нет — окно предупредит
Mermaid
flowchart LR
  api[API] --> db[(База данных)]
Окно покажет: 2 блока · 1 связь · Слева направо и замечание «Строка 2: Формы «цилиндр» на доске нет — блок стал прямоугольником» db.

Цвет и форму после вставки можно поменять как у любого блока — в панели свойств.

Урок 5. Стрелки и подписи#

Вид стрелки — это вид связи на доске. Подпись к связи пишут двумя способами: -->|текст| или -- текст --> — результат одинаковый.

Mermaid
flowchart LR
  order[Заказ] --> pay[Оплата]
  pay --- receipt[Чек]
  pay -.-> mail[Письмо]
  pay ==> ship[Доставка]
  ship <--> stock[Склад]
  order -->|отмена| refund[Возврат]
  pay -- не прошла --> refund
Окно покажет: 7 блоков · 7 связей · Слева направо и «Всё понятно — можно вставлять».
Так пример ляжет на доску после «Вставить».
Стрелки Mermaid и связи на доске
Как написатьНа доске
a --> bОбычная связь со стрелкой
a --- bЛиния без стрелки
a -.-> bПунктирная связь (без стрелки — -.-)
a ==> bТолстая связь (без стрелки — ===)
a <--> bСтрелки с обеих сторон
a --o bКружок на конце вместо стрелки
a -->|да| b, a -- да --> bСвязь с подписью «да»
a ~~~ bСвязи не будет: такая «невидимая» стрелка только помогает раскладке поставить блоки рядом

Наконечника-крестика (--x) на доске нет — он станет обычной стрелкой, окно об этом предупредит. Связь блока с самим собой (a --> a) пропускается.

Урок 6. Цепочки и несколько связей сразу#

В одной строке можно продолжать цепочку: a --> b --> c — это две связи. А знак & соединяет сразу несколько блоков: a & b --> c — две связи в c, a --> b & c — две связи из a.

Mermaid
flowchart LR
  plan[План] --> design[Дизайн] --> dev[Разработка] --> release[Релиз]
  tests[Тесты] & review[Ревью] --> release
Окно покажет: 6 блоков · 5 связей · Слева направо и «Всё понятно — можно вставлять».
Так пример ляжет на доску после «Вставить».

Урок 7. Группы#

Группа — рамка с названием вокруг нескольких блоков. Её открывают строкой subgraph имя [Название] и закрывают строкой end. Всё, что упомянуто между ними, попадает в рамку.

Mermaid
flowchart LR
  subgraph front [Фронтенд]
    site[Сайт]
  end
  subgraph back [Бэкенд]
    api[API] --> db[База данных]
  end
  user[Пользователь] --> site --> api
Окно покажет: 4 блока · 3 связи · 2 группы · Слева направо и «Всё понятно — можно вставлять».
Так пример ляжет на доску после «Вставить».
  • Блок попадает в первую группу, внутри которой его упомянули. Поэтому удобно сначала описать группы с их блоками, а связи между группами — в конце, как в примере.
  • Название можно написать и без имени: subgraph Команда продаж — тогда это и имя, и название.
  • Связь можно провести к группе целиком, если группа описана выше: user --> back — стрелка придёт в рамку «Бэкенд».
  • end пишется строчными буквами и с новой строки. Забыли end в конце — окно закроет группу само и предупредит.

Группу внутри группы Mermaid позволяет, а доска — нет: внутренняя станет отдельной рамкой поверх внешней, а окно предупредит об этом один раз.

Mermaid
flowchart TD
  subgraph cloud [Облако]
    subgraph cluster [Кластер]
      app[Приложение]
    end
    files[Хранилище файлов]
  end
  app --> files
Окно покажет: 2 блока · 1 связь · 2 группы · Сверху вниз и замечание «Строка 3: Группы в группе на доске не вкладываются: внутренняя станет отдельной группой поверх внешней» cluster.
Так пример ляжет на доску после «Вставить».

Урок 8. Кавычки, переносы строк и знаки#

Надпись заканчивается на первой закрывающей скобке своего вида. Если в тексте есть такая же скобка, точка с запятой или вертикальная черта — возьмите надпись в двойные кавычки. Внутри кавычек можно всё, кроме самих кавычек. <br> внутри надписи блока — перенос строки.

Mermaid
flowchart LR
  draft("Шаг 1 (черновик)") --> list["Купить: хлеб; молоко"]
  list --> two["Первая строка<br>вторая строка"]
  two -->|"да | нет"| end1[Конец]
Окно покажет: 4 блока · 3 связи · Слева направо и «Всё понятно — можно вставлять».

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

Mermaid
flowchart LR
  draft(Шаг 1 (черновик)) --> next[Дальше]
Окно покажет: 1 блок · 0 связей · Слева направо и замечание «Строка 2: Не понял» ).
  • Кавычку внутри надписи пишут кодом #quot;, решётку — #35;.
  • В подписях связей и названиях групп <br> становится пробелом — там текст в одну строку.
  • HTML в надписях не выполняется: кроме <br>, любые теги остаются обычным текстом.

Урок 9. Комментарии#

Всё после %% до конца строки — комментарий: на доску он не попадает. Удобно оставлять себе пометки или временно «выключать» строку.

Mermaid
flowchart TD
  %% Комментарий: на доску не попадёт
  start[Начало] --> finish[Конец] %% и этот тоже
Окно покажет: 2 блока · 1 связь · Сверху вниз и «Всё понятно — можно вставлять».

Готовые рецепты#

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

Процесс с развилкой#

Согласование заявки: проверка, вопрос «Одобрено?» с ветками «Да» и «Нет», возврат на доработку пунктиром.

Mermaid
flowchart LR
  start([Заявка подана]) --> check[Проверка руководителем]
  check --> approved{Одобрено?}
  approved -->|Да| pay[Оплата бухгалтерией]
  pay --> done([Готово])
  approved -->|Нет| fix[Доработка заявки]
  fix -.->|исправили| check
Окно покажет: 6 блоков · 6 связей · Слева направо и «Всё понятно — можно вставлять».
Обратная связь легла дугой снизу и не накрыла прямую.

Как довести такую схему до блок-схемы с дорожками по ролям — в руководстве «Процесс согласования».

Набросок архитектуры#

Сервисы по зонам: клиенты, бэкенд, данные. Компоненты — карточками [[ ]], хранилища — эллипсами (( )), протоколы — подписями связей, фоновые события — пунктиром.

Mermaid
flowchart LR
  subgraph clients [Клиенты]
    site[Сайт]
    admin[Админка]
  end
  subgraph backend [Бэкенд]
    api[[API заказов]]
    worker[[Фоновые задачи]]
  end
  subgraph storage [Данные]
    db((PostgreSQL))
    queue((Очередь))
  end
  site -->|HTTPS| api
  admin -->|HTTPS| api
  api -->|SQL| db
  api -.->|события| queue
  queue -.-> worker
  worker -->|SQL| db
Окно покажет: 6 блоков · 6 связей · 3 группы · Слева направо и «Всё понятно — можно вставлять».
Так пример ляжет на доску после «Вставить».

Дальше — иконки и метки на карточках, анимация потоков и режим «Фокус»: см. «Архитектура сервиса». А если архитектура нужна по настоящему коду — попробуйте карту кода.

Путь пользователя#

Экраны интернет-магазина от каталога до оплаты, с развилкой «Вошёл в аккаунт?». Первая строка — цепочка из урока 6. Такую схему удобно обсуждать с дизайнером и аналитиком: где человек может уйти.

Mermaid
flowchart LR
  catalog([Каталог]) --> product[Карточка товара] --> cart[Корзина]
  cart --> signed{Вошёл в аккаунт?}
  signed -- Да --> pay[Оплата]
  signed -- Нет --> login[Вход или регистрация]
  login --> pay
  pay --> thanks([Спасибо за заказ])
Окно покажет: 7 блоков · 7 связей · Слева направо и «Всё понятно — можно вставлять».

Схема получится длинной лентой слева направо. Если экранов много, поменяйте LR на TD — или после вставки нажмите «Разложить схему автоматически» и сдвиньте ветки руками.

Обратно в текст: «Скопировать как Mermaid»#

Схему, собранную или поправленную на доске, можно забрать текстом — например, чтобы положить в README.

  1. Выберите, что копировать

    Ничего не выделено — скопируется вся доска. Выделены блоки — только они (вместе с содержимым выделенных групп) и связи между ними.

  2. Скопируйте

    Меню доски (три точки) → «Скопировать как Mermaid». Если выделено несколько блоков, та же кнопка «Как Mermaid» есть в панели свойств справа. Появится уведомление, например «Скопировано как Mermaid: 4 блока».

  3. Вставьте куда нужно

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

Mermaid
flowchart LR
  n1(["Заявка подана"])
  n2["Проверка"]
  n3{"Одобрено?"}
  n4[["Оплата"]]
  n1 --> n2
  n2 --> n3
  n3 -->|"Да"| n4
  n3 -.->|"Нет"| n2
Примерно такой текст окажется в буфере: имена n1, n2… по порядку чтения доски, надписи — всегда в кавычках.
Markdown · README.md
## Как проходит заявка

```mermaid
flowchart LR
  start([Заявка подана]) --> check[Проверка]
  check --> approved{Одобрено?}
  approved -->|Да| pay[[Оплата]]
```

Так текст выглядит в README.md: GitHub и GitLab покажут вместо него схему.
Что из доски становится в тексте
На доскеВ тексте Mermaid (надпись — в кавычках внутри скобок)
Прямоугольник[ ]
Капсула([ ])
Эллипс(( ))
Ромб{ }
Карточка[[ ]] с заголовком карточки
Стикер, текст, фото, таблица[ ] — прямоугольник с текстом стикера, текстом блока или названием
Группаsubgraph с названием и end
Пунктир, толстая связь, без стрелки, кружок-.->, ==>, ---, --o; подпись связи — между | и |
  • Направление (LR, TD…) NodePanel подбирает по тому, куда в среднем идут связи на доске.
  • Цвета, размеры, иконки, статусы, чек-листы и комментарии в текст не попадают — у Mermaid для них нет места.
  • Знаки, которые сломали бы текст, — кавычки, #, <, >, |, % — пишутся кодами вроде #quot;. При вставке обратно они снова станут знаками.
  • Копировать может каждый, кто видит доску, — и «Только просмотр», и гость по публичной ссылке.

Что не поддерживается и пределы#

  • Только блок-схемы — flowchart и graph. Другие диаграммы Mermaid (sequenceDiagram, erDiagram, classDiagram, gantt и остальные) окно не вставляет и честно об этом пишет.
  • Оформление пропускается: classDef, class, style, linkStyle и ::: — цвета на доске свои, окно один раз предупредит. После вставки перекрасьте блоки в панели свойств.
  • click не переносится никогда: ни ссылки, ни вызовы из схемы на доску не попадают — это защита от чужих ссылок в скопированном тексте. Ссылку на карточку можно добавить руками.
  • Новые формы через @{ shape: … } пока не поддерживаются — такой блок станет прямоугольником.
  • Формы, которых нет на доске, — цилиндр, шестиугольник, параллелограмм, флажок — становятся прямоугольниками, крестик на конце связи — стрелкой.
  • Группа в группе становится отдельной рамкой поверх внешней.
  • Пределы за одну вставку: до 500 блоков вместе с группами, до 1 000 связей, текст до 200 000 знаков, вложенность групп — до 10 уровней. Больше — окно скажет, что схема слишком большая: вставьте её частями.
  • Длинные надписи обрезаются: у блока и группы — до 200 знаков, у связи — до 120, имя блока — не длиннее 200 знаков. Об обрезке окно предупредит.

Частые ошибки и как их исправить#

Окно не молчит: у каждого замечания есть номер строки и кусок текста, на котором разбор споткнулся. Строка с ошибкой пропускается, остальные вставятся. Вот что чаще всего идёт не так.

Частые ошибки в тексте Mermaid
Что написалиЧто скажет окноКак исправить
Стрелка из одного дефиса: start[Старт] -> finish[Финиш]«Строка 2: Не понял стрелку» ->Дефиса два: -->
Лишний знак в стрелке: start[Старт] -x-> finish[Финиш]«Строка 2: Не понял стрелку» -x->Стрелки бывают только такие: -->, ---, -.->, ==>, <-->, --o
Пробел в имени: Мой блок --> Конец«Строка 2: Не понял» блокИмя без пробелов, текст — в надпись: my[Мой блок] --> finish[Конец]
Не закрыта скобка: start[Старт --> finish«Строка 2: Не закрыта скобка» [СтартЗакройте надпись той же скобкой: start[Старт] --> finish
Не закрыта кавычка в надписи«Строка 2: Не закрыта кавычка»Кавычки — парами: открыли перед текстом, закрыли после
Скобка внутри надписи без кавычек«Строка 2: Не понял» )Возьмите надпись в кавычки — см. урок 8
Группу не закрыли словом end«Строка 4: Не хватает «end» у группы — закрыли сами» teamОкно закроет её само, но лучше дописать end — иначе в группу попадёт всё, что ниже
Нет первой строки flowchart«Строка 1: Первая строка — «flowchart TD» или «graph LR»: так Mermaid понимает, что это блок-схема. Сейчас» AПервой строкой — flowchart TD или flowchart LR
Это другая диаграмма«Строка 1: Пока поддерживаются блок-схемы graph/flowchart, а это другой вид диаграммы» sequenceDiagramВставляются только блок-схемы. Последовательность шагов можно переписать как flowchart

Предупреждения (жёлтые) — не ошибки: схема вставится, просто что-то будет не так, как в Mermaid. Например, для style и click окно скажет одно и то же:

Mermaid
flowchart LR
  start[Старт] --> finish[Финиш]
  style start fill:#f9f
  click finish href
Окно покажет: 2 блока · 1 связь · Слева направо и замечание «Строка 3: Оформление и click пропускаются: цвета на доске свои, ссылки из схемы не переносятся» style.

Советы#

  • Начните с примера. Пустое окно → «Вставить пример» → поменяйте надписи на свои. Так быстрее, чем с нуля.
  • Имена — короткие и латиницей: start, check, pay. NodePanel понимает и русские имена, но латиница надёжнее, если тот же текст потом пойдёт в GitHub или другой редактор.
  • Надпись — один раз, при первом упоминании блока, дальше — только имя. Так меньше опечаток и случайных переименований.
  • Одна строка — одна мысль. Развилку и её ветки — отдельными строками: замечание окна сразу укажет, где ошибка.
  • Схему из нейросети проверяйте в окне. Справа видно, сколько получится блоков и всё ли понятно, — до того, как схема попадёт на доску.
  • После вставки это обычная доска. Двигайте блоки, меняйте цвета и формы, добавляйте стикеры и фото, нажмите «Разложить схему автоматически», если блоков стало больше. Текст Mermaid при этом не меняется — когда нужно, скопируйте доску заново.

Статьи блога по теме#

Вопросы и ответы#

Нужно ли знать Mermaid, чтобы вставить схему на доску?

Нет. Достаточно первой строки flowchart LR и строк вида a --> b. Девяти коротких уроков в этом руководстве хватает, чтобы писать процессы, архитектуру и пути пользователя. А если текст уже есть, например в README или в ответе нейросети, его можно просто вставить.

Сохраняется ли связь между текстом и доской?

Нет. Вставка создаёт обычные блоки и связи, дальше доска живёт своей жизнью. Чтобы обновить текст в документации, скопируйте доску снова через «Скопировать как Mermaid».

Почему после вставки блоки стоят не так, как в GitHub?

Mermaid не хранит координаты: каждая программа раскладывает схему сама. NodePanel раскладывает её по направлению из первой строки, а дальше блоки можно сдвинуть руками или разложить автоматически.

Не нашли ответ? Напишите нам из приложения: пункт «Помощь» в боковой панели есть на каждом экране после входа. Ответ придёт на почту вашего аккаунта.