← 文章 / 开源项目
Hacker News 3小时前 · 2026-09-08 19:01:14 · 1 阅读

TALA 图表布局算法正式开源

此前的公告之后,TALA(Terrastruct 的自动布局算法)现已开源,采用与 D2 相同的许可证(MPL-2.0)。

TALA 是一种新颖的自动布局算法,专为软件架构图设计。它本质上是一个正交布局引擎,更接近人们在白板上画图的风格,而不是那种朝单一方向生长的 DAG 式布局。它融合了多篇图绘制研究论文中的思路(源代码中附有引用),并结合原创技术来生成美观的图表。它考量了“美观”的多个维度,包括对称性、中位距离、流向、同类节点的聚簇等等。

废话不多说,直接上例子。

  • 第一批是用 TALA 与 D2 自带的另外两种布局算法 Dagre 和 ELK 渲染的对比图。这些并非刻意挑选的例子,只是从 GitHub 上找来的公开 d2 文件。所以其中某些图表,你完全可能更偏好非 TALA 的布局效果。
  • 第二批展示 TALA 的一个独特能力:节点的位置和大小可以自定义,比如锁定坐标。这特别适合 agentic 场景——AI 模型在二维空间中摆放节点没问题,但连线布线仍然力不从心,而 TALA 恰好能接手这一部分。这些例子由 AI 生成。
  • 第三批展示 TALA 支持混合布局的能力:部分节点指定坐标,其余交给布局引擎处理。如果你对某组节点的形状有明确想法,可以用坐标指定,剩下的交给 TALA。同样,这批也是 AI 生成的。

另外请注意,TALA 也并非没有取舍。

  • 算法带有随机性。它默认使用 3 个随机种子分别计算布局,然后选择得分最高的那个。相同的种子和输入会生成相同的图表,但哪怕只多加一个节点,整体布局也可能面目全非。而在 Dagre 和 ELK 中,图表基本保持原样,只是兼容了新增节点。有时后者才是你想要的效果。
  • 它不擅长 DAG。每当我想要一张纵向延伸的长流程图时,往往还是更倾向于用 Dagre 或 ELK。
  • 对于较大的图表,运行时间会显著增加,且随规模非线性增长。关于 TALA 与其他引擎的运行时性能基准对比,参见 https://github.com/d2lang/d2-benchmarks

TALA 已内置于 D2 v0.9.0,安装后只需加上 --layout=tala 即可上手体验!也可以直接打开 https://play.d2lang.com,完全在浏览器端运行,无需任何服务端支持。开源之后能带来哪些改进,我特别期待,也迫不及待想看社区会贡献哪些新想法和优化。

特别感谢 Gavin Nishizawa 在 TALA 各模块中的大量贡献,以及 Júlio César Batista 在层级算法等方面的工作。和你们一起攻克这些有趣的问题,真的非常开心。

第一批:对比

Fulcro RAD 架构

并排对比TALADagreELKD2 源码 ↓
TALA打开 SVG ↗
使用 TALA 渲染的 Fulcro RAD 架构
Dagre打开 SVG ↗
使用 Dagre 渲染的 Fulcro RAD 架构
ELK打开 SVG ↗
使用 ELK 渲染的 Fulcro RAD 架构

点击图表可放大查看。每种布局已自动缩放至适配所在面板。

Mocha 安全飞地 SoC

并排对比TALADagreELKD2 源码 ↓
TALA打开 SVG ↗
使用 TALA 渲染的 Mocha 安全飞地 SoC
Dagre打开 SVG ↗
使用 Dagre 渲染的 Mocha 安全飞地 SoC
ELK打开 SVG ↗
使用 ELK 渲染的 Mocha 安全飞地 SoC

点击图表可放大查看。每种布局已自动缩放至适配所在面板。

在 AWS EKS 上运行 Jupyter

并排对比TALADagreELKD2 源码 ↓
TALA打开 SVG ↗
使用 TALA 渲染的 AWS EKS 上的 Jupyter
Dagre打开 SVG ↗
使用 Dagre 渲染的 AWS EKS 上的 Jupyter
ELK打开 SVG ↗
使用 ELK 渲染的 AWS EKS 上的 Jupyter

点击图表可放大查看。每种布局均已缩放以适配面板。

Lion Reader 前端数据流

并排对比TALADagreELKD2 源码 ↓
TALA打开 SVG ↗
使用 TALA 渲染的 Lion Reader 前端数据流
Dagre打开 SVG ↗
使用 Dagre 渲染的 Lion Reader 前端数据流
ELK打开 SVG ↗
使用 ELK 渲染的 Lion Reader 前端数据流

点击图表可放大查看。每种布局均已缩放以适配面板。

ROSS 转子动力学工作流

并排对比TALADagreELKD2 源码 ↓
TALA打开 SVG ↗
TALA 渲染的 ROSS 转子动力学工作流
Dagre打开 SVG ↗
Dagre 渲染的 ROSS 转子动力学工作流
ELK打开 SVG ↗
ELK 渲染的 ROSS 转子动力学工作流

点击图表可放大查看,各布局已自适应缩放至对应面板。

Go Queue 工作队列架构

并排对比TALADagreELKD2 源码 ↓
TALA打开 SVG ↗
TALA 渲染的 Go Queue 工作队列架构
Dagre打开 SVG ↗
Dagre 渲染的 Go Queue 工作队列架构
ELK打开 SVG ↗
ELK 渲染的 Go Queue 工作队列架构

点击图表可放大查看,各布局已自适应缩放至对应面板。

Ouroboros Leios 模拟器

并排对比TALADagreELKD2 源码 ↓
TALA打开 SVG ↗
使用 TALA 渲染的 Ouroboros Leios 模拟器
Dagre打开 SVG ↗
使用 Dagre 渲染的 Ouroboros Leios 模拟器
ELK打开 SVG ↗
使用 ELK 渲染的 Ouroboros Leios 模拟器

点击图表可放大查看。每种布局已按面板尺寸自动缩放。

第二批:自定义定位

Signal House

TALA · 使用 top / left 定位D2 源码 ↓打开 SVG ↗Signal House查看 D2 源码

Atlas / Data platform

TALA · 使用 top / left 定位D2 源码 ↓打开 SVG ↗Atlas / Data platform查看 D2 源码

Night shift / Mission control

TALA · 使用 top / left 定位D2 源码 ↓打开 SVG ↗夜班 / 任务控制中心查看 D2 源码

周五部署:密室逃脱

TALA · 使用 top / left 定位D2 源码 ↓打开 SVG ↗周五部署:密室逃脱查看 D2 源码

互联网是一只水母

TALA · 使用 top / left 定位D2 源码 ↓打开 SVG ↗互联网是一只水母查看 D2 源码

轨道咖啡物流

TALA · 使用 top / left 定位D2 源码 ↓打开 SVG ↗轨道咖啡物流查看 D2 源码

云端音乐学院

TALA · 使用 top / left 定位D2 + 图标 ↓打开 SVG ↗Cloud Conservatory查看 D2 源码

Velvet Rope

TALA · 使用 top / left 定位D2 + 图标 ↓打开 SVG ↗Velvet Rope查看 D2 源码

Synthwave City

TALA · 使用 top / left 定位D2 + 图标 ↓打开 SVG ↗Synthwave City查看 D2 源码

第三批:部分定位

The Printing Room

TALA · 4 个固定节点 / 10 个自动节点D2 + 图标 ↓打开 SVG ↗The Printing Room

固定:四个 CMYK 工位共享相同的固定 top 坐标,left 坐标等距分布,使印刷工序保持机械对齐。

自动:TALA 自动排列供纸、相机、套准控制、烘干、印前及后工序节点,均未设置 top 或 left。

查看定位声明查看 D2 源码

MULE / Utility Rover

TALA · 4 个固定节点 / 11 个自动布局节点D2 + 图标 ↓打开 SVG ↗MULE / 工程探测车

固定:四个电机组件分别固定于底盘矩形的前后四角。

自动:TALA 将所有控制器、传感器、电源及安全节点布置在这些固定点之间或周围,并自动安排未指定位置的 fleet 容器。

查看定位声明查看 D2 源码
来源与渲染细节

七组布局对比使用的图示来自 D2 的 real-world fixtures 公开项目。 每组对比使用相同的 D2 源码与同一版本的编译器构建,仅更换布局引擎。 源码样式、主题及显式网格约束均保持不变。部分 fixture 中的图标已被替换为内置图形。

各面板中的 SVG 独立缩放以适配尺寸。点击打开 SVG可在更大尺寸下查看标签与连接细节。

来源与许可证 ·

渲染设置与版本

十一个定位示例为原创虚构作品,使用同一公开版本的 D2 构建通过 TALA 渲染。 图标下载包含完整源码及本地向量资源。两个部分定位示例仅对列出的固定节点应用 top/left, 其余所有节点及每个容器均由 TALA 自动放置。

定位渲染设置

原始来源: Hacker News

评论 (0)