一个只有168颗星的开源项目,做了一件主流图表语言没做的事:把"东西放哪儿"写进文件里。

它叫reladraw,目前版本0.5.0。作者给它的定位很直接——一种文字图表语言,你在里面说清楚东西放在哪里。

打开网易新闻 查看精彩图片

它和Mermaid们差在哪

Mermaid、Graphviz、D2这一派的做法是:你声明实体和连接,布局全部由算法决定。作者承认这是超能力,对大多数图表来说也是正确选择。但当你心里已经有一张具体的图、并且在意东西摆哪儿的时候,它就不再合适了。

比如你正在通过画图来建立对一个系统的理解,想让某个模块待在右边、它的连线也按你的意思走——自动布局语言没有表达这件事的方式。

另一头是draw.io、Excalidraw、Figma这类绝对定位工具。它们给你完全的摆放控制权,代价是复杂图表每改一次都是慢工。对人来说慢,对代理来说更贵——它得先从坐标里把图反推出来,才能决定改哪几个数字。

reladraw瞄准的是中间地带。文件里没有任何坐标,每个位置都相对于别的东西来声明:

node app "Web app"

node app.ui "Interface"

node app.api "API" below app.ui

node store "Database" right of app level with app

edge app.api -> store "queries" from: right to: left

没有嵌套结构,所以没有任何一行依赖另一行的位置或缩进。

改图才是真正的日常

作者点出了一个常被忽略的事实:常见场景不是画一张图,而是改一张图。让认证服务往左挪,让一个队列排到它后面。

用像素坐标,代理得先从数字里重建整张图,才能算出该改哪些数字。用自动布局,压根没东西可读——布局从来没被写下来过,它只能改源文件再重新渲染。而用声明式位置,布局就以句子的形式躺在文件里,改图就是改那句"东西放哪儿"的话。

写代码也是同样的形状。一个代理输出Mermaid,是在猜一个稍后由算法敲定的布局,它唯一能确认的办法就是渲染出来看一眼——这一趟往返回来的是张图,而不是一份"哪里错了"的清单。

作者把这条界线划得很清楚:意图可以确认,结果不能。代理可以重读自己的文件,看到数据库在API下面、四台机器都挂在同步中枢上。但它看不到两个锚定在不同东西上的集群现在重叠了、某段文字溢出了节点、某条边穿过了另外四条——这些是从语句里解算出来的,不是被写出来的,所以需要诊断信息来兜底。

给代理装一份语言说明书

reladraw太新,不在任何模型的训练数据里。代理必须先被告知这门语言,才能写它。仓库里带了一个agent skill,做的就是这件事:语法、什么时候该用这门语言、重读自己的源码能确认什么和不能确认什么。

安装命令是 npx skills add reladraw/reladraw -g,会装到你用的那个代理上——Claude Code、Codex、Cursor、Copilot等各自装进自己的skills目录。去掉-g就装进当前项目。想只给某一个代理装,用-a指定名字。

要注意的是,skill是安装那一刻的副本,不是实时链接,语法变更的版本发布后得重新跑一遍命令。它本身是纯Markdown加旁边的语法参考,手动复制目录同样可行。

0.5.0这个版本还很早期,但能跑:TypeScript写的解析器、求解器和SVG渲染器,没有运行时依赖,外加一个命令行工具,吃文本文件、吐独立SVG。作者自己说,目前肉眼可见还不到位的是排版,不是位置。