10 月 7 号才建仓,15 号已经拿到 2429 个 star。一周多一点攒下 2400 星,在开源世界倒不算罕见。可主角是 CAD,而且是纯 Rust 写出来的 CAD——单这个组合,就值得停下来多看两眼。
SolidCraft 一共做了三个端:桌面端(egui + wgpu)、浏览器端(wasm32)、MCP server。最后这个端才是它跟其他“Rust 写的 XX 工具”真正拉开距离的地方:AI agent 可以直接驱动建模,不用人点鼠标。
我把 headless 链路在本机拉通了一遍,实测结果全在文里。
它是什么:一台 clean-room CAD
先把定义钉死。SolidCraft 是一个参数化 3D CAD 应用:你在 sketch 里画几何、给约束(约束求解器算位置),然后跑参数化特征时间线——拉伸、倒角、抽壳……任何一个尺寸改掉,模型都会自动重建。
它的技术路线有两个反直觉的点。
第一,内核是 clean-room 的。CAD 领域的公开几何内核基本不是 GPL 就是闭源,OpenCASCADE 虽然是 LGPL,但整套工具链纠缠很深。SolidCraft 选了 Apache-2.0 的 truck 建模内核做 B-rep,再用 spade 的约束 Delaunay + Ruppert 加密做曲面剖分。仓库纪律严到什么程度?GPL/LGPL/AGPL 的代码“连读都不许”,图标全部用代码画出来,资产必须登记在 ATTRIBUTION.md。FreeCAD 只在 oracle 测试里以独立程序身份出现——用它的公开 Python API 算参考值,代码层面零链接。
第二,“永远不崩”直接写进了 CI。所有库 crate unsafe_code = "forbid";生产 crate 根文件 #![deny(clippy::unwrap_used, expect_used, panic, …)];所有对外输入——命令参数、设计文件、控制通道——都按敌对输入处理,只认 get() 不认 [i];每条命令在 Session::execute 外头还套了一层 catch_unwind 兜底。真崩了,就把设计和复现命令写进 crash 报告,solidcraft-cli crashes replay 可以直接重放。CAD 是用户把设计文件托付给它的软件,崩一次丢的是整个工程。这个优先级,压过一切功能开发。
为什么「AI 建模」值得你多看一眼
solidcraft-cli mcp 是一个 stdio 式 MCP server,讲 JSON-RPC。挂到 Claude Code 里就一行:
claude mcp add solidcraft -- solidcraft-cli mcp
它暴露的命令集是 Fusion 风格:sketch.create {plane: XY} → sketch.rectangle.two_point {p0, p1} → sketch.finish → solid.extrude {distance}。改尺寸走 Parameters,模型重建全自动。
仓库里已经有一个现成案例:@0xlillith 用 MCP 驱动建了一辆叫 SELENE 的科学火星车,3323 个时间线步骤,零 UI 点击,9 倍速重放不报错。这不是“画个图给你看”,而是产出一个可再编辑的参数化工程——也是“agent 当工程师而不是画家”在 CAD 领域的第一个完整样本。
为什么 agent 能驱动它?核心设计是“一切皆命令”:工具栏、对话框、CLI、脚本、控制通道、MCP,全部落到同一套 CommandSpec(id + label + params JSON + enabled 规则)。agent 不需要模拟点击 UI,直接跑 JSON 命令,确定性可重放。
我本机实测了什么(可复现)
测试环境:2 核 EPYC,Linux。命令都在 data/solidcraft 下,全链路如下:
git clone --depth 1 https://github.com/bherbruck/solidcraft.git
cd solidcraft
cargo check -p solidcraft-mcp # 2m12s 过
cargo build -p solidcraft-cli # 524MB debug 二进制
./target/debug/solidcraft-cli commands
./target/debug/solidcraft-cli run tests/oracle/01-box/recipe.json
printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize",…}' | ./target/debug/solidcraft-cli mcp
跑下来的结果有四点:
commands 列出 369 条命令:SOLID 84、SKETCH 86、SURFACE 18、SHEET METAL 9、PLASTIC 6、RENDER 2,其余 163 条无面板归属。
- box recipe 端到端:40×30×20mm 盒子,volume 24000mm³、area 5200mm²、6 面 12 边 8 顶点、质心 [20,15,10],与 expected.json 的解析值(V=abc,A=2(ab+bc+ca))完全一致。
- MCP
initialize 握手返回 capabilities + 建模指引("Model like in Fusion… Units are millimetres and degrees, Z is up"),stdio 协议可用。
cargo check -p solidcraft-mcp 全 workspace 10 个 crate 通过,用时 2m12s。
实测边界(没跑的部分,实话实说):GUI 渲染(egui+wgpu,需要 Xvfb + GPU,本机只验了命令链路)、wasm 网页版、76 件完整 oracle 套件(官方 75/76,我没全量重放)、cargo xtask ci 全量质量门。
它值得进你工具链的时机
什么时候值得放进工具链?三句话。
第一,当实验品,它现在是“early but usable for simple parts”:画简单零件、拉伸、倒角、抽壳够用,复杂装配还别指望。官方把 76 件参考件的 75/76 对齐率摆出来,就是在替你划边界。
第二,真正值得收藏的是它的设计纪律:“一切皆命令”+“永不崩”+“UI 可换”这三条合起来,就是一个给 agent 时代的软件架构模板——桌面工具做薄,能力全走命令,agent 走 MCP,人走 UI,两者共享同一套语义。
第三,Rust 做桌面工程工具这条路线,继 rust-analyzer、Fluent 家族之后又多了一个 2400 星样本。而且它证明的不是“Rust 能写 GUI”,是“Rust 能写一台带几何内核的重工程软件还不崩”。
参考与实测声明
参考来源:GitHub 仓库 bherbruck/solidcraft(README、Cargo.toml、docs/oracle.md、crates 结构);AGENTS.md(never-crash 纪律与 clean-room 约束);HN 讨论(item 50064840,140 分 51 评,10-13)。
诚实声明:本机 2 核 EPYC,实测 = cargo check -p solidcraft-mcp 通过 + solidcraft-cli headless 命令链路(commands/box recipe/MCP 握手);2429 star/242 forks 为 10-15 时点 GitHub API 读数;“8 天 2400 星”按 10-07 建仓计;SELENE 3323 步与 75/76 oracle 为仓库自述,我未全量复放。