智能体
github.com ·
@bherbruck
SolidCraft v0.8.0 发布:Rust 参数化 3D CAD 新增 MCP 支持与文件格式 16
开源 Rust 参数化 3D CAD 项目 SolidCraft 发布 v0.8.0。该版本将设计文件格式升级至 16,新增用户自定义物理材质、链接组件、命名视图、草图文字字体、折弯边法兰等功能,并修复螺纹旁圆角导致应用冻结等问题。布尔运算增加校验,会拒绝可能改变零件的重试以避免错误几何。官方称测试模型中平面面操作通过率由 61% 提升至 70%,圆角/倒角边处理由 83% 提升至 93%。项目支持通过 MCP 让 AI Agent 建模(solidcraft-cli mcp),并提供浏览器试用版。
AI推荐理由 官方 release notes,信息密度高且给出可验证的量化改进(平面面操作通过率 61%→70%,圆角/倒角边 83%→93%),并明确文件格式升级到 16、布尔运算增加校验拒绝错误几何。对 AI Agent 的价值在于提供 MCP 接口(solidcraft-cli mcp),使 Agent 可通过 MCP 进行参数化 CAD 建模,属于开发工具与 Agent 应用结合的具体新能力。局限:这是 Rust 开源 CAD 项目的小版本更新,受众偏窄,且通过率数据来自项目自测模型,非独立验证。
72
正文
Official release notes (https://github.com/bherbruck/solidcraft/releases/tag/v0.8.0)
SolidCraft is open-source parametric 3D CAD in Rust: sketch, constrain, extrude, and change a
parameter to watch the timeline rebuild. [Documentation](https://bherbruck.github.io/solidcraft/)
· [try it in the browser](https://bherbruck.github.io/solidcraft/app/) ·
[contributing](https://github.com/bherbruck/solidcraft/blob/main/CONTRIBUTING.md) ·
[issues](https://github.com/bherbruck/solidcraft/issues). AI agents can model with it over MCP:
`solidcraft-cli mcp` ([how](https://bherbruck.github.io/solidcraft/guide/mcp.html)).
**Why 0.8:** this is a minor bump because the design file format moved to version 16, and
because it adds many new features.
**What's new**
- **Face actions work on far more faces.** Sketches, offset planes and press-pull now attach to
Cut, Hole and chamfer faces, each pattern or mirror copy, side walls a Join merged and the
pieces a later feature split a face into
([#625](https://github.com/bherbruck/solidcraft/pull/625)), to moved or pasted components
([#610](https://github.com/bherbruck/solidcraft/pull/610)) and beside long thin holes
([#629](https://github.com/bherbruck/solidcraft/pull/629)). Across the test models, flat-face
actions pass 70% of the time, up from 61% (sketch 52% → 71%, offset plane 52% → 71%,
press-pull 41% → 60%).
- **Fillet and chamfer** handle a single edge whose ends meet curved or slanted faces, and blend
smooth chains of edges ([#646](https://github.com/bherbruck/solidcraft/pull/646)): 83% → 93%
of edges.
- **New:** user-defined physical materials stored in the design, linked components (insert
another design), saved body visibility, named views through `view.apply`, sketch text fonts,
corner reliefs, flanges on flanges, edge flanges that trim the base along their edge, grouped
sketch tools, Home thumbnails, and an improved Select Other list.
- **Fixes:** filleting beside a modeled thread no longer freezes the app, a loft standing on a
face fuses with it, and many sheet metal, hole and sketch fixes.
- **Booleans are checked.** A Boolean retry that would change the part away from the tool is now
refused instead of returning wrong geometry, which fixes stray cuts
([#616](https://github.com/bherbruck/solidcraft/issues/616)). MCP feature replies include
warnings.
- **Opening a design** keeps the window draggable, shows progress, and can be cancelled with
Cancel or Esc.
- **Under the hood:** compact MCP replies, a kernel-neutral native B-rep format, and an opt-in
preview from the native cache while a design rebuilds.
- **Quality:** every ordinary action is run on every face, edge, vertex and body of the test
models; CI blocks regressions and the full matrix runs nightly.
- **Security:** private vulnerability reporting is on; see
[SECURITY.md](https://github.com/bherbruck/solidcraft/blob/main/SECURITY.md).
**File format 16.** Designs are now format 16 (`solidcraft/16`). SolidCraft 0.7 and older can't
open designs saved by 0.8, as a container or as JSON; keep a copy of a file you may still open
in 0.7. Files from every earlier version still open in 0.8.
**Linux app ID.** The Linux app ID is now `ai.storyteller.solidcraft` (it was
`ai.storyteller.solvecraft`). Flatpak users from the SolidCraft feed: `flatpak update` reports
the old app as end-of-life and asks to replace it; say yes, and your settings come along. The
`.deb`, `.rpm` and AppImage remove the old menu entry on upgrade or first launch.
**Known limitations**
- A join where a flat face only partly rests on another body (for example, half past its edge) is
refused with "the bodies touch along faces that could not be fused" instead of being built
wrong ([#674](https://github.com/bherbruck/solidcraft/issues/674)).
- Some faces still can't take an attached sketch: after Revolve, Offset Face or Boss
([#494](https://github.com/bherbruck/solidcraft/issues/494)), sheet metal thickness faces
([#495](https://github.com/bherbruck/solidcraft/issues/495)), Loft, Sweep and Coil faces
([#561](https://github.com/bherbruck/solidcraft/issues/561)), faces after a Draft or a tapered
Extrude ([#563](https://github.com/bherbruck/solidcraft/issues/563)) and a Shell's rim
([#564](https://github.com/bherbruck/solidcraft/issues/564)).
- A Hole on a sheet metal face is refused
([#560](https://github.com/bherbruck/solidcraft/issues/560)); some through-all holes along a
wall or beside curved faces still fail
([#559](https://github.com/bherbruck/solidcraft/issues/559)).
- Some fillets are still refused, such as along an outline of lines and arcs
([#431](https://github.com/bherbruck/solidcraft/issues/431)).
- Cutting a coaxial cylinder from a thin disc can lose a little volume
([#500](https://github.com/bherbruck/solidcraft/issues/500)); an edge flange with different
per-edge angles leaves gaps at the corners
([#501](https://github.com/bherbruck/solidcraft/issues/501)).
- More in [ROADMAP.md](https://github.com/bherbruck/solidcraft/blob/main/ROADMAP.md#known-limitations).
**Upgrading from 0.5 or earlier.** 0.6 renamed SolveCraft to SolidCraft and made the zip
container the default save format. `.solvecraft` designs, old settings folders and
`SOLVECRAFT_*` variables are still picked up, and `solvecraft-cli` still forwards to
`solidcraft-cli`. Want plain JSON? Use **File ▸ Save As JSON…** or `--save design.json`. On
macOS, replace `SolveCraft.app` with `SolidCraft.app`. Details:
[compatibility notes](https://github.com/bherbruck/solidcraft/blob/main/docs/compatibility.md).
Documentation, the browser app and the Flatpak feed use the SolidCraft project Pages URLs.
**Which file?**
- **Windows:** `SolidCraft-0.8.0-windows-x64.exe` runs as is. Or install the `.msi`, or unzip the
`-portable.zip` (x64, x86 and arm64).
- **macOS 11+** (Apple silicon and Intel): open the `.dmg` and drag `SolidCraft.app` onto Applications.
The CLI is in `solidcraft-cli-0.8.0-macos-universal.zip`.
- **Linux** (x86_64 and aarch64, glibc 2.35+): the `.AppImage` (`chmod +x`, then run it), the
`.deb` or `.rpm`, the `.flatpak` (`flatpak install --user `), the `.snap`
(`sudo snap install --dangerous `, or `sudo snap install solidcraft` from the Snap Store), or the `.tar.gz`.
- **FreeBSD:** `tar -xzf solidcraft-0.8.0-freebsd-x86_64.tar.gz --strip-components 1 -C /usr/local`.
- **Web:** `solidcraft-web-0.8.0.zip` is a static site to host yourself.
- `SHA256SUMS.txt`: `sha256sum -c SHA256SUMS.txt --ignore-missing`.
- Files without a version in the name (`solidcraft-windows-x64.msi`, `solidcraft-linux-x86_64.AppImage`, …)
are the same packages under fixed names, for download links that always fetch the latest release.
For Flatpak feed installation and updates, add Flathub for the required runtime before
installing SolidCraft; keep both remotes in the same user installation:
```sh
flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak remote-add --user --if-not-exists solidcraft https://bherbruck.github.io/solidcraft/flatpak/solidcraft.flatpakrepo
flatpak install --user solidcraft ai.storyteller.solidcraft
flatpak run ai.storyteller.solidcraft
```
Flatpak installs from 0.7 or earlier use the old ID `ai.storyteller.solvecraft`: `flatpak update --user`
offers to replace it with `ai.storyteller.solidcraft`, and settings move along.
Single-file `.flatpak` bundles include the runtime repository address; missing runtimes
still need an internet connection. [Linux installation details](https://bherbruck.github.io/solidcraft/guide/getting-started.html#linux-flatpak).
The builds aren't signed yet. On macOS, right-click `SolidCraft.app` in Applications and choose
**Open** the first time (or run `xattr -dr com.apple.quarantine /Applications/SolidCraft.app`).
On Windows, SmartScreen may say "Windows protected your PC": **More info**, then **Run anyway**.
Licences are built in (Help ▸ About ▸ Licences, `solidcraft-cli licences`); the packages also
install `THIRD-PARTY-LICENSES.txt`.
## What's Changed
* Sketch Palette: Linetype tooltips say what the click does by @wdunn001 in https://github.com/bherbruck/solidcraft/pull/499
* Sketch Palette: one control column, a Look At icon button, a disclosure triangle, plain-noun toggles by @wdunn001 in https://github.com/bherbruck/solidcraft/pull/497
* fix: lines lying on one another do not cross in planar booleans by @NOWN-DEV in https://github.com/bherbruck/solidcraft/pull/507
* fix(sketch): merged adjacent profiles have whole edges where shared ones ended by @Mqrius in https://github.com/bherbruck/solidcraft/pull/509
* fix: a hole placed on a face follows the face along its axis only, and warns when off the face by @NOWN-DEV in https://github.com/bherbruck/solidcraft/pull/510
* fix(kernel): a small overlap is not taken for bodies apart or inside (#442, #443) by @sjbowden in https://github.com/bherbruck/solidcraft/pull/484
* Define a kernel-neutral native B-rep format and guarded adapter (#303) by @0xlillith in https://github.com/bherbruck/solidcraft/pull/461
* fix(doc): pieces of a body cut apart again get names of their own by @Mqrius in https://github.com/bherbruck/solidcraft/pull/512
* fix: text extrudes as letters with their counters, alone or beside drawn curves by @NOWN-DEV in https://github.com/bherbruck/solidcraft/pull/502
* feat: corner reliefs at sheet flange corners, chosen by the rule by @NOWN-DEV in https://github.com/bherbruck/solidcraft/pull/488
* Give the centerline tool a toolbar icon, and paint both line-type icons in construction orange by @wdunn001 in https://github.com/bherbruck/solidcraft/pull/427
* fix: draw small radii on large bodies round by @NOWN-DEV in https://github.com/bherbruck/solidcraft/pull/515
* Give solid.move the copy half of its Move/Copy label by @wdunn001 in https://github.com/bherbruck/solidcraft/pull/498
* feat: sketch text takes a font, an installed family or a font file by @NOWN-DEV in https://github.com/bherbruck/solidcraft/pull/516
* test: failing regression test for #533 (ignored until fixed): Assemblies: no way to insert another design as a linked component (STEP insert drops sheet-metal history and never updates) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/534
* test: failing regression test for #532 (ignored until fixed): Physical materials: no user-defined materials (library is fixed to 14 entries) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/554
* test: failing regression test for #535 (ignored until fixed): Sheet metal: hole faces on a folded panel lose their sketch-curve names (side:c1#1 becomes F6:face:10) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/539
* test: failing regression test for #528 (ignored until fixed): No way to apply a saved named view or a camera from scripts/MCP (view.save stores views, screenshot only takes standard views) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/543
* test: failing regression test for #544 (ignored until fixed): Blind Ø2 hole into a long D-profile bar is refused ("exact fallback … takes planar faces only") although it stays clear of the round face by @jonaswre in https://github.com/bherbruck/solidcraft/pull/551
* test: failing regression test for #546 (ignored until fixed): solid.extrude with taper refuses profiles of lines and arcs: "not supported yet: tapered profiles mixing lines and arcs" by @jonaswre in https://github.com/bherbruck/solidcraft/pull/571
* fix: inspect.interference prunes by bounding-box sweep instead of refusing more than 200 bodies (#527) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/536
* fix(ui): persist keyboard zoom and stabilize scale drags by @0xlillith in https://github.com/bherbruck/solidcraft/pull/574
* feat: feature replies list the bodies the feature created (#374) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/525
* Action matrix: every ordinary action on every face, edge, vertex and body of the corpus by @bherbruck in https://github.com/bherbruck/solidcraft/pull/553
* ui.at picks an origin plane where a click selects it by @kravens in https://github.com/bherbruck/solidcraft/pull/575
* test: land the remaining ignored regression tests from #548-#573 by @bherbruck in https://github.com/bherbruck/solidcraft/pull/582
* Show a bounded native-cache preview before authoritative reconstruction (#303) by @0xlillith in https://github.com/bherbruck/solidcraft/pull/463
* Create SECURITY.md for security policy by @pjrus in https://github.com/bherbruck/solidcraft/pull/526
* fix: raising a pattern's count after a rename numbers the new copies after the others (#372) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/540
* fix(sheet): keep a stored fold working when its fixed point drifts off the sheet (#370) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/537
* fix(sheet): sheet.flange refuses rule values instead of ignoring them (#570) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/594
* fix(ui): preserve construction tools and dashed feedback by @0xlillith in https://github.com/bherbruck/solidcraft/pull/600
* Picks on a moved or pasted component build where it is shown (#558) by @bherbruck in https://github.com/bherbruck/solidcraft/pull/610
* feat: save body and occurrence visibility with the design (#531) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/592
* ci: scan dependency advisories nightly and update XML parser by @0xlillith in https://github.com/bherbruck/solidcraft/pull/605
* fix(sheet): flat pattern reports cut-outs exactly as circles, lines and arcs (#542) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/552
* fix(sheet): refuse a fold's fixed point far above or below the sheet (#371) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/538
* fix(ui): preview actual polygon outlines while drawing by @0xlillith in https://github.com/bherbruck/solidcraft/pull/583
* fix: extend a cut or join tool only past an end that lies on a target face (#545, #544) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/609
* fix: draft a whole round wall from one pick (#547) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/603
* fix: tapered extrude of profiles mixing lines and tangent arcs (#546) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/587
* fix: faces a sheet fold moves keep their names (#535) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/585
* fix(sheet): a box or cylinder cut along the sheet normal is flat machining (#541) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/550
* feat: compact MCP batch replies; feature replies name changed and removed bodies (#530) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/599
* fix: the bend table and bend lines follow what cut-outs leave of a bend by @NOWN-DEV in https://github.com/bherbruck/solidcraft/pull/607
* feat: flanges on flanges follow their flange's end and close at corners by @NOWN-DEV in https://github.com/bherbruck/solidcraft/pull/601
* feat: user-defined physical materials stored in the design (#532) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/606
* feat: Group sketch creation tools and remember variants per part by @Karl-VonRichter in https://github.com/bherbruck/solidcraft/pull/589
* fix(ui): primitives go on the picked face or vertex (#580) by @lasselian in https://github.com/bherbruck/solidcraft/pull/598
* fix: a dimension from linked geometry keeps its side when the source moves past it by @NOWN-DEV in https://github.com/bherbruck/solidcraft/pull/614
* Add bounded portable Home thumbnails to design files by @0xlillith in https://github.com/bherbruck/solidcraft/pull/518
* Linux app id: ai.storyteller.solidcraft, with an end-of-life rebase from the old id by @bherbruck in https://github.com/bherbruck/solidcraft/pull/619
* feat: view.apply restores a named view or camera; MCP screenshot takes a named view or camera (#528) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/595
* Sketch on cut walls, chamfers, pattern copies, join-merged sides and split faces by @bherbruck in https://github.com/bherbruck/solidcraft/pull/625
* feat: fit reduce lowers the radius only where it doesn't fit by @jyviko in https://github.com/bherbruck/solidcraft/pull/496
* fix: filleting beside a modeled thread no longer freezes the app (#602) by @lasselian in https://github.com/bherbruck/solidcraft/pull/618
* feat(mcp): support compact single execute replies by @0xlillith in https://github.com/bherbruck/solidcraft/pull/591
* Through-all holes beside walls: a long thin tool keeps its outside out by @bherbruck in https://github.com/bherbruck/solidcraft/pull/629
* fix: fuse a loft standing on a face instead of returning touching shells (#396) by @kravens in https://github.com/bherbruck/solidcraft/pull/577
* fix: edge flanges trim the base along their own edge and relieve bends that end beside it by @NOWN-DEV in https://github.com/bherbruck/solidcraft/pull/634
* feat: insert another design as a linked component (#533) by @jonaswre in https://github.com/bherbruck/solidcraft/pull/596
* fix(ui): Select Other keeps its list readable on dense meshes by @Alan16888 in https://github.com/bherbruck/solidcraft/pull/636
* Fillet and chamfer of one edge ending on curved, slanted or several faces (#556) by @bherbruck in https://github.com/bherbruck/solidcraft/pull/646
* Keep the window draggable while a design opens by @bherbruck in https://github.com/bherbruck/solidcraft/pull/643
* fix: refuse Boolean retries that change the part away from the tool (#616) by @bherbruck in https://github.com/bherbruck/solidcraft/pull/644
* Release 0.8.0 by @bherbruck in https://github.com/bherbruck/solidcraft/pull/648
## New Contributors
* @sjbowden made their first contribution in https://github.com/bherbruck/solidcraft/pull/484
* @kravens made their first contribution in https://github.com/bherbruck/solidcraft/pull/575
* @pjrus made their first contribution in https://github.com/bherbruck/solidcraft/pull/526
* @Karl-VonRichter made their first contribution in https://github.com/bherbruck/solidcraft/pull/589
* @lasselian made their first contribution in https://github.com/bherbruck/solidcraft/pull/598
* @Alan16888 made their first contribution in https://github.com/bherbruck/solidcraft/pull/636
**Full Changelog**: https://github.com/bherbruck/solidcraft/compare/v0.7.0...v0.8.0
Repository README (current repository documentation, not release changes)
# SolidCraft
**An open-source parametric 3D CAD application built in pure Rust.**
Sketch, constrain, and build solids with a parametric feature timeline. Change a dimension
and watch your model rebuild. Run it on your desktop, in your browser, or let AI agents
model through the built-in MCP server.

*A Raspberry Pi 4 case from an empty design: a sketch dimensioned with the board's parameters, extrude, fillet, shell, the rim rounded in one pick, an M2.5 standoff patterned on the 58 × 49 mm hole rectangle, port cut-outs, vent slots, "Pi 4" engraved in DejaVu Sans Bold and a PETG material defined in the design, with its mass in Properties, then height 24 → 32 mm in Parameters and it all rebuilds. 9× playback. [Full video](https://github.com/bherbruck/solidcraft/raw/refs/heads/main/docs/screenshots/demo-0.8.mp4), recorded with the [demo script](examples/demo/record_ui.sh).*
## Download
[![Download for Windows][badge-windows]][windows-msi]
[![Download for macOS][badge-macos]][macos-dmg]
[![Download for Linux][badge-linux]][linux-appimage]
[![Get it from the Snap Store][badge-snap]][snap-store]
[![Try it in your browser][badge-web]][web-app]
- **Windows:** download and run the [installer][windows-msi].
Also for [ARM64][windows-arm64-msi] and [32-bit][windows-x86-msi] PCs, or as a
[portable zip][windows-portable] that runs without installing.
- **macOS:** open the [disk image][macos-dmg] and drag SolidCraft into Applications
(Apple silicon and Intel).
- **Linux:** download the [AppImage][linux-appimage], allow it to run as a program and open it.
Or install the [.deb][linux-deb] (Ubuntu, Debian, Mint) or [.rpm][linux-rpm] (Fedora,
openSUSE), or use [Flatpak](https://bherbruck.github.io/solidcraft/guide/getting-started.html#linux-flatpak).
With Snap: `sudo snap install solidcraft` ([Snap Store][snap-store], or the [.snap file][linux-snap]).
For ARM64: [AppImage][linux-arm64-appimage], [.deb][linux-arm64-deb], [.rpm][linux-arm64-rpm].
- **Web:** [try it in your browser][web-app], no install.
The downloads aren't signed yet. On Windows, if SmartScreen warns you, choose **More info**, then
**Run anyway**. On macOS, the first time, right-click SolidCraft in Applications and choose **Open**.
Older versions, checksums and other formats are on the [releases page](https://github.com/bherbruck/solidcraft/releases).
Install details, upgrading from earlier builds and building from source are in
[Getting started](https://bherbruck.github.io/solidcraft/guide/getting-started.html).
[badge-windows]: https://img.shields.io/badge/Windows-Download-0078D6?style=for-the-badge&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0id2hpdGUiPjxwYXRoIGQ9Ik0yIDJoOS41djkuNUgyek0xMi41IDJIMjJ2OS41aC05LjV6TTIgMTIuNWg5LjVWMjJIMnpNMTIuNSAxMi41SDIyVjIyaC05LjV6Ii8%2BPC9zdmc%2B
[badge-macos]: https://img.shields.io/badge/macOS-Download-333333?style=for-the-badge&logo=apple&logoColor=white
[badge-linux]: https://img.shields.io/badge/Linux-AppImage-E95420?style=for-the-badge&logo=linux&logoColor=white
[badge-snap]: https://img.shields.io/badge/Snap-Snap_Store-82BEA0?style=for-the-badge&logo=snapcraft&logoColor=white
[badge-web]: https://img.shields.io/badge/Web-Try_in_browser-2EA44F?style=for-the-badge&logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLXdpZHRoPSIyIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjEyIiByPSIxMCIvPjxwYXRoIGQ9Ik0yIDEyaDIwTTEyIDJhMTUgMTUgMCAwIDEgMCAyME0xMiAyYTE1IDE1IDAgMCAwIDAgMjAiLz48L3N2Zz4%3D
[windows-msi]: https://github.com/bherbruck/solidcraft/releases/latest/download/solidcraft-windows-x64.msi
[windows-arm64-msi]: https://github.com/bherbruck/solidcraft/releases/latest/download/solidcraft-windows-arm64.msi
[windows-x86-msi]: https://github.com/bherbruck/solidcraft/releases/latest/download/solidcraft-windows-x86.msi
[windows-portable]: https://github.com/bherbruck/solidcraft/releases/latest/download/solidcraft-windows-x64-portable.zip
[macos-dmg]: https://github.com/bherbruck/solidcraft/releases/latest/download/solidcraft-macos-universal.dmg
[linux-appimage]: https://github.com/bherbruck/solidcraft/releases/latest/download/solidcraft-linux-x86_64.AppImage
[linux-deb]: https://github.com/bherbruck/solidcraft/releases/latest/download/solidcraft-linux-x86_64.deb
[linux-rpm]: https://github.com/bherbruck/solidcraft/releases/latest/download/solidcraft-linux-x86_64.rpm
[linux-arm64-appimage]: https://github.com/bherbruck/solidcraft/releases/latest/download/solidcraft-linux-aarch64.AppImage
[linux-arm64-deb]: https://github.com/bherbruck/solidcraft/releases/latest/download/solidcraft-linux-aarch64.deb
[linux-arm64-rpm]: https://github.com/bherbruck/solidcraft/releases/latest/download/solidcraft-linux-aarch64.rpm
[linux-snap]: https://github.com/bherbruck/solidcraft/releases/latest/download/solidcraft-linux-x86_64.snap
[snap-store]: https://snapcraft.io/solidcraft
[web-app]: https://bherbruck.github.io/solidcraft/app/
**Documentation:** the [SolidCraft book](https://bherbruck.github.io/solidcraft/) (user guide,
developer guide and command reference; sources in [docs/book](docs/book)).
**Status: early but usable for simple parts.** 75 of 76 public reference parts
match their analytic or FreeCAD-computed volume, area, centre of mass and bounding box
([docs/oracle.md](docs/oracle.md)); the other is a tracked bug.
These checks do not establish complete geometric or workflow equivalence. The commands SolidCraft has
are listed by area in [docs/features.md](docs/features.md); status and plans are in [ROADMAP.md](ROADMAP.md).
Open work and known bugs are in [GitHub issues](https://github.com/bherbruck/solidcraft/issues),
and help is welcome: see [CONTRIBUTING.md](CONTRIBUTING.md).
## Built with SolidCraft
*SELENE, a scientific rover built entirely through SolidCraft's MCP server by
[@0xlillith](https://github.com/0xlillith/solidcraft-rover): 3,323 editable timeline steps that
rebuild with no errors, replayed here at 2× speed.
[Full video](https://github.com/bherbruck/solidcraft/raw/refs/heads/main/docs/screenshots/rover-build.mp4)
· [download the editable model](https://github.com/0xlillith/solidcraft-rover/releases/tag/v1.0.0).*
## What works
- **Sketches** on origin planes, offset planes or planar faces: lines, rectangles, circles,
arcs, polygons, slots, ellipses, fit/control splines, conics and text; construction geometry,
projection, trimming, fillets and chamfers, including corners at the origin.
New face attachments retain supported construction identities and chosen occurrences;
missing sources expose an explicit plane repair workflow. See [face attachments](docs/face-attachments.md).
Explicitly closed fit splines and closed associative offsets use periodic C2 interpolation.
Supported convex line-and-arc offsets retain their identity when an inset consumes corner
arcs, and linked extrusions follow the current boundary. Breaking the association freezes
the boundary and keeps existing extrusions usable.
Curve drawing and picking adapt together to zoom and display scale, including small circles
at Fit and sketches in placed components.
- **Constraints and dimensions** solved by our own solver. Points the constraints fix relative
to known geometry are placed exactly by construction (loci intersections and rigid-cluster
decomposition, after Owen 1991 and Fudos–Hoffmann 1997); Levenberg–Marquardt solves the rest,
and the rank of its Jacobian gives the remaining degrees of freedom. Constraints: coincident,
point on curve, horizontal/vertical, parallel, perpendicular, tangent, curvature (G2), equal,
concentric, collinear, midpoint, symmetry, fix; linear, aligned, horizontal, vertical,
point-to-line, radius, diameter, angle, arc sweep, arc length and slot length dimensions driven
by parameters. Over-constraining edits are rejected; fully constrained geometry turns black.
Dragging solves the sketch every frame and rebuilds the model once, when the drag ends.
Select a line or its two endpoints, type its dimension and press Enter to commit one undo
step; with Sketch Dimension it's D, click, type, Enter. Fit keeps sketch geometry clear of the palette and navigation controls.
- **Profiles** found automatically, including regions split by lines and holes inside outlines.
Newly captured complete adaptive boundaries retain their outer and hole source identities
when spline span counts change. Partial or ambiguous boundaries do not qualify.
- **Features** on a parametric timeline: extrude, revolve, sweep, loft, fillet/chamfer,
shell, draft, holes, threads, patterns, mirror, split, combine, move and construction geometry.
The timeline rebuilds incrementally; features can be edited, suppressed, renamed, reordered
and deleted. Supported geometry and current limitations are described in [ROADMAP.md](ROADMAP.md).
New revolves preserve symmetric and two-sided angular placement across reversed axes;
older designs retain their saved convention when reopened or edited.
- **Parameters and configurations** with unit-aware expressions (`2 * width + 5 mm`,
`angle / 2`), ordered rules, feature suppression and per-row body materials/appearances.
- **Assemblies** with nested components and occurrences, joints, motion studies, contact sets,
interference and material-aware mass properties. Recorded body transfers preserve modelling
history and world placement; 3D sketch wires retain their coordinate frames through edits.
- **Sheet metal** with flanges, hems, fold/unfold/refold, material cutouts, flat patterns,
retained shallow prismatic pockets, exact line/arc/circle DXF outlines and bend tables;
plastic enclosure features and rules. Pocket depth and side survive unfold/refold and appear
separately from through-hole outlines in the flat preview and DXF.
- **Files**: design containers (`.solidcraft`) with lossless binary mesh payloads;
plain JSON remains supported for opening, Save As and export. Desktop Open can show a saved
provisional picture from warm geometry caches while rebuilding before editing; caches never
replace the parametric design. Export to STEP (AP242 with body names, colours and
components as assemblies; revolved faces as native planes, cylinders, cones, spheres and tori),
IGES 5.3 (manifold solid B-reps with names and colours), 3MF, STL (binary/ASCII) and OBJ;
3MF, STL and OBJ import as mesh bodies (they render, measure, move and export; solid features
need B-rep bodies). Convert Mesh reconstructs supported closed constant-section parts
as parametric solids with planar and circular cylindrical faces;
STEP import (AP203/AP214/AP242 solids, assemblies, units, names, colours) and IGES import
(manifold solid B-reps, or trimmed and bounded surfaces sewn into solids) as a base feature
that later features build on — open a `.step`/`.stp`/`.igs`/`.iges` file, insert one into a
design, or drop it on the window ([docs/step-import.md](docs/step-import.md)).
- **Desktop app** (egui + wgpu): toolbar with workspace tabs, browser, timeline, 3D viewport with
axis view and navigation bar, sketch tools, feature dialogs, command palette, and a JSON-lines
control channel so agents and tests can drive it.
Feature errors and Help can open an editable **Create Issue** draft with relevant context
and an optional reviewed screenshot; opening GitHub does not submit the report.
- **Headless CLI** `solidcraft-cli`: run command scripts, measure (volume, area, centre of mass,
face/edge/vertex counts), export, render PNG snapshots and replay reference recipes.
- **MCP server** `solidcraft-cli mcp`: AI agents model, measure and look at parts headless or
in the running app (see below).
## Build and run
```sh
cargo run --release -p solidcraft -- --sample # desktop app with a sample part
cargo run --release -p solidcraft-cli -- commands # the command registry
cargo run --release -p solidcraft-cli -- run examples/bracket.json --out bracket.step
cargo run --release -p solidcraft-cli -- snapshot examples/bracket.json --out bracket.png
cargo run --release -p solidcraft -- part.step # open a STEP file as a new design
cargo run --release -p solidcraft-cli -- eval part.step # measure an imported STEP file
cargo xtask ci # fmt, clippy, tests, assets, layers, wasm
```
Windows builds: `cargo xwin build --release --target x86_64-pc-windows-msvc -p solidcraft`.
On Windows and Linux, SolidCraft detects a connected 3Dconnexion SpaceNavigator or SpaceMouse through its
multi-axis HID interface. Move the cap to pan and zoom, and tilt or twist it to rotate the 3D view.
While editing a sketch, the cap pans and zooms without changing the sketch view. The Navigation
page in Preferences has an on/off switch and a speed control for the 3D mouse.
On Linux SolidCraft reads `/dev/hidrawN` directly, so the logged-in user needs access to the
device. A udev rule that adds the `uaccess` tag does that, for example
`/etc/udev/rules.d/70-3d-mouse.rules` for devices with 3Dconnexion's vendor id:
```
SUBSYSTEM=="hidraw", ATTRS{idVendor}=="256f", TAG+="uaccess"
```
Older SpaceNavigators use Logitech's vendor id `046d`; add a rule with their product id (see `lsusb`)
instead of matching every Logitech device. Reload with `sudo udevadm control --reload && sudo udevadm trigger`, then replug the device. The Flatpak
sandbox does not expose hidraw devices, so the 3D mouse only works with native builds there for now.
Devices that send all six axes in HID report 1 (some homemade ones do) are recognised from their
report descriptor, so they work as well.
In the browser: `cd apps/solidcraft-web && trunk build --release --public-url ./` (WebGPU, or
WebGL2 with `?webgl`; `?sample` opens the sample part).
## Scripts
A script is a JSON list of commands, the same ones the UI runs:
```json
{"commands": [
{"command": "sketch.create", "params": {"plane": "XY"}},
{"command": "sketch.rectangle.two_point", "params": {"p0": [0, 0], "p1": [40, 30]}},
{"command": "solid.extrude", "params": {"distance": 20}},
{"command": "solid.fillet", "params": {"edges": [[0, 0, 10]], "radius": 3}}
]}
```
## AI agents (MCP)
`solidcraft-cli mcp` is a [Model Context Protocol](https://modelcontextprotocol.io) server on
stdio. Headless it runs its own design session; with `--connect 127.0.0.1:PORT` it drives the app
started with `solidcraft --control PORT`, so you can watch the agent model. Tools:
`list_commands`, `execute`, `batch`, `inspect_design`, `measure`, `body_topology`,
`set_parameter`, `screenshot` (returns the image), `export`, `undo`, `redo`, `new_design`, `open`,
`save`. Claude Code: `claude mcp add solidcraft -- solidcraft-cli mcp`. Details, client
configuration and an example session: [docs/mcp.md](docs/mcp.md).
## Architecture
| Layer | Crates | Role |
|---|---|---|
| L0 | `geom` | vectors, planes, profiles, meshes and their measures |
| L1 | `sketch`, `kernel`, `render` | constraint solver and profiles; the B-rep kernel boundary (truck); view math and CPU rasterizer |
| L2 | `doc` | parameters, expressions, the feature timeline and its incremental evaluation |
| L3 | `io` | design files, STL/OBJ/STEP/3MF export, STEP and 3MF/STL import features |
| L4 | `engine` | the session and the command registry (everything is a command) |
| L5 | `ui-egui`, `mcp` | the swappable desktop front end; the MCP server (headless or bridged to the app) |
| apps | `solidcraft`, `solidcraft-cli` | desktop app, headless CLI |
## Contributing
Coming from Autodesk Fusion? SolidCraft uses familiar parametric CAD workflows: constrained
sketches, solid features, an editable timeline, parameters and assemblies. See the
[roadmap](ROADMAP.md) for supported operations and current limitations.
See [CONTRIBUTING.md](CONTRIBUTING.md): how to build and test, the code map, the clean-room
and licence rules, and where help is wanted most.
## Licence
MIT OR Apache-2.0, at your option. Developed under the
[clean-room contribution rules](CLAUDE.md); third-party code and assets retain their
documented licences and attribution.
SolidCraft is independent. Behaviour is designed from public documentation, general CAD
conventions and user feedback. Reference tests use analytic values and open-source tools.
SolidCraft is not affiliated with, sponsored by or endorsed by Autodesk. Autodesk and
Fusion are trademarks of Autodesk, Inc.