CSG Modeler#
A 3D constructive solid geometry (CSG) modeling application built with Rust.
CSG Modeler lets you create complex 3D shapes by combining simple primitives (cuboids, spheres, cylinders, toruses, cones, prisms) using boolean operations (union, intersection, difference). It features a real-time 3D viewport, interactive gizmo controls, face extrusion, edge chamfering/filleting, and parametric assemblies.
Built with egui for the GUI, wgpu for GPU rendering, and the Manifold library for CSG boolean evaluation.
I often found myself enjoying playing around with openscad, but didn't particularly enjoy the process of debugging the language, so this is a very poor imitatation with a similar facility for boolean mesh operations.
Screenshots#
| New document | Sphere primitive |
|---|---|
![]() |
![]() |
| Sphere boolean demo | Assembly demo |
|---|---|
![]() |
![]() |
Features#
- CSG primitives: cuboid, sphere, cylinder, torus, cone, polygon prism
- Boolean operations: union, intersection, difference
- Interactive gizmos: translate, rotate, scale, and shape-edit
- Face extrusion: select and extrude faces
- Edge blending: chamfer and fillet edges
- Parametric assemblies: group nodes with parameter bindings
- Dark/light theme: toggle from the Help menu
- Undo/redo: snapshot-based, depth ~50
- Native + WASM: runs on desktop and in the browser
Building#
Prerequisites#
- Rust toolchain (nightly for edition 2024 support)
- For WASM builds: LLVM 20+
Native#
cargo run --release
WASM#
rustup target add wasm32-unknown-unknown
cargo install trunk
trunk serve --release --no-default-features --features wasm
WASM (standalone)#
cargo build --target wasm32-unknown-unknown --release --no-default-features --features wasm
wasm-bindgen target/wasm32-unknown-unknown/release/modeler_app.wasm --out-dir dist --out-name modeler_app --target web
Controls#
| Key | Action |
|---|---|
B / S / C / T / K / P |
Add primitive (Box/Sphere/Cylinder/Torus/Cone/Prism) |
U / I / D |
Union / Intersect / Difference |
1-4 |
Gizmo mode (Translate/Rotate/Scale/Shape-edit) |
W |
Toggle world/local space |
F |
Toggle face select mode |
Enter (face/edge select) |
Commit extrusion / edge blend |
Esc |
Cancel / deselect all |
Delete / Backspace |
Delete selected node |
Ctrl+Z / Ctrl+Shift+Z |
Undo / Redo |
Ctrl+S / Ctrl+O |
Save / Load |
Ctrl+C/X/V |
Copy / Cut / Paste |
G |
Toggle multi-select mode |
Shift+click |
Range select (visible order) |
Ctrl+click |
Toggle item in selection |
Shift+F |
Frame selection |
License#
Apache 2.0 — see LICENSE.



