Mermaid vs PlantUML 活动图对比:流程语法、控制结构与选型
本文只关注活动图本身的图形表达能力。 至于 Markdown 支持、文档平台集成、生态插件、渲染服务这些整体工具差异,本文不会展开,相关内容可以看系列总览:Mermaid vs PlantUML:2026 年该选哪个图表即代码工具?。
在这个前提下,结论很清楚:如果你只是想说明一个业务流程、审批链路或系统处理步骤,Mermaid 的 Flowchart 已经足够;如果你要画更接近 UML Activity Diagram 的正式活动图,尤其是 start/stop、if/while/repeat、fork、detach、泳道和异常路径,PlantUML 更合适。
这里要先澄清一个容易混淆的点:Mermaid 官方主要提供的是 flowchart,它可以表达活动图常见的流程结构,但它不是一个完整的 UML 活动图 DSL。PlantUML 则有专门的 Activity Diagram 语法,活动、分支、循环、并行、终止和泳道都更贴近 UML 活动图语义。
更准确的判断是:
Mermaid 胜在流程表达直接。 对产品流程、用户旅程、接口处理链路和轻量技术文档来说,flowchart TD / flowchart LR 很容易读,也很容易嵌入 Markdown。只要图的重点是“步骤怎么走”,而不是“严格 UML 活动语义”,Mermaid 通常不会成为表达瓶颈。
PlantUML 胜在活动图语义完整。 它有专门的 start、stop、if/else/endif、while/endwhile、repeat/repeat while、fork/end fork、detach 和泳道语法,更适合流程较长、控制结构较多、需要正式评审或长期归档的活动图。
本文基于官方文档整理,并配合具体案例对比代码和图形效果:
Mermaid vs PlantUML 活动图核心差异
| 对比点 | Mermaid | PlantUML | 选择建议 |
|---|---|---|---|
| 基础流程节点 | 支持 | 支持 | 两者都可以 |
| 开始/结束节点 | 可用节点形状表达 | 原生 start / stop / end 控制语义 | 正式活动图 PlantUML 更清楚 |
| 条件分支 | 用菱形节点和连线表达 | 原生 if / then / else / endif | 简单分支 Mermaid 足够 |
| 循环 | 用回边表达 | 原生 while、repeat | 循环语义 PlantUML 更明确 |
| 并行流程 | 可用多条连线近似 | 原生 fork / fork again / end fork | 并发活动 PlantUML 更合适 |
| 中断/提前结束 | 用连线到结束节点表达 | 支持 stop、kill、detach 等语义 | 异常路径 PlantUML 更自然 |
| 泳道 | 可用 subgraph 近似分组 | 原生 ` | Lane |
| 注释 | 支持节点说明和文本节点 | 支持 note、floating note 等 | 复杂说明 PlantUML 更强 |
| 样式控制 | 支持节点样式、classDef、主题 | 支持 skinparam、颜色和样式规则 | 统一输出 PlantUML 更合适 |
| Markdown 友好度 | 很高 | 取决于渲染集成 | 文档内短流程 Mermaid 更轻 |
先给一句话结论:
Mermaid 更像“用流程图表达活动”;PlantUML 更像“用文本写一张正式 UML 活动图”。
Mermaid 也可以画清楚常见活动流程
很多业务活动图并不需要严格 UML 语义,只需要把流程走向讲清楚。比如一个订单提交流程:接收订单、检查库存、有货则预留库存并收款,无货则通知用户。
Mermaid 代码和图
flowchart TD
Start([Start]) --> Receive[Receive order]
Receive --> Check{Stock available?}
Check -- Yes --> Reserve[Reserve items]
Reserve --> Charge[Charge payment]
Charge --> Confirm[Confirm order]
Confirm --> Done((End))
Check -- No --> Notify[Notify customer]
Notify --> Done
PlantUML 代码和图
@startuml
start
:Receive order;
if (Stock available?) then (yes)
:Reserve items;
:Charge payment;
:Confirm order;
else (no)
:Notify customer;
endif
stop
@enduml
对这种短流程,Mermaid 的可读性很好,甚至更贴近普通读者对“流程图”的直觉。PlantUML 的优势在于语法本身更明确地表达了活动图控制结构。
PlantUML 更适合表达循环和并行活动
活动图一旦出现循环、并行和提前退出,Mermaid 仍然能画,但通常需要靠回边、额外节点和连线标签来表达。PlantUML 则可以直接使用活动图控制语法。
下面是一个风控审核流程:系统持续校验订单,如果命中风险则进入人工审核;通过后同时更新订单和发送通知。
Mermaid 代码和图
flowchart TD
Start([Start]) --> Validate[Validate order]
Validate --> Risk{Risk detected?}
Risk -- Yes --> Review[Manual review]
Review --> Approved{Approved?}
Approved -- No --> Reject[Reject order]
Reject --> Done((End))
Approved -- Yes --> ParallelStart[Continue fulfillment]
Risk -- No --> ParallelStart
ParallelStart --> Update[Update order status]
ParallelStart --> Notify[Send notification]
Update --> Join[Complete workflow]
Notify --> Join
Join --> Done
PlantUML 代码和图
@startuml
start
:Validate order;
if (Risk detected?) then (yes)
:Manual review;
if (Approved?) then (yes)
else (no)
:Reject order;
stop
endif
endif
fork
:Update order status;
fork again
:Send notification;
end fork
:Complete workflow;
stop
@enduml
为什么这个场景更适合 PlantUML?
Mermaid 可以画出近似图形,但语义不同:
- Mermaid 用多个节点和连线表达并行,PlantUML 有原生
fork语义。 - Mermaid 用指向结束节点表示提前结束,PlantUML 可以直接在分支里
stop。 - Mermaid 的循环通常要靠回边表达,PlantUML 可以使用
while或repeat。 - PlantUML 的活动图代码更像流程控制语句,长流程维护起来更稳定。
这就是 PlantUML 在活动图里的真正优势:不是“Mermaid 不能画流程”,而是 PlantUML 更适合表达活动图里的控制结构。
Mermaid 更适合轻量流程说明
如果你的目标是把产品流程、接口处理过程或团队协作步骤放进文档里,Mermaid 的 Flowchart 往往更省心。它的图形语法短,读者即使不熟悉 UML,也能很快看懂。
Mermaid 代码和图
flowchart LR
Draft[Draft requirement] --> Review{Review passed?}
Review -- No --> Revise[Revise requirement]
Revise --> Review
Review -- Yes --> Implement[Implement change]
Implement --> Verify[Verify result]
Verify --> Release[Release]
这个例子本质上也可以被理解为活动流程,但它不需要严格的 UML 活动图元素。对这种“让读者快速理解步骤”的场景,Mermaid 更轻。
活动图选择建议
选 Mermaid 写活动图,如果这张图的重点是:
- 展示产品流程、审批流程、接口处理步骤。
- 图的结构主要是节点、判断和连线。
- 需要放在 README、Markdown 文档、轻量设计说明里。
- 读者更关心流程走向,而不是 UML 活动图语义。
- 图不会太长,也不需要严格表达并行、循环和中断。
选 PlantUML 写活动图,如果这张图的重点是:
- 需要正式 UML Activity Diagram 表达。
- 需要清楚表达
start、stop、循环、并行和提前结束。 - 需要把复杂流程拆成多个结构化控制块。
- 需要使用泳道区分角色或系统职责。
- 需要为评审、归档或规范输出保持稳定样式。
常见问题
Mermaid 有真正的 UML 活动图语法吗?
Mermaid 更常用的是 flowchart 来表达活动流程。它可以画出很多活动图场景,但不是 PlantUML 那种专门的 UML Activity Diagram DSL。
Mermaid 能画并行活动吗?
可以近似表达。你可以让一个节点同时连到多个后续节点,再汇合到同一个节点。但如果你需要正式的 fork/join 语义,PlantUML 更适合。
PlantUML 活动图一定比 Mermaid 更好吗?
不一定。如果只是短流程说明,Mermaid 更轻、更容易嵌入文档。PlantUML 的优势在复杂控制结构、泳道、正式 UML 语义和长期维护场景。
只看图形能力,活动图怎么选?
如果图的重点是“步骤走向”,选 Mermaid。 如果图的重点是“活动图语义和控制结构”,选 PlantUML。
最终结论:
活动图这一项上,Mermaid 适合轻量流程说明,PlantUML 适合正式活动建模。两者都能把流程画出来,但 PlantUML 对循环、并行、中断和泳道的表达更完整。
你可以在 OnUML 编辑器 中分别使用 Mermaid 和 PlantUML 模式,把上面的示例复制进去对比效果。