The SVG writer kept its own number grid: each coordinate whole nanometres, every joint written once, a closed path ending exactly on its first point, slivers merged into the next piece and a path's last piece kept. PDF, PNG and the Drawing workspace's canvas need the same rules, so they move into `geom::paper::grid`, and the SVG writer only formats what the walk gives it. - `Grid`: `per_mm` steps a millimetre. `Grid::NANOMETRE` (six decimals of a millimetre) is SVG's. `Grid::new` takes 1 to 1e9; a power of two keeps every number exact as a binary float, which a writer of 32-bit numbers such as PDF can use. - `Prepared::on_grid(grid) -> OnGrid`: each group's items as paths of `Piece`s (lines, arcs of at most a quarter turn, cubics, parabolas), y up as in the scene, a closed path's closing line left to the writer's close, and a report of widths snapped and pieces merged. Slivers are measured in the grid's own steps, so a coarser grid merges more. - The SVG writer flips y on the whole numbers it's given and writes the same bytes as before. `SvgReport` is the grid's report. - Ellipses, hyperbolas and Béziers above degree 3 are still refused (A3b), now by the walk. DXF stays on its own number rule for now: it writes exact entities (ELLIPSE, SPLINE) and is being reworked under #5318 to #5321; whether its polylines take a grid is decided there. Tests: every SVG test unchanged, bytes included; the grid's rounding and its bounds; the A3 border on the grid (y up, closing line left out, fill loops closed); slivers in the grid's own steps, with the merge boundary both ways (10 and 11 steps, a 6-8 and a 7-8 step); an arc's quarters with their radius and turn in steps; a width under half a step made one step; an ellipse refused. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
SolidCraft
An open-source parametric 3D CAD application built in pure Rust.
Sketch, constrain, and build solids with a parametric feature timeline. Change a dimension
and watch your model rebuild. Run it on your desktop, in your browser, or let AI agents
model through the built-in MCP server.
Website ·
Download ·
Try it in the browser ·
Documentation ·
Discord ·
SolidCore
A Raspberry Pi 4 case from an empty design: a sketch dimensioned with the board's parameters, extrude, fillet, shell, the rim rounded in one pick, an M2.5 standoff patterned on the 58 × 49 mm hole rectangle, port cut-outs, vent slots, "Pi 4" engraved in DejaVu Sans Bold and a PETG material defined in the design, with its mass in Properties, then height 24 → 32 mm in Parameters and it all rebuilds. 9× playback. Full video, recorded with the demo script.
Download
- Windows: the installer, or
winget install bherbruck.SolidCraft. - macOS: the disk image (Apple silicon and Intel).
- Linux: the AppImage, or
sudo snap install solidcraft(Snap Store). - Web: try it in your browser, no install.
ARM64 and 32-bit builds, portable zip, .deb, .rpm, Flatpak and the other packages are on the downloads page. The downloads aren't signed yet: on Windows choose More info, then Run anyway in SmartScreen; on macOS right-click SolidCraft and choose Open the first time. On SolidCraft 0.11 to 0.14, download once by hand; see updating.
What works
Early but usable for simple parts: 75 of 76 public reference parts match their analytic or FreeCAD-computed volume, area, centre of mass and bounding box (oracle); the other is a tracked bug.
- Sketches and constraints: lines, arcs, splines, text and more, solved by our own constraint solver, with parameter-driven dimensions.
- Features: extrude, revolve, sweep, loft, fillet, chamfer, shell, draft, holes, threads, patterns, mirror, split and combine on an editable parametric timeline.
- Parameters and configurations with unit-aware expressions.
- Assemblies with joints, motion studies, contact sets, interference and mass properties.
- Sheet metal with flanges, hems, fold/unfold and flat patterns, and plastic enclosure features.
- Files: STEP, IGES, 3MF, STL, OBJ and glTF in and out where supported, URDF export,
.solidcraftdesigns. - Desktop app, browser app, headless CLI and MCP server, all running the same commands.
The full list is in docs/capabilities.md and docs/features.md; status and plans are in ROADMAP.md. See also what people built, 3D mouse support and the architecture.
Build from source
cargo run --release -p solidcraft -- --sample # desktop app with a sample part
cargo run --release -p solidcraft-cli -- commands # the command registry
cargo run --release -p solidcraft-cli -- run examples/bracket.json --out bracket.step
cargo xtask ci # fmt, clippy, tests, icons, assets, layers, wasm
More commands, the Windows cross-build and the browser build are in docs/building.md.
AI agents (MCP)
solidcraft-cli mcp is a Model Context Protocol server. Headless it
runs its own design session, or with --connect it drives the running app so you can watch.
Claude Code: claude mcp add solidcraft -- solidcraft-cli mcp. Tools, access rules and an
example session: docs/mcp.md.
Scripts
A script is a JSON list of the same commands the UI runs, executed with solidcraft-cli run.
Format and example: docs/scripts.md. Pages can also be driven through the
browser command API.
Contributing
Help is welcome. CONTRIBUTING.md covers how to build and test, the code map, the clean-room and licence rules, and where help is wanted most. Open work is in GitHub issues; chat is on Discord.
Sponsors
SolidCraft's continuous integration runs on Blacksmith, which sponsors its CI minutes.
Licence
MIT OR Apache-2.0, at your option. Developed under the clean-room contribution rules; third-party code and assets retain their documented licences and attribution.
SolidCraft is independent. Behaviour is designed from public documentation, general CAD conventions and user feedback. Reference tests use analytic values and open-source tools. SolidCraft is not affiliated with, sponsored by or endorsed by Autodesk, Dassault Systèmes, PTC, Siemens or any other CAD vendor. Fusion, AutoCAD, Inventor, SolidWorks, Onshape, Creo, Blender and Tinkercad are trademarks of their respective owners, named only to describe compatibility (see NOTICE).

