D2:Terrastruct 出品的声明式绘图语言,用文本画一张能进 PPT 的图
阅读时间: 大约 10 分钟
D2:Terrastruct 出品的声明式绘图语言,用文本画一张能进 PPT 的图

D2 是 Terrastruct 团队开源的“现代图表脚本语言”,口号是 “turns text to diagrams”——你写一段类似缩进配置的文本,它自动排版成关系图、架构图、时序图并导出 SVG。它的开发者还做了一个 text-to-diagram.com专门拿 D2 和 Mermaid、PlantUML、Graphviz 同题对比。本文基于 d2lang.com 官方文档与 GitHub 仓库,分析它的语法模型、特色功能,以及和同类工具相比真实的取舍。
一、背景:从 Visio 到“文本即图”
架构图、时序图、ER 图长期是两个极端:要么用 Visio/draw.io 手拖——精细但版本管理困难、改一次要重排半天;要么用 Mermaid 这类文本工具——能进 Git、能在 GitHub 里渲染,但样式朴素、布局控制力弱、复杂图容易乱。
D2 想占的位置是:既保留“文本即代码、可进 Git、可评审”的工程化优势,又把默认颜值、主题、手写风、动画做到能直接放进博客和 PPT。 它的核心不是“你手摆坐标”,而是“你声明关系,布局引擎负责排版”。
二、是什么:缩进式脚本 + 布局引擎
D2 语法刻意贴近一种“嵌套对象 + 箭头”的风格。首页示例精简后长这样:
vars: {
d2-config: {
layout-engine: elk
theme-id: 300
}
}
network: {
cell tower: {
satellites -> transmitter: send
}
data processor: { storage: { shape: cylinder } }
}
user -> network.cell tower: make call
api server -> logs: persist几个关键点:
- 嵌套即容器:
network: { cell tower: {...} }自动画成“大框套小框”,不需要手动画分组; ->就是连线,冒号后是边上的标签(send、make call);- 形状/样式走属性:
shape: cylinder、style.stroke-dash: 3; - 配置块选布局引擎和主题:
layout-engine、theme-id在文件头声明。
CLI 用起来就一条命令:d2 --watch in.d2 out.svg,改文本、浏览器里实时重排并热更新,完全离线。
三、特色能力:主题、sketch 与动画
官网 Feature highlights 里有几项是它区别于 Mermaid 的地方:

- 生产级主题:由专业设计师出的成套主题,用
theme-id一行切换(见上图,0 是 Default、300 是 Terminal、还有专门的 Colorblind clear 色盲友好主题); - Sketch 手绘风:一键切换成“随手画”的潦草美学,适合非正式分享;
- 动画:官网自称 “D2 is the only language that can produce animated diagrams from text”——能从文本生成带动画的图;
- 多语言与内容嵌入:标签支持中文、法文甚至 emoji,支持 LaTeX(论文用)、代码片段语法高亮、Markdown 长文、SQL 表结构;
- 工程化:本地 CLI 带 watch 模式、支持 macOS/Linux/Windows、VSCode/Vim 插件、容器分组、导入图片图标、自定义
.ttf字体、模块化 import、变量、glob 通配与 autoformat。
它提供 3 种布局引擎,官方说法是“各自擅长不同类型的图”。
四、与 Mermaid / PlantUML / Graphviz 的分工
这是选型时最该想清楚的问题,text-to-diagram.com 的对比方向也在这里:
| 维度 | D2 | Mermaid | PlantUML | Graphviz |
|---|---|---|---|---|
| 定位 | 通用、颜值优先的现代声明式绘图 | Markdown 内嵌图,生态最广 | UML 专业、老牌 | 底层图布局引擎 |
| 默认样式 | 专业主题、sketch、动画 | 朴素,需自定义 CSS | 偏工程蓝图风 | 完全靠你定样式 |
| 渲染集成 | 自有 CLI/playground,导出 SVG | GitHub/Notion/Confluence 原生支持广 | 需 Java/服务 | 库/命令行 |
| 学习成本 | 缩进语法直观 | 低 | 较高(UML 语法) | dot 语言,需懂引擎 |
简单说:Mermaid 赢在“哪里都能嵌”,D2 赢在“画出来就能直接用”。如果你的图主要给程序员在 Git/PR 里看,Mermaid 够用;如果你的图要进 PPT、官网、对外文档,D2 的默认完成度明显更高。
五、局限与口径:几个必须知道的 nuance
- “唯一能生成动画图”是官方自述:这是竞品对比里的营销话术,且动画主要服务于演示场景,工程文档里用得不多,别为这个单点选型。
- 布局引擎里有商业件:D2 开源 CLI 自带 dagre、elk 等开源布局引擎,但 Terrastruct 自家的 Tala 布局引擎是闭源/商业的——它默认推荐的“最好看”布局部分依赖这套商业引擎。开源版用 elk/dagre 也能出图,但复杂图的美观度可能不如官方演示。这一点在和 Mermaid(完全开源)对比时要算进去。
- 它不是协作白板:D2 是“文本进、SVG 出”的单向管线,不提供 Figma 那样的多人实时拖拽协作;想要可视化微调仍要导出后手动改。
- 复杂图仍需手动干预:自动布局在节点多、边交叉多时照样会乱,
direction、constraint、padding 等手工调整在所难免——“自动排版”省的是初始排版,不是全部排版。 - 生态年轻:相比 Mermaid 被 GitHub 原生支持、PlantUML 十余年积累,D2 的教程、模板和招人认知度仍在早期。
六、优势与局限总结
优势:
- 默认颜值高:专业主题 + sketch + 动画,产出物可直接对外,免去手调样式;
- 工程化完整:CLI watch、离线、Git 友好、VSCode/Vim 插件、模块化 import;
- 语法直观:嵌套即容器、箭头即连线,对前端/后端都低门槛;
- 内容嵌入强:代码高亮、LaTeX、Markdown、SQL 表一应俱全。
局限:
- 顶级布局(Tala)闭源:开源引擎在复杂图上的效果要自己试;
- 生态与集成面不如 Mermaid:指望 GitHub 原生渲染可能不现实;
- 不是协作工具:需要手动微调时体验不如可视编辑器;
- 动画等“亮点”属营销叙事:实际使用频率存疑。
七、谁该关注
- 要把架构图、ER 图、时序图写进 Git 并反复评审的工程团队:D2 的文本即图 + 主题让“文档即代码”不再牺牲美观;
- 对外文档/博客/PPT 需要好看示意图的人:D2 默认产出比 Mermaid 更适合直接发布;
- 喜欢 sketch 手绘风、需要 LaTeX 学术配图的用户:这两项是它差异化卖点。
反之,如果你的图已经嵌在 GitHub README/Notion 里且不需要高颜值,Mermaid 的生态收益更大;如果重度依赖多人实时拖拽协作,那 D2 不是白板工具。建议先用官方 playground 把你最常见的那类图写一遍,再切到开源布局引擎确认效果,然后再决定是否把它纳入文档工作流。