Skip to content

SolidCraft v0.4.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 17:19
e6252ae

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:
solvecraft-cli mcp (how).

Highlights since v0.3.2

This is a minor release: it adds new capabilities and includes one breaking change for older scripts (see below).

  • More reliable edits: exact face history for persistent naming, so features that reference faces keep following the right ones after upstream changes.
  • Faster STEP import on desktop: independent bodies are prepared in parallel.
  • Mesh → solid conversion.
  • Toolbar: drag commands to pin them, drop-down menus open on hover, and a new Customize Toolbar dialog.
  • Preferences opens at a fixed size.
  • Alias navigation preset (Shift+Alt with left, middle or right mouse button).
  • Korean and Japanese translations.
  • Units typed in fields: enter values such as 10 mm.
  • Edit Text dialog.
  • Construction planes: Offset Plane from a face; planes along 3D paths.
  • Many bug fixes, many of them from contributors.

Breaking changes

  • Legacy command ids from older scripts are no longer accepted. Use the current dotted ids; solvecraft-cli commands lists them.

Known issues

  • #296: cutting a hole in a sheet-metal base next to two adjacent edge flanges fails.

Thank you

Thanks to everyone who reported issues, wrote regression tests and sent fixes for this release, including @0xlillith, @jonaswre, @jyviko, @lucas-aguilar89, @vitalibr, @tbreckle, @noosxe, @ich777, @essorblood, @pablopeza, @crono2250, @NAXLAB and @Mithril-3d, and welcome to our new contributors.

Compatibility names are unchanged: existing .solvecraft designs, solvecraft-cli, package
IDs and archive filenames still work. Published 0.2.0 and 0.2.1 releases keep their original
SolveCraft branding. Documentation, the browser app and the Flatpak feed use the new
SolidCraft project Pages URLs; old-name Pages addresses are not permanent aliases.

Which file?

  • Windows: SolveCraft-0.4.0-windows-x64.exe runs as is. Or install the .msi, or unzip the
    -portable.zip (x64, x86 and arm64).
  • macOS 11+ (Apple silicon and Intel): open the .dmg and drag SolveCraft.app onto Applications.
    The CLI is in solvecraft-cli-0.4.0-macos-universal.zip.
  • Linux (x86_64 and aarch64, glibc 2.35+): the .AppImage (chmod +x, then run it), the
    .deb or .rpm, the .flatpak (flatpak install --user <file>), or the .tar.gz.
  • FreeBSD: tar -xzf solvecraft-0.4.0-freebsd-x86_64.tar.gz --strip-components 1 -C /usr/local.
  • Web: solvecraft-web-0.4.0.zip is a static site to host yourself.
  • SHA256SUMS.txt: sha256sum -c SHA256SUMS.txt --ignore-missing.

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 solvecraft https://bherbruck.github.io/solidcraft/flatpak/solvecraft.flatpakrepo
flatpak install --user solvecraft ai.storyteller.solvecraft
flatpak run ai.storyteller.solvecraft

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 SolveCraft.app in Applications and choose
Open the first time (or run xattr -dr com.apple.quarantine /Applications/SolveCraft.app).
On Windows, SmartScreen may say "Windows protected your PC": More info, then Run anyway.
Licences are built in (Help ▸ About ▸ Licences, solvecraft-cli licences); the packages also
install THIRD-PARTY-LICENSES.txt. Known limitations:
ROADMAP.md.

What's Changed

  • feat: add German (de) UI localization by @ich777 in #222
  • Fix SpaceMouse axis mapping and apply 3DxWare settings by @crono2250 in #207
  • Reject degenerate intersection polylines before endpoint access by @0xlillith in #244
  • Apply Curvature, Polygon and Fix to complete sketch preselection by @0xlillith in #243
  • Make dialog header chevrons collapse and restore forms by @0xlillith in #227
  • Keep drawing after a repeated initial sketch point by @0xlillith in #252
  • Reject invalid explicit axis origins instead of silently using zero by @0xlillith in #248
  • Apply Project to preselected geometry with source sketch identity by @0xlillith in #224
  • build: macOS support for the Nix flake by @noosxe in #210
  • Offset Plane from a planar body face (#167) by @lucas-aguilar89 in #208
  • Pattern and Mirror dialogs copy picked bodies, fillets included (#193) by @lucas-aguilar89 in #214
  • Cover imported STEP colours through edits and round trips by @0xlillith in #245
  • Reconstruct supported mechanical meshes as parametric solids by @0xlillith in #256
  • feat: add web CJK font loading and robust cross-platform font detection by @Mithril-3d in #169
  • test: failing regression test for #269: MCP list_commands filter also matches parameter docs by @jonaswre in #284
  • test: failing regression test for #270: solvecraft-cli mcp --connect without a listening app gives no hint by @jonaswre in #285
  • test: failing regression test for #271: Command docs omit parameters that work: sheet.flange body_name, solid.loft targets by @jonaswre in #286
  • Preferences: fixed size, buttons flush right, recognisable gear icon (#290) by @bherbruck in #297
  • Honor design units in sketch dimensions and measurements by @0xlillith in #241
  • Edit sketch text content and placement from its outlines by @0xlillith in #253
  • test: failing regression test for #262: sheet.fold: bend zone reaching the blank outline is reported as a slanted or curved edge by @jonaswre in #277
  • Publishing through pull requests by @bherbruck in #309
  • Fillets along a straight edge between two cylinders: trim curved cap edges to the contacts by @pablopeza in #238
  • Appease X11 users with niri/wayland specific postfixup wrapper by @NAXLAB in #212
  • Toolbar: drag commands from drop-downs onto the toolbar; pin icon; Customize Toolbar… by @bherbruck in #295
  • Alias navigation preset uses Shift+Alt with LMB/MMB/RMB (Fixes #304) by @bherbruck in #306
  • Report successful Boolean retries in the timeline and robustness runs by @0xlillith in #249
  • Public reference tests: analytic and FreeCAD expected values by @bherbruck in #310
  • Reduce repeated analytic source preparation during extrusions by @0xlillith in #273
  • test: failing regression test for #263: sheet.fold accepts a fixed point that is not on the sheet by @jonaswre in #278
  • test: failing regression test for #265: Renaming a pattern copy renumbers the remaining copies by @jonaswre in #280
  • Reject ambiguous origin and construction plane names by @0xlillith in #247
  • Add Korean translation by @essorblood in #234
  • test: failing regression test for #268: Panic from truck-topology lib.rs:186 when joining struts that end on a bore wall by @jonaswre in #283
  • test: failing regression test for #261: Rectangular pattern of a hole cut scales super-linearly by @jonaswre in #276
  • Retire legacy reference data and the external command catalog by @bherbruck in #302
  • test: failing regression test for #264: Sheet metal: collinear tabs cannot be folded or flanged together by @jonaswre in #279
  • test: failing regression test for #266: Multi-profile solid.extrude with body_name names only the first body by @jonaswre in #281
  • Snap 3D bridge lines to points on other sketch planes by @0xlillith in #229
  • Preferences open over the Home page by @tbreckle in #313
  • Clip lines at the near plane so the ground grid stays visible at low angles by @vitalibr in #305
  • test: failing regression test for #267: timeline.delete of a sketch leaves later features that use its body by name by @jonaswre in #282
  • Create and edit construction planes along 3D sketch paths by @0xlillith in #240
  • Home: turn off commands that act on the hidden design by @tbreckle in #322
  • fix(kernel): name the zero-thickness rim when a shell can't open beside a round by @jyviko in #316
  • fix(kernel): fillet that uses up a side face makes a full round by @jyviko in #317
  • Prepare independent STEP bodies concurrently on desktop by @0xlillith in #312
  • Persistent names follow exact face history; file format 14 (#136, part 3 of 3) by @jyviko in #230
  • test: failing regression test for #259: Join with explicit targets also merges a non-target body that the tool touches by @jonaswre in #274
  • fix(kernel): loop fillet as tall as its wall uses the wall up by @jyviko in #318
  • test: failing regression test for #260: Targeted cut deletes another body that the tool fully covers by @jonaswre in #275
  • Toolbar: no cap on pinned buttons (Fixes #323) by @bherbruck in #326
  • Version 0.4.0 by @bherbruck in #330

New Contributors

Full Changelog: v0.3.2...v0.4.0