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.22.0-nightly.20261025.78.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.22.0-nightly.20261025.78.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.22.0-nightly.20261025.78.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.22.0-nightly.20261025.78.1-freebsd-x86_64.tar.gz --strip-components 1 -C /usr/local. - Web:
solidcraft-web-0.22.0-nightly.20261025.78.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
- Linked components: joints keep their face after Update Links (#3330) by @SychPL in #4874
- Tapped Hole: verified metric fine, UNC/UNF and parallel G/Rp catalogues by @amolinari-autotex in #4178
- Equal with three or more curves selected makes them all equal (#4985) by @DuBearte in #5139
- Trim cuts a line at its tangent point on a circle (#5074) by @DuBearte in #5163
- ci: fix local scheduling and Windows test baselines by @crono2250 in #4941
- Sketch tools: pressing a tool's shortcut again cycles its creation modes (#2459) by @phanoob in #3564
- Preferences: choose the window system on Linux (Wayland or X11) (#3083) by @fugazister in #3084
- Render workspace: complete experimental ribbon, resources and effects integration (#5493) by @0xlillith in #5494
- Render workspace: first basic delivery to main by @0xlillith in #6050
- Downloads: Windows code signing through SignPath Foundation by @bherbruck in #6207
- Agent chat: Pick context and Attach selection for elements, features and bodies (#2286) by @Rec0iL in #2288
- Sketch: select edge midpoints for horizontal and vertical constraints by @crono2250 in #5159
- Coil: its parameters show and can be edited (#3862) by @raykholo in #3915
- Save the browser's view with the design, and an option to hide the origin by default by @froglemonade2 in #1849
- Control: name the token file and spot a stale one when a call is unauthorized (#4664) by @raykholo in #4670
- Keyboard Shortcuts: a bound Shift key is named "Shift", not "Shift+ShiftLeft" (#4582) by @vdirienzo in #4657
- Press Pull: route curved faces to Offset Face (#2873) by @jason3w in #3463
- Exploded views export as an animation (#3713) by @SychPL in #3744
- Right-click menus stay open when the opening click's press and release share a frame (#2458) by @kaievns in #2460
- Pattern of features: show the direction arrow on the patterned feature (#3034) by @raykholo in #3909
- Home: test that a sample's picture arriving while it builds is not a failed build by @Karl-VonRichter in #4351
- fix(skills): quote editing description for valid YAML by @Razuer in #4389
- Orbit about the cursor: over empty space, turn about the part in view (#2616) by @dudedagger42 in #4947
- Front … Isometric View commands, Ctrl+1…7 by default (#5057) by @sandman21vs in #5058
- File: a saved model whose booleans retried is taken on opening (#5286) by @dudedagger42 in #5334
- Expand All and Collapse All in the Browser (#5190) by @mvanhorn in #5335
- Sketch: a face seen edge-on projects as one line end to end (#5374) by @kaievns in #5375
- Add a contribution skill for first-time contributors (#5851) by @raykholo in #5852
- Insert SVG: refuse geometry scaled to infinity, and bound the profile grid (#5020) by @raykholo in #5025
- Measure: copy the Distance value to the clipboard by @dennisklappe in #4442
- Browser tree: double-click a body to rename it in the row by @dennisklappe in #4460
- Extend: extend a free arc in place and add the line the preview draws (#4615) by @n0tfr3shm1lk in #4618
- Sketch palette: the Tie button shows "Tie", not its catalog key (#4854) by @GonMD in #4857
- Move preview: draw the moved bodies' own triangles, without evaluating the move by @dudedagger42 in #4912
- Create Sketch in the right-click menu (#3032) by @CamWight in #3033
- Tapered cut: run on less, then start on the face, when the run on closes a small corner (#4825) by @dudedagger42 in #4858
- Canvas: a plane seen edge-on doesn't take the image (#4717) by @dudedagger42 in #4876
- Insert Part: M2, M2.5, M14, M24 and M30 screws, bolts, nuts and washers (#2091) by @dudedagger42 in #5194
- History: the sketch at the marker is shown while it's the current step (#5202) by @raykholo in #5204
- Sketch palette: Finish Sketch sits inside the footer's inset, label centred (#5385) by @kaievns in #5387
- Sketch Dimension: click an existing dimension to edit it while the tool is on (#5397) by @Herperlerpicus in #5451
- Release 0.22.0 by @bherbruck in #6344
- OBJ export shares vertices and keeps body names (#4451) by @dennisklappe in #4462
- Sketch: the first dimension scales only a connected drawing (#3786) by @rlartot in #3815
- Model-cache tests pass in a build without git (#4045) by @dennisklappe in #4221
- Sketch drag: keep the far end of a tangent line still by @dudedagger42 in #4925
- Sketch: a group too large to solve says so, not "conflicts with" nothing (#5280) by @dudedagger42 in #5347
- Windows installer: add the install folder to PATH by @bherbruck in #6340
- Offset free-form curves and mixed chains: trim folds, round corners (#2149, #2676, #2761, #3159, #3828) by @werwolfby in #4156
- Measure: a face or edge picked by its point alone (#4099) by @raykholo in #4114
- Extrude: document which way a positive taper goes (#4098) by @raykholo in #4115
- Viewport: keep the sketches' box per world state, not every frame by @dudedagger42 in #5223
- Extrude by pressing on a face or profile and pulling by @Make-o-Rama in #4767
- Start the window on Intel Macs without indirect-call validation (#3024) by @Make-o-Rama in #4808
- Sketch on a turned occurrence: reuse moved bodies across edits (#4853) by @raykholo in #4863
- Pattern of several features: copy them in timeline order, not pick order by @Make-o-Rama in #4873
- Smooth sketch dragging on large imported faces (#3222) by @bluecmd in #3480
- Find in Browser finds the body; Find in Timeline opens the feature's folders (#3883) by @N3MI-DG in #3884
- Browser tree hover stays fast on a nested STEP assembly (#3892) by @raykholo in #3894
- Revolve, sweep, loft and hole from a nested STEP part's face join and drill it (#3223) by @raykholo in #3987
- Dimension values:
#name = valuedefines a parameter too (#2371) by @leValdemar19 in #4212 - Coil: a section from a sketch profile (#4236) by @ManInTheMiddle89 in #4239
- Timeline: the tooltip hint is translated (Part of #4370) by @raykholo in #4398
- Measure picks projected and intersection sketch curves (#4337) by @raykholo in #4427
- Undo restores what a hide put away (#2219) by @imanu86 in #4780
- Assistant: a request timeout per endpoint for slow models (#5009) by @raykholo in #5010
- MidPoint: the point goes to the line's middle, whichever is picked first by @dudedagger42 in #5011
- Korean: translate the 297 messages added since the last pass by @ssain3d-lgtm in #5147
- Thread: the refusal for a fine-only size says what to type (#4971) by @raykholo in #4977
- Performance overlay: frame-time graph and histogram, triangles, draw calls (#2548) by @fugazister in #2549
- Fillet/chamfer: find each edge on its own body by @bherbruck in #6378
- Command search: the closed field draws under system windows (#5803) by @N3MI-DG in #5804
- Skills: correct statements that no longer match 0.21.0 by @MattRuhland in #5899
- 3D mouse: follow the device that moves, not the first one found (#3988) by @Tyler-Chiriboga in #4339
- Make the generated command reference easier to browse (#5237) by @Vittuu in #5721
- inspect.parameter_sweep: check a design across a parameter's range (#2273) by @NOWN-DEV in #2276
- Windows: the taskbar button shows the mark when the first frames are slow (#6385) by @mknutso-2 in #6391
- Preferences: the theme strip shows arrows where more themes are (#6161) by @DuBearte in #6167
- view.pick: map screenshot pixels to exact geometry (#6304) by @dahakbuilds in #6329
- Sketch: right-click toggle between driving and driven dimensions (#320) by @dahakbuilds in #6357
- Configurations: a long table builds only the rows on screen by @NOWN-DEV in #6366
- Preserve the history marker when switching sketch editors (#5435) by @cfaulkingham in #6103
- Sheet metal DXF: options to leave out the bend lines and to use one layer (#4314) by @semmelrinde in #6130
- Close the File menu with Escape (#6126) by @cfaulkingham in #6132
- Model cache: each sheet body is written once, not with every state by @NOWN-DEV in #6152
- Shell: the dialog sends the picked face's body (#4555) by @semmelrinde in #6092
- Extrude: a face picked under a picked profile is extruded too (#3926) by @semmelrinde in #6099
- Dialogs: a missing pick on OK is guidance, without Create Issue (#3292) by @semmelrinde in #6101
- Joint: use the picked straight edge as the motion axis (#5457) by @cfaulkingham in #6086
- Shell: an empty Thickness makes no command, so OK waits for one (#960) by @semmelrinde in #6085
- Agent chat: a Mammouth AI preset for OpenAI-compatible endpoints (#5815) by @semmelrinde in #6082
- Identify commands beside the animated agent cursor (#622) by @cfaulkingham in #6026
- Extrude: accept manually selected target planes (#4974) by @cfaulkingham in #6030
- View toolbar: the Look At tooltip names its shortcut, Ctrl+8 (#2476) by @semmelrinde in #6071
- test: the desktop-PATH agent probe waits long enough on a loaded machine by @semmelrinde in #6072
- Ignore middle-click clipboard paste during navigation (#5855) by @raykholo in #5924
- Drive Joints: a Show ghost checkbox (#5905) by @DuBearte in #5955
- Design tabs: the tooltip says where the file is saved (#5868) by @DuBearte in #5974
- Keep the main sketch tool unchanged when a pinned tool starts (#4023) by @cfaulkingham in #6013
- Hem: the handle runs along the hem to its tip (#5828) by @rlartot in #5844
- Find in Timeline scrolls both timeline layouts to the found feature (#5850) by @HiroKenEz in #5863
- 3D mouse: the overall speed slider reaches the 5x the engine already applies by @N3MI-DG in #5704
- Preferences: Z up orientation figure is drawn right-handed (#5680) by @rlartot in #5741
- Keep the Parameters window height stable when moved (#5078) by @cfaulkingham in #5752
- Link the version number to its release notes (#5488) by @rlartot in #5765
- Sketch: undo while drawing a spline removes the last point, not the sketch (#5304) by @raykholo in #5441
- Mirror keeps the preselected feature when the object type changes (#5288) by @raykholo in #5453
- Floating history: the last done feature is no longer drawn as selected (#5415) by @raykholo in #5455
- Agent chat: hand WSL paths to agents started through wsl.exe (#5546) by @ishiichan-dayo in #5549
- Sketch Create menu: line, rectangle, and other families show their icons (#5244) by @raykholo in #5279
- Ribbon tooltips: written help for six more tools (#2758) by @rlartot in #4592
- Home: keep a removed recent design removed (#4660) by @neosandeep24 in #4718
- Viewport: show the running tool's icon beside the pointer (#4869) by @Herperlerpicus in #4870
- Edit Text: explain failed bold previews immediately (#5004) by @Reefwalker in #5155
- A straight 3D sketch line can be picked as an axis (#4363) by @raykholo in #4381
- Two-sided sketch offset shows both distances in the sketch by @thodoristsagko in #4386
- Ribbon: an active contextual tab looks selected (#4230) by @raykholo in #4242
- Extrude: a picked region expands across the reference geometry that cuts the drawn profile (#5302) by @vdirienzo in #5530
- Sketch on the sides of a thin extrude (#2722) by @rlartot in #5781
- Batch: consecutive parameter edits can rebuild the design once (#5822) by @DuBearte in #5839
- Snap points: the centre, middle and ends an edge or face offers, in the engine (#5881) by @plexi32 in #5882
- Persistent names read by one parser; four misreadings fixed (#5814) by @jijinbei in #5966
- Timeline: reorder anyway (allow_errors) and report the features the move breaks (#5962) by @DuBearte in #5988
- A count from a length says how to get a count (#5901) by @Make-o-Rama in #6011
- Prevent body renames from reusing removed body names (#6042) by @cfaulkingham in #6048
- Render: a preview setup with exposure renders and names what it leaves out (#5089) by @semmelrinde in #6073
- Windows resize smoke test: wait for a settled window before hit testing (#5523) by @raykholo in #5524
- Export Current View as DXF downloads in the browser (#3431) by @cfaulkingham in #3601
- Sketch Symmetry: centre a line between two fixed lines (#1796) by @leValdemar19 in #3895
- Sketch text: measure a line with the rule that draws it (#4813) by @CamWight in #4815
- Windows: a stuck icacls no longer freezes SolidCraft when it writes the control token (#6145) by @DuBearte in #6182
- Construction: the root's constructions are found once the design has a component by @NOWN-DEV in #6219
- Configurations: config.rule takes several rules at once and checks the rows once by @NOWN-DEV in #6223
- Joints: an origin takes a face name as long as the face's piece name by @NOWN-DEV in #6225
- Sheet metal: a refolded sheet's faces keep the names of the faces they were by @NOWN-DEV in #6268
- Names: a pattern copy's piece names match as the original's do by @NOWN-DEV in #6270
- Configurations: a parameter edit runs the suppression rules whose condition reads what changed by @NOWN-DEV in #6303
- Sketch drag: a live frame stops once its numerical solves have done their share by @semmelrinde in #6330
- Assemblies: owners of bodies looked up once per placement pass, body frames only when picked by @semmelrinde in #6356
- Expressions: remember what an expression names and a constant parameter's value by @semmelrinde in #6360
- Parts: a standard part's sketches are fully defined by @NOWN-DEV in #6376
- Names: a new feature's and input's number found without searching the design per number by @semmelrinde in #6377
- Evaluation: a feature's fingerprint text is written only when the feature changed by @semmelrinde in #6397
- Inspect: bodies measured on all cores, and once while they stay the same by @semmelrinde in #6412
- Joints: a pass over the joints evaluates the design's parameters once by @NOWN-DEV in #6418
- Sketch: a sketch whose links moved far is walked there and keeps the stored sides and turns by @NOWN-DEV in #6420
- Sketch: explicit planes take a frame (world or component) and the reply says which (#6000) by @DuBearte in #6015
- Extrude: the automatic operation is decided where the extrude starts (#467) by @semmelrinde in #6104
- Sketch: arcs and circles honour construction when they are created (#5352) by @raykholo in #5440
- Intersection curves: a point that won't project no longer panics (#5562) by @DuBearte in #5812
- Section Analysis: edges behind the cut no longer show through the cap (#6328) by @bherbruck in #6363
- CI: duplicate-PR check and a 'Changes a default' line (Refs #6439) by @bherbruck in #6442
- Joints: a face-centre origin stays put when a hole in its face moves or goes by @NOWN-DEV in #6370
- Joints: a parameter change solves the joints once by @NOWN-DEV in #6372
- Joints: an edge origin on a body placed by an offset lands on that edge by @NOWN-DEV in #6374
- fix(oracle): use curvature-weighted centroid moments for case 33 by @Benny1496 in #5442
- Display refinement waits until the camera stands still (#3595) by @SiroArt in #5446
- Parameters: name the limit an out-of-range number or over-long expression broke (#4712) by @rvmzym5xv8-star in #5906
- Sketch: accept curve snaps for Midpoint Line (#5981) by @cfaulkingham in #6041
- Pictures drawn off the window thread finish before the process exits (#6062) by @ivisaf in #6063
- AutoConstrain: dimension construction geometry (#6173) by @cfaulkingham in #6185
- Render: gate bundled studio-data tests in isolated engine builds (#5493) by @0xlillith in #6202
- Sketch text: a text on a path follows the path in the same evaluation by @NOWN-DEV in #6215
- Construction: a plane on a sheet's flat face follows the face by @NOWN-DEV in #6217
- Configurations: a design keeps up to 2048 rules by @NOWN-DEV in #6221
- Joints: a joint on an imported part's hole or face stays on that part by @NOWN-DEV in #6368
- Hole: independent tapping depth and recessed drill points by @amolinari-autotex in #4486
- A dragged command window keeps its place (#5357) by @raykholo in #5444
- Viewport: bodies stay visible after switching to perspective and back (#5422) by @raykholo in #5614
- Theme: the viewport keeps the previous colours until the camera moves (#5802) by @vdirienzo in #5835
- solidcraft-cli on PATH from the AppImage and the macOS app by @bherbruck in #6347
New Contributors
- @jason3w made their first contribution in #3463
- @Razuer made their first contribution in #4389
- @sandman21vs made their first contribution in #5058
- @dennisklappe made their first contribution in #4442
- @GonMD made their first contribution in #4857
- @Herperlerpicus made their first contribution in #5451
- @werwolfby made their first contribution in #4156
- @Make-o-Rama made their first contribution in #4767
- @ManInTheMiddle89 made their first contribution in #4239
- @imanu86 made their first contribution in #4780
- @ssain3d-lgtm made their first contribution in #5147
- @ishiichan-dayo made their first contribution in #5549
- @neosandeep24 made their first contribution in #4718
- @rvmzym5xv8-star made their first contribution in #5906
Full Changelog: v0.21.0-nightly.20261024.75.1...v0.22.0-nightly.20261025.78.1