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.24.0-nightly.20261027.86.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.24.0-nightly.20261027.86.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.24.0-nightly.20261027.86.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.24.0-nightly.20261027.86.1-freebsd-x86_64.tar.gz --strip-components 1 -C /usr/local. - Web:
solidcraft-web-0.24.0-nightly.20261027.86.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
- Release 0.23.1 by @bherbruck in #7035
- Docs: blurry interface on Linux with display scaling, and how to fix it (#5979) by @thomschlie in #6195
- CONTRIBUTING: the desktop app runs on macOS too by @Mishung in #4535
- Snap smoke: wait for viewport readiness before modeling by @Ramses13th in #5346
- Docs: on Windows, give claude mcp add the CLI's full path (#5895) by @badgerisda in #5896
- Docs: a sketch family's shortcut starts the variant used last (Refs #6630) by @sascha2101 in #6817
- CLI: reject incomplete and unsupported run/eval options (#6918) by @Vittuu in #6919
- CI: GPU path tests in three shards of their own; Windows in the queue only when a group touches it by @bherbruck in #7066
- CI: GPU path tests in four shards on 16 vCPU by @bherbruck in #7096
- View: OK and Cancel in the corner of the view while a dialog or sketch is open (#6709) by @Lars- in #6714
- Pattern dialogs: Quantity is the count in every language, the motion plot keeps its own entry (#6538) by @thomschlie in #6733
- Deferred commands: the run here takes every result computed ahead (#7001) by @kaievns in #7002
- Measure: pick imported mesh outlines and endpoints by @crono2250 in #7033
- CI: keep lavapipe's shader cache for the GPU path tests by @bherbruck in #7113
- Docs: how to open the macOS build when the Gatekeeper blocks it (#5393) by @vdirienzo in #6566
- Move/Copy: show a handle for the selected rotation axis (#6822) by @cfaulkingham in #6832
- Translate the remaining history tooltip text (#4370) by @cfaulkingham in #6905
- Perspective view as a command, so a 3D mouse button can switch it by @JesperWe in #6143
- Sketch Intersect: crossings on curved faces lie on the surface; a plane on a top face cuts it by @NOWN-DEV in #6272
- Surface Loft: retain profiles from multiple sketches (#6400) by @cfaulkingham in #6844
- Preserve unchanged results when rolling the timeline (#6008) by @cfaulkingham in #6067
- Patterns: copies of a To Object extrude follow the face it reaches (#2121) by @semmelrinde in #6093
- macOS 3D mouse: unregister from the driver when the app ends, so the next launch gets the mouse (#6114) by @JesperWe in #6115
- space-mouse: cover the 32-bit usage item by @vdirienzo in #6138
- Context menu: the Appearance flyout closes when the pointer moves to another row (#6657) by @HiroKenEz in #6784
- ui_kit slider: cover egui's own handle at the top of the range (#5708) by @N3MI-DG in #5712
- Sketch display: each sketch samples within its own budget (#6524) by @sascha2101 in #6838
- GPU: an uncaught error on the window's device is logged, not a panic (#5486) by @momysnow in #5667
- Sketch: a fillet stays the arc of its corner when the corner mirrors or a line is dragged through it (#5676) by @kaievns in #5677
- Sketch: a regular line on a construction line is picked before it (#6396) by @sascha2101 in #6753
- Chamfer and Fillet refuse a point where several edges meet (#5173) by @raykholo in #5177
- Route left History feature clicks into command dialogs (#6532) by @cfaulkingham in #6734
- AI chat: keep only the newest views in the history, and explain HTTP 413 (#2298) by @KochC in #2299
- Sheet Metal: open the export save picker (#6847) by @cfaulkingham in #6856
- Construct toolbar regression tests: dialogs ask for picks (#204) by @dahakbuilds in #6681
- Startup falls back from a Direct3D 12 that can't build the UI pipeline (#6648) by @raykholo in #6682
- Frame rate readout stays beside a right-side pane, not under it (#6755) by @HiroKenEz in #6767
- SpaceMouse: rotate after tilting sketch view by @plexi32 in #6687
- Draft: preserve the selected faces’ body (#6350) by @cfaulkingham in #6446
- cli_link: the symlink test runs on Unix only, so the UI tests build on Windows (#6545) by @HiroKenEz in #6546
- Browser: a feature's menu edits its profile sketch, suppresses and rolls back (#6673) by @tr1pp4 in #6674
- Extend: join a stop that is already another curve's end (#6863) by @n0tfr3shm1lk in #6865
- Keep linked components valid through Undo after Save As (#6860) by @cfaulkingham in #6877
- Add base-height and new-body options to Snap Fit (#1994) by @dahakbuilds in #6911
- Fix manual vertical/horizontal constraints with circle centre (#617) by @dahakbuilds in #6928
- Control channel: a pushed design.changed event for clients that subscribe (#6985) by @SychPL in #6986
- Body rename: an imported assembly's other bodies keep their names and components (#2175) by @yhamil04 in #6615
- Sketch: constrain to an edge of any body, a mirrored copy too (#6348) by @yhamil04 in #6617
- Render workspace uses the window's graphics backend on Windows (#6592) by @raykholo in #6629
- Sketch: deleting part of a projected link no longer brings it back (#5098) by @sascha2101 in #6324
- Joints: a loop whose axes are a hair out of parallel still moves (#6211) by @yhamil04 in #6602
- Batch: refuse a step that would fail at its turn before the first step runs (#5853) by @sascha2101 in #6781
- Top-level cut and join reach bodies in sub-components (#5679) by @HiroKenEz in #6246
- Modeling: a copied body keeps the appearance of its original (#6423) by @vdirienzo in #6456
- Sketch: a circle drawn at the origin can be moved (#5034) by @vdirienzo in #6462
- Sketch drag: a scripted drag solves the steps past a failed one at once (#6606) by @semmelrinde in #6607
- Sketch: an offset slot can still be moved by the dimension that places it (#6569) by @semmelrinde in #6697
- Sheet metal: a pattern of a cut made in the flat is kept like the cut (#6841) by @NOWN-DEV in #6853
- Shortcuts: Ctrl+Shift+S opens Save As in the workspace (#6558) by @vdirienzo in #6567
- Save a mesh larger than the design file once it is compressed (#6600) by @cfaulkingham in #6701
- Tests: the six timing assertions do not depend on the wall clock (#6917) by @vdirienzo in #6925
- Sketch: the Midpoint Line tool shows the length and angle while drawing (#6198) by @vdirienzo in #6401
- Crash reports: keep journaling through file.new and doc.open (#6550) by @plexi32 in #6551
- Viewport: perspective while orbiting, orthographic on face-on views (#2682) by @dahakbuilds in #6700
- Sketch: keep nested circles ordered when diameters change (#6764) by @cfaulkingham in #6789
- Evaluation cache: setting a parameter back restores every feature (#6895) by @SS-EN in #6897
- Preserve plastic rules and hidden bodies through renames (#4421) by @cfaulkingham in #4425
- Insert Design: preserve source part properties (#6624) by @cfaulkingham in #6691
- Sketch Dimension: value box in the document's units (#3812) by @leValdemar19 in #3878
- Face pick by point: linear work budget, so bodies with many faces take a sketch (#6720) by @jasiek in #6721
- Section Analysis: inner edges no longer show through the cap in perspective (#6328) by @CamWight in #6332
- Agents: AGENTS.md becomes a router to focused skills, with a staleness check (Refs #6439) by @bherbruck in #6444
- design: a whole-boundaries loop loads in any curve order (#6499) by @KochC in #6516
- Claim bot: only actual claims reserve issues (#6739) by @cfaulkingham in #6775
- CI tooling: opt-in bound for local test concurrency (#1188) by @dahakbuilds in #6831
- CI: let the paused-work bot label pull requests (#6852) by @Vittuu in #6884
- Reuse existing tabs when reopening saved designs (#2413) by @ChrisNourse in #2414
- Updated AppImage takes the release file name (#3538) by @rlartot in #3658
- AI Preferences: reflect agent authentication results (#2578) by @cfaulkingham in #4253
- Appearance: open the editor when clicking the context-menu parent by @Nathan-Dane in #5826
- Sketch dimensions: a length's label says its unit (#1155) by @semmelrinde in #6131
- Patterns: one before the feature it copies follows that feature's parameters (#6726) by @semmelrinde in #6727
- Apply complete feature transactions off the window thread (#3133) by @amolinari-autotex in #3135
- Axes and points from circular edges and round faces (#3128) by @froglemonade2 in #4610
- Frames: a Weldments ribbon tab (#4003) by @Karl-VonRichter in #5262
- Agent chip: the batch step and its command, centred above the navigation bar (#5746) by @SS-EN in #5748
- macOS DMG: blueprint window with larger icons and a drag arrow (#3999) by @Nathan-Dane in #5831
- Curvature Map: a scale that lightens steadily from flat to tight (#975) by @semmelrinde in #6136
- Expressions: a number and its unit are one value (10 mm / 2 mm is 5) by @ivisaf in #6331
- Pin auto-generated body names (#6402) by @stevenpwaters in #6403
- External STEP corpus: nightly import checks (#1397) by @dahakbuilds in #6407
- Bump pillow from 12.3.0 to 13.0.0 in /assets/render/starter/tools by @dependabot[bot] in #6409
- Web app: open a design from a same-origin path (#6252) by @raykholo in #6670
- Add practical command guides and a contribution template (#5237) by @Vittuu in #6772
- Thread: right- and left-handed direction (#4414) by @amolinari-autotex in #4415
- Placement handles for Rest, Boss and Snap Fit (#4384) by @dannyow in #5362
- Viewport tests: the Metal hover pixel test keeps its pictures when it fails (Refs #1383) by @yhamil04 in #6805
- Sketch: 3D arc command (#5681) by @dahakbuilds in #5682
- Agent chat: tool calls read as summaries, raw JSON behind Details (#1457) by @HiroKenEz in #6245
- Tests: exercise home-path tooltips on Windows (#6890) by @Vittuu in #6891
- Navigation bar: the view commands (#6585) by @Nathan-Dane in #6586
- Preference: return to the previous view when a sketch ends (#7038) by @JesperWe in #7043
- Release: sign Windows binaries and MSI through SignPath Foundation by @bherbruck in #7067
- Sketch dimensions: double-click a shown dimension in the model view to edit it (#7079) by @bherbruck in #7080
- Part properties: one table of keys (#4784) by @CamWight in #4786
- Drag arrows: pattern spacing and sketch offset go negative past their start (#5497) by @flyboy-byte in #5508
- Sketch: keep the dimension box focused after a palette linetype click (#2927) by @ahmetv10 in #3197
- Disable Perspective while editing a sketch (#2144) by @cfaulkingham in #4291
- Select Other: list what is under the pointer front to back, one body at a time (#5345) by @HiroKenEz in #5509
- Extrude: the picked region is the one extruded again (#6724) by @HiroKenEz in #6766
- History: follow the Browser's translucency when docked under it by @Nathan-Dane in #6922
- Personal Hole parameter presets by @amolinari-autotex in #4480
- Themes: Clay (light) and Clay Dark, warm paper and charcoal by @bherbruck in #7342
- 3D mouse: a device's own app drives the view over a local bridge (#6081) by @makao1253 in #6094
- Links and design fonts: ask before following a network location by @bherbruck in #7372
- Release 0.24.0 by @bherbruck in #7394
- Browser: a feature's eye shows or hides the bodies it made (#5099) by @DuBearte in #6109
- Sketch: a changed length dimension keeps its start point, so a side grows from its first corner (#6070) by @DuBearte in #6139
- Move: after picking a body, go on to From, Point or Axis (#6170) by @plexi32 in #6171
- Reference features by id everywhere: Pattern/Mirror seeds and construction planes (#1134) by @dahakbuilds in #6858
- Send to Slicer: send the selected bodies to a slicer (#2595) by @nomadsgalaxy in #3600
- Claim bot: let an unassigned claimant /unclaim (#6718) by @yhamil04 in #6719
- Press Pull on a fillet's round face edits the fillet (#1932) by @yhamil04 in #6815
- Cone primitive: solid.cone with base and top radius (#5641) by @HiroKenEz in #6250
- Crash reports: capture native crashes on macOS (#2113) by @yhamil04 in #6593
- Copy and paste bodies and components (#2099) by @N3MI-DG in #3390
- Insert SVG / DXF: place, size and turn the drawing before it is added (#2605, #3443) by @phanoob in #3542
- Extrude to Object: a Join extrude also joins the target body (#6424) by @vdirienzo in #6471
- History: list a sketch under the feature built from it (#6489) by @Lars- in #6494
- Canvas to Sketch: trace a canvas image into a sketch on it (#3931) by @HotThrower71 in #4263
- Control channel: check the token before parsing the whole request by @DuBearte in #6643
- Extrude: a cut made while bodies are hidden leaves them alone (#3961) by @dudedagger42 in #5148
- Engine: one module for the design-link path helpers (no behaviour change) by @CarelT in #5420
- Canvas: the value boxes do not cover the command window (#6608) by @vdirienzo in #6661
- Dialogs: OK and Cancel at the top (#6708) by @Lars- in #6713
- CLI: evaluate scripts on the input design (#6861) by @Vittuu in #6872
- Loft: keep hidden bodies out of automatic Join targets (#1988) by @cfaulkingham in #6894
- Reopen the designs open at the last quit (#5542) by @DuBearte in #6006
- Assembly: name placed bodies without rescanning the design by @oursland in #7380
- Engine: keep every placed body's frame with the world state by @oursland in #7411
- Viewport: draw faded and see-through bodies from their plans with OIT by @oursland in #7423
- Sketch Transform: one box with handles to scale, move and turn what is picked by @Make-o-Rama in #6004
- Engine: keep the model and placed world across appearance-only edits by @oursland in #7396
- Navigation: snap free orbit direction and roll with Shift (#6943) by @Vittuu in #6949
- Arabic interface language with right-to-left text (#3762) by @A-AL-ANAZI in #3768
- Move/Copy can select from the browser (#4771) by @taylorhayis in #4774
- docs: a new label needs Arabic and Hebrew too (#3457) by @Sloptimum in #3458
- Viewport: leave bodies out of the view out of their blocks' draws by @oursland in #7436
- Viewport: hold the blocks the sorted glass stream was taken from by @oursland in #6970
- History: show the origin and bodies at the top (#6490) by @Lars- in #6495
- Viewport: write hover edges as one record per line, colours interned once by @oursland in #7416
- Patterns: a body of a moved component is copied where it is shown (#4763) by @dudedagger42 in #4969
New Contributors
- @thomschlie made their first contribution in #6195
- @Mishung made their first contribution in #4535
- @Ramses13th made their first contribution in #5346
- @badgerisda made their first contribution in #5896
- @Lars- made their first contribution in #6714
- @KochC made their first contribution in #2299
- @tr1pp4 made their first contribution in #6674
- @yhamil04 made their first contribution in #6615
- @stevenpwaters made their first contribution in #6403
- @dependabot[bot] made their first contribution in #6409
- @makao1253 made their first contribution in #6094
- @HotThrower71 made their first contribution in #4263
- @CarelT made their first contribution in #5420
- @Sloptimum made their first contribution in #3458
Full Changelog: v0.23.0-nightly.20261026.81.1...v0.24.0-nightly.20261027.86.1