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.18.2-nightly.20261021.63.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.18.2-nightly.20261021.63.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.18.2-nightly.20261021.63.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.18.2-nightly.20261021.63.1-freebsd-x86_64.tar.gz --strip-components 1 -C /usr/local. - Web:
solidcraft-web-0.18.2-nightly.20261021.63.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
- Triage bot and PR-based claims by @jyviko in #2397
- Persistent face names: keep exact history when a prism boolean meets stacked pieces of one cylinder (#1209) by @rlartot in #2205
- Fix red main: record robustness seeds 13, 67 and 94 after #2064 by @bherbruck in #2396
- Kernel profile: a thread's faceted cut and the reference display mesh are timed (#1833) by @NOWN-DEV in #2095
- Extrude: a side drawn in collinear pieces is one face (#1788) by @DuBearte in #1949
- Report an Issue: open issues on tangency-labs/solidcraft by @jyviko in #2417
- Issue forms and needs-info: ask short bug reports for steps to reproduce by @jyviko in #2416
- Agent chat: pop out into its own window, dock back by @onembyte in #1745
- Combine: a cut keeps a body joined from separate pieces in one body by @H1D in #2247
- Extrude: a taper composes with a start offset (#2312) by @acbrazzl in #2313
- Fix/id overflow by @Ian-cmd-ops in #1589
- CI: size parallel compiles to the job's memory, not its CPUs by @jyviko in #2425
- CI: run every robustness golden on pull requests that change geometry by @bherbruck in #2492
- Agent chat: attach files and pictures to a message by @onembyte in #1744
- Rectangular Pattern: Direction 2 gets its own drag arrow for Spacing 2 (#2462) by @HiroKenEz in #2463
- CI: the job-sizing step never fails a job when memory can't be read by @jyviko in #2512
- CI: drafts run no CI until marked ready for review by @jyviko in #2517
- Preferences: choosing a font no longer collapses the window (#1800) by @rlartot in #2221
- Glossary: one term for each idea, as a docs book page (#1569) by @CamWight in #2484
- Control channel: deterministic timed-out request test (#2388) by @martinpalsson in #2391
- Custom colour themes: theme files, Gruvbox built in (#2255) by @fugazister in #2405
- A surface the GPU fails to reconfigure is logged and retried, not a crash (#1935) by @HiroKenEz in #1966
- i18n: add Polish (pl) UI translation by @cyryllo in #2032
- Plastic dialogs: dimension fields show their units (#1936) by @morelandjo in #2107
- Agent chat: keep Send in view for a long message, open "View attached" (#2224) by @Rec0iL in #2225
- sketch: live preview for fillet and chamfer corners by @n0tfr3shm1lk in #2044
- refactor(ui): one function per motion dialog page by @jijinbei in #2294
- Browser: hidden items grey out, and folders keep their own visibility by @N3MI-DG in #2308
- Hole: "single" placement follows its sketch point (#2110) by @Loohi in #2336
- Offset Plane: default the distance to 0 mm (#2327) by @spuder in #2338
- CI: bot script changes run only the repository checks by @jyviko in #2444
- Orbit around the point under the cursor: over empty space, pivot about the view centre (#2138) by @DuBearte in #2142
- Preserve warm assembly caches across Save As renames by @yutyan0119 in #2120
- docs: align contribution guidance with current capabilities and CI by @Vittuu in #2594
- Agent chat: attached pictures use the shared viewer, in any format, decoded in the background by @Rec0iL in #2554
- Joint origins: resolve by the named face, keep a hole's end and the turn (#2186) by @NOWN-DEV in #2187
- Fix red main after #2247: record its robustness seeds, and keep older designs' joins of split pieces working by @H1D in #2540
- CI: run the triage and claim bots on the trusted light runner by @bherbruck in #2655
- Revert: triage and claim bots back on GitHub's runners by @bherbruck in #2735
- Joints: origins on an edge of a face, at its middle or a corner (#2403) by @NOWN-DEV in #2404
- Mutation testing: judge kernel mutants by the black-box suites (#1597) by @oursland in #2660
- Docker: accept trunk's shorter content hashes by @bherbruck in #2734
- Flatpak smoke test: wait for the viewport before the Wayland probe by @bherbruck in #2736
- 3MF import: read objects in other model parts (production extension) (#2089) by @Tyler-Chiriboga in #2127
- fix(i18n): unify font baseline for CJK UI (rebased #1432) by @jyviko in #2123
- Browser sidebar: drag its width, and float it over the workspace by @tdslot in #2741
- UI: the Interference dialog and the continuity legend's Gap are translatable by @rlartot in #2443
- Fix orbit about the picked point (regression in 0.16.0) by @bherbruck in #2753
- CI: keep the fast self-hosted runners for main and the merge queue by @bherbruck in #2830
- CI: self-hosted test shards skip the 3 GB archive download by @bherbruck in #2833
- Revert #2142: orbit pivot choice back to 0.15.0's, as in 0.16.1 by @bherbruck in #2832
- Joints: a round origin keeps its end when the face across its rim gets new neighbours by @NOWN-DEV in #2760
- Fix drilled holes breaking through tapered walls (#2387) by @fkirill in #2401
- Tests: more time for the web offline launches and the icon review server by @bherbruck in #2267
- Docs: describe SolidCraft as independent CAD by @bherbruck in #2768
- CI: faster test shards by @bherbruck in #2821
- Construct tools ask for their picks instead of failing with "a is required" (#2474, #2494) by @DuBearte in #2563
- CI: deterministic file-open responsiveness test (#2561) by @ealitt in #2562
- refactor: geom::UnitVec3 for unit axes and normals by @jijinbei in #2603
- Clearance: check a shared volume against the union, allowing for the bodies' measuring error by @NOWN-DEV in #2090
- Sketch Offset: constrain to the ends of an offset spline (#2424) by @leValdemar19 in #2615
- S command search and the new design's name: shown and matched in the current language (#2544) by @CamWight in #2555
- Sketch: always show a grid on the open sketch's plane by @bherbruck in #2303
- CI: repository checks keep off the fast runners for pull requests by @bherbruck in #2831
- Sketch projection: a solid's edges come in as their exact curves by @phanoob in #1508
- Add optional ambient occlusion and graphics quality presets by @CypherNaught-0x in #1135
- Add Malay language support and update localization doc by @a-hakim in #2188
- Mesh a face thinner than the tolerance instead of leaving a hole by @SiroArt in #2712
- Assembly: place an occurrence or an inserted STEP file by a matrix (#1890) by @NOWN-DEV in #1901
- Joints: offsets, angles and values typed as expressions follow their parameters (#2385) by @NOWN-DEV in #2386
- Orbit: erratic drags keep the pivot and come back to the starting view by @bherbruck in #2842
- CI: heavy checks run after review (approved-for-ci label) by @bherbruck in #2689
- Agent chat: Ctrl/Cmd+V attaches copied files and pictures (#2812) by @bherbruck in #2854
- Agent chat: PDFs as documents, any other file by reference (#2812) by @bherbruck in #2858
- Agent chat: drops on the popped-out window attach (#2812) by @bherbruck in #2861
- Malay: drop the "Gap" entry that is not in the English catalog by @bherbruck in #2866
- Parameters window: no per-frame re-evaluation on big designs (#2723) by @bherbruck in #2850
- STEP import: orient each instanced part once (#2814) by @bherbruck in #2875
- Joints: a new joint between faces that already meet leaves the part as it is (#2709) by @NOWN-DEV in #2710
- Fix the macOS launch hang with the 3Dconnexion driver installed by @abteenz in #2841
- Sketch: trim keeps the rest of a dimensioned line where it was by @Jacquesvdberg92 in #2910
- Preserve modeled threads when applying timeline edits by @cfaulkingham in #2265
- Relink a linked assembly source from the Browser (#2772) by @amolinari-autotex in #2773
- Fix constrained sketch point dragging (#1976) by @takuto-NA in #1977
- refactor: geom::Grid for control nets; one surface fit through a grid of samples by @jijinbei in #2331
- Pattern and Mirror copies of a primitive change only the seed's targets (#2755) by @rlartot in #2756
- timeline.roll_to: accept "end", refuse other non-number positions by @SS-EN in #2902
- CI: translation-only pull requests run no CI; translation changes test only the UI by @bherbruck in #3061
- 3D mouse: only the window with focus moves (#2077) by @nomadsgalaxy in #2212
- Messages window: keep status messages to read and copy again (#2763) by @fugazister in #2764
- Interference: clear apart pairs from their meshes, intersect the rest in parallel, time budget by @SS-EN in #2895
- Assembly: reuse reference meshes during rigid joint motion (#2922) by @takuto-NA in #2924
- Preserve equal-radius fillet mitre tangency (#2422) by @fkirill in #2485
- Fix lens-profile cuts into revolved quarter spheres (#2750) by @fkirill in #2791
- Chamfer: two distances and distance + angle on curved edges by @SS-EN in #2893
- Timeline/MCP API: suppress lists, dotted edit keys, set_parameter expression by @SS-EN in #2899
- Respect display units in sketch fillet fields (#2420) by @fkirill in #2487
- sketch: points placed by expressions by @NOWN-DEV in #2864
- World placement on all cores (#3053) by @bherbruck in #3123
- Open: draw the Home picture after the design opens (#3053) by @bherbruck in #3140
- Agent instructions: regression tests go into their area's test file by @bherbruck in #3230
- Agent instructions: one source in AGENTS.md; CLAUDE.md imports it by @bherbruck in #3240
- Surface trim: projected curves, several kept regions, mutual trim (#767) by @jyviko in #1466
- fix(examples): cut both mounting holes in the bracket by @Vittuu in #1515
- Tool modifiers: shared resolve, classic defaults, preview-safe Ctrl by @wdunn001 in #1616
- Bill of materials: part properties on components and assembly.bom (#1888) by @NOWN-DEV in #1899
- Icon tools: hashes and palette revisions ignore CRLF checkouts, text I/O is UTF-8 (#1930) by @HiroKenEz in #1931
- Pin analytic robustness and edge-contact scale regressions by @crono2250 in #1950
- Agent chat: the design bridge gets its own MCP name, so a user's solidcraft entry can't shadow it (#2592) by @DuBearte in #2596
- Sketch text: a letter crossed by an edge is picked whole with its text by @phanoob in #2619
- Two-sided extrudes: through all (or To Object) on either side, a distance on the other (#2700) by @CamWight in #2728
- Lines thinner than a pixel no longer vanish without multisampling (grid lines, #2823) by @DuBearte in #2871
- Update window: release-note links open in the browser (#2943) by @DuBearte in #3004
- Convert Mesh asks for the mesh body and its tolerance (#3001) by @DuBearte in #3012
- 3D mouse calibration in Preferences (#1463) by @nomadsgalaxy in #2326
- Joint sweep: drive a joint until parts touch, and report where and with how much room by @NOWN-DEV in #1981
- Sheet metal: readable face names from the sheet itself (#2272) by @NOWN-DEV in #2275
- Fix fillets around tiny rounded-rectangle end edges (#2498) by @cfaulkingham in #2506
- Joints: relations that tie part of a placement (parallel, angle, point on plane…) (#2496) by @NOWN-DEV in #2497
- Fillet fit: an outside round concentric with a wall's inside round is no longer refused by @rlartot in #2852
- Fix shelling revolved barrels (#2421) by @fkirill in #2486
- i18n: add Vietnamese (vi) localization support by @vandang890615 in #2915
- Joints: an as-built joint at an origin on one of its parts follows it (#2599) by @NOWN-DEV in #2600
- Snapshot: draw a see-through appearance see-through, and show a tool body inside its target (#2329) by @acbrazzl in #2330
- Hole: size the tool by the body it drills, not the largest body (#2904) by @rlartot in #2975
- Construction geometry on model vertices follows them when a parameter moves them (#568) by @rlartot in #2409
- French catalog: catch up on 46 new messages by @rlartot in #3136
- Sketch palette: a new empty sketch is not "Fully constrained" (#2906) by @rlartot in #3011
- Tapered extrude: arcs meeting at corners meet where their moved circles cross (#2810) by @sinu0 in #2813
- Regression tests: a cut short of a face keeps its skin, and the issue's pleats mirror and build at the far end (#1669) by @erkexzcx in #1730
- Sketch: preview slot outlines before committing (#2535) by @takuto-NA in #2537
- inspect.clearance: mesh each body once per check instead of once per pair by @NOWN-DEV in #2867
- Fix lip and groove on round objects (#2751) by @fkirill in #2790
- CI: run only what a change needs, on pull requests and on main by @jyviko in #3068
- CI: Linux jobs and fork pull requests on Blacksmith, sized per job by @jyviko in #3070
- Chamfer: a manipulator for Distance 2 with Two Distances (#2711) by @flyboy-byte in #2856
- Profiles and cap attachments fall back to the best match when a sketch outline changes by @SS-EN in #2897
- Show and edit standard part configurations (#2680) by @amolinari-autotex in #2681
- parameters: import evaluates once; parameters.change takes several names by @NOWN-DEV in #2777
- Convert Mesh uses the selected mesh body by @plexi32 in #2482
- Fonts: egui's built-in Hack as the last fallback for symbols (#2955) by @kezmdor in #2956
- Interference: near-coaxial pins after a STEP round trip, with flush heads, in either order by @NOWN-DEV in #1984
- I18n danish by @shop-3d in #2671
- README: shorter front page; details move to docs by @bherbruck in #3275
- Joints: a replaced motion link keeps the driven joint where it is; links count in dof by @SS-EN in #2898
- README: Blacksmith sponsor banner by @bherbruck in #3287
- Trademark notice covers every CAD vendor we name by @bherbruck in #3294
- README: CI powered by Blacksmith badge by @bherbruck in #3299
- Sketch Trim: the hover shows the piece that will go, not the whole curve (#3052) by @phanoob in #3113
- Chamfer straight lips at tangent wall junctions (#2408) by @fkirill in #2490
- Agent chat tests: the two "cap" tests no longer share one folder by @SiroArt in #2958
- Fix occurrence Move/Copy viewport gizmo input (#3014) by @amolinari-autotex in #3015
- STEP export no longer hangs on a box with a screw hole (#1985) by @rlartot in #2243
- Replace Face keeps its body's faces attachable by @HiroKenEz in #1925
- Delete Face: a face that only loses whole loops keeps its own surface by @weynechen in #1927
- Script replay keeps a feature name another feature has (#1990) by @morelandjo in #1997
- Sketch: dragging part of a selection moves the whole selection (#2621) by @HiroKenEz in #2720
- CI: merge-queue groups run on Blacksmith, test shards on 16 vCPU by @jyviko in #3343
- CI: Windows app startup smoke back on windows-latest (fix red main) by @bherbruck in #3355
- i18n: fill 21 missing Italian translations by @amolinari-autotex in #2389
- docs(skills): multi-body primitives, mirror body names, unit suffixes, set_parameter call by @MattRuhland in #2964
- sketch.edit_text: batch several text edits into one rebuild by @NOWN-DEV in #2793
- Parameters window: the add row lines up with the table's columns (#2920) by @kezmdor in #2932
- inspect.clearance: measure the 0.2 mm gap on trimmed faces (#2283) by @Loohi in #2337
- Resolve picked-face feature actions and reveal the creator in Browser (#2301) by @amolinari-autotex in #2431
- Paste saved linked designs at the viewport pointer (#2430) by @amolinari-autotex in #2433
- Extrude: a tapered side drawn in collinear pieces is one face too (#1788) by @DuBearte in #2583
- Joints: a point origin keeps the x it is given (#2597) by @NOWN-DEV in #2598
- Boolean: a pin in a bore of its size is clear at every placement (#2714) by @NOWN-DEV in #2715
- Thread: a hole too narrow (or a shaft too thick) says so, and what to drill (#2688) by @DuBearte in #2853
- Browser: light the rows of what is selected or hovered in the 3D view by @N3MI-DG in #3009
- Fix large modeled threads and thin crest reconstruction by @cfaulkingham in #2209
- Preview modeled threads on desktop by @cfaulkingham in #2264
- Support loft sections with holes (#2435) by @fkirill in #2447
- inspect.clearance: pins on one cylinder with their hole are answered or reported in seconds by @NOWN-DEV in #3027
- STEP import: read and orient distinct parts in parallel (#2814) by @bherbruck in #3046
- Placed parts are planned for display once, not once per occurrence (#3044) by @bherbruck in #3127
- Save and Save As no longer stall the window on big designs (#3044) by @bherbruck in #3146
- Agent chat: long-message layout test no longer flaky by @bherbruck in #3349
- Union: when the slab past pushed-apart coplanar faces can't be cut off, trim it by editing faces by @H1D in #2801
- Save the evaluated model with every design: exact, stored once, scaled caps (#3053) by @bherbruck in #3093
- Sheet metal: a corner relief no longer depends on the order the corners are cut in by @jeremymiribung-blip in #3280
- Sketch: a click that moves on the way places its point (#2448) by @HiroKenEz in #2449
- STEP import: CJK names read back whole (#2344) by @rifqifatih in #2347
- perf(ui): show sample thumbnails immediately and reuse Recent previews by @crono2250 in #2944
- Try exact local cuts after invalid empty numerical results (#1765) by @Karl-VonRichter in #1858
- icons: add the silhouette master and wire it to inspect.silhouette by @Nathan-Dane in #2102
- Support G2 fillets with angled planar ends (#2708) by @cfaulkingham in #2739
- Viewport: the ground grid stays when zoomed in close (#3087) by @phanoob in #3124
- Loft guide rails (#201) by @jyviko in #3371
- Support tapered extrusions at line/arc corners (#2754) by @fkirill in #2788
- Add the Ukrainian translations for the messages added after #1632 by @BrunIF in #2569
- Preferences: a Plugins page lists installed plugin folders by @thodoristsagko in #2718
- Sketch Dimension: line to circle/arc edge (#1803) by @leValdemar19 in #1863
- refactor: Aabb2 and point-built Aabb3 for every hand-rolled box by @jijinbei in #2428
- Preview: nothing is drawn once the current inputs fail (#3254) by @phanoob in #3256
- fix(ci): handle Windows paths in affected package selection by @Vittuu in #3164
- Sheet metal: possible to create flange on flange by @peppelorum in #3274
- A cut ending in a face of its target no longer leaves the hole closed by a skin (#2826) by @erlis in #2827
- surface.blend: seam alignment, chain-topology refusal and a dialog (#764) by @jyviko in #2488
- Delete: check what a delete breaks off the window thread (#2678) by @fugazister in #2679
- Mesh faces whose boundary touches itself within tolerance (#1648) by @SychPL in #1850
- Cut: a body with a sealed void no longer comes out empty by @H1D in #3175
- Typed parameter contracts and JSON Schemas for solid.box and solid.extrude (#2829) by @mknutso-2 in #2611
- Boolean retries: discard candidates whose edges run far outside the operands (#3020) by @SS-EN in #3185
- Look At frames the sketch's geometry, not its plane's origin (#3198) by @fugazister in #3199
- STEP import: an instanced part is meshed for display once, not twice (#2814) by @bherbruck in #3047
- Autosave no longer stalls the window on big designs (#3044) by @bherbruck in #3139
- Moving an occurrence on a big assembly: 12.7 s to 0.3 s (#3044) by @bherbruck in #3104
- STEP import: an extruded ellipse keeps its parameter seam outside the face (#3120) by @afaber999 in #3208
- Chamfer: one pick follows a straight edge's curved tangent chain at any part size (#2672) by @rlartot in #3295
- A finished sketch shows its standalone points (#3267) by @DuBearte in #3304
- Sheet metal: two corner reliefs that would overlap are both left out by @jeremymiribung-blip in #3421
- Timeline: the mouse wheel scrolls the horizontal timeline (#3356) by @DundreDE in #3409
- Fonts: find a Chinese fallback font on Linux and Windows (#3376) by @Priyanshu-choudhary in #3466
- Convert to Sheet Metal keeps a plate where it is by @raykholo in #3316
- Loft: refuse consecutive sections that lie in one plane by @jb69 in #3412
- Parameters: walk through a flipped plane to its base's expressions by @jb69 in #3481
- Sheet metal: refuse a flat pattern that no longer matches the body (#3324) by @raykholo in #3325
- Open: show a design as its bodies are meshed (#3053) by @bherbruck in #3178
- Mouse gestures: ring of tools on the right button, per studio and customizable (#2934) by @Moi455 in #2936
- AGENTS.md: merge queue, no merges of main, check open work before starting by @jyviko in #3559
- Canvas and Decal: the file picker opens on PNG and JPEG images by @nathan-charles in #3266
- Agent cursor: at most 1.5 s per request; engine.batch runs while shown by @SS-EN in #2900
- i18n: add missing Danish translations by @shop-3d in #3028
- Delete Face asks for its faces instead of failing (#2167) by @rlartot in #3296
- Boolean: fail an unverifiable intersection instead of keeping what it should trim (#3244) by @rlartot in #3344
- A body dropped on a component's Bodies folder moves into that component (#3270) by @phanoob in #3347
- Make constrained sketch edges follow the cursor (#3360) by @takuto-NA in #3362
- Fillet: skip smooth seams in tangent chain and restore picked edges when unticked (#3370) by @lucasmontec in #3437
- test: fix Windows file URLs in the paste fixture by @crono2250 in #3494
- fix(web): keep the CJK face a fallback for a non-CJK UI by @BrunIF in #3535
- Sheet metal: refuse an edge flange on a bend line (#3234) by @rlartot in #3273
- Reduce repeated sketch diagnostics and add solver profiling (#2355) by @takuto-NA in #2359
- CI: a label no longer blocks a passing PR from the merge queue by @jyviko in #3596
- Sketch trim: drag a path across curves to trim every piece it crosses by @SS-EN in #3182
- joint.inspect: show agents what each joint is attached to by @SS-EN in #3453
- sketch.create: reject a non-numeric custom plane origin (#3248) by @rlartot in #3252
- Open saved designs from the model they were saved with (#3053) by @bherbruck in #3102
- Fix joint history selection and batch Delete (#3245) by @amolinari-autotex in #3246
- Fix the flaky off-thread OK test by @bherbruck in #3622
- Release 0.17.0 by @bherbruck in #3629
- Fix OpenGL startup with portable AO depth reads (#2888) by @bluecmd in #2933
- Renaming a body no longer rebuilds the design (#3044) by @bherbruck in #3095
- Sketch: an angle dimension between two lines from one point measures the angle between them (#2724) by @DundreDE in #3439
- Sketch: a single click on another dimension inserts its name into the value being edited by @SS-EN in #3186
- inspect.interference/clearance: list mesh bodies as unchecked (#3249) by @rlartot in #3258
- Editing a sketch past the history marker rolls the marker to it (#2716) by @phanoob in #3339
- Contact: a check finds bodies crossing face to face, not only a corner inside (#3323) by @dahakbuilds in #3388
- Sketch: a radius dimension past an arc's end extends the arc to its arrow (#3393) by @DundreDE in #3408
- Sketch: keep three-point arcs attached to the through point (#2166) by @cfaulkingham in #3610
- Section Analysis: dragging the cut stays smooth on large parts (#3614) by @kaltenbrunnermarkus in #3616
- Clarify delayed detection of unclean-exit reports by @Vittuu in #3640
- Sketch: persist Shift-picked midpoints for Horizontal/Vertical (#2087) by @fkirill in #2378
- Tessellation: trimmed faces of display meshes stay on their surfaces by @jyviko in #1653
- Joints: a loop that meets only to within nanometres still moves (#3474) by @SS-EN in #3475
- Web: save to and open from files on your computer (#104) by @bherbruck in #3681
- Web: Save to computer… for designs kept in the browser (#104) by @bherbruck in #3687
- Renaming a feature no longer rebuilds the design (#3044) by @bherbruck in #3097
- README: Trendshift badge by @bherbruck in #3706
- README: Trendshift Rust badge by @bherbruck in #3714
- Application bar and ribbon redesign (step 1 of #2016) by @Nathan-Dane in #2176
- UI redesign stack: floating workspace, shared controls, search and icon accents by @Nathan-Dane in #3627
- Hovering a large body no longer freezes the window (#3745) by @bherbruck in #3766
- Translations: complete Russian, Korean, German, Turkish by @bherbruck in #3799
- Translations: complete Malay, Brazilian Portuguese, Polish, Galician by @bherbruck in #3800
- Translations: complete Czech, Italian, Vietnamese, Spanish by @bherbruck in #3801
- Translations: complete Ukrainian, French, Danish by @bherbruck in #3802
- Release 0.18.0 by @bherbruck in #3792
- Shift+R repeats the last tool or dialog (#3045) by @phanoob in #3160
- Parameter autocomplete matches anywhere in the name, prefix matches first (#2757) by @DuBearte in #2849
- Hovering a long helical edge no longer freezes (7.6 s → 29 ms) by @bherbruck in #3818
- IGES import: a revolved arc is a cap, not a whole sphere (#3806) by @bherbruck in #3813
- Prevent hangs when dragging fully constrained sketch geometry (#2006) by @pankleks in #2199
- Web: reopen designs saved on your computer from Recent after a reload (#104) by @bherbruck in #3834
- Add Dutch, Swedish, Traditional Chinese, Indonesian, Romanian and Hungarian by @bherbruck in #3826
- IGES import: trim curves with reversed pieces no longer drop their faces (#3358) by @raykholo in #3359
- Release 0.18.1 by @bherbruck in #3851
- Boolean: a small hole in a large body's face stays a hole when the face is divided (#2579) by @NOWN-DEV in #2580
- STEP import: a cone bounded only by its base circle reaches its point (#258) by @bherbruck in #3871
- File menu: Export STL… and Export 3MF… (find mesh export) by @bherbruck in #3873
- STEP import: regression sweep over the step-conformance parts of known shape by @bherbruck in #3880
- STEP import: a void reads as a cavity whichever way its shell flag points (#3730) by @bherbruck in #3872
- Recovery: autosave every open design tab (#2884) by @bluecmd in #2952
- STEP conformance sweep: add the cones to a point (#258) by @bherbruck in #3901
- Move: Point to Point takes the origin point (#3696) by @plexi32 in #3718
- IGES import: a B-spline curve over a tiny knot span keeps its faces (#3885) by @bherbruck in #3886
- CI: spread the slowest tests across the test shards by @bherbruck in #3646
- Sketch: symmetry about a line pairs line ends by mirror image (#2961, #2940) by @rlartot in #3029
- 2-tangent circle: start from the touching circle, not the click (#3141) by @phanoob in #3210
- MCP batch: rollback restores the original document (#3242) by @dahakbuilds in #3288
- Pattern of a join that merged its targets keeps working (#3378) by @denelson1-dot in #3387
- Ribbon: restore Parameters/Configurations, the Sheet Metal tab and the palette's Finish Sketch by @bherbruck in #3937
- CI: build and run the tests in one job, sccache on a Blacksmith disk by @bherbruck in #3941
- Browser rows truncate long names; hide Solve Sketch from the UI by @bherbruck in #3940
- Ribbon: New Sketch on the Sheet Metal tab again; tests for entering and leaving sketches by @bherbruck in #3946
- Fix lofts through sections turning past 90 degrees (#2847) by @rlartot in #3452
- Use automatic part names and preserve IGES assemblies (#1386) by @flukejones in #1609
- Extrude from a whole face rounded by fillets: join, and cuts whose walls only touch (#2040) by @asd417 in #2041
- fix(skills): refresh Boolean checking facts that fail on current release (#1835) by @jeremymiribung-blip in #2093
- English (UK) as a language: a plain catalogue of the 25 messages UK English spells differently (#2501) by @CamWight in #2502
- Ribbon tooltips: a short written help for the main tools (#2758) by @rlartot in #3089
- Rejoin the split Files table in ATTRIBUTION.md (#3142) by @JZiegener in #3143
- Fillet and chamfer previews keep moving while a radius or distance changes by @phanoob in #3150
- Document tabs: a right-click menu to close a tab, the others or all (#3055) by @phanoob in #3152
- Loft: a circle lofted to a non-star-shaped profile is split once round (#2570) by @raykholo in #3670
- Ribbon: New Sketch on the Surface tab by @bherbruck in #3964
- Sketch: a quick double Esc finishes the sketch by @bherbruck in #3950
- Icon audit: regenerate the requested-icons manifest by @bherbruck in #3969
- Ribbon: Finish Sketch follows the last sketch panel by @bherbruck in #3958
- Release 0.18.2 by @bherbruck in #3970
- Sketch dimension: type-first horizontal/vertical keeps the picked points (#3167) by @SS-EN in #3168
- Settings › AI: Add agent opens from the Home tab too (#3483, #3513) by @phanoob in #3522
- Keep sketches out of the Browser Features folder by @amolinari-autotex in #3584
- Move shortcut respects the selected component (#3580) by @cfaulkingham in #3588
- Section Analysis: Edit reopens the dialog where the section was left (#3615) by @kaltenbrunnermarkus in #3617
- fix(ai-chat): replay with reasoning_effort none when OpenAI refuses tools (#3798) by @rlartot in #3817
- Save designs with large STEP imports: compress the STEP part (#3221) by @bluecmd in #3285
- Sheet metal: mirrored and copied sheet bodies stay sheet metal (#3353) by @raykholo in #3354
- Joins, cuts and intersects meet their tools where they are shown, across placed components (#3383) by @raykholo in https://github.com/tangency-labs/solidcraft/pull/3384
- Split Body: each piece can be renamed on its own (#3510) by @phanoob in https://github.com/tangency-labs/solidcraft/pull/3527
- Split schema contracts per command file and add shared field types (#2829) by @mknutso-2 in https://github.com/tangency-labs/solidcraft/pull/3558
- Delete in Edit Joint deletes that joint, and a refused joint delete says why (#3749) by @raykholo in https://github.com/tangency-labs/solidcraft/pull/3776
- 3MF import: production extension review follow-ups (#2089) by @Tyler-Chiriboga in https://github.com/tangency-labs/solidcraft/pull/3628
- Extrudes from a nested STEP part's face join and cut it with the imported root active (#3223, #2872) by @raykholo in https://github.com/tangency-labs/solidcraft/pull/3852
- Sketch on a face: don't mesh the body twice by @bherbruck in https://github.com/tangency-labs/solidcraft/pull/3981
- OK off the window thread: a job that has just started waits a frame (#2929) by @jeremymiribung-blip in https://github.com/tangency-labs/solidcraft/pull/3609
- Fix main: a sketch dialog test builds Applying without seen by @bherbruck in https://github.com/tangency-labs/solidcraft/pull/4001
- Control channel: control.running lists what the app is running, across connections (#3654) by @SychPL in https://github.com/tangency-labs/solidcraft/pull/3689
- Measure: a body whose meshes leave a gap keeps its volume wherever it is by @NOWN-DEV in https://github.com/tangency-labs/solidcraft/pull/2069
- io: the 3MF and DXF budget tests do not check wall-clock time (#2998) by @kezmdor in https://github.com/tangency-labs/solidcraft/pull/2999
- STEP export: a merged cylinder or cone face's loop starts on the side its angle grows from (#3394) by @afaber999 in https://github.com/tangency-labs/solidcraft/pull/3557
- Extrude to an edge or corner ends at the requested plane (#3729) by @cfaulkingham in https://github.com/tangency-labs/solidcraft/pull/3748
- Holes from a sketch on a body's face drill that body (#2882) by @raykholo in https://github.com/tangency-labs/solidcraft/pull/3770
- Expressions: a leading decimal comma such as ,5 is accepted (#2966) by @raykholo in https://github.com/tangency-labs/solidcraft/pull/3797
- Shell: show the tangent-chain face selection and explain full-body removal (#209) by @cfaulkingham in https://github.com/tangency-labs/solidcraft/pull/3809
- Transform: refuse a matrix that is not an affine placement (#3899) by @raykholo in https://github.com/tangency-labs/solidcraft/pull/3900
- Agent commands compute off the window thread, so the window stays live (opt-in) (#1989) by @SS-EN in https://github.com/tangency-labs/solidcraft/pull/3340
- IGES import: close small gaps between trim pieces (#3845) by @bherbruck in https://github.com/tangency-labs/solidcraft/pull/3846
- Held arrow keys turn the view steadily, one tween at most by @bherbruck in https://github.com/tangency-labs/solidcraft/pull/4090
New Contributors
- @H1D made their first contribution in #2247
- @acbrazzl made their first contribution in #2313
- @martinpalsson made their first contribution in #2391
- @fugazister made their first contribution in #2405
- @cyryllo made their first contribution in #2032
- @morelandjo made their first contribution in #2107
- @n0tfr3shm1lk made their first contribution in #2044
- @Loohi made their first contribution in #2336
- @spuder made their first contribution in #2338
- @yutyan0119 made their first contribution in #2120
- @Vittuu made their first contribution in #2594
- @Tyler-Chiriboga made their first contribution in #2127
- @tdslot made their first contribution in #2741
- @ealitt made their first contribution in #2562
- @leValdemar19 made their first contribution in #2615
- @a-hakim made their first contribution in #2188
- @SiroArt made their first contribution in #2712
- @abteenz made their first contribution in #2841
- @Jacquesvdberg92 made their first contribution in #2910
- @takuto-NA made their first contribution in #1977
- @SS-EN made their first contribution in #2902
- @vandang890615 made their first contribution in #2915
- @sinu0 made their first contribution in #2813
- @flyboy-byte made their first contribution in #2856
- @plexi32 made their first contribution in #2482
- @kezmdor made their first contribution in #2956
- @shop-3d made their first contribution in #2671
- @weynechen made their first contribution in #1927
- @MattRuhland made their first contribution in #2964
- @rifqifatih made their first contribution in #2347
- @peppelorum made their first contribution in #3274
- @erlis made their first contribution in #2827
- @mknutso-2 made their first contribution in #2611
- @afaber999 made their first contribution in #3208
- @DundreDE made their first contribution in #3409
- @Priyanshu-choudhary made their first contribution in #3466
- @raykholo made their first contribution in #3316
- @jb69 made their first contribution in #3412
- @Moi455 made their first contribution in #2936
- @nathan-charles made their first contribution in #3266
- @lucasmontec made their first contribution in #3437
- @bluecmd made their first contribution in #2933
- @dahakbuilds made their first contribution in #3388
- @kaltenbrunnermarkus made their first contribution in #3616
- @pankleks made their first contribution in #2199
- @denelson1-dot made their first contribution in #3387
- @flukejones made their first contribution in #1609
- @asd417 made their first contribution in #2041
- @JZiegener made their first contribution in #3143
Full Changelog: v0.15.0-nightly.20261018.51.1...v0.18.2-nightly.20261021.63.1