返回目录
开源项目文档办公类新手

D2:将文本转换为图表的现代图表脚本语言

D2 是一个开源文本转图表的脚本语言与命令行工具,用 .d2 文件描述结构后可导出 SVG、PNG、GIF、PDF、PPTX 等格式,支持多布局引擎(dagre、elk-go、TALA)、主题、字体与插件扩展,也可作为 Go 库在程序中生成图表,采用 Mozilla Public License 2.0 许可。

0 次阅读2026/09/11 发布
D2:将文本转换为图表的现代图表脚本语言 来源图片

社区作者 · zZz

它解决什么问题

D2(仓库 d2lang/d2)是一门现代图表脚本语言,目标是把文本渲染成图表。官方描述为“A modern diagram scripting language that turns text to diagrams”。

主要用途与能力:

  1. 用声明式 .d2 文本描述节点、连线、容器与样式,由 CLI 渲染为图表;示例中通过 vars.d2-config 指定 layout-engine(如 elk)与 theme-id(如 300),并用 shape(stored_data、hexagon、cylinder、person、page)、style.multiple、style.stroke-dash 等属性控制外观(配图 3 为渲染示例)。
  2. 导出格式:支持 SVG、PNG、GIF、PDF、PPTX 导出。
  3. 主题与字体:内置多种官方主题,可在 ./d2themes 浏览并贡献自有主题;渲染默认字体为 “Source Sans Pro”,替换方式见 ./d2renderers/d2fonts。
  4. 语言工具链:解析器可从出错程序中解析多个错误,提供 autoformatter、语法高亮,并规划 LSP 等能力,便于创建和维护大型图表。
  5. 插件与可扩展性:插件系统可替换布局引擎并定制渲染管线,插件可随构建捆绑或作为独立二进制单独安装。内置布局引擎包括 Dagro(默认,捆绑,Dagre 有向图布局引擎的 Go 原生移植,基于 Graphviz DOT 算法,产出分层/层级布局)、elk-go(捆绑,ELK 的 Go 原生移植,适合带方向与端口的节点-连线图)、TALA(捆绑、需显式启用,面向软件架构图的原生布局与边路由引擎;可用 --layout=tala、环境变量 D2_LAYOUT=tala 或 D2 源码中 vars.d2-config 下的 layout-engine: tala 选择)。官方表示还计划集成 dot 等多种布局引擎以及时序图等单一用途布局类型。Sketch 模式渲染使用 rough-go(Rough.js 4.6.6 渲染面的 Go 兼容移植),LaTeX 标签使用 mathjax-go(MathJax 3.2.2 TeX-to-SVG 管线的 Go 原生移植)。
  6. 可编程使用:除 CLI 外,D2 也可在 Go 程序中用于生成图表,示例见 ./docs/examples/lib。

适用对象:需要以文本版本化维护图表的软件工程师、架构师、技术文档作者、DevOps/CI 流程维护者,以及希望在 VSCode、Vim、Obsidian、Emacs、Logseq、MkDocs、VitePress、Pandoc 等工具链中内嵌图表能力的团队。

生态与集成(官方插件):VSCode 扩展 https://github.com/d2lang/d2-vscode ;Vim 扩展 https://github.com/d2lang/d2-vim ;Obsidian 插件 https://github.com/d2lang/d2-obsidian 。

社区插件包括 Tree-sitter 语法、Emacs major mode、Goldmark 扩展、Telegram 机器人、Postgres 导入器、Structurizr 导出器、MdBook 预处理器、ROS2 导出器、org-mode 支持、Python 图表构建器、Clojure 转译器、JavaScript 图表构建器、C#/.

NET SDK、Maven 插件、Confluence 插件、CIL 转 D2、代码片段、Mongo 转 D2、Pandoc 过滤器(TypeScript/Python)、Logseq-D2、ent2d2、MkDocs 插件、Remark 插件、VitePress 插件、Zed 扩展、Hexo 扩展、Rehype 插件、AsyncAPI 转 D2、数据库 Schema 转 D2 等(均以仓库中列出的链接为准)。

其他资源:对比站 https://text-to-diagram.com (仓库 https://github.com/d2lang/text-to-diagram-site )、Playground(https://github.com/d2lang/d2-playground ,配图 2 为其入口按钮)、语言文档(https://github.com/d2lang/d2-docs )、托管图标 https://icons.d2lang.com 。

常见问题(来自 README):D2 不收集遥测;安装后除定期从 GitHub 检查版本更新外不使用网络连接;D2 不需要浏览器,可完全在服务端运行;下一版本变更见 ./ci/release/changelogs/next.md;求助渠道为 D2 Discord;功能请求、提案或缺陷请开 GitHub Issue;私人咨询邮箱 [email protected]

使用 D2 撰写文档的知名开源项目(README 列出的部分):ElasticSearch、Sourcegraph、Temporal、Tauri、Rust GUI framework(78.5k stars)、Intellij、Coder、UC Berkeley、Coronacheck(荷兰新冠通行证官方应用)、Block Protocol(1.2k stars)、Dagger(8k stars)、Ivy Wallet(1.

1k stars)、LocalStack(46k stars)、Queue Library(Golang Goroutine 池库)。

— 本文由 AI 根据公开来源辅助整理,命令、版本与许可证请在使用前到原始页面复核。

安装 / 开始使用

一、准备环境

  • 需要一个可用的终端(macOS、Linux 或 Windows);若要生成图表文件,准备一个工作目录用于存放 .d2 源文件与输出文件。
  • README 未给出具体的最低系统版本、内存或磁盘要求,相关细节待核验,详见 ./docs/INSTALL.md。

二、方式一

官方安装脚本(最简便)

  1. 执行安装脚本:
命令
curl -fsSL https://d2lang.com/install.sh | sh -s --
  1. 若只想先查看脚本将执行的命令而不真正安装,可加 --dry-run 参数运行安装脚本。
  1. 官方说明:脚本的运行机制在文档中有详细描述;出于安全考虑,官方推荐优先使用操作系统自带的包管理器,并强调安装脚本本身并非不安全。
  1. 卸载(同样通过安装脚本):
命令
curl -fsSL https://d2lang.com/install.sh | sh -s -- --uninstall

三、方式二

已安装 Go 时从源码安装(不包含 manpage)

命令
go install github.com/d2lang/d2@latest

四、方式三

从源码安装 release(会包含 manpage) 见 ./docs/INSTALL.md#source-release 。

五、更详细的安装文档 见 ./docs/INSTALL.md ,其中针对每种操作系统给出了替代方法与示例,并详细描述了安装脚本的工作方式。

六、首次运行(Quickstart) README 给出的最快上手方式是把它当作 CLI 可执行程序,从 .d2 文件生成 SVG:

首先安装 D2(见上)

命令
curl -fsSL https://d2lang.com/install.sh | sh -s --

echo ' x -> y -> z ' > in.d2 d2 --watch in.d2 out.svg 执行后浏览器会打开 out.svg,并在 in.d2 发生变化时实时重新加载(live-reload)。

七、选择布局引擎(可选)

  • 默认捆绑 dagre(Dagro)。
  • 使用 elk-go:在 vars.d2-config 中设置 layout-engine(示例中为 layout-engine: elk)。
  • 使用 TALA:以 --layout=tala、环境变量 D2_LAYOUT=tala,或在 D2 源码的 vars.d2-config 下写 layout-engine: tala。

八、常见问题

  • D2 会收集遥测吗?不会。安装后不使用网络连接,仅会定期从 GitHub 检查版本更新。
  • D2 需要浏览器吗?不需要,D2 可以完全在服务端运行。
  • 下一版本有什么?见 ./ci/release/changelogs/next.md 。
  • 遇到问题或需要帮助?在 D2 Discord 上提问。
  • 有功能请求、提案或缺陷?请开 GitHub Issue。
  • 私人咨询?发邮件至 [email protected]
  • 安装相关的其它问题(如各系统差异、脚本细节)请查阅 ./docs/INSTALL.md。

九、图片参考

  • 配图 1 为 D2 的 banner。
  • 配图 2 为 D2 Playground 入口按钮。
  • 配图 3 为 D2 渲染示例图(example.svg)。

来源教程配图

D2
配图 1 · D2查看原图
D2 Playground button
配图 2 · D2 Playground button查看原图
D2 render example
配图 3 · D2 render example查看原图

适用场景

用 .d2 文本文件描述结构
通过 CLI 渲染为 SVG 等图表
便于随代码一起版本管理
绘制软件架构图
网络拓扑图
数据流图与实体关系图
在技术文档
博客与知识库中生成和嵌入图表(Obsidian
MkDocs
VitePress
Hexo
Logseq