更新时间:2026-07-09
这是一篇给 Mermaid 新手和文档常写者准备的简明教程。它不要求你先懂 UML,不要求你有绘图软件会员,也不要求你为了画一张流程图先修炼成架构图大师。
目标很朴素:让你从第一张能跑的图开始,逐步学会流程图、时序图、状态图、ER 图、计划图和 Git 图,最后知道怎么把 Mermaid 放进真实文档流程里。
先说结论:Mermaid 不是在线版 Visio,也不是给文档加点装饰。它更像 Markdown 里的画图语法:你写一段文本,平台把它渲染成图。文本能复制、能搜索、能 review、能进 Git;图也就不再是那种“看起来很正式,但没人知道源文件在哪里”的遗迹。
你写的是代码,看到的是图。图跟着文档一起维护,改动能被审查,过期也更容易修。以后再遇到流程变化,不用围着一张旧截图猜“当年这里到底想表达什么”。
•你经常写 README、方案文档、接口说明、PR 描述或复盘文档。
•你想让流程图、时序图、状态图、ER 图和计划图能跟着文本一起维护。
•你不想为了画一张小图打开一个大型绘图软件,然后被工具栏教育人生。
•你希望 AI 或同事生成的图能被审查、修改和复用,而不是变成一张无法编辑的图片。
如果你只是偶尔画一张会议白板图,也能看;但这篇的重点是:如何把 Mermaid 用进真实文档流程。
Mermaid 的核心就三步:
1.声明你要画什么图。
2.写清楚有哪些东西,以及它们之间是什么关系。
3.放进 mermaid 代码块里,让支持 Mermaid 的平台渲染。
最小例子长这样:

翻译成人话就是:
•flowchart LR:我要画流程图,方向从左到右。
•A[需求]:节点 ID 是 A,显示文字是“需求”。
•-->:画一条箭头。
•B --> C:从“实现”走到“验证”。
这就是 Mermaid 的第一口饭。先别急着加主题、图标和复杂布局。刚开始最该关心的不是颜色和边框,而是你下次打开文档时,能不能立刻看懂“事情怎么流动”。
如果你从来没写过 Mermaid,先按这个顺序走。不要跳。跳步骤这种事通常发生在“我就改一行配置”的前五分钟。
1.打开一个支持 Mermaid 的 Markdown 环境,比如 GitHub、GitLab、部分文档站、Obsidian、Notion 插件环境,或者 Mermaid Live Editor。
2.复制下面这段代码。
3.看它是否能渲染成图。
4.改一个节点文字,再看图是否跟着变。

如果能显示,恭喜,你已经越过了 Mermaid 最重要的门槛:它不是靠鼠标拖来拖去,而是靠文本描述关系。
如果不能显示,先别怀疑自己。常见原因是:
•当前平台不支持 Mermaid。
•代码块语言不是 mermaid。
•平台支持的 Mermaid 版本较旧。
•复制时多了奇怪空格、少了反引号,或者把外层 Markdown 代码块也一起复制进去了。
Mermaid 的快乐很朴素:代码对了,它就画;代码错了,它会用一种很像谜语的方式提醒你。
Mermaid 初学者最容易被各种括号吓住。其实先记住常用的几个就够。

上面这张图包含了入门最常用的语法:
| A[文本] | |
| A(文本) | |
| A{文本} | |
| A[(文本)] | |
| A --> B | |
| flowchart TD | |
| flowchart LR |
节点 ID 和显示文字可以分开:

这里的 userInput 和 api 是给 Mermaid 看的稳定 ID,“用户输入一段很长但仍然需要显示的文案”和 API 校验 是给人看的文字。ID 建议用英文,显示文字可以用中文。这样后面连线更清楚,不会在一堆中文节点名里绕晕。
你可以把 Mermaid 语法理解成“点名 + 连线”:
•先给东西起名。
•再说明它们怎么连接。
•最后补一点方向、标签和分组。
这就够你画出 60% 的日常文档图了。剩下 40% 是慢慢发现“原来这个坑我也会踩”。
Mermaid 是一个基于 JavaScript 的图表工具,用类似 Markdown 的文本定义生成图形。官方文档把 Mermaid 分成三件事:部署、语法和配置。普通写作者最先要学的是语法;平台或网站维护者才需要深入部署和全局配置。
Mermaid 支持很多图形。刚开始别贪多,先记住这些常用选择:
| flowchart TD | ||
| sequenceDiagram | ||
| stateDiagram-v2 | ||
| erDiagram | ||
| gantt | ||
| gitGraph | ||
| mindmap | ||
| timeline | ||
| pie |
判断方式可以更直接:
•你在说“先做 A,再做 B,遇到 C 怎么办”:用流程图。
•你在说“浏览器调用 API,API 调数据库,再返回”:用时序图。
•你在说“草稿、审核中、已发布、已归档之间怎么流转”:用状态图。
•你在说“作者、文章、评论、分类之间怎么关联”:用 ER 图。
•你在说“一周做什么,哪天完成”:用甘特图或时间线。
Mermaid 很适合放进 README、方案文档、接口说明和复盘文档里,用来解释流程、调用、状态、数据关系和计划。它不太适合做像素级 UI 设计稿、复杂统计图表,或者那种试图解释整个系统、所有边界、全部历史包袱和未来三年规划的巨型大图。
Mermaid 最好的使用姿势是:一张图只解释一个问题。如果你发现自己正在把第 35 个节点塞进图里,先停一下。不是 Mermaid 不努力,是这张图可能已经从“帮助理解”变成“下周的你也不想重读”了。
选错图会让语法变别扭。别用流程图硬画状态机,也别用时序图硬画组织结构。工具没有错,只是我们有时会忍不住拿一把螺丝刀去煮面。
流程图是 Mermaid 最常用的入口。它用节点和边表达“事情怎么走”。

这里有几件事值得记:
•flowchart 和 graph 都可以声明流程图,日常建议统一用 flowchart。
•TD / TB 是从上到下,LR 是从左到右,RL 是从右到左,BT 是从下到上。
•-->|标签| 给箭头加说明,-.-> 是虚线箭头,==> 是粗箭头。
•节点 ID 和显示文字可以分开,复杂文案最好写在括号或引号里。
一个更像真实文档的例子:

流程图最容易犯的错是把不同抽象层揉在一起。比如“用户点击按钮”“服务端鉴权”“数据库索引策略”都很重要,但它们不一定适合出现在同一层图里。图不是收纳箱,不能什么都往里塞。
时序图适合解释“谁和谁说了什么,顺序是什么”。它比流程图更适合 API、消息队列、登录、支付、发布等交互场景。

常用语法:
•participant A as API:给参与者起一个短 ID 和显示名。
•->>:发送消息。
•-->>:返回消息。
•autonumber:自动编号,适合接口流程说明。
•Note over A,B: 文案:在参与者上方加说明。
•alt / else / end:表达分支。
•loop / end:表达循环。
带分支的例子:

时序图不要写成接口日志回放。图里只保留理解流程必须知道的消息,错误码、字段名和 payload 细节放在正文或表格里。图负责让你看懂路,正文负责让你看懂规则。两者分工明确,之后维护起来会少一点精神损耗。
状态图适合解释一个对象能处在哪些状态,以及状态之间允许怎么转换。它比文字里的“可以、可能、一般情况下”更可靠,因为非法路径一眼就能看出来。

适合用状态图的场景:
•订单、文章、任务、工单、账号等有明确生命周期的对象。
•权限或审核状态比较容易绕晕。
•你需要和产品、后端、前端确认“哪些流转被允许”。
•你想在测试用例里覆盖关键状态跳转。
状态图的好处是它会逼你把“没有说清楚的状态”说清楚。比如“审核中能不能直接归档”“已发布能不能改回草稿”,这种问题靠散文很容易漏,靠状态图很难装作没看见。
ER 图适合表达实体之间的关系,不适合把数据库所有字段原样搬进文档。官方文档也提醒,ER 图可以从抽象逻辑模型一直画到物理表结构;写团队文档时,通常只放关键实体和关键字段就够。

关系符号刚开始看着像密码,其实规律很简单:中间的 -- 是连线,两边的符号分别贴着左右两个实体,表示这一侧的数量约束。注意,多的一侧在左边和右边写法会镜像,所以不要只背一个形状。
| }o | o{ | |
常见组合可以这样读:
| }o--o{ |
冒号后面的文字是关系说明,比如 : writes、: has、: belongs_to。所以 ARTICLE }o--|| CATEGORY : belongs_to 可以读成:多篇或零篇文章属于一个分类;ORDER ||--|{ ORDER_ITEM : contains 可以读成:一个订单包含一个或多个订单项。嗯,关系符号看起来像咒语,但其实是很务实的缩写。
ER 图要克制。别把每个 created_at、updated_at 都画进去,除非它们正是你要解释的重点。字段越堆越多,图就越像一份很努力但很难读完的“数据库简历”。
甘特图适合表达“某段时间内做什么”。它不是项目管理系统,但很适合放在方案文档、发布说明和里程碑计划里。

甘特图里的任务元数据用冒号和逗号分隔。拿这一行举例:
梳理资料 :done, prep, 2026-07-01, 2d它可以拆成四段:
•梳理资料:显示在图上的任务名称。
•done:任务状态,可省略;常见状态还有 active、crit、milestone。
•prep:任务 ID,后面可以用 after prep 引用它。
•2026-07-01, 2d:开始时间和持续时间;也可以把开始时间写成 after prep。
常见标记有:
•done:已完成。
•active:进行中。
•crit:关键任务。
•milestone:里程碑。
•after taskId:接在某个任务后面。
如果你只想表达事件顺序,不关心持续时间,可以用时间线:

如果你想表达层级结构,可以用 Mindmap。它适合快速整理主题和分支,不适合放太多细节。

注意,Mindmap 和 Timeline 在官方文档里带有实验性质提示,具体平台支持可能会滞后。公开文档如果要保证兼容,优先使用流程图、时序图、状态图、ER 图和甘特图这些更常见的图形。
GitGraph 适合解释分支、提交和合并。它对开发流程文档很有用,尤其是团队约定 release、hotfix、feature branch 的时候。

常用命令很少:
•commit:在当前分支提交。
•branch feature:创建并切到新分支;后面的提交会落在这个新分支上。
•checkout main:切换分支。
•merge feature:把指定分支合并到当前分支。
Git 图不要追求还原真实历史。真实历史可以用 git log --graph 看,文档里的 GitGraph 应该表达策略,而不是把每次临时提交都供起来展览。
Mermaid 支持主题和配置。官方文档列出的内置主题包括 default、neutral、dark、forest 和 base;其中 base 是用于自定义变量的基础主题。
单张图的配置建议用 frontmatter。旧的 directives 从 Mermaid v10.5.0 开始已被官方标记为 deprecated,新的文档不要再主动用它。

如果你是在网站里集成 Mermaid,全局配置通常由站点代码里的 mermaid.initialize() 控制;如果你只是写 Markdown 文档,优先使用平台默认样式。图的主角是关系,不是颜色。过度配色经常让图看起来很忙,却没有多说半句话。
样式的正确使用方式是“提高可读性”,不是“证明我发现了主题配置”。一张图如果逻辑不清楚,换十套颜色也只是让它换着方式不清楚。
Mermaid 最适合放在这些地方:
•README:解释项目结构、启动流程、部署链路。
•方案文档:解释模块关系、数据流、状态机。
•PR 描述:解释本次改动前后的流程差异。
•接口文档:解释调用顺序、错误路径、重试策略。
•复盘文档:解释事故链路、时间线和修复计划。
推荐写法:
1.先用一句话说明这张图要解释什么。
2.Mermaid 图只放核心路径。
3.图下面用文字补充规则、边界和例外。
4.节点 ID 用稳定英文,显示文字可以用中文。
5.每次改业务规则时,同步改图。
6.提交前用目标平台预览,或者粘到 Mermaid Live Editor 验证。
一个文档片段可以长这样:
下面这张图只描述发布主路径,不包含导入、回滚和定时发布。
补充规则:- 已发布内容只能通过新版本修改。- 驳回必须写明原因。- 定时发布走独立任务队列,不在本图展开。图和文字要配合。只放图,你回头看时可能会猜;只放文字,又很容易迷路。两者都写一点,以后回看文档时才不用在图外脑补半天。
Mermaid 很轻,但不是没有脾气。
•不同平台内置的 Mermaid 版本可能不同。本文查阅时官方文档页面显示 11.16.0(2026-07),实际使用时请以官方文档和目标平台为准。
•语法拼错通常会直接让图失败;配置参数拼错有时可能被忽略。写完要预览。
•end 是 Mermaid 的常见块结束关键字;如果节点文字本身要显示 end,放进引号、括号或换个文案,能避免解析冲突。
•中文、空格、标点和特殊字符多的节点,尽量放进 []、(), {} 或引号里。
•一张图不要承载太多抽象层。节点太多、交叉线太多、说明太多时,拆图比调样式更有效。
•不可信用户输入不要直接拿去网页渲染。公开站点如果支持用户提交 Mermaid,要关注 Mermaid 的安全配置和沙箱策略。
•AI 生成 Mermaid 时尤其要验证。大模型很会编故事,也很会编不存在的语法。
最实用的检查清单:
•这张图不用正文解释,你能不能看出主路径?
•图里有没有和正文矛盾的状态、分支或字段?
•节点是否超过一眼能消化的数量?
•是否用了目标平台支持的图类型?
•是否在真实渲染环境里预览过?
如果这五个问题都过了,图通常不会太差。如果其中三个都没过,那不是 Mermaid 图,是一份需要被重新组织的文字。
流程图模板:

时序图模板:

状态图模板:

ER 图模板:

甘特图模板:

最后再给一个很现实的建议:写 Mermaid 时,先画丑一点但正确的图。正确的图可以慢慢变好看;错误的图就算很漂亮,也只是很漂亮地误导你和后来维护的人。
本文基于 Mermaid 官方文档整理,查阅时间为 2026-07-09。
•Mermaid About: https://mermaid.js.org/intro/
•Mermaid User Guide: https://mermaid.js.org/intro/getting-started.html
•Diagram Syntax: https://mermaid.js.org/intro/syntax-reference.html
•Flowcharts Syntax: https://mermaid.js.org/syntax/flowchart.html
•Sequence diagrams: https://mermaid.js.org/syntax/sequenceDiagram.html
•State diagrams: https://mermaid.js.org/syntax/stateDiagram.html
•Entity Relationship Diagrams: https://mermaid.js.org/syntax/entityRelationshipDiagram.html
•Gantt diagrams: https://mermaid.js.org/syntax/gantt.html
•GitGraph Diagrams: https://mermaid.js.org/syntax/gitgraph.html
•Configuration: https://mermaid.js.org/config/configuration.html
•Theme Configuration: https://mermaid.js.org/config/theming.html
•Directives: https://mermaid.js.org/config/directives.html
夜雨聆风