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.
cargo install luacad # CLI for running and converting LuaCAD scripts
cargo install luacad-studio # GUI desktop app with live 3D previewRequires Rust.
git clone https://github.com/ad-si/LuaCAD.git
cd LuaCAD
make installluacad 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)luacad-studioDesktop app with a code editor and 3D viewport. Edit Lua code on the right, see the model update on the left.
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 }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)
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
The initial Lua implementation was done by Michael Lutz at thechillcode/Lua_CAD. The project was later rewritten in Rust.
