Sculpo

Shapes in.
STL out.

Sculpo is a browser-based solid modeller for 3D printing — drag primitives onto a workplane, mark them solid or hole, group to cut, and export STL. Tinkercad-shaped, self-hosted, and yours.

Get it on GitHub Explore features
Self-hosted Open source Offline PWA STL / OBJ export
Why Sculpo

CAD in the browser, yours on the shelf

The friendly way to model for a printer shouldn't live in someone else's cloud. Sculpo keeps the Tinkercad way of working — and puts every part of it on your side of the wire.

Geometry never leaves the browser

Every boolean, every mesh, every preview renders on your machine. The optional server stores only the scene graph as JSON — it never touches a mesh, which is why a NAS is all it needs.

Solids and holes, like you know

The Tinkercad mental model: any shape can be a hole, group it with a solid and the cut happens. Groups nest, so the result is just another shape to cut with.

Works with the network unplugged

Installable as an offline PWA — model on a plane, in the shop, wherever. Point it at your server and projects sync across devices on their own; there is no save button.

Invite-only by design

Accounts are closed by default: admins register with a secret, everyone else needs a single-use invite code — hashed, shown once, expiring. Your instance stays yours.

Everything inside

From idea to printable part

Sixteen primitives, real booleans, and the measuring tools that make parts actually fit.

Sixteen primitives

Box to torus, gear to thread to 3D text — placed by click, snapped against neighbours, moved by gizmo or exact numbers.

Cut by grouping

Mark any shape a hole, group it with a solid, and the boolean runs — drill with a cylinder, notch with a box.

Sketch & revolve

Scribble a closed outline freehand, then extrude it to a solid — or revolve it around an axis for turned parts.

Import real meshes

STL, OBJ, and SVG come in cleanly — dense scans are decimated on the way, so a 700k-triangle download stays editable.

Measure & align

A snapping ruler, droppable datums with live offsets, axis alignment, mirroring, and your printer's real build plate.

STL & OBJ out

Export binary STL or OBJ — the whole scene or just your selection — ready for the slicer.

A visual library

Saved designs appear as rendered isometric previews, not filenames — drawn by the browser, framed to the model.

Desktop & touch, both native

The interface follows whichever input you last used — and a native iPad app wraps the same build.

Sync without a save button

Give it a server and projects flow across your devices on their own — bcrypt accounts, hashed sessions, owner-scoped queries.

The server is optional. The tool is not less for it.

Run Sculpo with no backend at all — projects live in your browser. Add the server later and it does exactly one job: sync scene-graph JSON between your devices. It never sees a mesh, which is why the whole thing is happy on a NAS.

The name is Latin: sculpo"I carve."

Run it yourself

Try it, then self-host the sync

The modeller runs anywhere a browser does. Docker adds the sync server when you want projects on every device.

1

Launch the stack

One compose command brings up the web app, API, and Postgres.

2

Register the admin

Admins sign up with the admin secret; everyone else gets a single-use invite code.

3

Model & print

Drag shapes, cut with holes, export STL — projects sync on their own.

# launch (dev: web :8120, api :8020)
docker compose up

# production: image-only Portainer stack
# ghcr.io/jwapps-app/sculpo-{api,web}
# with a nightly pg_dump sidecar

For a real deployment, use docker-compose.portainer.yml behind your reverse proxy, and set SECRET_KEY, ADMIN_USERS, and ADMIN_SIGNUP_SECRET.

Reactthree.jsFastAPIPostgreSQLDockerPWA
FAQ

Questions, answered

Is Sculpo a self-hosted alternative to Tinkercad?
Yes — deliberately "Tinkercad-shaped." The same friendly model: drag primitives, mark shapes as solid or hole, group to cut, export STL. The difference is that everything runs in your browser and syncs to your own server, not a company's cloud.
Do I need a server?
No. Without one, projects live in your browser and the full modeller works — even offline as an installed PWA. The optional server does exactly one thing: sync projects between your devices. It stores scene-graph JSON and never touches a mesh.
What can I import and export?
Import STL, OBJ, and SVG — dense meshes are automatically decimated so even a 700k-triangle scan stays editable. Export binary STL or OBJ, the whole scene or just a selection, ready for your slicer.
Who can register on my instance?
Only people you invite. Admins register with an admin secret; everyone else needs a single-use invite code an admin creates in the UI — codes are stored hashed, shown once, and expire after 14 days.
Does it work on an iPad?
Yes — touch is first-class, and the interface follows whichever input you last used, so an iPad with a mouse gets the desktop treatment. There's also a native iPad app wrapping the same build.