Mermaid Tutorial

Posted by Andy Feng on June 28, 2025

Introduction

Mermaid 是一个基于 JavaScript 的开源图表生成工具,它允许您使用简单的文本语法创建各种图表,并自动渲染成可视化图形。主要特点包括:

  • 文本定义图表:用类似 Markdown 的语法编写图表
  • 自动布局:无需手动调整元素位置
  • 多图表支持:支持类图、流程图、时序图、甘特图等
  • 跨平台:可在各种支持 JavaScript 的环境中使用
pie
    title Mermaid 图表类型占比
    "流程图" : 35
    "类图" : 25
    "时序图" : 20
    "其他" : 20

How to generate diagram

这种语法之所以能生成图表,是因为:

  1. 文本解析:Mermaid 解析器(基于 ANTLR 或自定义解析器)将文本转换为抽象语法树(AST)
  2. 布局计算:自动计算节点位置和连线路径(Dagre 等图形布局库)
  3. SVG渲染:最终输出为可缩放矢量图形
    flowchart TB
     A[Mermaid代码] --> B[解析器]
     B --> C[抽象语法树\nAST]
     C --> D[布局引擎]
     D --> E[SVG生成]
     E --> F[HTML渲染]
    

    核心图表类型

| 图表类型 | 语法示例 | 用途 | | | ——- | —————————– | —— | —– | | 流程图 | graph TD; A-->B | 展示流程步骤 | | | 类图 | classDiagram; A < | -- B | 展示类关系 | | 时序图 | sequenceDiagram; A->>B: 消息 | 展示交互时序 | | | 甘特图 | gantt; section 任务 | 项目管理 | | | 饼图 | pie; "A": 30 | 比例分布 | | | 状态图 | stateDiagram; [*] --> State | 状态转换 | |

How to use

Flowchart

graph LR
    A[开始] --> B{条件}
    B -->|是| C[执行操作]
    B -->|否| D[结束]
    C --> 数据库
    D --> 数据库

例子

---
title: Node with text
---
flowchart LR
    id1[This is the text in the box]
---
title: Node with text
---
flowchart LR
    id1[This is the text in the box]

Direction

define direction of the Flowchart.

  • TB - Top to bottom
  • TD - Top-down/ same as top to bottom
  • BT - Bottom to top
  • RL - Right to left
  • LR - Left to right
    flowchart TD
      Start --hello --> Stop
    
    flowchart TD
      Start --hello --> Stop
    
    flowchart LR
      Start --> Stop
    
    flowchart LR
      Start --> Stop
    

    Text

    Use double quotes and backticks “ text ” to enclose the markdown text. Use " to enclose the unicode text.

    ---
    config:
    flowchart:
      htmlLabels: false
    ---
    flowchart LR
      markdown["`This **is** _Markdown_`"]
      newLines["`Line1
      Line 2
      Line 3`"]
      id["This ❤ Unicode"]
      markdown --> newLines
      newLines --> id
    
    ---
    config:
    flowchart:
      htmlLabels: false
    ---
    flowchart LR
      markdown["`This **is** _Markdown_`"]
      newLines["`Line1
      Line 2
      Line 3`"]
      id["This ❤ Unicode"]
      markdown --> newLines
      newLines --> id
    

    Sequence Diagram

    Class Diagram

    classDiagram
      Animal <|-- Duck
      Animal <|-- Cat
      Animal : +int age
      Animal : +String name
      Animal : +eat()```
    Sequence diagram
    ```mermaid
    sequenceDiagram
      Alice->>John: 你好!
      John-->>Alice: 你好吗?
      Alice->>John: 很好!
    

    State Diagram

ERD Diagram

Gantt

Pie Chart

Mindmaps

网页中集成

// 在网页中集成
import mermaid from 'mermaid';

mermaid.initialize({
  startOnLoad: true,
  theme: 'default',
  flowchart: { useMaxWidth: false }
});

// 手动渲染特定元素
mermaid.init(undefined, '.mermaid');

Editors

Mermaid 编辑器列表(Web/桌面端对比)

| 工具名称 | 运行平台 | 特点 | 支持功能 | 是否免费 | 链接 | | ———————– | —— | —————— | ——— | —– | ———————————————————————————- | | Mermaid Live Editor | Web | 官方在线版,实时渲染 | 基础图表 | 是 | 访问 | | Mermaid Chart | Web | 增强版在线编辑器,AI生成 | 协作、版本控制 | 免费+付费 | 访问 | | VS Code + Mermaid插件 | 桌面 | 代码编辑器集成,Markdown预览 | 全功能支持 | 是 | 插件 | | Obsidian | 桌面 | 本地笔记软件内置支持 | 实时预览+导出 | 是 | 官网 | | Typora | 桌面 | 简洁Markdown编辑器 | 导出为图片/PDF | 付费 | 官网 | | GitLab/GitHub | Web | 原生支持渲染Mermaid代码块 | 仅查看(无编辑) | 是 | - | | Mermaid CLI | 桌面 | 命令行工具,批量生成图表 | 自动化渲染 | 是 | 文档 | | JupyterLab | 桌面/Web | 数据科学笔记本集成 | 交互式图表 | 是 | 插件 |

文本驱动图表工具

|工具名称|类型|核心优势|局限性|适用场景|是否开源| |—|—|—|—|—|—| |PlantUML|文本生成|专业的UML支持,语法严谨|学习曲线陡峭,需Java环境|软件架构设计|✅| |Graphviz|DOT语言|复杂网络关系可视化,自动布局强大|需编写DOT文件,交互性弱|系统拓扑图/依赖关系|✅| |D2|新兴语言|语法更直观,自动布局优秀|生态尚未成熟|技术文档/系统架构|✅| |Nomnoml|文本|极简类图,在线即用|功能单一|快速草图设计|✅|

在线Web图表工具

免费 Web 绘图工具对比表

|工具名称|特点|优点|缺点|适用场景| |—|—|—|—|—| |Excalidraw|- 手绘风格白板
- 开源+端到端加密
- 协作实时编辑|✅ 极简设计,适合草图
✅ 完全免费,无账号要求
✅ 支持导出为PNG/SVG|❌ 无高级图形库
❌ 缺少流程图自动化布局|技术讨论、头脑风暴、快速原型设计| |draw.io|- 专业级图表工具
- 支持Mermaid导入
- 多模板(AWS/架构图等)|✅ 功能全面,支持复杂图表
✅ 完全免费,无订阅限制
✅ 离线可用(桌面版)|❌ 界面稍复杂
❌ 手绘风格需手动调整|技术文档、系统架构图、UML设计| |tldraw|- 极简白板工具
- 开源+AI辅助
- 支持插件扩展|✅ 轻量级,响应快
✅ 支持本地存储
✅ 可自托管|❌ 模板较少
❌ 协作功能较弱|个人笔记、简单图表绘制| |Diagrams.net (draw.io 同源)|- 同draw.io功能
- 隐私优先(数据本地处理)|✅ 无云端存储,隐私性好
✅ 支持中文界面|❌ 功能与draw.io完全一致,无差异|注重隐私的企业用户| |Miro (免费版)|- 在线协作白板
- 丰富模板库
- 支持第三方集成|✅ 团队协作功能强
✅ 模板资源丰富|❌ 免费版有文件数量限制
❌ 非开源,隐私性一般|团队协作、敏捷开发看板|

关键对比维度

  1. 设计风格
    • 手绘风:Excalidraw > tldraw > draw.io
    • 专业风:draw.io > Miro > Excalidraw
  2. 协作功能
    • 实时协作:Miro > Excalidraw ≈ draw.io
    • 隐私性:Diagrams.net > Excalidraw > Miro
  3. 技术集成
    • 支持Mermaid:draw.io(需手动粘贴代码)
    • 开发者友好:Excalidraw(开源可自托管)
  4. 导出格式
    • 通用性:均支持 PNG/SVG,draw.io 额外支持 PDF/VSDX

      推荐选择

  5. 画技术草图/原型 → Excalidraw
  6. 专业架构图/UML → draw.io
  7. 团队协作白板 → Miro(免费版)
    • 注意:免费版最多 3 个可编辑面板
  8. 隐私优先需求 → Diagrams.net

    访问链接