D2:Terrastruct 出品的声明式绘图语言,用文本画一张能进 PPT 的图

D2
图表
声明式语言
开源
设计
2026/9/30
·

阅读时间: 大约 10 分钟

D2:Terrastruct 出品的声明式绘图语言,用文本画一张能进 PPT 的图

D2 官网首页:“D2: Declarative Diagramming — A modern language that turns text to diagrams”

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 的地方:

D2 官方主题目录:按 ID 列出 Default、Neutral gray、Flagship Terrastruct、Colorblind clear、Terminal(300) 等主题及其配色

  • 生产级主题:由专业设计师出的成套主题,用 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 的对比方向也在这里:

维度D2MermaidPlantUMLGraphviz
定位通用、颜值优先的现代声明式绘图Markdown 内嵌图,生态最广UML 专业、老牌底层图布局引擎
默认样式专业主题、sketch、动画朴素,需自定义 CSS偏工程蓝图风完全靠你定样式
渲染集成自有 CLI/playground,导出 SVGGitHub/Notion/Confluence 原生支持广需 Java/服务库/命令行
学习成本缩进语法直观低较高(UML 语法)dot 语言,需懂引擎

简单说:Mermaid 赢在“哪里都能嵌”,D2 赢在“画出来就能直接用”。如果你的图主要给程序员在 Git/PR 里看,Mermaid 够用;如果你的图要进 PPT、官网、对外文档,D2 的默认完成度明显更高。

五、局限与口径:几个必须知道的 nuance

  1. “唯一能生成动画图”是官方自述:这是竞品对比里的营销话术,且动画主要服务于演示场景,工程文档里用得不多,别为这个单点选型。
  2. 布局引擎里有商业件:D2 开源 CLI 自带 dagre、elk 等开源布局引擎,但 Terrastruct 自家的 Tala 布局引擎是闭源/商业的——它默认推荐的“最好看”布局部分依赖这套商业引擎。开源版用 elk/dagre 也能出图,但复杂图的美观度可能不如官方演示。这一点在和 Mermaid(完全开源)对比时要算进去。
  3. 它不是协作白板:D2 是“文本进、SVG 出”的单向管线,不提供 Figma 那样的多人实时拖拽协作;想要可视化微调仍要导出后手动改。
  4. 复杂图仍需手动干预:自动布局在节点多、边交叉多时照样会乱,direction、constraint、padding 等手工调整在所难免——“自动排版”省的是初始排版,不是全部排版。
  5. 生态年轻:相比 Mermaid 被 GitHub 原生支持、PlantUML 十余年积累,D2 的教程、模板和招人认知度仍在早期。

六、优势与局限总结

优势:

  1. 默认颜值高:专业主题 + sketch + 动画,产出物可直接对外,免去手调样式;
  2. 工程化完整:CLI watch、离线、Git 友好、VSCode/Vim 插件、模块化 import;
  3. 语法直观:嵌套即容器、箭头即连线,对前端/后端都低门槛;
  4. 内容嵌入强:代码高亮、LaTeX、Markdown、SQL 表一应俱全。

局限:

  1. 顶级布局(Tala)闭源:开源引擎在复杂图上的效果要自己试;
  2. 生态与集成面不如 Mermaid:指望 GitHub 原生渲染可能不现实;
  3. 不是协作工具:需要手动微调时体验不如可视编辑器;
  4. 动画等“亮点”属营销叙事:实际使用频率存疑。

七、谁该关注

  • 要把架构图、ER 图、时序图写进 Git 并反复评审的工程团队:D2 的文本即图 + 主题让“文档即代码”不再牺牲美观;
  • 对外文档/博客/PPT 需要好看示意图的人:D2 默认产出比 Mermaid 更适合直接发布;
  • 喜欢 sketch 手绘风、需要 LaTeX 学术配图的用户:这两项是它差异化卖点。

反之,如果你的图已经嵌在 GitHub README/Notion 里且不需要高颜值,Mermaid 的生态收益更大;如果重度依赖多人实时拖拽协作,那 D2 不是白板工具。建议先用官方 playground 把你最常见的那类图写一遍,再切到开源布局引擎确认效果,然后再决定是否把它纳入文档工作流。

参考来源