SolidCraft is open-source parametric 3D CAD in Rust: sketch, constrain, extrude, and change a
parameter to watch the timeline rebuild. Documentation
· try it in the browser ·
contributing ·
issues. AI agents can model with it over MCP:
solidcraft-cli mcp (how).
What's new in SolidCraft 0.23.0-nightly.20261026.81.1 is listed below, and the
ROADMAP lists
the known limitations. Designs from every earlier version open in this one.
Upgrading from 0.7 or earlier. 0.8 changed the Linux app ID to ai.storyteller.solidcraft:
flatpak update offers to replace the old app, and the .deb, .rpm and AppImage remove the old
menu entry.
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.
Documentation, the browser app and the Flatpak feed use the SolidCraft project Pages URLs.
Which file?
- Windows:
SolidCraft-0.23.0-nightly.20261026.81.1-windows-x64.exeruns as is. Or install the.msi, or unzip the
-portable.zip(x64, x86 and arm64). - macOS 11+ (Apple silicon and Intel): open the
.dmgand dragSolidCraft.apponto Applications.
The CLI is insolidcraft-cli-0.23.0-nightly.20261026.81.1-macos-universal.zip. - Linux (x86_64 and aarch64, glibc 2.35+): the
.AppImage(chmod +x, then run it), the
.debor.rpm, the.flatpak(flatpak install --user <file>), the.snap
(sudo snap install --dangerous <file>, orsudo snap install solidcraftfrom the Snap Store), or the.tar.gz. - FreeBSD:
tar -xzf solidcraft-0.23.0-nightly.20261026.81.1-freebsd-x86_64.tar.gz --strip-components 1 -C /usr/local. - Web:
solidcraft-web-0.23.0-nightly.20261026.81.1.zipis 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:
flatpak remote-add --user --if-not-exists flathub https://dl.flathub.org/repo/flathub.flatpakrepo
flatpak remote-add --user --if-not-exists solidcraft https://docs.solidcraft.io/flatpak/solidcraft.flatpakrepo
flatpak install --user solidcraft ai.storyteller.solidcraft
flatpak run ai.storyteller.solidcraftA remote added from the old bherbruck.github.io address no longer finds updates: run
flatpak remote-modify --user --url=https://docs.solidcraft.io/flatpak/repo/ solidcraft, then
flatpak update --user.
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.
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
- Viewport: a selected edge's highlight no longer shows as a wedge on a grazing face by @rbousigues88 in #3544
- Agent chat: no per-message limit by default by @bherbruck in #6349
- Windows OpenGL: use the system title bar so the picture lines up with clicks (#2063) by @raykholo in #4403
- Triangulation: split a crossing boundary segment ourselves, never in spade's assert (#4031) by @wckdboy in #5409
- Editing an Extrude or Revolve shows its sketch (#5336) by @raykholo in #5443
- Report a bug: title from the workspace and the reporter's words (#5377) by @raykholo in #5445
- Warn when a design is open elsewhere or changed on disk (#5467) by @raykholo in #5468
- Pending files for new UI strings and attribution rows by @bherbruck in #6448
- Revolve takes a planar body face as its profile (#2747) by @dudedagger42 in #5170
- Agent chat: each design tab keeps its own conversation (#5439) by @raykholo in #5612
- Sketch Dimension: point/circle to circle or arc edge (#4064) by @rbousigues88 in #4065
- Snap drawing to where two sketch curves cross (#4967) by @mvanhorn in #5342
- Preserve lid edge references after parameter changes (#5580) by @cfaulkingham in #5658
- Manage > Units opens the unit picker (#5907) by @raykholo in #5908
- Value fields step with the arrow keys and the mouse wheel (#2320) by @khanahmad4527 in #2608
- Select Other: Shift and Ctrl add the choice to the selection, as a click does (#5258) by @kaievns in #5261
- Sheet metal: bend angles as the included (press-brake) angle, set per rule (#4968) by @khanahmad4527 in #6040
- Offset Plane: through a point by @JesperWe in #3765
- Selection fields: only the active one looks active (#5256) by @kaievns in #5259
- Crash reports: a repeated panic that ends the app is counted, not reported as an unclean exit (#6051) by @JesperWe in #6052
- Preview angled construction planes by @plexi32 in #5697
- Respect design units across length fields (#3271) by @fkirill in #3315
- DXF: reject non-BMP text instead of replacing it (#5056) by @cfaulkingham in #5709
- Release: sign and notarize the macOS app (#5749) by @NecroKote in #6016
- Sheet metal: Path Flange, a chain of bends on an existing sheet edge (#4094) by @khanahmad4527 in #4096
- mcp setup: connect AI clients with one command; plain mcp finds a late app by @bherbruck in #6379
- Fix macOS fullscreen application-bar interaction (#3643) by @cfaulkingham in #3690
- Placing and meshing: no threads started for bodies that are done already by @semmelrinde in #6406
- Show imported mesh edges in shaded and wireframe views (#5662) by @cfaulkingham in #5740
- Edit Feature: a primitive in a moved component keeps its placement (#2926) by @sascha2101 in #5989
- Connect AI apps at start-up, with a preference to turn it off by @bherbruck in #6388
- Release 0.22.1 by @bherbruck in #6628
- Viewport: ambient occlusion no longer shows ghost copies of the model (#4167) by @CamWight in #4251
- Web app: open a design from a link, and an embed mode (#6252) by @raykholo in #6253
- Display cosmetic internal and external threads (#2367) by @amolinari-autotex in #2868
- Edge flange: material outside and tangent bend positions (#5941) by @khanahmad4527 in #6060
- Finished sketches on a face stay visible: a dark halo under each curve (#4862) by @raykholo in #4956
- Graphics: choose the graphics card, honour WGPU_ADAPTER_NAME (#5986) by @raykholo in #6010
- Section Analysis: the pointer over a cut no longer picks what the cut hides (#6328) by @bherbruck in #6722
- Section Analysis: bodies behind the cut no longer colour the cap (#6328) by @bherbruck in #6728
- Measure: open surface bodies report no volume or mass (#4257) by @raykholo in #4268
- Add the Sheet Metal Perforate dialog (#4379) by @raykholo in #4404
- Timeline: show only the active component's features (#2880) by @rbousigues88 in #3543
- i18n: add missing Brazilian Portuguese (pt-BR) strings by @s17sh70x2jfl031ag in #4136
- Gruvbox Dark and Dark Soft: readable selected tab labels (#4323) by @raykholo in #4324
- Sketch pattern edit shows its preview while dragging (#4412) by @raykholo in #4426
- Keep parameter rows stable while changing fields (#4461) by @cfaulkingham in #4473
- Mesh export: a quality choice, so small round features get enough sides (#4747) by @dudedagger42 in #4773
- Hole: refuse a position that isn't on the face (#5024) by @raykholo in #5029
- Update Links: show which linked design it reads, off the window thread (#5329) by @HiroKenEz in #5512
- Preferences: search the installed plugins by @thodoristsagko in #5585
- Show scroll arrows on the theme row when more themes are hidden by @Nathan-Dane in #5846
- Control channel: write each reply in one piece (#6389) by @JoKa3D in #6390
- Agent skill for reproducible bug reports (#3983) by @raykholo in #3984
- Dialog curve picks keep their sketch (#4057) by @JesperWe in #4081
- Sketch: an x distance beside a y distance on the same points isn't refused (#4352) by @raykholo in #4387
- Sketch: a distance dimension of 0 keeps the sketch fully constrained (#4368) by @raykholo in #4397
- Home: recent card no longer spins forever when its picture can't be made (#4655) by @neosandeep24 in #4721
- Assistant: pick the provider first, then its model (#5564) by @A-AL-ANAZI in #5565
- i18n(pt-BR): translate 319 missing messages by @luiscamaral in #5776
- Sketch keys: a variant with its own key leaves its family's key alone (#6274) by @JShanklin in #6289
- Toolbar: a drop-down row's tooltip names its rebound key (#6275) by @JShanklin in #6290
- Sketch Move with a rotation swaps or drops horizontal and vertical constraints (#4645) by @raykholo in #4651
- Themes: Okibi (dark) and Akari (light), from the Okibi design system (#5730) by @kaievns in #5731
- Joints: apply a joint solve through indexes instead of searches (#6392) by @JoKa3D in #6393
- component.list: group bodies, features and occurrences once (#6394) by @JoKa3D in #6395
- i18n(uk): translate 188 pending messages by @BrunIF in #4051
- I18n danish cad help 20261021 by @shop-3d in #4223
- Add Norwegian Bokmål interface translation (#4544) by @Marentius in #4556
- Cut and Intersect say which component holds the body they missed (#4639) by @raykholo in #4641
- Rigid Group counts picked instances and explains bodies in one component (#4790) by @raykholo in #4792
- A sketch point on the origin can be dragged (#4719) by @raykholo in #4837
- Home: a theme's File view follows its own colours where it sets none (#4868) by @dudedagger42 in #4924
- Render preview: test that it never paints the last Design frame (#5119) by @momysnow in #5120
- Redefine Sketch Plane names the plane a sketch is on now (#5103) by @dudedagger42 in #5545
- Fix/recovery metadata bounds by @tahazarif10 in #5578
- Offset Face: split a periodic face off its seam first, as booleans already do (#6226) by @CarlosKeese in #6227
- Docs: refresh every UI screenshot, GIF and video from the current UI by @bherbruck in #6763
- One set of X, Y and Z colours for the origin axes, view triad and Move gizmo (#976) by @HiroKenEz in #4430
- Command dialogs keep the value field focused after a viewport click (#4643) by @raykholo in #4652
- Project: don't lay a second copy over geometry the sketch already shows by @dudedagger42 in #4929
- Preferences: the web app's Updates section says how it updates (#5496) by @raykholo in #5500
- Doc: the names of split faces no longer grow with every split (#5860) by @vdirienzo in #6045
- Text parameters: a sketch text's words built from them follow every change (#727) by @NOWN-DEV in #6364
- Render: the radiance bound check uses a range, as clippy 1.97 asks (#6649) by @NOWN-DEV in #6650
- Move: placements of one part moved together each go the way asked (#4768) by @dudedagger42 in #4849
- Context menu: a right-click on a face of a selected body keeps the selection (#5849) by @calmasacow in #5915
- Release 0.23.0 by @bherbruck in #6868
- Docs site: canonical links, robots.txt and sitemap.xml by @bherbruck in #6888
- Extrude: a profile drawn twice is cut once, not as two coincident tools (#5543) by @DuBearte in #5789
- Timeline: a reorder evaluates the design once, from the cache it already has (#6186) by @DuBearte in #6187
- Open a linked part from its assembly Browser row (#2348) by @ChrisNourse in #2349
- Colored components (feature request #2507) by @vkalinsky in #2877
- Open and insert a DXF outside a sketch (#2052) by @raykholo in #4635
- Sketch: a click picks the sketch's own curve over a projected one under it (#5257) by @kaievns in #5260
- Loft: a sketch point picked in the window is an apex (#4830) by @dudedagger42 in #5207
- Sketch: a tangent whose contact is tied by Coincident, PointOnCurve or Midpoint is solved at the contact by @shuff57 in #2584
- Viewport theme: a light 3D view in a dark window, and the reverse (#4146) by @CamWight in #4147
- Browser: surface bodies get the surface icon in the Bodies folder (#4165) by @plexi32 in #4168
- Sketch Dimension: arc length from an arc and its end point (#754) by @leValdemar19 in #4245
- Look At in the viewport context menu for a planar face or plane (#4105) by @dennisklappe in #4497
- Assistant: warn when an Ollama model has no tool support (#4846) by @raykholo in #4916
- Sketch: hovering a circle's edge wakes its centre by @dudedagger42 in #5043
- Drawing: shared number formatter (#5290) by @armin0411 in #5315
- Graphics: 1x anti-aliasing where the multisampled view draws nothing (#5819, #5870) by @raykholo in #5832
- Keep focus when correcting an invalid parameter name (#3965) by @taylorhayis in #4000
- macOS: keep application bar controls alongside the native menu by @Nathan-Dane in #6190
- Every new command comes with input and output schemas (#2829) by @mknutso-2 in #4035
- Assistant: say so when a turn ends without using SolidCraft's tools (#4846) by @raykholo in #5188
- Pipe: an Operation row, so a pipe can join, cut or intersect (#2820) by @dudedagger42 in #5169
- Cache assembly browser data between unchanged frames (#662) by @flukejones in #1610
- Move, Align and previews on placed components by @dudedagger42 in #4455
- Joints: edge and corner picks follow the part when it changes by @bherbruck in #6942
- Construction points and axes: Browser rows, and pickable in the view and dialogs (#4312) by @raykholo in #4320
- Sketch patterns: count, spacing, and angle follow parameters (#5231) by @raykholo in #5332
- Roadmap: a short user-facing ROADMAP.md, with the developer detail moved to docs/roadmap-detail.md by @bherbruck in #6797
- docs: Homebrew tap and how to bump it on a release by @bherbruck in #6276
- docs: point AGENTS.md's starting steps at public files by @raykholo in #6049
- Bug template: ask to reproduce on a current build first (#5150) by @raykholo in #5154
- User guide: local models with the Assistant (#4851) by @raykholo in #4964
- Troubleshooting: what to do when a design won't open by @raykholo in #5114
- Finish the sketch when Extrude, Revolve or another feature starts (#2802) by @bwees in #2815
- Troubleshooting: Save As blocked by Windows Controlled folder access (#4479) by @raykholo in #4490
- Docs: AppImageLauncher 2.x can't start the AppImage; update to 3.0 (#4640) by @flyboy-byte in #4674
- Flatpak repository: always publish its HTTPS URL (#4864) by @raykholo in #4875
- docs: the gate reads the working tree, and how to show a picture without committing it by @vdirienzo in #4902
- Docs: don't offer winget install before the package is in winget-pkgs (#5734) by @DuBearte in #5827
- Viewport: the grid fades with the distance instead of cutting off (#4214) by @vdirienzo in #4629
New Contributors
- @wckdboy made their first contribution in #5409
- @khanahmad4527 made their first contribution in #2608
- @JesperWe made their first contribution in #3765
- @sascha2101 made their first contribution in #5989
- @s17sh70x2jfl031ag made their first contribution in #4136
- @JoKa3D made their first contribution in #6390
- @A-AL-ANAZI made their first contribution in #5565
- @luiscamaral made their first contribution in #5776
- @JShanklin made their first contribution in #6289
- @Marentius made their first contribution in #4556
- @momysnow made their first contribution in #5120
- @CarlosKeese made their first contribution in #6227
- @calmasacow made their first contribution in #5915
- @ChrisNourse made their first contribution in #2349
- @vkalinsky made their first contribution in #2877
- @armin0411 made their first contribution in #5315
- @taylorhayis made their first contribution in #4000
- @bwees made their first contribution in #2815
Full Changelog: v0.22.0-nightly.20261025.78.1...v0.23.0-nightly.20261026.81.1