1 unstable release
Uses new Rust 2024
| 0.1.0 | Feb 24, 2026 |
|---|
#624 in Math
190KB
5.5K
SLoC
LuaCAD
Solid 3D CAD modeling with Lua.
Write parametric 2D and 3D models in Lua and export them to 3MF, STL, OBJ, PLY, OFF, AMF, or SCAD.
LuaCAD embeds Lua 5.4 in a Rust engine that evaluates CSG operations directly (via Manifold) or generates SCAD code for external rendering.
Installation
Via Crates
cargo install luacad # CLI for running and converting LuaCAD scripts
cargo install luacad-studio # GUI desktop app with live 3D preview
From source
Requires Rust.
git clone https://github.com/ad-si/LuaCAD.git
cd LuaCAD
make install
Usage
CLI
luacad convert model.lua output.3mf # Convert to 3MF
luacad convert model.lua output.stl # Convert to STL
luacad convert model.lua output.scad # Export as SCAD for OpenSCAD
luacad watch model.lua output.3mf # Rebuild on file changes
luacad run model.lua # Execute (side-effects only)
Studio
luacad-studio
Desktop app with a code editor and 3D viewport. Edit Lua code on the right, see the model update on the left.
Example
my_cube = cube { size = { 1, 2, 3 } }
function my_sphere(radius)
return sphere({ r = radius }):translate(5, 0, 0)
end
model = my_cube + my_sphere(2)
render(model)
Equivalent OpenSCAD:
module my_cube() {
cube(size=[1,2,3]);
}
module my_sphere(radius) {
translate([5,0,0]) sphere(r = radius);
}
union() {
my_cube();
my_sphere(2);
}
More examples in the examples/ directory.
Check out the website to see all supported features!
For easier usage, LuaCAD has full support for the [Belfry OpenSCAD Library v2][BOSL2]. You can use its functions like this:
bosl.cuboid { {40, 40, 40}, rounding = 2 }
bosl.regular_prism { 5, r = 10, h = 25 }
bosl.spur_gear { circ_pitch = 5, teeth = 20, thickness = 5 }
Why Lua?
The OpenSCAD language is limited and has several issues:
- Confusing functions vs modules
- Weird variable scoping
- Not a well establised programming language
- Bad editor support
- Limited documentation
- Limited libraries
- Bad error messages
- Bad performance
Therefore, a real programming language should be used and it should ideally be interpreted and have good operator overloading support
- Julia - Too complex
- Python - Too slow and while easy to get started, hard to master
Lua is a better fit:
- Well-established, embeddable language
- Operator overloading for natural CSG syntax (
a + b,a - b) - Consistent semantics and good performance
- Similar syntax to OpenSCAD's language
- Already used in other CAD software (LibreCAD, Autodesk Netfabb)
Supported Export Formats
Roadmap
Related
Other CAD software with programmatic model creation:
- BlocksCAD - Blockly-based CAD
- Flowscad - Rust interface to OpenSCAD
- FreeCAD - Python scripting
- HelloTriangle - 3D modeling with Python
- ImplicitCAD - Haskell-based CAD
- LibreCAD - Lua scripting
- Liquid CAD - 2D constraint-solving CAD
- ManifoldCAD - JavaScript-based online CAD
- OpenSCAD Rust - Rust OpenSCAD VM
- openscad-rs - OpenSCAD parser library for Rust
- [OpenSCAD] - OpenSCAD language
- Rust Scad - Generate OpenSCAD from Rust
- scad_tree - Rust solid modeling via OpenSCAD
- ScalaCad - CSG in Scala
- SolidRS - Rust OpenSCAD model generation
- SynapsCAD - AI-powered 3D CAD IDE
History
The initial Lua implementation was done by Michael Lutz at thechillcode/Lua_CAD. The project was later rewritten in Rust.
Dependencies
~35–55MB
~872K SLoC