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.13.1-nightly.20261016.47.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.13.1-nightly.20261016.47.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.13.1-nightly.20261016.47.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.13.1-nightly.20261016.47.1-freebsd-x86_64.tar.gz --strip-components 1 -C /usr/local. - Web:
solidcraft-web-0.13.1-nightly.20261016.47.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://bherbruck.github.io/solidcraft/flatpak/solidcraft.flatpakrepo
flatpak install --user solidcraft ai.storyteller.solidcraft
flatpak run ai.storyteller.solidcraftFlatpak 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
- Sweep: orientation, twist and end scale (#771, part 1) by @jyviko in #1269
- Edit Sketch no longer shows bodies a later feature deletes (#1167) by @lasselian in #1329
- Flat-pattern DXF for a laser shop: layers by role, dashed bend lines, bend notes, text cut or etched, a file per body by @NOWN-DEV in #1324
- Parameters: move user parameters up and down (#1187) by @DuBearte in #1323
- Sketch: preview the whole midpoint line while drawing it (#1358) by @DuBearte in #1371
- Navigation: a Blender preset (#1090) by @DuBearte in #1356
- The offscreen GPU tests start one backend, as the app does (#1330) by @CamWight in #1342
- Joint dialog: say why picks on one component make no joint, offer Create Components from Bodies by @SychPL in #1367
- Fix face Extrude Join targets in assemblies by @Karl-VonRichter in #1375
- Convert to Sheet Metal finishes corners and bend ends as edge flanges do by @NOWN-DEV in #1340
- Sheet metal: a cut names the pieces it parts from the base by @NOWN-DEV in #1338
- Sketch: dimension extension lines reach the nearest part of the lines (#1361) by @bherbruck in #1388
- French: catch up with main (124 messages) by @rlartot in #1331
- Modelled threads: 5-6x faster, and long threads no longer fail (#1250) by @bherbruck in #1395
- Navigation: the default orbit turns about the world origin by @kuraneko1 in #1377
- Fillet/chamfer: point the drag arrow into the corner on inside edges by @bherbruck in #1394
- Release 0.12.0 by @bherbruck in #1414
- Measure: centre-to-centre for holes, diameters for circles and arcs, slot sizes by @bherbruck in #1419
- Windows: resize border from the first frame, DPI-correct window moves by @bherbruck in #1396
- Extrude Cut of a whole face beside round corners: grow the arcs too (#1275) by @bherbruck in #1401
- A cut from a component without bodies cuts the parts it meets (#1234) by @bherbruck in #1407
- Insert Design on the ASSEMBLE panel and in the File menu (#1240) by @bherbruck in #1405
- Web app: open and insert STEP files over frames, with progress and Cancel (#1376) by @bherbruck in #1424
- Number fields take a decimal comma too (#1347) by @bherbruck in #1418
- View-dependent display refinement: finer curved faces and edges as you zoom in (#1320) by @bherbruck in #1425
- Imports become components; STEP assemblies as nested components (#1386) by @bherbruck in #1426
- Mesh edges that do not evaluate without a panic; refuse such boolean results (#1252) by @lasselian in #1364
- Fix chamfer chains ending at existing bevels by @Karl-VonRichter in #1372
- Web: installable as an app, with an Install button while the browser offers it by @jasiek in #1233
- Expressions: accept a decimal comma outside parentheses (#1347) by @DuBearte in #1382
- feat: inspect.compare: where two versions of a part differ, without a boolean of the two by @NOWN-DEV in #1423
- Joints: link offsets in b's units, new joints start inside their limits, loop dof at dead points by @SychPL in #1415
- Scenario harness folder uses the long-name temp dir (#1385) by @lasselian in #1404
- AppImage: no desktop entry when appimaged made one or integration is switched off (#1399) by @lasselian in #1406
- Context menus stay in view near the window edge; planes offer Create Sketch by @SychPL in #1398
- Keep New Body and Offset Face previews moving during distance drags by @cfaulkingham in #1238
- test: read the live crash journal through its own handle (#1448) by @HiroKenEz in #1450
- Dialogs: the Select chip keeps its size on hover (#1335) by @DuBearte in #1387
- material: report exact missing condition fields by @0xlillith in #1334
- Sketch: the first dimension scales a sketch drawn by eye (#1365) by @bherbruck in #1416
- macOS: ship solidcraft-cli inside SolidCraft.app by @bherbruck in #1456
- Boolean: a point at a boundary curve's end is that end, whatever its parameter (text cuts, #391) by @phanoob in #1195
- Booleans: planar cuts beside rounds take the exact route before the retries (#1197) by @erkexzcx in #1445
- STEP export: a half-turn arc end as a cylinder, and cut faces' sheets bounded by their faces (#1198) by @erkexzcx in #1438
- Draft: only the faces round the drafted walls must be walls or caps by @luke-kearney in #1393
- Text cuts: the 2D prism route takes a font's curves exactly by @phanoob in #1429
- sketch.create: refuse a face (or origin/x_dir/y_dir) next to plane by @HiroKenEz in #1447
- Class-A surfacing 1/3: the continuity core, a G3 free-form blend and patch crown by @midasdf in #1249
- Render preview uses the shared camera navigation by @bherbruck in #1462
- ui: review candidate physical material cards without assignment by @0xlillith in #1344
- render: normalize high precision texture inputs by @0xlillith in #1267
- Joints: a link ratio between an angle and a distance is per degree by @SychPL in #1433
- In-app agent chat: your own coding agents over ACP, plus OpenAI-compatible endpoints by @bherbruck in #1102
- Chamfer: refuse a result that grows a convex edge's part by @phanoob in #1428
- Flat pattern pan and zoom through the shared navigation by @bherbruck in #1484
- feat: a sketch text's height, place and angle can be expressions by @NOWN-DEV in #1453
- Render preview: draw within the pixel budget on 4K/5K screens (#1464) by @bherbruck in #1477
- Text cut through a part, or joined in relief, in one exact boolean by @phanoob in #1446
- Extrude: a cut takes in a hole of its profile that lies over empty space (#1360) by @phanoob in #1472
- Dialogs: steady Select chip, and dialogs move by their title (#1335) by @bherbruck in #1417
- Start page: translate its buttons, links, headings and sample cards by @rlartot in #1479
- Copy, cut and paste sketch geometry (Ctrl+C/X/V, context menu) by @bherbruck in #1500
- Release 0.13.0 by @bherbruck in #1506
- Import glTF 2.0 files (.glb, .gltf) as mesh bodies by @bherbruck in #1512
- timeline.edit: refuse fields the feature's definition doesn't have (#1491) by @erkexzcx in #1507
- render: add perspective UV interpolation and derivatives by @0xlillith in #1461
- Measure circle and arc centers as fixed 3D points by @crono2250 in #1514
- Agent chat on Windows: start npm agents through their .cmd shim by @bherbruck in #1530
- Preferences: choose the interface font (#1290) by @DuBearte in #1408
- Web app: 3D mouse navigation through the Gamepad API (#1336) by @CamWight in #1473
- Joints: gears, rack and pinion, and screws by @SychPL in #1524
- Add Turkish translation by @macrulz54 in #1520
- render: add isotropic texture footprint LOD reference by @0xlillith in #1460
- fix: a sketch on an extrude's cap keeps its face when the extrude is … by @PhilippBischoff0 in #1532
- New tab: no stale fillet preview, and + always opens a tab by @pablopeza in #1533
- Agent chat gate: curve and occurrence ids named path are not files; broken tool arguments are not run by @Rec0iL in #1499
- Show optional X/Y/Z distances in measurement overlays by @crono2250 in #1422
- sketch.cut: refuse non-object params instead of panicking by @bherbruck in #1542
- Version 0.13.1 by @bherbruck in #1545
- Import FreeCAD and Rhino files through cadmpeg (#1161) by @oursland in #1435
- render: add opaque CPU sampling and bounded mip chains by @0xlillith in #1459
- Export the current 3D view as 2D DXF with optional hidden lines by @crono2250 in #1449
- Sheet metal: an Edge Flange can choose its own corner relief by @NOWN-DEV in #1481
- CI: PRs build and test only the packages they touch by @bherbruck in #1561
- Agent chat on Windows: no terminal window flashes when agents are detected by @bherbruck in #1567
- Design format: a change is one new file, never an edit to FORMAT by @bherbruck in #1563
- sketch(fix): preserve rectangle constraints through fillets by @Karl-VonRichter in #1543
- Preserve circle and arc centre heights when measuring straight edges by @crono2250 in #1546
- Join from a sketch on a body's face joins that body (#1349) by @SychPL in #1526
- Add XAI Grok to the AI panel by @cfaulkingham in #1558
- Keep the files many PRs add to conflict-free (sorted catalogs, generated files on main) by @bherbruck in #1564
- Toolbar: a second click on a drop-down's button closes it (#1522) by @DuBearte in #1576
- Agent discovery test: the fixture uses a name Windows runs (#1554) by @DuBearte in #1575
- Contributing: claim an issue with a draft PR by @bherbruck in #1565
- Fix/boolean cut voids by @Ian-cmd-ops in #1570
- Shell: an open face next to a concave edge no longer cuts the wall past it by @Ian-cmd-ops in #1495
- Fix: edges between two faces hard to pick by @MythicForge in #1568
- STEP export: shelled revolved bodies export instead of panicking by @Ian-cmd-ops in #1496
- Booleans: when the last-resort nudge fails both ways, try two more screw axes (#1490) by @erkexzcx in #1527
- Fillet: refuse only crossed faces the round makes, not ones the body had (#1488) by @erkexzcx in #1517
- Join a flange flush with a bent, tapered loft's end where the retry fails (#1391) by @gvocale in #1556
- Headless pictures draw on the GPU, with the viewport's pipelines (CPU rasterizer as last tier) by @jyviko in #1555
- Boolean: refuse a nudged result that meshes inconsistently (#1360) by @phanoob in #1455
- Edge division: evaluate each point once by @rlartot in #1560
- solid.mirror: a plane's {origin} takes length expressions and follows them (#1492) by @erkexzcx in #1501
- Fix perpendicular fillets after connected rounds by @cfaulkingham in #1581
- Fix agent runtime lookup when launched from the desktop by @cfaulkingham in #1551
- Viewport frame-rate readout (Preferences ▸ Graphics) by @sthifen in #1580
- Claim bot: /claim and /unclaim on issues by @bherbruck in #1584
- Sketch: infinite construction lines (#1359) by @DuBearte in #1547
- Patch: G1/G2 to the faces beside the loop, general and N-sided loops, points (#759) by @jyviko in #1521
- Fix the main build: the edge-pick test used a removed field by @bherbruck in #1590
- Contributing: kernel speed work goes to solidcore (#1597) by @bherbruck in #1598
- Fix main: drop the removed viewport.no_pixels from the edge-pick test by @bherbruck in #1596
- Fix main: drop a test's use of the removed viewport.no_pixels by @bherbruck in #1594
- Desktop 3D mouse on Windows without a 3DxWare profile: object-mode axes, no emulated wheel (#1380) by @CamWight in #1528
- Sketch cut and paste: refuse parameters that are not an object (no panic) by @Ian-cmd-ops in #1577
- Claim bot: let me /unclaim my own issues by @bherbruck in #1595
- Agent chat: queue messages while the agent works, Send now, Stop, New chat, and a model picker (#1566, #1571) by @bherbruck in #1566
- Joints: joint.reach (inverse kinematics), and a jointed part follows a drag by @SychPL in #1540
- Check for updates at every start; show "Update to X" as a title-bar pill by @bherbruck in #1538
- Shell: put shell_by_opening's doc comment back on it by @bherbruck in #1588
- ci: nightly property tests with more cases by @Ian-cmd-ops in #1498
- View keys: arrows turn the view, Ctrl+arrows pan, Ctrl+8 looks at the selection (#1541) by @DuBearte in #1585
- Viewport: the grid faces side views (#1470) by @DuBearte in #1583
- Joint drive test: wait as long as the other preview tests (#1549) by @DuBearte in #1582
- Renderer: skip a frame the GPU won't stage instead of crashing (#1469) by @DuBearte in #1579
- Expressions: inch and foot marks (#1502) by @DuBearte in #1578
- STEP export: a merged partial cylinder keeps its cylinder (silent volume loss) by @Ian-cmd-ops in #1497
- Divide intersection edges from their neighbours' parameters (#1038) by @jijinbei in #1412
- Feature fields: a type for each role (Expr, BodyName, FacePick…) by @jijinbei in #1273
- Feat/Sketch: associative pattern tools with independent directions and Flip/Center controls by @Karl-VonRichter in #1601
- Perf/mesh collision by @Ian-cmd-ops in #1307
- Fix/shell saddle corners by @Ian-cmd-ops in #1316
- Split Body: a sketch line as the splitting tool (#1552) by @DuBearte in #1592
- Tessellation: point-in-trim tests skip runs of segments the ray canno… by @Ian-cmd-ops in #1309
- Motion Trace: a point's path as a joint is driven or a study plays, kept as a 3D spline by @SychPL in #1529
- Sketch on an origin plane faces the side you clicked (#1586) by @bherbruck in #1587
- Sketch: a tangent arc starts from a trimmed end (#1485) by @DuBearte in #1604
- Extrude: dragging the taper stops where the profile would close (#1602) by @DuBearte in #1614
- Intersection edge nodes advance along the curve at fine display qualities by @jyviko in #1615
- Feature mirrors and patterns: preserve replay and add Flip/Center placement by @Karl-VonRichter in #1619
- AppImage: leave the menu entry to launchers that set DESKTOPINTEGRATION by @lasselian in #1635
- Booleans: a prism cut beside the target's other faces takes the exact 2D route in a column by @phanoob in #1629
- Control channel: a timed-out request says it is still running, and its result can be asked for (#1618) by @DuBearte in #1627
- Class-A surfacing 2/3: surface match, boundary patch and CV fairing by @midasdf in #1487
New Contributors
- @kuraneko1 made their first contribution in #1377
- @cfaulkingham made their first contribution in #1238
- @luke-kearney made their first contribution in #1393
- @macrulz54 made their first contribution in #1520
- @Rec0iL made their first contribution in #1499
- @oursland made their first contribution in #1435
- @Ian-cmd-ops made their first contribution in #1570
- @MythicForge made their first contribution in #1568
- @sthifen made their first contribution in #1580
Full Changelog: v0.11.0-nightly.20261015.42.1...v0.13.1-nightly.20261016.47.1