Be aware that the way OpenSCAD works (CSG) makes a lot of things difficult compared to "normal" CAD programs. A lot of common operations, such as arbitrary fillets on various edges, are simply hard to express or do.
The more powerful option is something built on the open-source Open Cascade geometry kernel: FreeCAD, cadquery, or build123d. This also gives you interop with the broader CAD ecosystem by enabling you to import and export STEP files. (Your favorite LLM can advise you on or drive these options as well.)
to be a bit tautological, openscad is nice but only for the things openscad is nice for. I prefer freecad for almost everything except highly parametric shapes. Plus you can do openscad inside of freecad.
The great thing about OpenSCAD is that it makes modeling using cubes, spheres, cylinders, and placing or stretching them mathematically easy.
The awful thing about OpenSCAD is that one's capabilities in it are bounded by one's fluency in using math to place or stretch cubes, spheres, and cylinders.
I suck at math but I can do pretty neat stuff with OpenSCAD that would take me 10x longer with 'the usual suspects' in CADland. It took me a while to get the hang of it though, I think the bigger issue with using OpenSCAD is a shift of perspective. From the outside it looks like solid modeling with primitives, but once you 'get it' the method changes completely, it is probably easier to explain with an example:
If you want to make a complex gear that has to mate with another gear you can do this in two ways: you can start with two discs intersecting at the right angle and then to chop out the teeth so the resulting object will be a gear and then you could subtract via a similar operation from the other disc to end up with two mating gears.
The - in my view much more effecient - alternative is to start off with just the supports as the discs and then to parametrically add the gear teeth onto the supports taking into account all of the clearances and the contact faces. This will get you much better gears because you are parametrically describing the surfaces that really matter and it will allow you to do nice things such as small fillets on everything to make the object far closer to what eventually will roll out of your manufacturing process (machining, 3D printing). It is a bit more work to define all of the parameters but the end result is much better and far less likely to have imperfections because you are generating what you want, not removing what you don't want. OpenSCAD can be used for sculpting, but that's not the best way of using it.
Not sure I buy this. CAD is both additive and subtractive simultaneously, so if you tell me it is purely about subtraction I don't think you are very experienced with CAD.
i did ton of projects in open scad in the past (8+yrs ago), even having access to freecad and solidworks. I was even sending patches to some 2d features on freecad.
but what made me use scad was reliability. i knew the time i put writting in vim would translate (heh) into a viable stl file i could send to manufacturing. while with both other options half the time was dealing with bugs and crashes and bad exports.
but how did i miss some convenience tools indeed. most could be solved with opensource methods (e.g. bevel, joiners with easing, threads)
[−]loloquwowndueo · 2026-10-10 Sat 22:50 UTC ·
link
Dude freecad 8y ago was indeed crashy and buggy but it’s far better these days.
Why is there a carve out for parametric shapes? Freecad is a parametric CAD tool. OpenSCAD is just a worse version that has limited macro capability compared to build123d and can only ever export solid bodies with flat faces. Seriously, why does anyone talk about a CAD tool that cannot export curved surfaces?
Because FreeCAD has a terrible UI and a community that can't handle criticism at all. So developers who see the awful UX and the awful community think it is a lost cause and then pick something else "Oh I know programming in text and OpenSCAD lets me programm my CAD!"
And then the worse is better trap gets them and they don't even bother looking for true programmatic CAD like build123d.
> Because FreeCAD has a terrible UI and a community that can't handle criticism at all
I think that's an unfair assessment. It has rough spots (as I'm sure all CAD software does) but it's functional and UX is improving rapidly with every release. It feels like it's built up a lot of momentum since I picked it up a few years ago.
It can do everything I need it to do. I mostly use the Part Design workbench, Part, Sketcher, Assembly, Lattice2, Fasteners, Spreadsheet; occasionally Curves and Curved Shapes workbenches. If I run into an issue the solution is almost always easy to find on their wiki, on Youtube, or by asking in their Discord server - the community is friendly and helpful in my experience.
It's hard to approach learning FreeCAD seriously when one spends real money on a book which is billed as covering v1.1 on the cover and advertised thus, but once one gets to the actual text on the application, it says "1.0 or later" and all the screengrabs and terminology are for 1.0.
[−]the__alchemist · 2026-10-10 Sat 18:38 UTC ·
link
Concur. It's worth explaining this, as someone new to CAD would get the impression the various tools in CAD are on even ground, and may assume "I know programming, so OpenSCAD sounds like the right choice". I would love some day for programmatic and/or free/cheap CAD to be competitive, but we're not there. Solidworks, Fusion, Inventor etc still outclass FreeCAD, which outclasses OpenSCAD.
I agree with your ordering of the various programs out there but FreeCAD 26.3 is now available as a release candidate with a wonderful collection of improvements. I'd think for many people, FreeCAD is now "good enough" for a lot of things. I'm building a virtual pinball cabinet and the whole thing is modeled in FreeCAD.
The mcp integration may be seen as both a blessing and a curse but tbh, it’s very interesting :) and hopefully as folks post and comment on more models that are generated with it, we can get a better training set.
I actually still use the freecad gui because it’s cheaper but I can totally see how someone new might just wanna use the MCP.
That's because you are thinking in the way you would with conventional cad systems, you are doing your operations sequentially a bit like a sculptor would: take a blank and then remove bits piece by piece. The trick to working effectively with OpenSCAD is to generate what you want, not to iteratively chip away at something.
I have found that a combination of the two approaches works best for me. In some cases it is easiest and most practical to combine (union) shapes to get to what you want, and in others it easiest to subtract (difference or intersect).
But then you won't be able to bevel complex shapes at all, which means that you won't be able to describe the object that you will end up with. "Good" CAD means that the representation in the computer is as close to the object you want to produce as you can make it. This makes it possible for downstream systems to accurately select nozzles and toolheads to get you what you want. If you produce an impossible object then your slicer or path computer will give you an approximation. That can be fine in some cases but usually your objects need to mate and if you mate two approximations you'll find quickly that that does not really work.
[−]Brian_K_White · 2026-10-11 Sun 00:19 UTC ·
link
There is no trick way to solve the fillet problem or about 100 other common necessary things in openscad.
Don't get me wrong, I love it myself and use it as much as possible simply because it's outstanding to be able to express a complete design in 1k of plain text which is readable, diffable, gittable.
You can get a lot done, and some things you can do even easier and simpler than anything else, and you can work-around some things, and you can get a good-enough almost-what-you-want other times, and it's practically ideal for certain classes of jobs as long as you're willing to live within the limits.
But "live within the limits" is not something a general purpose tool gets to say.
You can get some fillets easy sometimes if the geometry just happens to lend itself to some boolean op like making a rounded corner hollow box by hulling 8 spheres (which you can populate effortlessly with translate,copy,mirror) and then cutting another smaller copy. Voila, all kinds of interior and exterior fillets in like 10-15 short lines of plain text code. And the whole thing fully parameterized with dead simple variables sitting off by themselves with human descriptive names at the top of the file.
But that does not mean anything. That's a choice showcase example, and all the other infinite real life cases are somewhere between agonizing to code, to agonizing to code and agonizing for the computer (minkowski), to flat impossible.
I love openscad but this implication that it's just a matter of using it right is false.
The fillet problem is not a problem. It is a problem if you try to apply fillets after you have created something complex. But if you generate it out of variations on the primitives that already have filets it gets much easier to keep control over the resulting shape. What OpenSCAD makes next to impossible is to first combine a bunch of primitives and then to do one more operation on the resultant shape. That's really fighting the tool. But if instead you define a layer just above your primitives that already have the edges the way you want them to be then you can combine them and the filets will stay where they were on the primitives. The problem that remains is to blend them if you need to, I've found a really simple trick for that: define spheres with the fillet radius and create hulls over sets of these. That allows you to fill in the gaps if there are any.
[−]Brian_K_White · 2026-10-11 Sun 00:58 UTC ·
link
Incorrect. I repeat what I already said since you didn't say anything new either.
That works to some degree but you will quickly run into trouble because you can't get things 100% right. I don't think anybody is using OpenSCAD for professional use where you have to collaborate and have to produce exact shapes.
May be it is just the matter to compose a few good HOW-TOs. What I gave up on once was creating slabs with rounded edges. Basically imagine a slab which looks like an iPhone icon: you have in the plane of the slab rather a large corner radius, but for rounding the edges of the resulting slab, a much smaller one.
Writing now about it, I think I could do it with a torus, where the radius of its cross section is the small radius, the torus radius is the large one, take two of them, add two cylinders to only keep one quarter edge and then take a quarter of the resulting bevelled disk.
I used both OpenSCAD and cadquery, and I find the latter be effectively the same but with a cleaner more expressive syntax and some helper functions that people would commonly expect to be there.
If I have to build points up by hand, why not skip OpenSCAD and directly write python scripts that create your OBJ files? The point of OpenSCAD et.al. is to programmatically create geometry. Making exactly that easier is a feature in my eyes. And that means you provide/support multiple modeling paradigms that can expressively combined.
That approach makes it hard for folks to collaborate, and makes every sharing into a security evaluation and is a _lot_ more difficult than just scanning the cheat sheet and typing in some code and iterating.
To be fair, arbitrary fillets/blends on edges is a hard problem in general for Parasolid/ACIS because you are trying to mutate arbitrary topology, essentially guessing vertices/edges/faces and trying to stitch the back together.
This is true, but in things like OnShape I can do it with two clicks whereas in OpenSCAD it's always at least 20 minutes of thinking and trying out.
OpenSCAD is super cool and my go-to for simple things, but for anything more involved than a cube or cylinder with some cutouts I tend to revert to "normal" CAD programs.
> A lot of common operations, such as arbitrary fillets on various edges, are simply hard to express or do.
As a long-time OpenSCAD user, I don't disagree with you but would also point out that LLMs can now make it very easy to do a lot of this sort of thing while still using OpenSCAD.
I actually find Gemini/agy to be the best of the ones I've tried when it comes to working with OpenSCAD code. And I don't recommend trying to use LLMs to one-shot geometry of anything complicated, but they are great for things like "take this OpenSCAD code and generate a fillet along these edges, abstract the fillet into its own module and make it parametric so I can easily modify the radius".
Granted, selecting a few faces or edges in a GUI CAD program and clicking a button is even easier than that, but only once you've spent a lot of time learning how to use the CAD GUI (which, IMO, are nearly universally very unintuitive until you've spent a lot of time working with them).
[−]oscillonoscope · 2026-10-11 Sun 06:01 UTC ·
link
I started playing with this not long ago. Using pythonSCAD is way easier for LLMs and it can generate functional tests for it. Claude was able to one shot a relatively complex assembly of multiple custom parts where it made nonsense in pure openSCAD
One use case I was interested in: coming up with a (simple) box with cavity in it, and having this CNC'd. (For a simple custom keyboard shell).
Although OpenScad can express the geometry of the geometry without difficulty, it was burdensome to export the .step file that the CNC manufacturer wanted. To my understanding, CSG's model is just fundamentally different than what .step wanted. And re-using the geometry for a technical drawing to communicate e.g. threading wasn't something OpenScad could handle smoothly.
I haven't quite ported this to build123d. But, from a cursory look asking an LLM to do port my code, I was given the impression that it could manage the task. (Certainly build123d was better suited to technical drawings).
This is my problem with any system that doesn't create parametric geometry. You are limiting your precision and eliminating the ability to easily modify geometry later. STEP is the defacto format for this as any 3D CAD or CAM system can open it (Parasolid is also great, especially if the person you are sharing it with is using SolidWorks).
I absolutely despise STL as a format and think it doesn't have any place it should be used.I have a hard time taking OpenSCAD seriously due to this.
Like others mention in comments below, it's better to first design the shape how it should be in the end, fillets included, than doing them afterwards.
Also, in many cases, extruding an SVG works wonders. Just design the flat projection in something like Inkscape, interactively, and then import and extrude. You can do this for many shapes, then combine or subtract, etc.
But the other thing is, I have found that in many cases I don't need fillets at all; when printing small parts on a consumer-grade 3D printer, the relatively low precision of the printer is enough to round the edges.
I have been moving from fusion 360/eagle to FreeCAD+Kicad for mixed electronic/mechanical designs and never looked back. Since 1.0 assemblies work better in FC than 360, less crashes at least for my limited cases. Also an order of magnitude faster to boot. Didn’t have any issue with open cascade kernel, even with weird filets etc. Kicad is a joy to use compared to eagle, and library is even better.
Never tried OpenSCAD, maybe I’m old fashioned but graphic workflow works better for me.
- treat the CSG as merely a 3D preview, output a DXF, use a traditional CAM tool to create toolpaths from that file --- I did work up support for arcs, and am looking into more general curve support
The more powerful option is something built on the open-source Open Cascade geometry kernel: FreeCAD, cadquery, or build123d. This also gives you interop with the broader CAD ecosystem by enabling you to import and export STEP files. (Your favorite LLM can advise you on or drive these options as well.)
The awful thing about OpenSCAD is that one's capabilities in it are bounded by one's fluency in using math to place or stretch cubes, spheres, and cylinders.
- Geometry: https://www.goodreads.com/book/show/58059196-make
- Trigonometry: https://www.goodreads.com/book/show/123127774-make
- Calculus: https://www.goodreads.com/book/show/61739368-make
https://www.makershed.com/products/make-physics?variant=5041...
I went ahead and placed an order.
Hopefully it will arrive in a reasonable timeframe.
If you want to make a complex gear that has to mate with another gear you can do this in two ways: you can start with two discs intersecting at the right angle and then to chop out the teeth so the resulting object will be a gear and then you could subtract via a similar operation from the other disc to end up with two mating gears.
The - in my view much more effecient - alternative is to start off with just the supports as the discs and then to parametrically add the gear teeth onto the supports taking into account all of the clearances and the contact faces. This will get you much better gears because you are parametrically describing the surfaces that really matter and it will allow you to do nice things such as small fillets on everything to make the object far closer to what eventually will roll out of your manufacturing process (machining, 3D printing). It is a bit more work to define all of the parameters but the end result is much better and far less likely to have imperfections because you are generating what you want, not removing what you don't want. OpenSCAD can be used for sculpting, but that's not the best way of using it.
but what made me use scad was reliability. i knew the time i put writting in vim would translate (heh) into a viable stl file i could send to manufacturing. while with both other options half the time was dealing with bugs and crashes and bad exports.
but how did i miss some convenience tools indeed. most could be solved with opensource methods (e.g. bevel, joiners with easing, threads)
And then the worse is better trap gets them and they don't even bother looking for true programmatic CAD like build123d.
I think that's an unfair assessment. It has rough spots (as I'm sure all CAD software does) but it's functional and UX is improving rapidly with every release. It feels like it's built up a lot of momentum since I picked it up a few years ago.
It can do everything I need it to do. I mostly use the Part Design workbench, Part, Sketcher, Assembly, Lattice2, Fasteners, Spreadsheet; occasionally Curves and Curved Shapes workbenches. If I run into an issue the solution is almost always easy to find on their wiki, on Youtube, or by asking in their Discord server - the community is friendly and helpful in my experience.
Mango Jelly's overview of some of the biggest new features: https://www.youtube.com/watch?v=WdTyFHY-5r4
I actually still use the freecad gui because it’s cheaper but I can totally see how someone new might just wanna use the MCP.
I tried to follow along w/ a book which was purportedly for 1.1, but it turned out to actually cover 1.0
Don't get me wrong, I love it myself and use it as much as possible simply because it's outstanding to be able to express a complete design in 1k of plain text which is readable, diffable, gittable.
You can get a lot done, and some things you can do even easier and simpler than anything else, and you can work-around some things, and you can get a good-enough almost-what-you-want other times, and it's practically ideal for certain classes of jobs as long as you're willing to live within the limits.
But "live within the limits" is not something a general purpose tool gets to say.
You can get some fillets easy sometimes if the geometry just happens to lend itself to some boolean op like making a rounded corner hollow box by hulling 8 spheres (which you can populate effortlessly with translate,copy,mirror) and then cutting another smaller copy. Voila, all kinds of interior and exterior fillets in like 10-15 short lines of plain text code. And the whole thing fully parameterized with dead simple variables sitting off by themselves with human descriptive names at the top of the file.
But that does not mean anything. That's a choice showcase example, and all the other infinite real life cases are somewhere between agonizing to code, to agonizing to code and agonizing for the computer (minkowski), to flat impossible.
I love openscad but this implication that it's just a matter of using it right is false.
Writing now about it, I think I could do it with a torus, where the radius of its cross section is the small radius, the torus radius is the large one, take two of them, add two cylinders to only keep one quarter edge and then take a quarter of the resulting bevelled disk.
If I have to build points up by hand, why not skip OpenSCAD and directly write python scripts that create your OBJ files? The point of OpenSCAD et.al. is to programmatically create geometry. Making exactly that easier is a feature in my eyes. And that means you provide/support multiple modeling paradigms that can expressively combined.
OpenSCAD is super cool and my go-to for simple things, but for anything more involved than a cube or cylinder with some cutouts I tend to revert to "normal" CAD programs.
As a long-time OpenSCAD user, I don't disagree with you but would also point out that LLMs can now make it very easy to do a lot of this sort of thing while still using OpenSCAD.
I actually find Gemini/agy to be the best of the ones I've tried when it comes to working with OpenSCAD code. And I don't recommend trying to use LLMs to one-shot geometry of anything complicated, but they are great for things like "take this OpenSCAD code and generate a fillet along these edges, abstract the fillet into its own module and make it parametric so I can easily modify the radius".
Granted, selecting a few faces or edges in a GUI CAD program and clicking a button is even easier than that, but only once you've spent a lot of time learning how to use the CAD GUI (which, IMO, are nearly universally very unintuitive until you've spent a lot of time working with them).
One use case I was interested in: coming up with a (simple) box with cavity in it, and having this CNC'd. (For a simple custom keyboard shell).
Although OpenScad can express the geometry of the geometry without difficulty, it was burdensome to export the .step file that the CNC manufacturer wanted. To my understanding, CSG's model is just fundamentally different than what .step wanted. And re-using the geometry for a technical drawing to communicate e.g. threading wasn't something OpenScad could handle smoothly.
I haven't quite ported this to build123d. But, from a cursory look asking an LLM to do port my code, I was given the impression that it could manage the task. (Certainly build123d was better suited to technical drawings).
I absolutely despise STL as a format and think it doesn't have any place it should be used.I have a hard time taking OpenSCAD seriously due to this.
Also, in many cases, extruding an SVG works wonders. Just design the flat projection in something like Inkscape, interactively, and then import and extrude. You can do this for many shapes, then combine or subtract, etc.
But the other thing is, I have found that in many cases I don't need fillets at all; when printing small parts on a consumer-grade 3D printer, the relatively low precision of the printer is enough to round the edges.
Never tried OpenSCAD, maybe I’m old fashioned but graphic workflow works better for me.
- treat the CSG as merely a 3D preview, output a DXF, use a traditional CAM tool to create toolpaths from that file --- I did work up support for arcs, and am looking into more general curve support