Как открыть файл .mmd

Файл .mmd — это текстовый файл с диаграммой Mermaid. Это не картинка и не двоичный формат: его можно открыть в любом текстовом редакторе и прочитать. Чтобы увидеть его как диаграмму, перетащите файл в рамку ниже. Он отрисуется прямо в браузере, и на сервер ничего не отправляется.

Перетащите сюда файл .mmd

Принимаются также .mermaid, .md и .txt. Файл читается в браузере и никуда не загружается.

Что такое файл .mmd

Mermaid — это текстовый синтаксис для диаграмм. Вы описываете диаграмму словами, а движок её рисует — ровно так же, как Markdown описывает форматирование, а движок выдаёт страницу. Файл .mmd содержит этот текст и ничего больше: ни оформления, ни данных изображения, ни метаданных.

В этом и весь смысл формата. Раз это текст, диаграмма может лежать в Git-репозитории рядом с кодом, который она описывает, и правка выглядит как читаемый дифф, а не как заменённый двоичный файл. Вот полноценный корректный файл .mmd:

deploy.mmd — целый файл, шесть строк
flowchart LR
    Commit[Пуш в main] --> Build[Запустить тесты]
    Build -->|успех| Deploy[Выкатить в продакшн]
    Build -->|сбой| Alert[Уведомить автора]
    Deploy --> Smoke[Дымовой тест]
    Smoke --> Done[Релиз завершён]

Чем открыть файл .mmd

Если коротко: двойным щелчком .mmd не открывается почти ничем, потому что расширение не связано ни с одним приложением. На самом деле вам нужно что-то, что умеет рисовать Mermaid. Ниже то, что я проверил, и то, где это не работает.

Эта страницаОткрывает

Рисует файл сразу

Перетащите файл в рамку выше — и получите диаграмму. Шага загрузки нет: файл читается в браузере через File API и рисуется локально, поэтому способ подходит и для диаграмм, которые нельзя передавать third-party сервисам.

Если нужно не просто посмотреть, а изменить диаграмму, воспользуйтесь ссылкой под предпросмотром, чтобы открыть её в редакторе.

Любой текстовый редакторОткрывает

Показывает исходник, а не диаграмму

Блокнот, Notepad++, vim — что угодно. Файл .mmd — это текст в UTF-8, так что исходник вы увидите сразу. Диаграммы не увидите, и ничего при этом не сломано: внутри файла просто нет изображения.

Это самый быстрый способ проверить, действительно ли присланный файл является Mermaid: откройте его и посмотрите, начинается ли первая непустая строка с ключевого слова диаграммы — flowchart, sequenceDiagram, classDiagram, stateDiagram-v2, erDiagram или gantt.

GitHubНе открывает

Рисует блоки ```mermaid внутри Markdown, но не отдельные файлы .mmd

GitHub рисует Mermaid внутри огороженных блоков кода. В документации точно перечислено где: issues, Discussions, pull request'ы, вики и файлы Markdown. Отдельного файла .mmd в этом списке нет, и при открытии в файловом браузере репозитория показывается исходный текст.

Значит, чтобы диаграмма была видна на GitHub, она должна лежать внутри блока ```mermaid в файле .md, а не в отдельном .mmd. Держать .mmd как исходник и дублировать то же содержимое в README — распространённое и вполне разумное дублирование.

GitLabНе открывает

Рисует блоки ```mermaid, но не отдельные .mmd, и на более старом Mermaid

Картина та же, что у GitHub: Mermaid рисуется в огороженных блоках внутри Markdown, задач, merge request'ов и вики, но отрисовка отдельного файла .mmd нигде не задокументирована.

Есть и второй момент, который стоит знать, потому что он вызывает настоящую путаницу. GitLab.com заявляет поддержку Mermaid версии 10. Этот сайт работает на 11.12.2. Синтаксис, добавленный после десятой версии, рисуется здесь и падает там — обычно это и есть объяснение «в просмотрщике работает, а в нашем GitLab нет». У self-managed GitLab есть и третья ловушка: если заголовок Cross-Origin-Resource-Policy выставлен в same-site или same-origin, диаграммы Mermaid молча перестают отображаться — ни ошибки, ни диаграммы.

.mmd, .mermaid и .md

.mmd и .mermaid — одно и то же. Оба содержат только исходник Mermaid, и все известные мне инструменты, принимающие одно, принимают и другое. .mmd короче и распространённее; официальная утилита командной строки использует его по умолчанию. Выберите одно и придерживайтесь его внутри проекта — технических последствий у выбора нет.

.md — это уже другое по существу. Файл Markdown — это документ, который может содержать диаграмму Mermaid, обёрнутую в блок, начинающийся с трёх обратных кавычек и слова mermaid. Диаграмма здесь — фрагмент внутри большего текста.

Именно это различие — самая частая причина, по которой файл не рисуется, и работает оно в обе стороны. Вставьте содержимое .md в просмотрщик Mermaid — и получите ошибку, потому что строка ограждения не является синтаксисом Mermaid. Сохраните голую диаграмму Mermaid в .md без ограждения — и GitHub покажет её как абзац текста. Правило простое: .mmd должен начинаться с ключевого слова диаграммы, а в .md диаграмма должна лежать внутри огороженного блока.

Этот просмотрщик принимает .mmd, .mermaid, .md и .txt, но всё прочитанное трактует как чистый Mermaid. Если вы перетаскиваете Markdown с текстом вокруг диаграммы, сначала уберите всё, кроме самой диаграммы.

Не рисуется — в чём на самом деле дело

Сообщения об ошибках у Mermaid точные, но недружелюбные. Полезный приём — читать самый конец сообщения: после «got» Mermaid называет токен, на котором споткнулся, и этот токен указывает на проблему гораздо лучше, чем номер строки. Каждый случай ниже воспроизведён на mermaid 11.12.2: сломанный вариант действительно падает, а исправленный действительно рисуется.

Что вы видите

No diagram type detected matching given configuration for text: ```mermaid

Почему

Вы скопировали диаграмму из файла Markdown или из переписки вместе с ограждением. Три обратные кавычки — это Markdown, а не Mermaid, поэтому разборщик до диаграммы не добирается.

Решение

Удалите открывающую строку ```mermaid и закрывающую ```. Файл должен начинаться с ключевого слова диаграммы.

Ошибка
```mermaid
flowchart TD
    A[Начало] --> B[Конец]
```
Исправлено
flowchart TD
    A[Начало] --> B[Конец]

Что вы видите

Parse error, сообщение заканчивается на: got 'PS'

Ошибка заканчивается на: got 'PS'

Почему

Открывающая круглая скобка внутри подписи узла. В Mermaid круглые скобки — синтаксис формы: A(текст) означает узел со скруглёнными углами, поэтому голая скобка внутри квадратных читается как начало формы.

Решение

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

Ошибка
flowchart TD
    A[Вызвать списание(заказ)] --> B[Конец]
Исправлено
flowchart TD
    A["Вызвать списание(заказ)"] --> B[Конец]

Что вы видите

Parse error в строке, где вы назвали узел

Почему

В идентификаторе узла есть пробел. По-русски этого легко не заметить, потому что естественные названия — словосочетания: «сервис авторизации», «база пользователей». Идентификатор — токен перед стрелкой, пробел его обрывает, и остаётся лишнее слово, которое некуда деть.

Решение

Дайте узлу идентификатор из одного слова, а читаемый текст поместите в подпись. Кириллица в идентификаторе работает; мешает только пробел.

Ошибка
flowchart TD
    сервис авторизации --> база данных
Исправлено
flowchart TD
    auth[Сервис авторизации] --> db[База данных]

Что вы видите

Parse error, сообщение заканчивается на: got 'STR'

Ошибка заканчивается на: got 'STR'

Почему

Двойная кавычка внутри подписи узла. Разборщик считает её началом строки в кавычках, а затем натыкается на квадратную скобку подписи там, где ждал закрывающую кавычку.

Решение

Возьмите подпись целиком в двойные кавычки, а внутри используйте «ёлочки» или запишите кавычку как HTML-сущность #quot;.

Ошибка
flowchart TD
    A[Он сказал "привет"] --> B[Конец]
Исправлено
flowchart TD
    A["Он сказал «привет»"] --> B[Конец]

Что вы видите

Parse error, сообщение заканчивается на: got 'end'

Ошибка заканчивается на: got 'end'

Почему

Вы использовали end как идентификатор узла. В нижнем регистре end закрывает подграф, поэтому разборщик видит конец блока там, где ожидал узел. Случается часто: следуя англоязычным примерам, последний узел по привычке называют end, даже если вся схема на русском.

Решение

Напишите с заглавной буквы или дайте узлу другой идентификатор, а слово перенесите в подпись. `Конец` проблем не создаёт.

Ошибка
flowchart TD
    A[Начало] --> end
Исправлено
flowchart TD
    A[Начало] --> Конец[Завершено]

Что вы видите

Рисуется, но в диаграмме состояний одно состояние распалось на два

Почему

Пробел внутри идентификатора состояния. В отличие от блок-схемы, диаграмма состояний не возражает: она создаёт отдельный прямоугольник на каждое слово. Измерено — `[*] --> Ожидает оплаты` даёт два состояния, `Ожидает` и `оплаты`, и только первое висит на стрелке. По-русски почти ни одно состояние не умещается в одно слово, поэтому ошибка встречается постоянно, а сигнала о ней нет.

Решение

Объявите состояние через `state "Подпись" as id` и ссылайтесь на него только по идентификатору.

Ошибка
stateDiagram-v2
    [*] --> Ожидает оплаты
    Ожидает оплаты --> Закрыт
Исправлено
stateDiagram-v2
    state "Ожидает оплаты" as ожидание
    [*] --> ожидание
    ожидание --> Закрыт

Что вы видите

No diagram type detected matching given configuration for text: sequencediagram

Почему

Ключевое слово диаграммы написано с ошибкой или не в том регистре. Ключевые слова Mermaid чувствительны к регистру: sequenceDiagram работает, sequencediagram — нет. То же касается stateDiagram-v2 и erDiagram.

Решение

Исправьте регистр. Учтите, что graph по-прежнему принимается как устаревший синоним flowchart, так что этот старый синтаксис проблемой не является.

Ошибка
sequencediagram
    Клиент->>API: Привет
Исправлено
sequenceDiagram
    Клиент->>API: Привет

Что вы видите

Parse error в подписи ребра между вертикальными чертами

Почему

Скобки внутри подписи ребра. К подписи |...| применяются те же ограничения, что и к подписи узла: скобки там синтаксис, а не текст.

Решение

Возьмите подпись ребра в кавычки.

Ошибка
flowchart TD
    A -->|да (всегда)| B
Исправлено
flowchart TD
    A -->|"да (всегда)"| B

Что вы видите

Parse error в ER-диаграмме, сообщение заканчивается на: got 'NEWLINE'

Ошибка заканчивается на: got 'NEWLINE'

Почему

Связь без подписи. В отличие от ребра блок-схемы, связь в ER требует двоеточия и глагола: это не необязательно, и без них строка заканчивается слишком рано.

Решение

Добавьте двоеточие и подпись. Если в подписи есть пробел, возьмите её в кавычки.

Ошибка
erDiagram
    КЛИЕНТ ||--o{ ЗАКАЗ
Исправлено
erDiagram
    КЛИЕНТ ||--o{ ЗАКАЗ : оформляет

Что вы видите

Parse error, указывающая на последнюю строку диаграммы

Почему

Блок открыт и не закрыт: alt, opt, loop, par и subgraph требуют своего end. Mermaid сообщает о сбое там, где у него кончается ввод, поэтому номер строки указывает на конец файла, а не на незакрытый блок.

Решение

Посчитайте открытые блоки и написанные end. Если ошибка на последней строке, почти всегда дело в этом.

Ошибка
sequenceDiagram
    Клиент->>API: Запрос
    alt Всё хорошо
        API-->>Клиент: OK
Исправлено
sequenceDiagram
    Клиент->>API: Запрос
    alt Всё хорошо
        API-->>Клиент: OK
    end

Что вы видите

Lexical error on line 1. Unrecognized text.

Почему

Недопустимое направление после ключевого слова диаграммы. Блок-схемы принимают TB, TD, BT, LR и RL, и больше ничего; опечатка здесь падает на лексическом анализе, до чтения узлов.

Решение

Используйте одно из пяти допустимых направлений. TD и LR закрывают почти все случаи.

Ошибка
flowchart XY
    A --> B
Исправлено
flowchart TD
    A --> B

Что вы видите

Здесь рисуется, а в GitLab, Confluence или старом инструменте — нет

Почему

Разница версий. Этот просмотрщик работает на Mermaid 11.12.2; GitLab.com документирует версию 10, а корпоративные вики нередко отстают на годы. Синтаксис, появившийся после версии другого инструмента, разбирается здесь и падает там.

Решение

Спросите у другого движка, какая у него версия. Если написать в диаграмме одно слово info, Mermaid нарисует собственный номер версии — это быстрее, чем читать список изменений.

Исправлено
info

Отдельно стоит сказать про кодировку, потому что для русского это по-прежнему живая проблема. Эта страница и редактор читают файл как UTF-8 и снимают метку BOM, если она есть, — так что файл, сохранённый в Блокноте Windows как «UTF-8 с BOM», открывается нормально. А вот файл в Windows-1251 или KOI8-R, которые до сих пор выдают некоторые старые инструменты, придёт с испорченной кириллицей. Если вместо подписей видны бессмысленные символы, пересохраните файл в UTF-8 из своего редактора.

И последнее, что не даёт вообще никакой ошибки: на self-managed GitLab заголовок Cross-Origin-Resource-Policy, выставленный в same-site или same-origin, заставляет диаграммы Mermaid молча не отображаться. Ни сообщения, ни диаграммы, ничего на странице. Если диаграмма рисуется везде, кроме одного self-hosted стенда, смотреть надо туда.

Конвертация в PNG, SVG или PDF

Откройте файл в редакторе и воспользуйтесь кнопками экспорта. SVG сохраняет диаграмму как векторный текст, поэтому она остаётся чёткой при любом размере, а подписи можно выделять и искать: это правильный выбор для документации и для всего, что может понадобиться переэкспортировать позже. PNG — растр, экспортируется здесь в два-три раза крупнее экранного размера, чтобы держаться на плотных дисплеях; используйте его там, где SVG не принимают, то есть на практике в большинстве мессенджеров и в части вики.

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

Для всего повторяемого — шага сборки, пакета файлов, pre-commit хука — есть официальный движок командной строки @mermaid-js/mermaid-cli: он берёт тот же файл .mmd и пишет изображение напрямую, без браузера.

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

Как открыть файл .mmd онлайн?
Перетащите его в рамку в верхней части этой страницы. Он отрисуется в браузере без загрузки на сервер и без регистрации. Можно также открыть редактор и перетащить файл на панель предпросмотра.
Какой программой открыть файл .mmd?
Исходник покажет любой текстовый редактор, потому что файл — обычный текст. Чтобы увидеть диаграмму, нужно что-то, умеющее рисовать Mermaid: эта страница, редактор на этом сайте или утилита командной строки mermaid-cli. Настольного приложения, которому принадлежало бы расширение .mmd, не существует.
Файл .mmd — это то же самое, что .mermaid?
Да. Оба расширения содержат одинаковое содержимое и взаимозаменяемы. .mmd встречается чаще, и именно его по умолчанию использует официальная утилита командной строки.
Почему мой файл .mmd не рисуется на GitHub?
GitHub рисует Mermaid только внутри огороженных блоков ```mermaid в файлах Markdown, задачах, Discussions, pull request'ах и вики. Отдельный файл .mmd показывается как исходный текст. Чтобы диаграмма была видна на GitHub, поместите её в огороженный блок внутри файла .md.
Можно открыть .mmd, ничего не устанавливая?
Да, для этого страница и сделана. Отрисовка выполняется как JavaScript в вашем браузере, поэтому устанавливать нечего, и файл никогда не покидает ваш компьютер.
Вместо русских подписей — непонятные символы
Файл не в UTF-8. Эта страница читает файлы как UTF-8 и нормально понимает метку BOM, но файл в Windows-1251 или KOI8-R придёт с испорченной кириллицей. Пересохраните его в UTF-8 из своего редактора.
Здесь работает, а в нашей вики нет. Почему?
Почти всегда дело в разнице версий. Этот просмотрщик работает на Mermaid 11.12.2, а многие вики — на чём-то более старом: GitLab.com документирует версию 10. Напишите в диаграмме на другой системе слово info, чтобы она вывела свою версию.

Типы диаграмм, которые здесь можно открыть

Автор: Dominik Malsch · Обновлено:

Открыть редактор →