Схема пишется не только на mermaid. Одиннадцать языков, и у каждого своя сила: один рисует нарядно, другой знает UML целиком, третий строит график по данным. Язык называется один раз, при создании схемы; правки и адреса от него не зависят.
D2: вид «от руки» d2
Самый нарядный из всех. Умеет рисовать так, будто набросано на салфетке, — годится для черновика, который ещё обсуждают. Картинку для переписки служба делает сама: сам он отдаёт только вектор.
исходник
заявка: Заявка -> проверка: Проверка документов
проверка -> решение: Решение
решение -> выдача: Выдача {
style.stroke-dash: 3
}
График по данным (Vega-Lite) vegalite
Другой класс задач целиком: не связи между сущностями, а ЧИСЛА. Столбцы, линии, точки — то, чего mermaid почти не умеет. Данные пишутся прямо в схему.
исходник
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"data": {
"values": [
{
"месяц": "май",
"сделок": 12
},
{
"месяц": "июнь",
"сделок": 19
},
{
"месяц": "июль",
"сделок": 31
},
{
"месяц": "август",
"сделок": 27
}
]
},
"mark": {
"type": "bar",
"cornerRadiusEnd": 4
},
"encoding": {
"x": {
"field": "месяц",
"type": "nominal",
"sort": null,
"axis": {
"labelAngle": 0
}
},
"y": {
"field": "сделок",
"type": "quantitative"
},
"color": {
"value": "#6366f1"
}
}
}
PlantUML: разговор во времени plantuml
Самый широкий по видам язык: UML целиком, C4, классы, состояния. Здесь — тот же разговор во времени, что умеет и mermaid, но с оформлением самого движка.
исходник
@startuml
actor Клиент
participant "Служба схем" as S
database Хранилище
Клиент -> S: присылает схему
S -> Хранилище: сохраняет проверенной
Хранилище --> S: короткий адрес
S --> Клиент: ссылка на картинку
@enduml
Graphviz: точная раскладка graphviz
Когда узлов много и важно, чтобы они легли аккуратно. Единственный из всех, кто отдаёт сразу все форматы картинок.
исходник
digraph G {
rankdir=LR;
node [shape=box style="rounded,filled" fillcolor="#eef2ff" color="#6366f1" fontname="DejaVu Sans"];
edge [color="#6366f1" fontname="DejaVu Sans"];
"Заявка" -> "Проверка" -> "Решение";
"Проверка" -> "Отказ" [label="не хватает" style=dashed];
}
DBML: устройство базы данных dbml
Таблицы, поля и связи между ними — так, как их обычно и описывают. 🔴 Имена здесь только латиницей: замерено 26.08.2026, кириллица в имени таблицы или поля не принимается. По-русски пишутся пояснения.
исходник
Table clients {
id int [pk, note: 'Номер клиента']
name varchar [note: 'Имя']
created_at timestamp
}
Table orders {
id int [pk]
client_id int [ref: > clients.id]
total decimal [note: 'Сумма заказа']
}
Structurizr: устройство системы по C4 structurizr
Люди, системы и связи между ними — тот самый взгляд «с высоты», с которого начинают разбор архитектуры. 🔴 Имена только латиницей, как и в DBML; подписи в кавычках — по-русски. И обязателен хотя бы один вид: без него схема считается пустой.
исходник
workspace "Схемы" {
model {
agent = person "Агент"
store = softwareSystem "Хранилище схем" {
api = container "Служба" "Bun + Hono"
renderer = container "Рисовальщик"
}
agent -> api "присылает схему"
api -> renderer "просит картинку"
}
views {
container store {
include *
autolayout lr
}
}
}
Svgbob: схема прямо в тексте svgbob
Рисуется обычными знаками — плюсами, чёрточками, стрелками, — и превращается в аккуратную картинку. Удобно тем, что исходник читается и без рисования.
исходник
+---------+ +----------+
| Заявка +----->+ Проверка |
+---------+ +----+-----+
|
v
+----------+
| Готово |
+----------+
WaveDrom: сигналы во времени wavedrom
Совсем другая задача: что происходит на каждом такте. Нужна редко, но заменить её нечем.
исходник
{
"signal": [
{
"name": "такт",
"wave": "p......"
},
{
"name": "запрос",
"wave": "0.1..0."
},
{
"name": "ответ",
"wave": "0...1.0"
}
]
}