[HN Gopher] CadQuery is an open-source Python library for buildi...
___________________________________________________________________
CadQuery is an open-source Python library for building 3D CAD
models
Author : gregsadetsky
Score : 215 points
Date : 2026-04-14 23:20 UTC (2 days ago)
(HTM) web link (cadquery.github.io)
(TXT) w3m dump (cadquery.github.io)
| ozmaverick72 wrote:
| Interesting. I have played with OpenScad a bit. This looks
| similar - i guess the difference is the syntax is python - any
| other major differences
| DrNefario wrote:
| CadQuery can export STEP files, and is overall much nicer to
| use in my opinion.
| xrd wrote:
| I've been using Gemini to generate openscad programs for use
| with my 3d printer. Is cadquery a better option I wonder?
|
| Why do you say it is better than openscad?
| xrd wrote:
| After reading some of the docs it does look fun.
|
| Python, so leverage your Python skills and existing
| libraries.
|
| A nice GUI so you can build, view, tweak, review, iterate.
|
| Will be a nice new toy...
| RobotToaster wrote:
| Openscad can export to CSG, which can be imported by free cad
| or converted to STEP https://github.com/gega/csg2stp
| WillAdams wrote:
| Whether or no that will be useful/editable will be
| determined by what sort of objects and modeling approaches
| were used --- it's pretty easy to make a file which results
| in a nightmarish triangle mesh representation which is a
| nightmare to edit.
| gcr wrote:
| OpenSCAD is all triangles and vertices. Fillets are difficult
| to do. Outputting circles/spheres generally requires you to
| for-loop over vertices a lot.
|
| Libraries like build123d and cadquery use OpenCASCADE, a
| boundary representation kernel. You think in terms of the
| enclosed solid and perform operations - boolean add/subtract,
| fillet/chamfer, stamp text, etc - that return a new solid.
| 7bees wrote:
| I'm not sure I understand your comment; OpenSCAD has
| functions like sphere(), cylinder(), etc. Most OpenSCAD
| models I have seen are built up primarily from solid
| primitives combined using boolean operations, just as you
| describe for the other tools.
|
| https://en.wikibooks.org/w/index.php?title=OpenSCAD_User_Man.
| ..
| seltzered_ wrote:
| Theres a better description of the differences here: https:
| //build123d.readthedocs.io/en/latest/OpenSCAD.html#tra...
|
| Some of the differences may be in when you are trying to
| reference a face/edge to build off of, not just about the
| primitive function being used.
| Doxin wrote:
| OpenSCAD works natively with triangle meshes. sphere() will
| create a spherical triangle mesh.
|
| These libraries on the other hand can natively represent a
| sphere for instance. This means that during CAD-ing you
| don't need to worry about resolution, that's a
| consideration for export only.
| flowerbreeze wrote:
| Do you mean that OpenScad performs boolean/other
| operations on triangle meshes, but these libraries don't
| until output? So they might instead use curved
| surfaces/edges etc as outputs for operations and only
| convert to triangles for output or export at the very
| end?
| Doxin wrote:
| yes, exactly.
| Karliss wrote:
| It isn't even necessary to create triangle meshes during
| export. You can export as step files. It is a commonly
| used brep based file format supported by almost any
| "proper" CAD software. Triangle mesh based modelers can't
| easily export good step files because they don't operate
| at that level of abstraction.
| rowanG077 wrote:
| In professional CAD systems, geometry is not stored as
| triangle meshes but as mathematically defined surfaces
| (such as parametric and NURBS surfaces). Triangle meshes
| are only generated as approximations for rendering. This
| is analogous to vector graphics (SVG/EPS) versus raster
| images (PNG/JPG).
|
| Any serious manufacturing will work require a STEP (or
| something equivalent) which stores these parametric
| surfaces rather than a mesh.
| ur-whale wrote:
| > I'm not sure I understand your comment
|
| Try to do the following with OpenSCAD: 1.
| put a sphere and a torus somewhat close to each other
| 2. find the shortest segment between the two surfaces
| 3. place an infinite cylinder whose axis is aligned with
| the segment you just found 4. fillet the cylinder
| with both the torus and the sphere along its intersection
| curve with each surface
|
| This is very, very hard to do with OpenSCAD.
| somat wrote:
| While true your argument is weak, for example in pov-ray the
| shapes are pure exact mathematical concepts. But nobody is
| saying how great this is for 3d printing or general cad work
| because it's not. The real key benefit from these programs is
| the interchange format they can generate, something you can
| feed to a machine, this prevents it from ending up like pov-
| ray, a terminal process only fit for generating pictures.
| Fillets are difficult to do in openscsd because fillets are
| difficult to do in general. What your argument probably
| should have been is that if openscad had chosen a geometry
| kernel where fillets were already solved it could then do
| fillets. Which is the sort of obvious tautology that helps no
| one.
|
| Now I am off to see if anyone has ever built an export plugin
| for pov-sdl, either a 3d rasterizer(g-code slicer) for 3d
| printing, or a boundary layer mesh generator for import into
| another program. language wise it is probably equivalent to
| or better than the openscad sdl,
|
| One subtle advantage to using python as the sdl is that it
| gets access to the vast corpus of python modules out there.
| Most of which are probably useless. but one thing I want to
| try is to see if I can use sympy to define a more declarative
| style of constraint.
| Cargo4286 wrote:
| Not perfectly relevant but build123d docs have an example
| using sympy as part of solving constraints for a design. ht
| tps://build123d.readthedocs.io/en/latest/tttt.html#t-24-cu.
| ..
| bvrmn wrote:
| Oh boy. The major difference is coordinate transformations,
| global/local/face. OpenScad basically leaves you alone with
| math you should figure out on your own. Also it's math heavy
| for all other stuff, for example tangents, smooth connections,
| intersection coordinates, etc.
| colechristensen wrote:
| Neat!
|
| I'm working on a CAD kernel in Rust with a frontend either as a
| Blender plugin or a Blender fork (leaning towards fork at this
| point) It's not at all ready but I have reached first part status
| (before going back and rewriting a large chunk of the kernel)
| hgoel wrote:
| CadQuery and build123d have been very handy for prototyping stuff
| for 3d printing. AI still isn't quite good enough to generate
| correct scripts, but AI autocomplete at least helps with putting
| together small snippets.
|
| My last project involved making a cosplay helmet. I modeled the
| shell in blender, it was a low poly design, so I exported it to
| an OBJ, then put together some Python to load the OBJ, give the
| triangles some configurable thickness etc. Then I used it to
| explore how to print the helmet in such a way that the outer
| surface would be too clean to tell it's FDM printed, without
| needing to do any sanding.
|
| Initially I explored having cadquery put a number on the back of
| each triangle and I'd assemble it like a puzzle, but that didn't
| work out. Eventually I figured out how to cut it up into parts
| that would also eliminate the need for painting and outer
| surfaces would be clean, and because it was in code, changing
| which part a triangle belonged to was a matter of moving the
| corresponding index into another list.
|
| I probably could've managed it all in blender too, but being much
| more comfortable with code, it was easier for me to play with
| normals and manually turning each piece into a solid.
|
| I also go for it for functional designs because, again, tweaking
| code is more comfortable to me than dealing with constraints and
| sketches and multiple planes in, say, FreeCAD.
| awinter-py wrote:
| yeah -- have been playing with this as well, ai's spatial
| reasoning is not quite there yet but with precise construction
| instructions it can often do the job
|
| for shapes that are hard to print with a traditional slicer,
| LLMs are also surprisingly good at generating gcode with
| fullcontrolxyz if you're specific
| gcr wrote:
| Here's an example!
|
| I recently used their sister library (build123d, same devs) to
| build a rotary slide rule bracelet for multiplying three-digit
| numbers. It was a great experience and wouldn't generally be easy
| to do with Fusion 360. My bracelet gets quite a lot of comments
| when I wear it in public. :-)
|
| Here's an IPython notebook with lots of pictures so you can see
| how the different operations come together:
| https://github.com/gcr/sliderule-bracelet/blob/main/version-...
|
| build123d is quite different stylistically from cadquery, but
| this should give you the flavor of programming-oriented CAD at
| least.
| aaronbrethorst wrote:
| how does it work? (the multiplication)
| lutusp wrote:
| Are you asking how the bracelet multiplies two numbers? It's
| the same idea used by slide rules -- you take the logarithm
| of the two numbers, then add the logarithms instead of
| multiplying -- same result, with somewhat less accuracy
| depending on available decimal places.
|
| This method was widely used in the pre-computer era to save
| time in calculations. Tables of logarithms (and slide rules)
| were a mathematician's best friend.
| acidtechno303 wrote:
| lol, as an engineer I'd never considered that other
| disciplines used slide rules voraciously
| Loic wrote:
| Becaus ln(A*B) = ln(A)+ln(B), you need 2 sliding elements and
| you work in logarithmic scale. Look at "slide rule"[0], this
| is really nice stuff.
|
| [0]: https://en.wikipedia.org/wiki/Slide_rule
| tda wrote:
| Nice model, but also a great notebook. Really like this
| "literal coding" style for CAD in a notebook. I still sometimes
| prefer GUI cad for simple stuff, CadQuery is not always that
| easy to write. But when iterating over something complicated,
| the notebook style development is really nice. And being to
| compose a model using functions and iterators instead of the
| clumsy GUI workflows is a godsend. Also time I tried Opus was
| more helpful and capable than I would have thought. Not good
| enough to one-shot yet, but it is very helpful nonetheless
| fainpul wrote:
| > wouldn't generally be easy to do with Fusion 360
|
| Actually...
|
| https://www.youtube.com/watch?v=DNiQJyRTs50
|
| You would create the numbers and marks in a vector drawing
| program (Inkscape, Affinity Studio, Illustrator) and import
| that into Fusion.
| itsdesmond wrote:
| Sure but like, that is specifically NOT easier if you need to
| iterate once initial implementation is complete. At least in
| my opinion as an industrial designer turned software
| engineer, which I only mention to assert I'm experienced in
| both sets of tools.
| fainpul wrote:
| True, the logarithmic scale lends itself to programmatic
| creation. I just wanted to show that the wrapping part is
| easy. Actually much easier - that code looks non-trivial.
| ashton314 wrote:
| This is so cool! I'm going to have to try building this. Thanks
| for sharing!
| lutusp wrote:
| I create CAD instructional videos based on SolveSpace, and I
| sometimes try to get people interested in CADQuery as well, but
| many people interested in CAD will learn SolveSpace or another
| similar design program, but don't have the programming background
| for CADQuery. Too bad -- in many ways, for many projects,
| CADQuery gives better results, especially if a single design
| needs to be recreated in a range of sizes.
| WillAdams wrote:
| Where are your CAD instructional videos available?
|
| I'd be very interested if one of them compares/contrasts
| SolveSpace and CADQuery.
| girishso wrote:
| Came across a similar tool replicad. https://replicad.xyz/
|
| Anyone has used it?
| stanko wrote:
| As someone who uses JavaScript/TypeScript, I love Replicad. It
| is super easy to create and share parametric models from their
| online editor without any accounts.
|
| I keep my models on github[0]. Disclaimer, they are pretty
| niche things I needed around the house.
|
| [0] https://github.com/Stanko/3d-cad-models
| ginko wrote:
| Guess this is a good opportunity to plug the DIY trackball I made
| using build123d:
|
| https://github.com/ginkgo/trackball/
| ponyous wrote:
| Another library I have to integrate and benchmark against
| OpenSCAD for my AI SaaS[0]. I am really curious how constructive
| solid geometry compares to sketching and extruding that CadQuery
| is build on.
|
| Anyone curious in the writeup? I have a pretty good harness for
| evaluating 3d generation performance.
|
| [0]: https://grandpacad.com
| jetter wrote:
| If you like this, you should definitely check modelrift.com which
| allows to build awesome cad models thanks to OpenSCAD and smart
| AI assistant.
|
| Community built examples: https://modelrift.com/models
| maouida wrote:
| CadQuery was an inspiration when I built FluidCAD. I wanted the
| workflow to be as close to traditional CAD as possible with more
| interactive UI.
|
| https://fluidcad.io
| junon wrote:
| This looks amazing. I'm going to give this a try later.
|
| If I have a DXF or something of the outline of something (a PCB
| in this case) can I import it and build around it somehow?
| maouida wrote:
| Only step import at the moment. I'll add svg next.
| junon wrote:
| My particular immediate use case would be to export the
| board outline and mounting holes from a kicad project (SVG
| or DXF, whatever works) and build a chassis for it.
| Obviously I can do this in freecad but I've been looking
| for an intuitive cad-as-code system to check into git
| instead. So this would be awesome!
| WillAdams wrote:
| While not code as CAD, Dune 3D has the creation of
| enclosures for electronics projects as its _raison
| d'etre_, and has a facility for Python scripting:
|
| https://docs.dune3d.org/en/latest/python.html
| fallat wrote:
| How's this different from RepliCAD?
| maouida wrote:
| Replicad is designed primarily to be used as a library with
| the web editor as a helper. FluidCAD is designed to be used
| as full CAD package code + UI. I've outlined some of my
| motives in recent post:
| https://news.ycombinator.com/item?id=47721997
| fxff wrote:
| At the time of writing this there are 24 comments, of which 4
| promote alternatives. I feel that recently the number of
| shameless plugs and check-out-my-SaaS's surged drastically
|
| https://news.ycombinator.com/item?id=47803846
| https://news.ycombinator.com/item?id=47803475
| https://news.ycombinator.com/item?id=47802988
| https://news.ycombinator.com/item?id=47803416
| pyb wrote:
| Is this the OpenClaw effect?
| adrian_b wrote:
| I believe that in general the comments pointing to alternatives
| and the shameless plugs are useful in these HN threads, even
| when their connection with the discussed subject is tenuous.
|
| Such comments have become more useful recently, as a form of
| curated search, when standard Internet searching has started to
| provide an avalanche of garbage links, to Web pages that only
| summarize or repeat the primary sources, frequently with errors
| and failing to point to the original sources.
|
| Even if inspecting the suggested alternatives may show them as
| worthless, finding this may still save time over using a search
| engine and having to filter an order of magnitude more
| misleading links.
|
| Those not interested in such comments can easily skip over them
| and not visit any suggested links.
|
| When I visit Wikipedia pages, the most frequent reason is for
| their lists of useful links. Similarly, when reading a HN
| comment thread, I appreciate links to more or less related
| content.
|
| Today I value such sources far more than a few decades ago,
| when Google could easily and effortlessly find any desired
| information, while today you must struggle with any search
| engine, as they will provide you almost any kind of
| information, except that requested by you.
| maouida wrote:
| +1 for what adrian_b answered above. All the promotion are for
| free open source projects and none of them is profitable. I
| think this is totally fine, people like to know about
| alternatives and all these tools are for the purpose of
| learning and making parametric CAD more approachable to users.
| They have same goal with different implementation.
| atoav wrote:
| I used cadquery to programmatically generate 3D models for an
| electronics library for a 1000 or so parts that only differ
| slightly in their measurements. It literally saved me days of
| manual work.
| ncrmro wrote:
| How does this compare to anchorcad?
| WillAdams wrote:
| It was a lot more interesting to me back when it first launched
| and it was a FreeCAD workbench.
|
| Previous discussions:
|
| https://news.ycombinator.com/item?id=24520014 (6 years, 49
| comments)
|
| https://news.ycombinator.com/item?id=30232344 (4 years, 43
| comments)
|
| https://news.ycombinator.com/item?id=30219940 (on Hackaday, 4
| years, 28 comments)
|
| https://news.ycombinator.com/item?id=17038257 (8 years, 16
| comments)
|
| https://news.ycombinator.com/item?id=28083578 (a Show HN from 5
| years ago w/ 1 comment)
|
| There are a lot of tools in this space, esp. these days when
| "Vibe Coding" allows folks to knock one out w/ a prompt. Most
| folks jus use OpenSCAD which with its large user base and
| weaknesses which are (mostly) not exposed by 3D printing is
| great, so long as what one wants to model is easily described
| using mathematics/programming techniques which are familiar to
| the user.
|
| I'd really like to see an interactive opensource project follow
| OnShape's lead where a scripting language (for OS, FeatureScript)
| is used as a wrapper around the geometry kernel, then the
| graphical UI creates the model using that language, and one can
| always inspect the resultant code. It seems to me that this
| <i>should</i> be workable given the observation:
|
| https://news.ycombinator.com/item?id=31471109
|
| >Parametric CAD, in my view, is a perfect example of "visual
| programming", <BR> >you have variables, iteration/patterning
| reducing repetition, composability <BR> >of objects/sketches
| again reducing repetition, modularity of design though a<BR>
| >hierarchy of assemblies. The alignment between programming
| principles and <BR> >CAD modelling principles, while not
| immediately obvious, are very much <BR> >there. An elegantly
| designed CAD model is just as beautiful (in its construction)
| <BR> >as elegantly written code.
|
| but these days, I'm mostly using Open(Python)SCAD (which is in
| the process of getting merged in to the main project).
| ReptileMan wrote:
| PSA - Codex is really good at creating step files for simpl-ish
| objects with it.
| ifloop wrote:
| I have written a lot of openSCAD code, I learned about BOSL(2)
| and wrote even more, I tried getting into build123d (and failed,
| as running openSCAD/BOSL2 is way too comfortable to leave it)...
| the only downside is that AI fails horribly with those libs and
| frameworks.
|
| I think I heard of cadquery before and decided against it, in
| favor of build123d.
| edg5000 wrote:
| Using a coding CLI I was able to create a computed shape would
| otherwise by incredibly challenging to make (impossible in
| parametric CAD GUIs at least) LLMs + CadQuery is a powerful
| combo, this will be more and more common I think. It's just too
| powerful to ignore.
| willrshansen wrote:
| Big fan overall. Designed a tension sensitive winch with this a
| few years back.
|
| Doing CAD with code seems like obviously the right move to me.
| The ability to just write new functions in python and do version
| control with git are super powerful.
|
| The big thing that struck me as innovative with CadQuery is the
| design intent query part. Selecting model geometry by relation to
| other geometry is way more resilient to changes ealier in the
| model's history than the regular "that point right there" you get
| with just clicking a point.
|
| That the developers acknowledge that seeing the model at various
| steps in the script is important, and so have the CQ-editor, is
| also a point in their favour.
|
| I do have a gripe though:
|
| Having to keep all the geometry selection stuff relating to the
| model in my head is hard. I want gui tools that write code.
|
| Like if I have a complex model, and variables assigned to various
| parts of the geometry. I want to be able to see that geometry
| highlighted and labeled, so I know what's easily selectable, and
| I want to be able to click buttons based on my design intent and
| get immediate visual feedback, and have each of those button
| presses added as code as I do them.
|
| Look at this example model:
| https://cadquery.readthedocs.io/en/latest/examples.html#a-pa...
|
| This bit that selects some points? # compute
| centers for screw holes topOfLidCenters = ( cutlip
| .faces(">Z") .workplane(centerOption="CenterOfMass")
| .rect(POSTWIDTH, POSTLENGTH, forConstruction=True)
| .vertices() )
|
| Each of those lines should be a gui tool interaction that
| generates that line of code.
| ethan_smith wrote:
| The OCP CAD Viewer extension for VS Code (works with both
| CadQuery and build123d) gets partway there - you can click on
| faces/edges in the 3D view and it shows you the selection info
| you'd need for your code. It's not full "click to generate
| code" but it helps a lot with the "keeping geometry in my head"
| problem. Still a long way from the OnShape FeatureScript model
| where GUI and code are truly bidirectional though.
| oasisbob wrote:
| I would be curious to hear more about what makes a winch
| tension sensitive.
|
| Would it limit and hold a maximum force? Slip beyond a certain
| limit?
| analog31 wrote:
| This will be interesting to try. I'm not an engineer. I decided
| to try "vibe coding" a CAD model, by letting AI generate Python
| code within VS Code. I was able to make a primitive but useful
| part, and sent it off to Xometry. Just a "bracket with holes"
| kind of thing for a prototype.
|
| It was fun, but I still appreciate what our mechanical designers
| can do.
___________________________________________________________________
(page generated 2026-04-17 23:01 UTC)