[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)