Guide To Mastering OpenSCAD Costs Roughly The Same As OpenSCAD

OpenSCAD is a fantastic free tool for 3D modeling, but it’s far less intuitive to use for non-programmers than mouse-driven programs such as Tinkercad. Powerful as it may be, the learning curve is pretty steep. OpenSCAD’s own clickable cheat sheet and manual comes in handy all the time, but those are really more of a reference than anything else. Never fear, because [Jochen Kerdels] had quite the productive lockdown and wrote a free comprehensive guide to mastering OpenSCAD.

[Jochen]’s book opens with a nice introduction to OpenSCAD and it’s user environment and quickly moves into 10 useful projects of increasing complexity that start with simple stuff like wall anchors and shelf brackets and ends with recursive trees.

There are plenty of printing tips along the way to help realize these projects with minimum frustration, and the book wraps up by covering extra functions not expressly used in the projects.

Of course, you could always support [Jochen]’s Herculean effort by buying the print edition and forcing yourself to type everything in instead of copy/pasting, or give it to someone to introduce them to all the program has to offer.

Need help mastering OpenSCAD workflow? We’ve got that. Just want to make some boxes or airfoils? We have those in stock, too.

Main and thumbnail images via [Devlin Thyne]

36 thoughts on “Guide To Mastering OpenSCAD Costs Roughly The Same As OpenSCAD

  1. Such an awesome project! It looks great for those who enjoy the code-based workflow.

    However, I hope nobody chooses it primarily because it’s free and open. If that’s your main reason, look at realthunder’s assembly3 fork of FreeCAD instead. I can’t really see myself wanting to mess with any kind of code based CAD after that.

    But if you do have a preference for text, I suspect this book will be a major help.

    1. As somebody who also moved away from Fusion 360 (Partially because a student licence expired, and the changes to the hobbyist licence that cloud long-term usage/storage of projects.) I had been looking for an ideal replacement. I see OpenSCAD as a tool that can quickly make precision items that do not demand complex features such as fillets and the like, because if you do; you do have to spend some effort into learning the code for this. There’s no “fillet” button nor command, after all. Not unless you add that bit of script at the top like C libraries of yore.

      Similarly, as you have to learn the syntax of openSCAD, FreeCAD also requires you to learn its interface thoroughly, as it is not as hands-on as fusion or even solidworks.

      In the end, patience may reward, and I believe that learning openSCAD may be one of the good paths to walk if you can accept the workflow. The same goes for FreeCAD; when you figure out where what is, you may find that eventually it will feel familiar.

      1. Hm, I am using SolidWorks mainly for my day job. At the moment it’s Inventor, and SolidEdge for a few months last year. And a few other not too common suites as well.

        FreeCAD really is not very different from those anymore. One annoying thing is thit strange “Workbench” thing, but for your everyday CAD stuff you really only need partdesign and your favourite assembly workbench.

        Everything else is right there. The icons and buttons are self-explanatory and the workflow has gotten much much better.

        One nice thing is the spreadsheet functionality of FreeCAD. It gives you some of that flexibility OpenSCAD has.

        I am a totally visual guy. I need to see the thing in front of me. My first step creating a part never ever could be to think of CODE. Urgh….

    2. It’s not a fork, it’s an “external workbench” that tries to fix the original part and constraint system with what amounts to a load of gaffer tape on top, and now there’s assembly4 as well.

  2. Fantastic work. There is much work going on to fine tune OpenSCAD for the experts, and good luck to them. However OpenSCAD is great for beginners too if they can grasp the fundimentals quickly, so these sort of tutorials are a powerful way to enable beginners.
    Well done.

  3. I tried to use OpenSCAD exclusively for all the usual around-the-house functional prints that 3D printer owners encounter. It was slow going and the market-of-one aspect of my needs didn’t jive with the labor needed to make clean, debugged scripts and ultimately led to understanding that using OpenSCAD’s Dancing about Architecture workflow to make a one-off is just plain stupid.

    The killer-application of OpenSCAD is flexible parametric model generation for situations where many varied things are needed to be generated from one codebase. It’ll always be faster to make a fancy chamfered, curvy, one-off in something like Fusion/FreeCAD but if I need to quickly generate and export a vast multitude of widgets each with differing dimensions and possibly integrate the generation process into an external system, OpenSCAD might be better for the job.

    Sadly the best example of OpenSCAD’s power that I’ve used, the clunky thingiverse OpenSCAD tool, has been broken for quite some time. Being able to share just the source behind an object and have others generate exactly what they need in the browser is so nice, even with the server-side rendering and generation that thingiverse cobbled together ages ago. I’ve used it for calibration towers, bowden extruders, filament spool adapters, storage boxes, etc and it was quick and easy.

    If only someone could make a truly in-browser OpenSCAD system that doesn’t feel like it was coded in 1999 and integrate it into a non-zombie object host like PrusaPrints.

    1. That’s all completely opposite to my experience.

      I’ve used OpenSCAD for several years now and I’ve done a number of projects with it. Every time I find a brick wall when trying to solve a problem, I pop over to their freenode IRC channel and someone points me in the right direction–or several right directions. I end up learning something new and also learn a new way to look at problems. Untimately, that makes me better off not only at OpenSCAD, but at logical thinking in general.

      As an engineer and a programmer, I find that OpenSCAD is completely logical. The one initial probelm I faces was in breaking myself of the idea that it was a programming language. It’s not. It’s an object decription language. The less I focused on the programming aspects and more on the ‘tell it what I want’, the easier projects got for me.

      I found this post very timely as I am in the middle of a science project with my son which is due tomorrow and he’s designing it in OpenSCAD. He took to it very quickly. It’s probably going to be his first proper programming language–or maybe Python.

  4. OpenSCAD is awesome. Programmatic interfaces are clear and unambiguous. I know Fusion and other GUI applications are popular, but OpenSCAD is immensely powerful (and free). I have made many quite intricate models, but I’ll be reading the book to make sure I haven’t overlooked something and maybe learn a few more things.

  5. Two years ago I had the urge for a Cad program. First I looked FreeCAD. Something was missing I needed. Then I looked Fusion 360. It was nice, but I did not want my work be stored on the cloud. So, I ended up with OpenSCAD. It is a fine program, and it has a bright future as soon as it will be multi-core and GPU friendly.

  6. I wish you could dl the book as a pdf, but it looks good and when I finish up on my current learning project I may give it a shot. CAD is a weakness for me. I can move around in a few packages but for most things it takes me longer to lay them out in CAD than it does to just go and build them.

          1. Thank you very much for writing this excellent resource!

            A small request: Since the chapter pages are quite long it would be useful if each heading was a link people could right click and do “copy URL”, for sharing links to specific sections.

            I see that such links exist in the page’s top-left TOC section and can also be manually created by suffixing # to the page URL ( https://mastering-openscad.eu/buch/basic_ops_and_structure/#transformations ). But having that right there in each section heading would be easier.

          2. @cad-carrot

            thx for the suggestion. I will look into it. I made the website using hugo and first have to figure out how to make the headers into links…

      1. I’ve been using Openscad for years and only saw the book through the post here.
        I briefly looked how it is constructed and ordered not 30 minutes later at Amaz ….
        Not only because I like to have something in hand to read, but also because I think it’s really great that you wrote the book and that others can read it without buying it.

  7. the comments here reaffirmed my pre-existing opinion :) which is that if you want to use openscad, it’s probably already obvious to you how to use it.

    i used some autocad product for 3d modeling back in the 90s and i hated it. i hate the idea of free-hand drawing anything that isn’t literally on scrap paper. i know people who really learn these GUI CAD programs can do these things, can make parametric designs, can somehow direct the thing to click in the center of the object instead of whereever the mouse cursor is. but i don’t ever want to be looking at a 10mm cube trying to click to make a hole centered in x and y, and 3mm offset from the bottom in z. if i want a 2mm hole, i want to type the number 2, i don’t want to click-drag until something reads 2. trying to do that, using snap to grid or using the rulers along the edge of the screen, just infuriated me to no end. if i want to make 3 holes with a relationship to eachother, i’d rather write a for loop than try to line up the 3 of them separately. for (i=[0,1]) mirror([i,0,0]) is an absolutely natural way to express symmetry to me.

    also, i am in love with legible change tracking. now that so many tools generate xml, i see, if you change one parameter, they change hundreds of lines of metadata. the change logs are never legible.

    people who feel differently aren’t wrong but they also aren’t me.

    so when i met openscad, it was love at first sight. there was a little progress as i went to learn what idioms i need to keep things coherent, which comments are useful, when is it best to amend vs start over, that sort of stuff. and i have gone through a sequence of STL viewers because i don’t use openscad interactively. but the basic ‘what happens when i type this’ was clear to me instantly. everything i needed to know was best answered by its excellent reference manual. i did not need a tutorial.

    i’ve made about 90 objects so far, and i’ve used openscad for every single one of them. mostly utility projects. for one art project, i simply couldn’t do it in openscad. i would have had to use a for loop defining a mesh of polygons, instead of using their primitive 3d shapes. i looked for a while for an alternative scripted cad program…i found something promising but it wasn’t fleshed out, i wish i could remember its name. oh well, i’m not an artist. i gave up on it.

    1. The idea of the GUI program is not that you place everything exactly in place with the mouse, but that you draw a rough sketch which is then constrained to exact dimensions, which is the point where you get to press the number 2 to say how big the hole is.

      AutoCAD in the 90’s was perfectly terrible and much development has been done since. Even so, the actual workflow is nothing like you described it – you worked with the keyboard and mouse together, clicking the start of a line, pointing its cardinal direction, and typing in the length you wanted, using this to construct a reference geometry of points, lines, and intersections, which would define the important points of your actual drawing.

      The problem with AutoCAD back in the day was that it simply produced lines and points. It was merely for drawing stuff, not for defining a 3D model.

      1. yawn like i said, people who really learn these gui cad programs can do these things. to me, that was such a steep learning curve against a paradigm that deeply offended me. people who feel differently aren’t wrong, they just aren’t me.

        1. Really? Because to me it sounded like you were just doing the wrong things and complaining that it’s now working out. Like, “i don’t want to click-drag until something reads 2”, which isn’t what you do. That’s just silly.

          1. you wouldn’t do it that way because you learned how do it the right way. that’s called a learning curve and for me it was much easier with openscad than gui tools.

  8. As a programmer I find OpenSCAD really easy to learn and very intuitive. I just did my first model yesterday of an airplane wing based on a NACA airfoil and with relatively complex cut-outs for spars, rods for wing extensions, mounting holes, etc. I expected a long slow road but instead I got almost everything done in an evening from a completely cold start.

    I really love the fact that I can precisely describe what I want with exact/calculated measurements as opposed to painfully drag things around with the mouse and try to get them to snap to the right grid point. And then when I want to change some fundamental measurement I have to start all over and realign all the smaller pieces.

    I think the real brilliance of OpenSCAD is the side-by-side code and live preview, it makes it a very visual tool ’cause one can see immediately what each change effects.

    What I’m missing in terms of tutorials is the next step after designing a part. I want to CNC it, what’s the next step? Drop the design into FreeCAD?

    1. OpenScad is not useful for anything past 3d printing.

      No way of sharing files across CAD packages through STEP file import and export.
      The geometry it can export is useless to a CAM application if you want to do Milling or Turning on a CNC.

      As for the “Coding your models” well that is not new to any major CAD application, inventor, fusion 360, solidworks, NX all have an SDK/API that will let you code a model. In a prior life I use to do this for companies in the automotive sector. I would do the CAD model in code, then link it to a simulation, then modify the cad model based on the simulation. Repeat several times to figure out an optimal solution.

      I intend to give freecad another look as it really has the most useful set of features to work in the real world if you want people to be able to build your stuff on something other than a 3d printer.

  9. You can produce very nice 2D SVG output from GeoGebra using all of its constraints etc., it is actually very powerful, then import that SVG into openscad. A powerful combination for teaching, or serious hacking/engineering.

  10. It would be nice to be able to click on the 3D view in OpenSCAD and have it highlight the code that produced it. Then you could edit it and know precisely where it was generated. There could probably be a dialog box that popped up and let you change parameters for that object, which went back into the code and got re-rendered.

  11. Nice timing!

    I was ready to quit OpenSCAD and go over to OpenJSCAD because I really want object orientation.

    I wanted to be able to write a library where one could do something like this “bolt = new bolt(“M4”, “Hex”, 20);”
    Then bolt.draw(); wherever needed. Or, if I just want to access some parameter of the bolt, for example to make something equal diameter to the bolt’s head just call bolt.head_diameter.

    OpenSCAD has libraries kind of like this but they always involve vectors where all the parameters of the fastener are identified only by index. To access them you have to know, for example head_diameter is bolt[4] or something like that. I hate that! Why people chose non-object oriented programming paradigms is something I might never be able to understand.

    I was pretty excited about OpenJSCAD. I started to write my fastener library. It accepted metric sizes with the M prefix, numbered sizes with a # prefix or inch sizes with a ” suffix. If I didn’t have all the dimensions in my tables it would try to take the closest sizes that were in my tables and extrapolate the correct sizes.

    But the UI!

    OpenJSCAD runs in the browser. That was a selling point to me. I’ve recently replaced my old laptop with a lapdock and I wanted to be able to work in Android. But it’s so weird! You are supposed to drag and drop all your .jscad files into the page. Then if you edit and save them locally it’s supposed to automatically update in the browser.

    But in Firefox I found the auto-update does not work. I have to keep re-dragging to see my changes. In Chrome it does work but it doesn’t like multiple files. Not very useful when I want to be using libraries.

    So I started writing my own little PHP app to store my work on my server and just view the result in the webpage. I figured I could just edit in an ssh window and press refresh to see my changes. Later maybe I could automate the refresh with some Ajax.

    I got my backend stuff ready and just needed to add the OpenJSCAD script for rendering. I got that going but couldn’t figure out how to get an export to STL button. So I hopped back over to openjscad.org. It’s gone. Now it’s openjscad.xyz. And there is a whole new version with a new interface. I don’t see anything about using the new version embedded, only an upload button. And the upload button doesn’t work in Firefox, only Chrome. And oh look, they have somehow changed the language, none of my code runs in it.

    I’m not interested in something that is going to make me re-learn and re-work all my old stuff on a regular basis. Life is too short for that!

    So it’s back to OpenSCAD for me. I don’t like having to use numerically indexed vectors for everything but it certainly isn’t the worst possible evil! Unless someone has a better recommendation….

    1. Hey!

      The section about clean library interfaces in project 4 ( https://mastering-openscad.eu/buch/example_04/#clean-library-interfaces ) might be interesting to you. It basically demonstrates how to build a map in OpenSCAD. Or you might want to check out a little experiment of mine https://github.com/jkerdels/dcl.scad where I explored ways to postpone the definition of the geometry in order to be able to query properties of other objects in the scene…

      1. This is a nice gauntlet of projects. I still find arbitrary fillets to be difficult – the library BOSL2 helps a lot but I’m still looking for alternatives. Maybe CadQuery or Cascade Studio (both are Python + OpenCascade). Programming at work depletes my brain enough and I just want to fillet some stupid edges.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.