We love and hate OpenSCAD. As programmers, we like describing objects we want to 3D print or otherwise model. As programmers, we hate all the strange things about OpenSCAD that make it not like a normal programming language. Maybe µCAD (or Microcad) is the answer. This new entry in the field lets you build things programmatically and is written in Rust.
In fact, the only way to get it right now is to build it from source using cargo. Assuming you already have Rust, that’s not hard. Simply enter: cargo install microcad. If you don’t already have Rust, well, then that’s a problem. However, we did try to build it, and despite having the native library libmanifold available, Rust couldn’t find it. You might have better luck.
You can get a feel for the language by going through one of the tutorials, like the one for building a LEGO-like shape. Here’s a bit of code from that tutorial:
use std::geo2d::*;
use std::ops::*;
const SPACING = 8mm;
op grid(columns: Integer, rows: Integer) {
@input
.translate(x = [1..columns] * SPACING, y = [1..rows] * SPACING)
.align()
}
sketch Base(
columns: Integer,
rows: Integer,
width: Length,
height: Length
) {
thickness = 1.2mm;
frame = Frame(width, height, thickness);
struts = Ring(outer_d = 6.51mm, inner_d = 4.8mm)
.grid(columns = columns-1, rows = rows-1);
frame | struts;
}
There are proper functions, support for 2D sketches and 3D objects, and even a VSCode extension.
Will you try it? If we can get it to build, we will. Meanwhile, there’s always OpenSCAD. Even TinkerCAD can do some parametric modeling.

Obligatory 15 standards XKCD
The most improperly wielded XKCD ever.
“Ooh we can’t ever improve anything because that takes us to 16 standards and 16 standards is stupid!”
Does Ai knows this new language? considering it’s just Alpha Release 0.2.14
probably not. Someone should just make good OS AI CAD
Well, some mainstream ai at least does know, but it is difficult to make it follow precisely your direction. It is very helpfull at the intial steps of a compiling system installation, of personal learning, but then, if not a small one and out exercise, if one is fluent, he’d better proceed writing directly.
I detest workbenches as they are an intrusion of physical into the virtual. Unless we can explain a design even a CAD master will fail, “Oh! You meant a mansion for humans? Not one for guinea pigs?” We need both a language and a gestural means of modeling, just as some programming IDEs supported drawing an input screen and adding code or encoding the whole input screen. We must have a way to share and distribute both together as a unit.
There you go, Maker Distro. All your disappointments in one place.
BUT, maybe AI modeling… never mind… it’ll screw up after the Nth iteration.
One question: does it do fillets? :-)
To each their own, but I’m asking if it does chamfers. :)
It’s code — you either wrote the fillet function yourself, copied it off the interwebs somewhere, or are using someone’s fillet library.
Nope, it’s not that simple. You need BREP representation to do “surface dress-up” features such as fillets, chamfers, drafts and face offsets. If it uses a strictly CSG representation then it can only do the aforementioned features (with extra work to convert the surface dressup operators into volumetric subtraction operations in very trivial cases.)
In more complex cases, such as when you neted tangent propagation across a non-planar wire of edges then you can’t do it by “just coding your own” you’d effectively have to write your own tiny BREP kernel.
CadQuery and Build123D both have native chamfers and fillets.
Those tend to rely on the Open Cascade geometric kernel, I think FreeCad also uses the same one. It’s the kernel that does all the actual calculations with things like CadQuery being a frontend to it.
Don’t forget CADQuery:
https://github.com/CadQuery/cadquery
Yes! I used SolidPython to drive OpenSCAD but back in 2020 we needed .step output because the CNC people didn’t accept .stl any longer. Then I found CadQuery2.0; it is powerful but sometimes finicky.
I ended up writing a library and doing CSG :)
Having yet another separate language for this seems cumbersome. I rather like the approach Cadquery took (Python).
https://github.com/CadQuery/cadquery
Or even better IMHO: Build123D, which is also Python and uses the same kernel as CadQuery.
It seems to use the same geometry library as OpenSCAD, so it is equally limited in not being able to output true curves to .step. Just a different syntax to make sure you can’t take advantage of the huge amount of already existing OpenSCAD scripts.
One of the greatest features of OpenSCAD is the quick preview through libopencsg. Does MicroCAD have that?
In their page there’s a blog post saying about a bug stopping builds from working. But from what I could understand, it’s already solved. I’ll try to play with it after work
I’m migrating to build123d because it can export in formats more suitable to cnc such as stp
JSCAD allows you to design without installing anything.
that nonsense “language” of openscad, JS, Python, now Rust…
c-csg – only C, only hardcore!!!
or OpenCascade. It’s also JavaScript running in the browser
But cargo’s over-complication and excessive dependencies isn’t a problem because it always just works :)
I’ve seen a handful of versions of this kind of approach, where the “scripted cad language” is just a regular programming language with a library of useful primitives. I understand the draw of this approach but i’m not interested in it myself. Especially with a moving target like Rust. It makes it too hard to even implicitly standardize the CAD language. The opportunity for whacky and delicate idioms is too large. The demarcation between internal details and user-facing language features is too murky. The ability to fundamentally restructure the rendering pipeline without changing the input language is almost completely eliminated (and has been a huge source of profit lately for OpenSCAD).
Say what you want about OpenSCAD, but even though i have a few models that rely on relatively new versions of openscad…all my old models still build with the newest version. I like that.
The longer i use it, the less i chafe against its limits…they’re odd at first but ultimately not that hard for me to work around. I’m demonstrating my attachment to the tool i know over the tool i don’t :)
Nah, all of these “openSCAD but with better syntax” proiects are a waste of time better spent making OCCT actually usable.
Build123D is the ONLY one that actually justifies its existence because they realized openSCAD doesnt only suffer from a syntax problem, it suffers from a representation problem. B123D lets you have both feature stack modelling AND CSG tree modelling, and, crucially, you can combine both these workflows.
I wouldn’t say it’s a waste of time even if it doesn’t solve that problem. Having crates like these in the rust ecosystem is a huge win. I would probably be terrified to look at the source for openscad, this, I’d at least be able to assess the code.
Anyway I think this is a great project and I’m looking forward to following it and seeing how it progresses. I wonder if it can do 2d cad and further how hard it would be to export to svg
BREP geometry kernel like OCCT can do CSG but CSG can’t replicate capabilities of BREP.
Their effort would have been much better spent integrating proper BREP kernel.
As a programmer, I quickly ran into limitations with OpenSCAD. It really got bogged down on more complex models. Granted, that was over a decade ago, so I don’t know if that got fixed or not. I switched to using a parametric CAD program (Fusion for a while, but have tried FreeCAD over the years, and start switching over completely since the 1.0 release). If I really wanted to go back to programming my CAD models, I would just use Python inside of FreeCAD to do it.
If you’re complaining about openscad’s execution time, progress has been mixed. Debian still comes with openscad 2021.01, which i would describe as generally dog slow. So i recently installed 2025.01, which is much faster on my more complicated models. But unfortunately it crashes on some. So i keep both around, and i change my makefile to the newer version whenever i am impatient with a specific model. I assume openscad development is on the cusp of solving these problems but i don’t keep on top of it.
SDF modelling is a lot more fun… and I do hate Rust :) https://bauble.studio/
I love OpenScad language. It is clean descriptive and functional. I programmed in Python before Openscad and yearned for some imperative language features but “let” in functions and comphensions but now I dont. That you cant re-assign variables took a bit of getting used to but now I think it is probably a good thing. Functions can be recursive.
What would I like? 1. More introspection. 2, Modules are not functions and geometry is just a “side effect”. I would be great if modules returned geometry but something like this is in the BOSL2 library.
I am both a programmer and a language designer who doesn’t hate OpenSCAD. The very first time I used it, I was able to quickly build a pretty cool, fully parametric model, “rigging” that my son used for his animation project. The model was both dramatically more complicated and more convenient to write than I would have been able to do using parametric CAD software like SolidWorks. What is important to note is that OpenSCAD is a representation language not a programming language. You write “functions” that are more like macros, and these get “macro-expanded” into your 3D model with just enough ability to computate dimensions, solids, and coordinate frames along the way. Sure, I silently griped a bit while I was building my model, but if I had to do it again, I’d use OpenSCAD before I’d ever consider ramping up on a WYSIWYG CAD program again. Too much to learn, too little time.
P.S. I have to imagine that there are some clever folks who write Python code (or other popular “real” programming language) that generates OpenSCAD code. If so, I’d love to hear about it.
https://pypi.org/project/solidpython2/
Here you go. I write all my models in it.
Guys … … PythonSCAD!?
https://pythonscad.org/examples.php
Let’s not reinvent it.
Been working on an early stage BREP kernel my self. https://github.com/mmiscool/BREP
I can’t live with modeling that dose not have faces and edges. Using the manifold 3d library in that also. For doing all the boolean operations. Works great. I had to make my own abstractions for the rest of it to have proper faces and edges. Also been working on doing fillets on meshes. Getting surprising good results.
SolidPython. A free Python module.
It’s a wrapper around OpenSCAD that lets you write 3D objects in Python.
Works great.
Ahh, Rust. The new hammer looking for nails already well-hammered by C.
They lost me at Rust.
The language might be okay-ish, but that does not matter if the build system is broken. Even a Python-NPM-Java crossover feels like child’s play in comparison.
Agreed. I don’t really care if it’s written in rust or cobol; if they can’t even get a build chain clear and portable, I can only imagine the quality of the underlying software.
OpenSCAD is not a “programming language”, it is just a definition of closed space in predicate logic. Turning OpenSCAD into programming language is hobby of many, and this iteration is not much different.
You wrote and posted an article about software you couldn’t even get functioning?