13,557 星的新 CAD,内核是别人开源的:2026 引擎盘点
两个月,GitHub 上冒出 15 个新 CAD 项目。最热的那个 SolidCraft 有 13,557 星——而它的内核 solidcore 是 NVIDIA 在 10 月 8 日开源 SMLib 之后,10 月 12 日就做出的 Rust 移植版。
这不是泼冷水,是这波浪潮的真实结构:应用层在爆炸,内核层只多了一点火星。我们把 33 个仓库逐个核了许可、创建日、最后 push(快照已入库,可复现),并且把最有代表性的那个真跑了一遍。
先给结论:
- 新内核的星加起来 328,两个应用 21,170。 注意力全在应用层。
- 真自己写内核的国产(2026 新建)项目,用一只手数得过来:
OpenGeometry、vcad、Gensolid、csgrs,其余多是移植或包装。 - star 数在这一波里不代表成熟度:同一家一天铺了十几个"clean-room 重写",
fornjot(2,546 星)已经停更归档。
一、时间线:火种只有一颗
| 日期 | 事件 | 我们核到的数字 |
|---|---|---|
| 2026-10-07 | SolidCraft、CADCraft 等一批"从零重写"仓库同日出现 |
13,557★ / 7,613★ |
| 2026-10-08 | NVIDIA 把 SMLib 作为 usd-brep 开源(Apache-2.0) |
1,990★,10-22 最后 push |
| 2026-10-12 | solidcore:SMLib 的 Rust 移植(no unsafe / 确定性 / 可编 wasm32) |
315★ |
| 2026-10-12 | Gensolid:号称 Parasolid 替代,LLM agent 在自改进循环里写、人只当验证器 |
5★,pre-alpha |
| 2026-11-03 | ShapeCraft:单人写的直接建模 CAD(OCCT 7.8+) |
首日 0★ |
一句话:内核层的开源(SMLib)+ agent 让"写一个 CAD 应用"的成本塌陷,两件事撞在一起。
二、分层:33 个仓库,18 个自称内核
我们把清单分成四层(kernel 自己写几何内核 / app 有引擎层的应用 / ai AI 原生 / base 老底座),全部数据存在 distribution/cad-engines/snapshots/2026-11-04.tsv,跟踪脚本 bin/cad-engines.mjs。
内核层:19 个里,2026 年新建的只有 6 个
| 名字 | 星 | 创建 | 许可 | 它到底做了什么 |
|---|---|---|---|---|
usd-brep(SMLib) |
1,990 | 10-08 | Apache-2.0 | NVIDIA 的 NURBS B-rep + omniSolid USD schema;这一波的火种 |
truck |
1,679 | 2020-12 | Apache-2.0 | RICOS 的老牌 Rust 内核(别当新的),truck-js + WebGPU |
PicoGK |
1,153 | 2023-10 | Apache-2.0 | 隐式/SDF 体素内核,走"计算工程",和 B-rep 不是一条道 |
OpenGeometry |
532 | 2024-08 | MPL-2.0 | 浏览器原生(Rust→WASM):挤出、三角化、布尔;npm 包 |
vcad |
441 | 2026-01 | Apache-2.0 | ~35K 行 B-rep、20+ crate,half-edge 拓扑,WASM + MCP |
solidcore |
315 | 10-12 | Apache-2.0 | SMLib 的 Rust 移植并另起炉灶(泛化 rolling-ball blend) |
csgrs |
264 | 2025-01 | MIT | CSG 内核(mesh/SDF),管布尔不管 NURBS |
Gensolid |
5 | 10-12 | Apache-2.0 | Parasolid 风格 + agent 生成、人验证;能读 Parasolid XT |
nacre / keel / Stereon / Isoform / gusset |
0–7 | 2026 春夏秋 | Apache / MPL | 单人内核:exact b-rep(Rust)、容差 B-rep、C++26 B-rep、F-rep(C#)、钣金 |
fornjot |
2,546 | 2021-04 | — | 已归档:"No longer in development",最后 push 2026-06-19 |
内核层 18 个仓库存量星合计 11,751——但其中 9,758(83%)来自fornjot(死的)、manifold(mesh 布尔,不是 CAD 内核)、usd-brep、truck、PicoGK五个。2026 年新建的内核加起来 328 星。
应用层:11 个,内核从哪来是决定性的
| 名字 | 星 | 创建 | 内核来源 | 许可 |
|---|---|---|---|---|
SolidCraft |
13,557 | 10-07 | 自家 solidcore | Apache-2.0 |
CADCraft |
7,613 | 10-07 | 无 B-rep 内核(2D 制图 + 3D 视图) | MIT/Apache |
QymCAD |
906 | 08-25 | OCCT | AGPL-3.0 |
Nova3D |
736 | 05-06 | 自述"可编程 3D",模型是版本化程序 | MIT |
nurb |
629 | 07-25 | OCCT(经 build123d) | 自定义 |
partmode |
505 | 08-06 | OCCT WASM | AGPL-3.0 |
SOMA |
452 | 10-10 | CadQuery | GPL-3.0 |
Procedura |
436 | 08-27 | 程序化建模,prompt→参数化程序 | MIT |
cadrs |
119 | 09-30 | 自写 NURBS b-rep + Bevy | Apache-2.0 |
ShapeCraft |
0 | 11-03 | OCCT 7.8+(藏在 trait 后可换) | Apache-2.0 |
AI 层:三个,都不是内核
text-to-cad(25,364★,skill 集:agent 写 build123d/Python)、CADAM(5,384★,GPL-3.0)、Multi-Agent-CAD(1,068★)。star 最高的那三个,恰好一个几何内核都没有。
三、实测:SolidCraft 0.30.1 命令行,四组数据
光看 README 不算数。我们下了 solidcraft-windows-x64-portable.zip(106 MB,免安装,2026-11-02 的 v0.30.1),在 Windows x64 / GeForce MX150 上跑。
测试件 A:60×40×20 板 → Ø16 通孔 → 一条竖边 r5 倒角(4 条命令,纯命令行,无 UI)。
1)它到底有多少"引擎面":570 个命令,一套注册表
solidcraft-cli commands 吐出 570 个命令(sketch 126、render 60、view 40、solid 36、component 32…),桌面 UI、浏览器、CLI、MCP 共用同一套。这不是接口对齐,是同一条执行路径——你写进脚本的东西,UI 里能拖回时间线。
2)耗时剖面:倒角九成时间在三角化,不在内核
run --timings --profile 会分开算布尔、三角化和其他:
| 命令 | 总计 ms | 布尔 ms | 三角化 ms | 其他 ms |
|---|---|---|---|---|
solid.box 60×40×20 |
2.2 | 0 | 0 | 2.2 |
solid.cylinder Ø16 |
2.0 | 0 | 0 | 2.0 |
solid.combine(cut) |
23.5 | 17.0 | 4.5 | 2.0 |
solid.fillet r5 |
158.4 | 0 | 142.1 | 16.3 |
| 合计 | 186.2 | — | — | — |
这一行是最值的:倒角本身(内核)只要 16 ms,剩下 142 ms 全花在把结果三角化给视口。瓶颈在显示管线,不在 B-rep。 7 条命令、两个倒角、一个 join 的版本(就是封面那个零件)总计 532–684 ms,其中 join 25.8 ms / 86.5 ms。
3)STEP 导出与往返:面数不丢,字节不保证
| 检查项 | 结果 |
|---|---|
| 导出格式 | AP242_MANAGED_MODEL_BASED_3D_ENGINEERING_MIM_LF(AP242) |
| 文件大小 | 11,488 字节 |
ADVANCED_FACE |
8(平面 6 + 圆柱 2,与几何相符) |
| 再导入 → 再导出 | 8 面保持,11,790 字节(不逐字节相同,实体顺序重排),耗时 0.2 s |
| 旧版本兼容 | 0.16.2 导出的 bracket.step(8,871 字节)能直接读:9 面 21 边,closed |
4)体积核对:差 0.36 立方毫米
这是最能说明"它算的是精确几何而不是网格"的一项:
| 量 | 值 |
|---|---|
| 解析值(板 − 孔 − 倒角角料) | 43,871.460 mm³ |
内核 eval 报的体积 |
43,871.821 mm³ |
| 相对误差 | +0.0008%(+0.36 mm³) |
| 表面积 | 9,349.546 mm² |
| 拓扑 | 8 面 / 18 边 / 12 顶点,closed: true |
有意思的是 eval 里有两套计数:实体口径 18 边 12 顶点,kernel 口径 20 边 14 顶点。差的 2 边 2 顶点正好是两个圆柱面的接缝边(seam)——内核按解析面记账,实体层按拓扑边记账。这种细节不实测看不到。
测试件 A 的渲染(SolidCraft 自己的 snapshot 命令,GPU 渲染,1600×900)。
5)外来 STEP:18 个实体全进来了,但英寸被当成了毫米
拿 OCCT 官方 demo 的装配体 as1_pe_203.stp(AP203,139,752 字节)喂进去:
- 能读:18 个实体全部导入,
closed: true,装配实例名保留(NUT (as1_pe_203:1/ROD_ASM:1/NUT:2))。 - 单位没换:底板 PLATE 读出来 4572 × 508 × 3810(mm)。而 4572 / 25.4 = 180.0、508 / 25.4 = 20.0、3810 / 25.4 = 150.0——这不是巧合,是英寸数值被标成了毫米,差 25.4 倍,体积差 16,387 倍。
这条是给所有"AI 生成 + 自动导入"流水线的警告:几何对了,单位没对,后面全白算。 我们只观测到数值差 25.4 倍,没去追是文件里的 CONVERSION_BASED_UNIT 没被支持,还是我们取的模型本来就声明为 mm——这条留给厂商。
四、能不能商用:许可这一列先筛一遍
| 许可 | 项目 | 能不能嵌进你的产品 |
|---|---|---|
| Apache-2.0 / MIT / MPL-2.0 | solidcore、usd-brep、SolidCraft、vcad、OpenGeometry、truck、PicoGK、csgrs、Gensolid、ShapeCraft、nacre | 能(MPL 只要求改了那些文件要开源) |
| AGPL-3.0 | QymCAD、partmode | 不能随便嵌:网络服务也算分发,必须整体开源 |
| GPL-3.0 | CADAM、SOMA | 同上,传染性更强 |
| LGPL-2.1 + 例外 | OCCT(v8.0.1,2026-07-30) | 能,但要动态链接、保留可替换性 |
一句话:做闭源产品,内核只能挑 Apache/MIT/MPL 那排;做站内工具或开源项目,AGPL 那两个反而是最完整的(真 B-rep + 装配 + 约束)。
五、三个判据:一眼判掉"伪引擎"
- 看有没有独立 kernel crate,还是 UI 里直接调 OCCT。
grep -r kernel --include=Cargo.toml一行就露底。注意名字骗人:cadcraft_engine那类"engine"是命令/会话层。CADCraft 就是典型——13.5k 和 7.6k 星的两个同周项目,一个有内核,一个没有。 - 能不能导精确 STEP/IGES。 只能出 STL/GLB 的是 mesh 层(
manifold、csgrs),不是 CAD 引擎。反过来,能出 AP242 且回读面数不变,才叫 B-rep 闭环(我们上面测的就是这条)。 - 改一个参数,装配会不会跟着重算。 特征是"时间线 + 关联重建",很多"生成式 CAD"过不了这关——这正是 text-to-CAD 的老问题(见我们的上一篇)。
六、三个坑
- star 数是事件性的。 同一家(storytold/ArtCraft)在 09-30 到 10-09 之间铺了十几套 clean-room 应用:PhotoCraft 76,819★、ArtCraft 38,702★、CADCraft 7,613★……这些星说明"叙事成立",不说明"内核成熟"。
- "新内核"很多是移植或包装。 solidcore←SMLib、QymCAD/ShapeCraft/partmode/nurb←OCCT。真正的原创内核(Gensolid、nacre、Stereon、Isoform)都还在 pre-alpha,星数在个位。
- 已归档的项目还在搜索结果第一页。
fornjot2,546 星、2021 年起跑,现在 README 明写不再开发——选型时看一眼pushed_at比看星数重要。这也是我们做那个跟踪脚本的理由。
七、我们没测的(写清楚,别当结论用)
| 项目 | 为什么没测 |
|---|---|
vcad |
机器上没有 Rust 工具链(cargo 不存在),源码构建不可行;npm 包只覆盖 MCP 层 |
OpenGeometry |
浏览器侧,需要搭一个 three.js 工程才能验布尔 |
ShapeCraft |
要从源码编译 OCCT 7.8+ 依赖,超出这次时间盒 |
Gensolid |
pre-alpha,5 星、无发布物,只能读代码 |
所有耗时都是单机、单次、MX150 笔记本 GPU,不能当基准测试;我们的目的是看"时间花在哪",不是比谁快。
八、我们的判断
- 现在能动手的只有一个组合:
SolidCraft+solidcore——应用和内核都开源、都 Apache-2.0、都能在命令行里复现(本文替你跑完了)。想做浏览器端,就加OpenGeometry。 - 半年后再看:
Gensolid那条"agent 写内核、人当验证器"的路子,是这堆东西里最有实验价值的一个,但现在只是论文式的仓库。 - 别急着选型:这一波的真实成熟度差异,比 star 数差异大得多。季度跑一次
bin/cad-engines.mjs --snapshot,看谁在 push、谁归档,比任何榜单都准。
要拿自己手上的 STEP 验一遍"这家到底行不行",最省事的顺序是:先在线看一版确认面和单位对不对(上面那个英寸坑就是这一步能发现的),再决定要不要为它装 106 MB 的客户端。
边界
- 本文是原创编译/实测稿:分层清单的数据来自 GitHub REST API(2026-11-04 22:5x 抓取),快照与脚本已入库,可复跑;实测部分是我们自己在 SolidCraft 0.30.1 portable 上跑的,命令与参数写在正文里。
- 只测了 SolidCraft 一个,其余 32 个仓库只核了元数据(星、创建日、push、许可、描述),没编译、没跑;表格里的"它到底做了什么"来自各自 README,属厂商自述。
- 单位那条只记录现象(数值差 25.4 倍),未追根因,也没验证厂商是否已知。
- 星数与时间戳会变;本文所有数字都标注了抓取日,引用时请带上。
- 我们没有为任何项目背书,也没有接受厂商提供的测试账号或材料。
Sources
- 跟踪脚本与快照:
bin/cad-engines.mjs、distribution/cad-engines/repos.tsv、distribution/cad-engines/snapshots/2026-11-04.tsv(33 个仓库) - 实测对象:
tangency-labs/solidcraftv0.30.1 portable(2026-11-02),CLIcommands / run / eval / snapshot - 关键事实源:https://github.com/NVIDIA-Omniverse/usd-brep(2026-10-08 开源)、https://github.com/tangency-labs/solidcore、https://github.com/hannobraun/fornjot(已归档)
- 外来 STEP:
as1_pe_203.stp(pythonocc-demos,OCCT 官方样例装配体,AP203) - 解析值算法:60×40×20 − π·8²·20 − (1−π/4)·5²·20
同主题阅读
本文属于「CAD / 制造 / G-Code」专题。BimAnt 原创实测与编译整理,转载请注明出处。数据与结论仅代表 2026-11-04 的抓取与本地运行结果。