Mermaid vs PlantUML 活动图对比:流程语法、控制结构与选型

OnUML Team··7 min read
mermaidplantumlactivity-diagramflowchartdiagram-as-codeuml

本文只关注活动图本身的图形表达能力。 至于 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 胜在活动图语义完整。 它有专门的 startstopif/else/endifwhile/endwhilerepeat/repeat whilefork/end forkdetach 和泳道语法,更适合流程较长、控制结构较多、需要正式评审或长期归档的活动图。

本文基于官方文档整理,并配合具体案例对比代码和图形效果:

Mermaid vs PlantUML 活动图核心差异

对比点MermaidPlantUML选择建议
基础流程节点支持支持两者都可以
开始/结束节点可用节点形状表达原生 start / stop / end 控制语义正式活动图 PlantUML 更清楚
条件分支用菱形节点和连线表达原生 if / then / else / endif简单分支 Mermaid 足够
循环用回边表达原生 whilerepeat循环语义 PlantUML 更明确
并行流程可用多条连线近似原生 fork / fork again / end fork并发活动 PlantUML 更合适
中断/提前结束用连线到结束节点表达支持 stopkilldetach 等语义异常路径 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 可以使用 whilerepeat
  • 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 表达。
  • 需要清楚表达 startstop、循环、并行和提前结束。
  • 需要把复杂流程拆成多个结构化控制块。
  • 需要使用泳道区分角色或系统职责。
  • 需要为评审、归档或规范输出保持稳定样式。

常见问题

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 模式,把上面的示例复制进去对比效果。