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.25.1-nightly.20261028.90.1 is listed below, and the
ROADMAP lists
the known limitations. Designs from every earlier version open in this one.
New app ID. The app ID is now io.tangencylabs.solidcraft (it was ai.storyteller.solidcraft,
and ai.storyteller.solvecraft up to 0.7): flatpak update offers to replace the old app, the
.deb, .rpm and AppImage remove the old menu entry, and settings stay. On macOS the bundle ID
changed too, so macOS asks once more for the permissions it had granted.
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.25.1-nightly.20261028.90.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.25.1-nightly.20261028.90.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.25.1-nightly.20261028.90.1-freebsd-x86_64.tar.gz --strip-components 1 -C /usr/local. - Web:
solidcraft-web-0.25.1-nightly.20261028.90.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 io.tangencylabs.solidcraft
flatpak run io.tangencylabs.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 under an old ID (ai.storyteller.solidcraft, or ai.storyteller.solvecraft from 0.7 or
earlier): flatpak update --user offers to replace it with io.tangencylabs.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
- i18n: catch up Vietnamese (vi) catalog with latest main (3,309 keys) by @vandang890615 in #5823
- Render workspace UX: roadmap and claim (#6281) by @Nathan-Dane in #6282
- ui_kit: lit sphere thumbnail and look-chain widget (#6281) by @Nathan-Dane in #6284
- Inspect: center of mass measures the world state, as Measure does (#5246) by @dudedagger42 in #5268
- Render workspace: original icon drafts for owner review (#6281) by @Nathan-Dane in #6283
- Release 0.24.1 by @bherbruck in #7653
- Report a bug: scale a large window's screenshot down instead of refusing it (#7091) by @semmelrinde in #7092
- Preferences: the Colour vision preview shows the chosen mode again (#7152) by @sascha2101 in #7169
- Redefine: the features after the edited one are computed once (#7072) by @kaievns in #7076
- Mouse gestures: keep the tool search open while editing (#7121) by @cfaulkingham in #7132
- i18n test: compare pending right-to-left messages in display order (#7527) by @Lars- in #7532
- Web app: Import… reads shortcuts and theme files through vfs (#7643) by @semmelrinde in #7644
- Sketch: delete dimensions from the right-click menu (#7155) by @cfaulkingham in #7170
- Toolbar: a panel with no buttons keeps one that opens its menu (#7166) by @semmelrinde in #7503
- Test: the render-guides picture test keeps its evidence when it fails by @oursland in #7440
- Value fields on the model grow with an expression typed into them (#7469) by @kaievns in #7470
- A surface left without a configuration is configured again, not a crash (#7007) by @semmelrinde in #7401
- AGENTS.md: drop the leftover merge-conflict marker (#7279) by @CamWight in #7282
- cargo xtask skills: read SKILL.md front matter on a CRLF checkout (#7281) by @CamWight in #7284
- Sketch: a circle centred on an existing point shows its Coincident glyph (#7299) by @phanoob in #7331
- Sketch: an arc centred on an existing point shows its Coincident glyph (Refs #7299) by @phanoob in #7346
- Highlight the selected sketch in the viewport (#7156) by @semmelrinde in #7347
- Report a bug: include the Messages log and other failing features (#7348) by @semmelrinde in #7349
- Open from computer: let iOS and iPadOS pick .solidcraft files (#6977) by @semmelrinde in #7351
- Add German translations, batch 1 (#7237) by @badgerisda in #7260
- French: complete the UI catalog (#7131) by @P-tite-tete in #7133
- Report a bug: take the screenshot once the preview is done instead of giving up (#7171) by @semmelrinde in #7173
- macOS menu: disable design commands behind an open Report a bug draft (#7188) by @semmelrinde in #7193
- Report a bug: focus the empty description once, not every frame (#7190) by @semmelrinde in #7195
- Startup tests: start the backends the app would, no OpenGL driver on Windows (#1156) by @yhamil04 in #7217
- Profiles: explain public selection forms in parameter errors (#7180) by @Vittuu in #7491
- Browser: a body's name hides the body, not a sketch of the same name (#7206) by @sascha2101 in #7604
- Sketch: dimension placement and editing (#44) by @dahakbuilds in #7056
- Themes: Okibi's and Akari's start page sidebar is a neutral, not the ember (#7060) by @kaievns in #7061
- Joints: the model is evaluated for the placements a solve leaves (#7084) by @semmelrinde in #7085
- Control channel: retire a subscription when the events thread ends (#7226) by @tianxingjian2406 in #7336
- Sketch: a tangent at an end the line and the round share keeps its side (#7428) by @NOWN-DEV in #7447
- Add the built-in CGA theme (#7593) by @raykholo in #7594
- Web app: Report a bug saves its screenshot as a download (#7192) by @semmelrinde in #7197
- Rename: an imported body with numbered siblings is renamed without evaluating (#7274) by @JoKa3D in #7277
- Typed contracts for the cylinder, sphere, torus, cone, pipe, bounding solid and scale (#2829) by @mknutso-2 in #7145
- Graphics: the window no longer waits for Direct3D 12 shader compiles (#4860) by @yhamil04 in #7288
- Headless pictures: no highlight left over from the picture before (#7225) by @JoKa3D in #7326
- Trackpad: inertia stops when Shift changes mid-orbit (#7327) by @semmelrinde in #7361
- CI: run the GPU path tests only for render changes, plus nightly by @bherbruck in #7742
- Sheet metal: a base or contour flange hides its sketch (#6804) by @sascha2101 in #7151
- Sketch: a distance along a line keeps its side (#7506) by @NOWN-DEV in #7510
- Revolve: accept stored world-axis inputs (#7179) by @cfaulkingham in #7406
- Sketch: a circumscribed polygon stays regular when dragged (#7395) by @DuBearte in #7438
- Drive Joints: say why a rigid joint can't be driven and offer Edit Joint (#6981) by @SychPL in #7051
- History: delete a folder with its features, and suppress a whole folder (#7219) by @tr1pp4 in #7220
- Sketch: add points to an existing spline (#6533) by @semmelrinde in #7384
- Repeat Last Command in the command palette, with a key you can change (#7077) by @semmelrinde in #7353
- Physical Material: initialize from selected bodies (#7240) by @amolinari-autotex in #7241
- Lost GPU: a dropped frame no longer crashes the window's close (#7148) by @semmelrinde in #7400
- Fix flaky dielectric_preflight_and_start test by @bherbruck in #7722
- Report a bug: Retake rebuilds the details instead of refusing, and keeps the screenshot (#7350) by @semmelrinde in #7352
- Update Links reads again only the linked designs that changed (#5606) by @MannXo in #5674
- Reuse placement-independent model results (#6525) by @takuto-NA in #6527
- History: a face picked in the view lights the feature that made it (#6909) by @tr1pp4 in #6910
- Assistant: connect the last-used agent on startup (#7009) by @SychPL in #7124
- Add the built-in 1-bit and 1-bit Dark themes (#7550) by @raykholo in #7557
- Dialogs: open in the left column in place of the browser and History (#6707) by @Lars- in #6712
- Box dialog: place the box by its corner or centre (#5638) by @HiroKenEz in #6248
- Saved model: kept only when every body decodes to itself (#6760) by @semmelrinde in #6761
- Delete: deleting one instance of a component takes its joints with it (#7749) by @semmelrinde in #7782
- i18n(uk): add pending translations for missing strings by @BrunIF in #7556
- Move: a copying Move can be edited from the History (#7741) by @semmelrinde in #7761
- Body appearance replaces imported STEP face colours (#5769) by @raykholo in #5775
- Sketch text: cover line pitch and format-12 glyph zero (#6570) by @0xlillith in #6574
- Viewport: a frame the GPU has no memory for is drawn smaller, not a crash (#7296) by @semmelrinde in #7398
- Save: a design changed while it is written stays unsaved, and scripts wait for it (#6003) by @sascha2101 in #7619
- Sketch: name = value in a drawing tool's value box defines the parameter (#7567) by @erlis in #7660
- Ribbon: wrap Japanese button labels across two lines (#7586) by @Hainlein4711 in #7669
- Sketch: switch a circle or arc dimension between radius and diameter (#7499) by @phanoob in #7729
- Render workspace: stage bar, aligned floating docks and the Shots strip host (#6281) by @Nathan-Dane in #6296
- File dialogs open in the folder used last (#7756) by @semmelrinde in #7807
- Turkish locale: complete tr.json catalog (#6240) by @dahakbuilds in #7668
- docs: a disclaimer of warranty, liability, indemnity and harmful use by @jyviko in #3882
- Cylinder: place by distances from reference edges, like Hole (#6380) by @tr1pp4 in #6381
- Navigation: Free orbit can turn around the vertical axis (#6964) by @danieldimitrov86 in #6965
- Windows: gate Unix-only slicer readiness states (#7696) by @Vittuu in #7697
- Evaluation: keep a sketch's frame bodies across evaluations that move nothing by @Sebastion in #7814
- Add German translations, batch 2 (#7237) by @badgerisda in #7826
- Assembly: deeply nested body selection no longer stalls the window (#7502) by @dahakbuilds in #7694
- Save as Mesh: Add all bodies and Add visible bodies buttons by @marquies in #7297
- Viewport: clear new resolve targets so AMD Direct3D 12 shows the scene (#6828) by @semmelrinde in #7399
- Follow a theme file and reload it when it changes (#7573) by @raykholo in #7574
- Report a bug: Ctrl/Cmd+Enter continues on GitHub (#7203) by @semmelrinde in #7204
- Change the app id to io.tangencylabs.solidcraft, with aliases for existing installs by @bherbruck in #7681
- Origin plane names: Top / Front / Right (#6491) by @Lars- in #6496
- Sketch: deleting a dimension in a rolled-back history no longer rebuilds the features after the marker (#7253) by @semmelrinde in #7425
- Fix feature creation at timeline end by @plexi32 in #7620
- Browser with History under it: drag the split between the two cards (#7371) by @sascha2101 in #7803
- Release 0.25.0 by @bherbruck in #7916
- Ribbon tooltips: help for the Solid > Modify tools, and new toolbar commands must have it (#2758) by @yhamil04 in #7134
- New designs save as .sc; .solidcraft files still open by @bherbruck in #7325
- Sketch: Delete on a picked profile deletes the curves around it (#7107) by @yhamil04 in #7120
- Preferences: search settings (#2218) by @taylorhayis in #6002
- Browser: Bodies folders only where they help: Always, Several bodies only (the default) or Never (#4217) by @CamWight in #4219
- Extrude to Object: a Join no longer merges the body it runs to from another component (regression from #6471) by @bherbruck in #7975
- Release 0.25.1 by @bherbruck in #7983
- Feature previews: start the current selection's preview without waiting for an obsolete one (#7167) by @P-tite-tete in #7261
- Render workspace: pick in the product view with a Body, Face or Component filter, outlined in the product pass only (#6281) by @Nathan-Dane in #6426
- Navigation bar: icons for visual styles, selection modes and display (#6585) by @Nathan-Dane in #6898
- Render workspace: move the Inspector or Browser dock to either side (#6281) by @Nathan-Dane in #7230
- Render workspace: focus view, compact docks and a localisation pass (#6281) by @Nathan-Dane in #7376
- Preserve linked component materials and appearances (#7609) by @amolinari-autotex in #7616
New Contributors
- @P-tite-tete made their first contribution in #7133
- @tianxingjian2406 made their first contribution in #7336
- @MannXo made their first contribution in #5674
- @Hainlein4711 made their first contribution in #7669
- @danieldimitrov86 made their first contribution in #6965
- @Sebastion made their first contribution in #7814
- @marquies made their first contribution in #7297
Full Changelog: v0.24.0-nightly.20261027.86.1...v0.25.1-nightly.20261028.90.1