github tangency-labs/solidcraft v0.42.0
SolidCraft v0.42.0

one hour ago

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.42.0 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.42.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 SolidCraft.app onto Applications.
    The CLI is in solidcraft-cli-0.42.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>), the .snap
    (sudo snap install --dangerous <file>, or sudo snap install solidcraft from the Snap Store), or the .tar.gz.
  • FreeBSD: tar -xzf solidcraft-0.42.0-freebsd-x86_64.tar.gz --strip-components 1 -C /usr/local.
  • Web: solidcraft-web-0.42.0.zip is 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.solidcraft

A 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 macOS app is signed with a Developer ID and notarized. The Windows files are not signed yet:
SmartScreen may say "Windows protected your PC": More info, then Run anyway. The other
packages are unsigned.
Licences are built in (Help ▸ About ▸ Licences, solidcraft-cli licences); the packages also
install THIRD-PARTY-LICENSES.txt.

What's Changed

  • Offset Face: moving a face so it grows (a tapered cylinder's cap, two adjacent walls) no longer fails with "made no change" (#14412) by @lewis2e in #15592
  • Frames: place a member by a profile point that stays put when the size changes by @unusuallyhandsome in #15726
  • Kernel booleans: joining rotated sector parts whose walls meet within tolerance no longer fails (split edges rejoin without a leftover knot) by @Rempelino in #15724
  • Snap points: hold Shift to keep them, and keep them on the way to one (#11809) by @alfonsotames in #11810
  • solidcore-ops: classify many points against a body at once, and smlib's point classification through it by @danieldimitrov86 in #15336
  • Agent chat: Moonshot accepts SolidCraft's tools again, as inspect_design no longer mixes a list of types with a list of values (#15306) by @thocsmith in #15382
  • Sketch fillet: a moved profile does not gain a disc of the fillet radius (#15240) by @tamasys in #15425
  • solidcore: eleven geom, heal, query and mass fixes become the only path (#14246 batch G1) by @bherbruck in #15548
  • Trim by a projected curve: a face the curve ends inside goes with the reference point, not with a count of its corners (#13697) by @ChrisNourse in #15599
  • solidcore: a test pins the number of blend sites that build an unclassified phrase cause (#15090 Q1) by @brett19 in #15687
  • Sketch: an angle dimension reaches the lines it measures (#15610) by @vdirienzo in #15714
  • Kernel: measure body volume from exact mass properties instead of display mesh by @yuri-schmaltz in #15723
  • Move: the triad sits on the bodies where their component places them, and a turn there leaves them in place (#11336) by @Sebastion in #13523
  • Open shared panels in separate desktop windows (#11308) by @Nathan-Dane in #15210
  • Chamfer: no extra end face where a chamfer ends between two faces of one cylinder (#15505) by @MarkusReichart in #15597
  • solidcore: a fillet on a large part no longer walks the whole part once per face after merging by @danieldimitrov86 in #15755
  • Assemblies: a component's move offset takes parameter expressions and follows parameter changes (#8192) by @KazW in #15435
  • Keep command icons visible in ribbon dropdowns by @Nathan-Dane in #15568
  • solidcore: three surface fixes become the only path (#14246 batch A13a) by @MarkusReichart in #15686
  • Pin Rust 1.99.1: G2 fillets run 2-3x faster than on 1.98 by @brett19 in #15063
  • Plugins menu: runs stay on their design, stricter schema forms, and the narrow app bar keeps its controls by @bherbruck in #15778
  • Use standard context menus for shared panels by @Nathan-Dane in #15396
  • solidcore-ops: circle and arc, extend a curve, split a curve, an edge as a free curve by @jyviko in #15779
  • Sketch dimensions: double-click another dimension while editing opens it, instead of inserting its name twice by @bherbruck in #15792
  • Preview where shared panels will land while dragging by @Nathan-Dane in #15430
  • ui-kit: the Browser panel, data-driven, for any app to host by @jyviko in #15787
  • Fillet: rounding an edge next to a pocket or boss no longer copies the whole part for each crease by @danieldimitrov86 in #15804
  • CI: a fork can run the full suite on GitHub's runners by @raykholo in #15231
  • tests: the fillet clean-up's keep still keeps a coplanar split of the target (WR-459, #15059) by @bherbruck in #15823
  • solidcore: ten curve and ellipse fixes become the only path (#14246 batch C1) by @bherbruck in #15821
  • Tests: an xtask test compares paths by their parts, so cargo test -p xtask passes on Windows by @FinnDaCaptain in #15819
  • Quarantine the flaky universal_host shared-actions test (#15845) by @bherbruck in #15846
  • Offset planes made from a face are drawn over that face by @ancientastronauttheorist in #15781
  • Revolve, sweep and extrude: a part with many faces builds much faster (#15786) by @N3MI-DG in #15789
  • solidcore: a plane just inside a narrow cylinder face's wall keeps its crossing line (follow-up to #15686) by @MarkusReichart in #15798
  • Fillet and booleans: orienting the faces of a large part measures the part once, not once per face by @danieldimitrov86 in #15824
  • Tests: the shared-crate check builds with the ci profile and tests each shared crate once by @FinnDaCaptain in #15833
  • Tests: cargo xtask's quick checks use every core, so they take 28 s instead of 73 s on Windows by @FinnDaCaptain in #15835
  • solidcore: a boolean of surface lists copies each surface whole (#14246 batch L1a) by @MarkusReichart in #15784
  • Fillet: the kernel, not SolidCraft's code, decides where a fillet wider than its flat face can be built by @plexi32 in #14950
  • Fillet: rounding edges on a large part no longer walks the whole part before every small edit by @danieldimitrov86 in #15814
  • solidcore: variable rounds meet at their law radii by default (WR-300) by @brett19 in #15411
  • solidcore: a round rolled onto a boss beyond a tangent run-on finds the ball on the near side (#15767) by @brett19 in #15770
  • feat(loft): a loft's flat walls are planes (solidcore skin, WR-782) by @dudedagger42 in #15442
  • solidcore: a topology tracker stops only its own callback (#14246 batch A15b) by @MarkusReichart in #15660
  • UI kit: the checkable menu row test clears its texture deltas by @brett19 in #15878
  • Kernel booleans: intersecting or cutting parts whose round walls coincide only locally no longer fails by @Rempelino in #15869
  • Revolve and sweep: a profile with many segments builds several times faster (#15134) by @N3MI-DG in #15708
  • Viewport: the grid's 1-2-5 step rule in the shared viewport crate by @jyviko in #15898
  • STEP import: each open shell beside a solid comes in as a sheet body of its own by @unusuallyhandsome in #15757
  • STEP export: a face whose NURBS form is a cylinder, cone, sphere or torus is written as that surface by @KazW in #15813
  • Joints: a snap point lies on the face it belongs to, which is lit, with its plane drawn (#11811) by @alfonsotames in #11812
  • Standard parts: resizing a screw keeps its body name and timeline position (#15531) by @Hainlein4711 in #15591
  • Hole dialog: a Clearance tap type with the screw size and fit (#12335) by @mfaugiana in #12336
  • Tests: the hostile-parameter test lists made-up slicers instead of searching the machine 5,600 times by @FinnDaCaptain in #15825
  • blend fillet section feet_tm: the Taylor-model tube on the one Krawczyk operator's pieces (#15140) by @bherbruck in #15810
  • solidcore-ops: a blend sheet between two sheets' edges, G0 to G2 at each side by @jyviko in #15909
  • solidcore: seven NURBS fixes become the only path (#14246 batch N1) by @bherbruck in #15918
  • Construct: resolve named vertices and vertex picks using exact B-rep geometry instead of display mesh by @yuri-schmaltz in #15921
  • Tests: cargo xtask test runs the tests with 8 MiB thread stacks, so one deep test no longer ends a whole test binary by @FinnDaCaptain in #15828
  • solidcore-ops: drop curves square onto a face; a curve's record form by @jyviko in #15924
  • Stretch a curve's CVs in proportion from a pivot (kernel and solidcore-ops) by @jyviko in #15931
  • Viewport: zebra direction and width, a values map, two-sided lighting by @jyviko in #15935
  • Find a picked face on the model's mesh instead of meshing the body twice by @dudedagger42 in #15868
  • Divide Curve: input and output schemas for sketch.point.divide (#15880) by @Ehuntabi in #15896
  • solidcore: two bend-volume box fixes become the only path (#14246 batch A13b) by @MarkusReichart in #15883
  • Sketch: an angle dimension's arc follows its text into the opposite sector (#11800) by @PaddleStroke in #12710
  • solidcore: a sweep's continuity split takes each curve with its NURB (#15829) by @bherbruck in #15940
  • Body: evaluate edges directly from analytical curves instead of display mesh by @yuri-schmaltz in #15961
  • Windows MSI: use the installed app icon for Start shortcuts (#9366) by @PaddleStroke in #9397
  • Match a surface's edge to another at G0, G1 or G2 (kernel primitive and solidcore-ops) by @jyviko in #15917
  • Arc about a centre; extend a curve keeping its proportions (kernel and solidcore-ops) by @jyviko in #15941
  • solidcore-ops: turn a sheet over (reverse its faces) by @jyviko in #15919
  • solidcore: two-rail sweep (birail) by @jyviko in #15985
  • MCP batch: a checkpoint taken by a batch step can still be restored after the batch (#15865) by @MarkusReichart in #15894
  • Get Selection: input and output schemas for selection.get (#15900) by @Ehuntabi in #15954
  • Join pieces: evaluate added material using exact body volume instead of display meshes by @yuri-schmaltz in #15988
  • solidcore: turn a face or a sheet over (swap_uv) by @jyviko in #15962
  • Viewport: hovering a whole assembly in the Browser lights its edges without copying them (#5646) by @oursland in #15479
  • Cell Grid: cut a grid of hexagon, square, triangle, circle or polygon cells out of a part, inside a sketch's area (#14044) by @KazW in #14045
  • Sketch: Collinear and Tangent take an origin axis, selected or clicked (#15461) by @thomschlie in #15635
  • Naming: find adjacent faces from exact B-rep edge topology instead of display mesh by @yuri-schmaltz in #15685
  • Frames: standard steel sizes by name, and taper flange channels by @unusuallyhandsome in #15729
  • Weldments: a Frame Member feature can be mirrored and patterned as a feature by @unusuallyhandsome in #15848
  • Keyboard: Tab into a field selects its text, and Enter in a table moves down the column by @bherbruck in #15794
  • solidcore: Gordon surface of a network whose crossings are not at common parameters by @jyviko in #16006
  • Motion analysis: measure shared volume using exact body bounds instead of display mesh by @yuri-schmaltz in #15762
  • Inspect: measure distance to body bounds using exact B-rep geometry instead of display mesh by @yuri-schmaltz in #15809
  • Surface untrim: evaluate internal face point from exact SMLib B-rep instead of display mesh by @yuri-schmaltz in #15838
  • Edit Extrude: Thin Extrude on an extrude of the whole sketch follows its outline instead of being refused (#16002) by @mfaugiana in #16004
  • Kernel booleans: two parts whose flat walls drift apart beyond tolerance no longer fail to join by @Rempelino in #15830
  • solidcore-ops: a fillet between two sheets that meet along an edge (stacked on #15909) by @jyviko in #15914
  • Principal curvatures and curve deviation (kernel queries and solidcore-ops) by @jyviko in #15928
  • solidcore-ops: extend a flat sheet by growing its trim in its plane by @jyviko in #15978
  • solidcore-ops: edit the control points of a flat sheet (planar face as a Coons spline) by @jyviko in #16020
  • FreeCAD files open as sketches, features and bodies by @oursland in #7708
  • Kernel booleans: two boxes that meet across a strip thinner than tolerance now union into one solid by default (retire the WR-614/WR-619 flags) by @Rempelino in #16028
  • lazy lines: a line's B-spline part comes with its NURB where upstream calls on the line itself by @bherbruck in #16035
  • Wireframe: hovering a whole assembly in the Browser no longer stalls the window (#15496) by @oursland in #15497
  • Viewport: bodies are lit like model-viewer's neutral room, metals reflect it by @ablasik in #16039
  • solidcore-ops: join two curves end to end by @jyviko in #15981
  • A fillet between two sheets that cross (kernel point side, solidcore-ops; stacked on #15914) by @jyviko in #15923
  • Browser: the app's Browser drawn by the UI kit's Browser panel by @jyviko in #15942
  • Construct menu: group tools under Planes, Axes and Points by default (#14729) by @Alauan in #15720
  • solidcore: a ball cut whose poles lie on a cylinder's face builds; the trace steps to the pole at its seam corner by @brett19 in #15886
  • Redefine Sketch Plane: a long "Current plane" value wraps and its row grows instead of being cut off by @PaddleStroke in #12808
  • solidcore: a plane meets a torus in its exact section in either order (#14246 batch A13c) by @MarkusReichart in #15987
  • solidcore: merge a sheet's coplanar faces, with old-to-new edge and face maps by @jyviko in #16040
  • solidcore: a taper's curve casts take each line with its NURB (#15938) by @bherbruck in #16065
  • Windows: link the app and the CLI with an 8 MiB main stack, so filleting no longer overflows it by @dudedagger42 in #15711
  • Design containers: sign saved designs with GnuPG and check signatures by @oursland in #15297
  • solidcore: a curve sweep kept upright along its rail by @jyviko in #16013
  • fix(kernel): detect toroidal fillet faces in quick measure surface kind (#11876) by @ashxddaga in #12855
  • Pipe: a sketch can attach to a pipe's end faces, which now have history names (#14897) by @thocsmith in #14934
  • Interference: prune candidate pairs with exact bounding boxes and contact by @yuri-schmaltz in #15980
  • solidcore: extend an arch on straight legs, the curved face and the plane legs together by @jyviko in #16077
  • Viewport: moving the pointer along an edge or a sketch curve no longer redraws the whole model by @FinnDaCaptain in #13990
  • Fix flaky format-pending test: cleanup retries and never changes the result by @bherbruck in #14941
  • Sketch Project: project the origin axis of a component into a new sketch (#15086) by @Ehuntabi in #15091
  • STEP import: bodies the file marks invisible stay hidden (#7073) by @tamasys in #15899
  • STEP open: a reused import gets a history folder exactly when doc.open asks for one (#15870) by @MarkusReichart in #15983
  • solidcore-ops: extend a sheet the skin split into faces, as one surface by @jyviko in #16030
  • solidcore: a round refused past a tangent rollover names the size that fits the rolled-onto face (#15826) by @brett19 in #16016
  • Fillet: a round thicker than its wall builds, trimmed at the wall's far face, on imported bodies too (#13757) by @jyviko in #15628
  • solidcore: blend failure record: a ratchet on phrase-cause sites, and class 128 pinned unsized (stacked on #15090) by @jyviko in #15736
  • solidcore: a fillet ending beside two tangent faces picks its end face by geometry, not by edge order by @jyviko in #16005
  • Agents and scripts: Export Flat Pattern as DXF describes its exact parameters and reply (#6581) by @0rdnungsamt in #15816
  • Render Output Size: input and output schemas for render.output.size (#16057) by @0rdnungsamt in #16083
  • Fillet and chamfer: an edge split by a cylinder's or sphere's seam is rounded across the seam, not refused (#13752) by @jyviko in #15637
  • UI: the unit of an imported mesh is asked on the screen the import starts (#15598) by @vdirienzo in #15893
  • solidcore: a rail end on a side edge chain tries the corner section's guess before every default guess (#15770) by @brett19 in #15997
  • Agents and scripts: the settings profile commands describe their exact parameters and replies (#15827) by @0rdnungsamt in #15871
  • Drawing Size: input and output schemas for sketch.drawing_bounds (#15973) by @0rdnungsamt in #16018
  • Add Spline Point: input and output schemas for sketch.spline.insert_point (#16085) by @0rdnungsamt in #16096
  • blend: the G2 mixed-convexity corner, a Setback with a certified saddle by @jyviko in #15840
  • Point clouds: input and output schemas for pointcloud.insert and pointcloud.edit (#15769) by @0rdnungsamt in #15771
  • MCP: explain that geometry picking requires the running app (#15866) by @cfaulkingham in #16101
  • STEP import: a cylinder whose rims are closed splines of two half circles keeps its wall (#15849) by @nedawson in #15850
  • Viewport: the X, Y and Z origin axes run across the whole view (#11123) by @PaddleStroke in #12716
  • Preferences: the (i) help icons show their text on a click, Enter or Space, not only on hover (#13953) by @robbpf in #13974
  • IGES import: a regression test for a trim curve whose first piece runs backwards (#3912) by @raykholo in #3913
  • Canvas to Sketch: input and output schemas for canvas.to_sketch (#16099) by @0rdnungsamt in #16116
  • lazy lines: a swept or written line's B-spline part comes with its NURB, as upstream's virtual MakeNurb gives it by @bherbruck in #16114
  • Create Sketch: a regression test for attaching to a face of a block with a modeled thread and rounded corners (#3301) by @raykholo in #3914
  • Emboss on a cylinder: regression tests for a pick on either half of the wall (#3425) by @raykholo in #3782
  • Dialogs: adapt value label scrubbing to viewport zoom and allow negative values (#13403) by @Alauan in #13572
  • Kernel booleans: the strip and speck checks prove their bound over the whole curve instead of sampling it (follow-up to #16028) by @Rempelino in #16146
  • solidcore: the intersection tracer's step to a pole is taken only at the pole, not anywhere on its boundary by @brett19 in #16125
  • solidcore: refuse edge 28's round past its end on fuzz body b27, and fix the trace's split of a closed gap (#15905) by @brett19 in #15892
  • Shared panels use the ribbon theme and backdrop blur by @Nathan-Dane in #16022
  • Features: one rule for what counts as construction geometry, not four copies by @CamWight in #12084
  • Modelled threads: a thread no longer closes up a cross hole or a hole that breaks out of the side of the part (#14191) by @Jacquesvdberg92 in #14199
  • Fillet: stop the dark quarter-disc on a three-round corner patch (#14889) by @tamasys in #16094
  • solidcore-ops: the closest point on a free curve by @jyviko in #16124
  • solidcore-ops: one Extend for any sheet, routed to the path that fits by @jyviko in #16175
  • solidcore: a ball cut whose poles lie 1e-6 off a cylinder's face is a solid; a trace point at a pole is the pole (#15994) by @brett19 in #16037
  • solidcore: a taper keeps the seam on a large arc's wall (part of #16003) by @MarkusReichart in #16102
  • solidcore-ops: edit the control points of cone, cylinder, sphere and torus sheets by @jyviko in #16074
  • Extrude: keep Offset selected while clearing its value (#15363) by @cfaulkingham in #16167
  • MCP: with verbose: false, sketch.move_points lists only the points that missed their target (#15864) by @steven-gineer in #16106
  • viewport: pick the drawn point of a set of polylines nearest the pointer by @jyviko in #16203
  • Booleans: a pocket grazing a slanted face is cut instead of refused by @bastotec in #16187
  • Wireframe: show outlines on curved surfaces (#12789) by @bluecmd in #12795
  • Combine Cut: refuse a cut that would delete a body its tools cannot cover (#15700) by @MarkusReichart in #16105
  • STEP import: faces through a sphere's pole, bands round an extruded ellipse and splines closed to the file's uncertainty read whole by @bherbruck in #16176
  • Shared panels use shorter headers and wrap their actions by @Nathan-Dane in #16021
  • Kernel booleans: corners of two parts farther apart than tolerance are no longer fused into one vertex by @Rempelino in #16131
  • Mirror: a mirrored body's straight edges stay lines, so booleans with it no longer take the wrong side (#15862) by @MarkusReichart in #16104
  • CLI snapshots: reject repeated output and view options (#16200) by @cfaulkingham in #16218
  • Arabic: Blender gestures in the trackpad pan tip, pop-out wording, twist term, joint symbol style, tanween, sketch and design terms by @A-AL-ANAZI in #16233
  • Mirror: mirrored bodies with straight edges over 810 mm can be measured and used again (#14413, #15379) by @unusuallyhandsome in #15847
  • History: F2 renames the clicked folder, as a double-click does by @Werner1303 in #16242
  • Pattern: copies keep their names when the pattern count changes (#12114) by @ancientastronauttheorist in #13158
  • solidcraft-cli run --save: warn on stderr when another SolidCraft has the design open by @Werner1303 in #16235
  • Catalan (ca): translate the 195 messages added or changed upstream by @carlymx in #16253
  • Spanish (es-ES): translate the 193 messages added or changed upstream by @carlymx in #16252
  • Offset: certify_regular calls a fold only when proved, and a spent budget is not a fold (#13685) by @bherbruck in #16228
  • Viewport: switching to a finer display quality while zoomed in no longer draws curves coarser (#15989) by @ablasik in #16258
  • Release: a WINDOWS_SIGNING=off switch ships Windows unsigned instead of test-signed by @bherbruck in #16263
  • History: double-clicking an item with nothing to edit says so instead of opening a raw command by @raykholo in #16179
  • Continuous orbit picks its pivot through the drag orbit's function by @bherbruck in #16264
  • solidcore: a fillet that leaves a solid open is refused by default (retire fillet_refuse_non_manifold_result, WR-212) by @MarkusReichart in #15085
  • blend corner ball: a real ball corner test, the solve counted; geom::krawczyk's closed-form tests (#15140) by @bherbruck in #15970
  • solidcore: measure an analytic extension in the side's own frame (#13720) by @darkfoam in #16165
  • Agent tools: an argument of two types is an anyOf, so Gemini agents accept the tool list (#16257) by @ablasik in #16285
  • Render Image views: input and output schemas for render.result.view and render.result.close (#16024) by @0rdnungsamt in #16055
  • solidcore: a round rolled onto a taller boss ends on the boss face, not past it (#15767) by @brett19 in #16027
  • Measure: the closest distance from a face to a line or another face counts where each one ends by @ablasik in #16300
  • 3D view: hovering or clicking an arc that a sphere's seam cuts in two takes the whole arc, not half (#16122) by @bendavis in #16191
  • solidcore-ops: a planar curve offset in its plane, its distance measured by @jyviko in #16306
  • solidcore-ops: an edge as a curve is the edge itself when it fits by @jyviko in #16308
  • solidcore: a refused relate says where the entity and its mates are (#16098) by @dudedagger42 in #16272
  • Mirror: the live preview shows the copy as a green ghost, and the operation follows where the copy lands (#11490) by @N3MI-DG in #11491
  • solidcore: the point of an edge nearest a ray, in the kernel and through ops by @jyviko in #16206
  • CI and release: every Linux and Windows job runs on Blacksmith by @bherbruck in #16323
  • History bar: a long history no longer slows down every frame (#16313) by @FinnDaCaptain in #16314
  • History: a new folder's name is typed in its row, not in a box at the window's corner (#16217) by @ablasik in #16326
  • Viewport: orbiting near the top view no longer drifts the model sideways (#16091) by @steffenl1 in #16207
  • KiCad PCB import (#5091) by @ahagelberg in #5092
  • STEP import: a cylinder whose rim lies a fraction of a micron off its wall keeps its wall (#15888) by @nedawson in #15889
  • solidcore: test an End's rail end on its face to the rail's tolerance, so fuzz body b27's edge 28 rounds at r 1.6 and up to its cutoff (#15906) by @brett19 in #16044
  • Add Sweep command guide by @1993eg1 in #16413
  • Sketch: rotating a rectangle keeps it a rectangle (parallel and perpendicular replace the horizontal and vertical it can't keep) by @bherbruck in #16117
  • Assemblies: with a placement hidden, edits and joint drags no longer check every body at every placement (#16396) by @N3MI-DG in #16403
  • Add Bounding Solid command guide by @1993eg1 in #16355
  • Combine: joining bodies that don't touch no longer slows down with the square of their number (#3455) by @N3MI-DG in #16358
  • Add Torus command guide by @1993eg1 in #16367
  • Add Pipe command guide by @1993eg1 in #16376
  • Add Rib command guide by @1993eg1 in #16385
  • Add Emboss command guide by @1993eg1 in #16409
  • CLI scripts: resolve file paths beside the script with --script-relative (#8195) by @cfaulkingham in #16414
  • Web app: dragging the Move triad moves the body again by @ancientastronauttheorist in #16316
  • UI scenario tests click controls instead of tooltip text (#15856) by @cfaulkingham in #16338
  • Measure: a box select round one piece of an edge that a seam cuts in two takes that piece again by @bendavis in #16344
  • settings.profile.export and import: a null path or name stays valid in the published schema by @0rdnungsamt in #16429
  • Add Cylinder command guide by @1993eg1 in #16360
  • A cut or intersect on a surface body is refused with the reason (#9867) by @dudedagger42 in #16184
  • Assistant: Markdown tables are drawn as tables instead of raw text (#16248) by @Ehuntabi in #16256
  • Engine: a note can be added without naming an anchor (#16015) by @vdirienzo in #16339
  • solidcore, ui-kit: twelve pieces a surface modeller needs, in one PR by @jyviko in #16410
  • View: draw the edges of parts small on the screen with fewer line segments, so large assemblies orbit at full frame rate by @oursland in #16330
  • Add Box command guide by @1993eg1 in #16362
  • Add Sphere command guide by @1993eg1 in #16365
  • Add Cone command guide by @1993eg1 in #16372
  • Windows: cargo xtask ci finds an installed Python for the icon checks instead of failing on the Store placeholder (#6955) by @steffenl1 in #16382
  • Add Web command guide by @1993eg1 in #16387
  • solidcore: a knife-edge chamfer too large names its own limit (#15250) by @brett19 in #15520
  • Draft and Offset Faces: walls trimmed by spherical faces no longer refused (curved edge and corner reach bounds) by @raykholo in #16174
  • solidcore: a curved Setback refuses a corner whose piece of a face holds another edge or loop (#13832 step 1) by @brett19 in #16327
  • solidcore: STEP export writes inside-out tori with the right same_sense on the default kernel (#16250) by @brett19 in #16332
  • solidcore: the trimmed-face tight box keeps its bound when a cell at the limit has no solution (#16249) by @brett19 in #16334
  • solidcore: harden three checks from #16027's review (turn-back margin, seam-only UV pass-over, zero seam hint) by @brett19 in #16354
  • Home: show progress and Cancel while opening a design (#16107) by @cfaulkingham in #16222
  • solidcore: shelling a rounded box no longer fails when its centre is on Y = 0 (#15108) by @brett19 in #16379
  • Extrude To Object: a negative To Offset that ends the extrusion before a curved face ends at that level, instead of running out through the part by @plexi32 in #16059
  • STEP import: a closed solid whose edge crosses a closed spline's seam imports closed again by @raykholo in #16163
  • Mirror: a mirrored body from an older design is no longer refused with 'solidcore rejected the input' by @raykholo in #16247
  • Viewport display toggles: input and output schemas for the four view.* display settings by @0rdnungsamt in #16447
  • solidcore: an offset cone truncated at its apex keeps a truncated cone's slope (#15165) by @brett19 in #16381
  • solidcore: a thin face far from the origin gets its loop orientation from a certified area (#15107) by @brett19 in #16383
  • Measure: count merged topology without meshing the body by @yuri-schmaltz in #16412
  • Quarantine the flaky theme-switch viewport test (#16468) by @bherbruck in #16472
  • Browser: show motion links under Joints, with Edit and Delete (#6825) by @tbrasselle in #6908
  • solidcore: near-tangent strips in planar booleans are decided once, by certificate (WR-305, WR-614) (#15718) by @brett19 in #15747
  • solidcore: the Setback beside curved faces is the default; retire fillet_setback_beside_curved_faces (#13832 step 4) by @brett19 in #16328
  • solidcore: a boolean operand touching itself along a line is glued into one edge first (#13650) by @brett19 in #16392
  • solidcore: STEP import keeps a micro edge on a spline with a 1e-7 knot span (#15065) by @brett19 in #16402
  • Loft: a loft with a guide rail no longer fails with status 1001 by @raykholo in #16431
  • ball corner tests: three spheres, two certified ball corners with no plane (#15140) by @bherbruck in #16432
  • Plugins: each plugin gets its own menu entry and ribbon button, and the dialog title is just its name by @bherbruck in #16454
  • sketch.transform: input and output schemas for the transform command by @0rdnungsamt in #16456
  • Fillet: root rounds where a lofted horn meets a wing build instead of failing with status 1001 by @raykholo in #16426
  • Paint Appearance and Pick Up Appearance: input and output schemas for the two appearance gestures by @0rdnungsamt in #16481
  • Expressions: 3 in % 1 in is 0, not 25.39999999999999 mm by @56steve in #16490
  • Booleans: two solids joined where they touch along a line no longer fail with "relate: upstream status 1001" by @leon-vv in #16473
  • Add Donate and Discord pills to the title bar (hide with ×, links stay in Help and About) by @bherbruck in #16448
  • Sketch: an ellipse takes parameter expressions like a line, rectangle and circle (#8191) by @thomschlie in #16378
  • Release 0.42.0: version bump and design format v56 by @bherbruck in #16511
  • Test: an older pattern design is saved as format 55 now that 0.42.0 folded its change by @bherbruck in #16524
  • Clearance: a part set 0.3 mm from both walls of an inside corner is no longer reported as touching by @raykholo in #16401
  • solidcore: regression test for a fillet along a near-tangent corner chain (#12053) by @brett19 in #16484
  • Navigation Tool and Visual Style: input and output schemas for the two latched view settings by @0rdnungsamt in #16501
  • solidcore: a chain round whose rail lies wholly on the tangent face beyond rolls fully onto it (#15767) by @brett19 in #16149
  • SUMMARY (#16346) by @vdirienzo in #16461
  • SUMMARY (#16164) by @vdirienzo in #16500
  • tests: booleans across the walls of a non-uniformly scaled body come out right (#14409) by @leon-vv in #16505
  • solidcore AGENTS.md: bug fixes in code that is being replaced are welcome by @bherbruck in #16695
  • solidcore AGENTS.md: drop the port-era "code that is going away" rule by @bherbruck in #16697
  • Sketch: insert an airfoil coordinate file (.dat, Selig or Lednicer) as one spline at a chord (#14202) by @GrumpyOldNerd in #14430
  • Sketch: a point placed by an expression says why it is fixed, and unfixing it releases it or refuses with that reason by @raykholo in #16557
  • solidcore: curve, geom, intersect, nurbs and offset failures move onto the typed record: typed causes and StageFailed (#13790) by @brett19 in #14990
  • solidcore: test 13 passes over a turn only where the whole trim's image radius is certified on its surface by @brett19 in #16169
  • Kernel booleans: a line's hull bound includes the rounding of its parameter conversion (follow-up to #16146) by @Rempelino in #16201
  • solidcore: prove a round lies past an End before refusing it, and name the smaller fit when a ball is also irregular (#16156) by @brett19 in #16236
  • Fillet: a second fillet on a body whose first fillet made freeform faces is no longer refused by @raykholo in #16299
  • solidcore: direct tests of the curved Setback certificate (#13832 step 2) by @brett19 in #16331
  • solidcore: curved Setback with four rounds, and the cone grown vs placed (#13832 step 5) by @brett19 in #16370
  • solidcore: a cut leaving an earlier cut's flat side at its tangent round no longer fails in make_faceuse (#15247) by @brett19 in #16380
  • solidcore: retire the group A UpstreamFixes flags that change no result by @brett19 in #16433
  • Parameters: changing a parameter that rebuilds a filleted boss no longer overflows the stack on Windows by @raykholo in #16434
  • solidcore: retire extent3d_contains_both_segment_endpoints (segment ends outside the knot box) by @brett19 in #16442
  • solidcore: certified extension reach beside surfaces of revolution by @brett19 in #16466
  • Fillet and Chamfer: a failed blend says why the kernel gave up, not only "the fillet body is not built" by @ancientastronauttheorist in #16469
  • solidcore: pin #16354's three decision changes with tests (#16470) by @brett19 in #16485
  • solidcore: a taper from a tip where a line touches an arc builds (part of #16003) by @MarkusReichart in #16499
  • STEP import: parts with hollow voids import again instead of failing with "IsInnerShellOf: unported" (#15895) by @MarkusReichart in #16509
  • Fillet: a 5 mm round between a cone chamfer and a flat chamfer builds instead of failing with status 1001 by @ancientastronauttheorist in #16582
  • Chamfer: where a convex and a concave chamfer meet beside a wall, the corner no longer stands out of the wall (#13755) by @MarkusReichart in #16597
  • Booleans: a long thin elliptic prism faces outward, so an Intersect with it no longer acts as a cut by @raykholo in #16598
  • Fillet: chord and G2 rounds at a boss's foot build when wider than the flat face beside them (#15417) by @plexi32 in #15879
  • Plane at an angle about a construction axis now follows the axis when the model changes by @raykholo in #16534
  • Surface Extrude: the dialog shows the drag arrow for distance, as Extrude does by @raykholo in #16550
  • Extrude: a symmetric through-all cut with a start offset cuts all the way through by @raykholo in #16561
  • Threads: a face saved on a cylinder's numbered side piece in an older design is found again by @raykholo in #16606
  • Offset Face: a piece of a split cylinder, cone or sphere moves off the piece beside it (part of #13722) by @MarkusReichart in #16612
  • solidcore: retire the database_io_byte_swaps_read_boolean_and_u16 flag by @brett19 in #16615
  • Booleans on bodies with many holes or curved faces finish faster: the validity check no longer copies the whole body per seam corner (#16619) by @N3MI-DG in #16620
  • Sketch editing: clicking inside another sketch's closed zone no longer selects it (#16197) by @vdirienzo in #16605
  • Chamfer: every edge of a long polyline outline chamfers 25 times faster again (128 edges: 32.5 s to 1.3 s) by @raykholo in #16650
  • solidcore-ops: turning a sheet over with another body's order leaves it unturned (#16633) by @steffenl1 in #16663
  • Chamfer and round: a boss's top edge builds instead of failing with 'a kept boss's walls are not upright' by @raykholo in #16664
  • Booleans finish sooner: the validity check certifies each face loop's orientation once, not again for every pass and unchanged face (#16678) by @N3MI-DG in #16679
  • Resize lone docked panels from their bottom edge by @Nathan-Dane in #16427
  • Render Inspector and Shots Strip: input and output schemas for the two Render window panels by @0rdnungsamt in #16512
  • Commands: give select.filter its input and output schemas by @0rdnungsamt in #16553
  • Joints: a rigid joint whose origin face is gone still holds its parts, so driving a joint moves the free side by @raykholo in #16646
  • Thread: a thread made in one of two identical components is cut into that component, not into the other one (#16668) by @ChrisNourse in #16687
  • Emboss: text and profiles wrap onto the inside wall of a cylinder (a bore) as well as the outside by @raykholo in #16689
  • Fillet: a fillet where a revolved ring meets its end face no longer leaves a body the kernel rejects by @raykholo in #16405
  • Component History: input and output schemas for component.hide_history and component.show_history by @0rdnungsamt in #16558
  • Sketch: rotated rectangles keep their shape when released from a stationary line (#16642) by @cfaulkingham in #16701
  • Window: a mouse button the system kept while the window lost focus no longer stays held when it comes back by @raykholo in #16568
  • Measure: an axis meets a datum plane far along it, not only within its drawn ends by @ablasik in #16583
  • Sketch: a projection whose face or edge is gone names its source and curves, the sketch stays visible, and Redefine Sketch Plane still moves it by @kaievns in #16588
  • Build: clippy passes on macOS again in the KiCad 3D-model folder lookup (#16565) by @ablasik in #16603
  • Sketch profiles: two arcs meeting tangentially at one corner keep that corner, so a Join of the region builds by @plexi32 in #16607
  • Fillet: when no radius builds, the dialog no longer says to try a smaller one by @cloker53 in #16655
  • solidcore: WR-786, SmCrvOnSurf EvaluatePoint and Evaluate disagree past the surface domain by @bherbruck in #16755
  • solidcore-ops: an unsound body's refusal names its edge, vertex or face by record index by @MarkusReichart in #16696
  • Agent server: a missing --allow-path folder is reported instead of dropped silently by @raykholo in #16672
  • Panels: a saved layout with one entry that can't be restored keeps the rest instead of falling back to Classic by @raykholo in #16676
  • Agent chat: Flatpak setup steps from a fresh install by @1993eg1 in #16700
  • 3D Arc: input and output schemas for sketch.arc3d by @0rdnungsamt in #16739
  • Combine: a hub joins a ring of fins whose tips overlap inside it by @ablasik in #16622
  • Shell: replacing a sketch line no longer breaks the shell's face references, and a point pick re-resolves them by @raykholo in #16671
  • Loft with guide rails: the surface follows a tightly bent rail (#16754) by @JesperWe in #16743
  • Window: the pointer shape is set again when the window gets focus back on Wayland by @raykholo in #16590
  • Sketch: fillet and chamfer round or cut the corners of an offset path instead of refusing (#8903) by @derappelt in #16658
  • Design Revision: input and output schemas for document.revision by @0rdnungsamt in #16750
  • AGENTS.md: integrations with other platforms need the maintainer's yes first by @bherbruck in #16785
  • AGENTS.md back under 5000 characters (fixes main) by @bherbruck in #16793
  • Guide: keep designs on a network share by mounting it in your operating system by @raykholo in #16796
  • Preferences: draw the footer's "Restore page defaults" as a button (#15908) by @Ehuntabi in #15977
  • [#16449] Delete Face: the curved-neighbour refusal names both faces' kinds and the way out by @Dylan-ISE in #16474
  • Booleans: cutting many holes in one cut no longer walks the whole body for each face it removes (#16703) by @liorknafo in #16707
  • solidcore-ops: an offset that closes an edge to nothing is refused with that reason, not "not supported" by @dudedagger42 in #16364
  • Edit Canvas on the toolbar edits the canvas picked in the Browser, not the first one (#16518) by @Dylan-ISE in #16533
  • Chamfer: an edge saved on a cylinder's numbered side piece in an older design is found again by @raykholo in #16543
  • Navigation: in orthographic view the camera no longer drifts past the model, so picking keeps working by @raykholo in #16604
  • Preferences: searching no longer paints egui's duplicate-widget-ID warning over the window (#15902) by @thocsmith in #16134
  • Flatpak: let hosted AI connect and save API keys (#16692) by @cfaulkingham in https://github.com/tangency-labs/solidcraft/pull/16722
  • Command search: typing G1 or G2 finds the tangent, curvature and blend commands by @raykholo in https://github.com/tangency-labs/solidcraft/pull/16775
  • Assemblies: an extrude up to an object inside a moving part moves with the part instead of stretching by @raykholo in https://github.com/tangency-labs/solidcraft/pull/16761
  • solidcore: a face's exact box no longer misses a dip the solver skipped (the peg's chamfer face, 7.2e-4 below its box) by @MarkusReichart in https://github.com/tangency-labs/solidcraft/pull/16715
  • Component Colors: input and output schemas for inspect.colored_components by @0rdnungsamt in https://github.com/tangency-labs/solidcraft/pull/16762
  • Construction plane: the three-point plane dialog picks points on a mesh body by @raykholo in https://github.com/tangency-labs/solidcraft/pull/16772
  • STEP import: a small solid is imported instead of dropped with 'invalid B-rep record: flat arrays', and its neighbour keeps all its faces by @raykholo in https://github.com/tangency-labs/solidcraft/pull/16531

New Contributors

Full Changelog: v0.41.0...v0.42.0

Don't miss a new solidcraft release

NewReleases is sending notifications on new releases.