Sawhorse
Free, local-first, open-source SketchUp-style modeling for woodworkers and makers.
Draw a rectangle, push it up, type 3/4 and press Enter. The keys your hands already know, a cut list that lays out your sheets and boards, and files that print and cut.
What it does
Made for the shop.
Opens .skp, exports watertight
Bring SketchUp models in, with their groups, components and layers. Every STL and 3MF that leaves is a closed solid, ready for the slicer or the CNC.
Cut list and nesting built in
Parts, sizes, grain and board feet as you draw; sheets and boards laid out with your kerf, and cutting diagrams as SVG, DXF and PDF.
Offline, no account
Your models stay on your machine. No sign-up, no subscription, no tracking. The browser version uploads nothing, and the desktop app works with the network unplugged.
Download
Version 0.1.0-alpha.1, a pre-release. Or skip the install and try it in your browser.
macOS (Apple Silicon)
Download for macOS Disk image (.dmg) for M1 and later Macs.The builds are unsigned for now, so your system warns before the first launch. Windows: in SmartScreen, choose More info, then Run anyway. macOS: open it once, then System Settings, Privacy & Security, Open Anyway. Every installer is built in the open by GitHub Actions; see the release page.
How it is built
The geometry kernel is Rust, compiled to WebAssembly: a solid modeler with exact push/pull and booleans, and a validator that checks the model after every operation. The interface is TypeScript, React and three.js, and the same build runs in a browser tab and in the desktop app.
Sawhorse is built with AI agents working under tests: unit and property tests, a fuzzer that runs thousands of random modeling sessions on every change and tens of thousands more each night, golden hashes that hold the WebAssembly kernel to the native one, and an independent review of every piece of work before it merges.
It is clean-room: no SketchUp code and no SketchUp SDK. SketchUp files are read by the MIT-licensed openskp library, on your machine.
maintained by @boardfoot