Model or dataset
openscad/openscad avatar
openscad/openscad

OpenSCAD: Script-Driven CAD for Parametric Part Design

OpenSCAD - The Programmers Solid 3D CAD Modeller

10,300 stars1,797 forksC++NOASSERTION

At a glance

What is it?
OpenSCAD compiles a plain text script into a 3D solid using constructive solid geometry and 2D extrusion. It targets engineers modeling machine parts, not artists building sculpted meshes.
Who is it for?
OpenSCAD suits engineers who need exact, repeatable geometry defined in a version-controllable text file. It is not the right tool when the workflow requires sculpting, mesh painting, or direct face manipulation.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 7 days ago.
What is it written in?
Mainly C++, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 26, 2026, and from our analysis. They are not legal advice.

Editorial analysis

From Script File to 3D Solid: What OpenSCAD Does

OpenSCAD is not an interactive modeler. The README describes it as more like a 3D compiler: it reads a .scad script file that describes an object, then renders the geometry from that description. There is no canvas to drag shapes on and no tool palette. Every dimension, position, and boolean operation exists as a line of code.

This design choice gives the engineer complete control over the modeling process and makes every step of the design reversible and auditable. Because the model is a text file, it can be placed in a version control system and diffed like source code. Changing a single parameter value regenerates the entire object without redrawing anything by hand.

The README is explicit that OpenSCAD focuses on the CAD aspects of 3D modeling rather than the artistic aspects. It names Blender as the contrasting example: a tool suited for computer-animated movies where organic shapes and artistic control matter. OpenSCAD is suited for machine parts, enclosures, brackets, and other objects where exact dimensions are the priority.

Constructive Solid Geometry and 2D Extrusion

OpenSCAD provides two main modeling techniques. The first is constructive solid geometry (CSG), which combines primitive shapes using boolean operations. Primitives include cubes, cylinders, spheres, and polyhedra. The boolean operations are union (add), difference (subtract), and intersection (keep only the overlapping volume). These operations can be nested to any depth.

The second technique is extrusion: a 2D outline is swept into a 3D solid. OpenSCAD reads Autocad DXF files as the source for these 2D outlines. DXF files can also carry design parameters that feed into the script, connecting an existing CAD drawing directly to the OpenSCAD model.

The README gives a concrete example of both techniques working together. A cylinder forms the trunk of a tree. A sphere forms the crown. Union combines them, and translate moves the sphere to the correct height:

scad
union() {
    cylinder(h = 30, r = 8);
    translate([0, 0, 40]) sphere(20);
}

Beyond the primitives, the language supports variables, loops, conditionals, and user-defined modules. The OpenSCAD User Manual on Wikibooks documents the full syntax. The MCAD library, included as a submodule, adds components such as gears, screws, and math utilities.

Installing OpenSCAD and Writing a First Object

The README recommends downloading a pre-built binary from https://www.openscad.org/downloads.html. Binaries are provided for Linux, Windows, and macOS. Building from source is also documented but requires a substantial set of dependencies.

To get the source code, clone the repository and initialize the submodules:

bash
git clone https://github.com/openscad/openscad.git
cd openscad
git submodule update --init --recursive

The submodule step pulls the MCAD library. Build prerequisites include a C++17 compiler, CMake 3.5 or later, Qt 5.15 or later, CGAL 5.4 or later, Boost 1.70 or later, plus GMP, MPFR, Eigen, fontconfig, freetype2, harfbuzz, and several other libraries. On macOS, the README provides a Homebrew-based build script:

bash
./scripts/macosx-build-homebrew.sh

Once installed, the application opens with a code editor on the left and a 3D preview pane on the right. Pressing F5 renders a preview. The first object the README demonstrates is a cylinder for a tree trunk:

scad
cylinder(h = 30, r = 8);

Typing this into the editor and pressing F5 produces a cylinder in the preview pane. Pressing F6 runs the full render and writes output. The test suite, for contributors, requires Python 3.9 or later, Ghostscript 10.x or later, and Catch2 3.0 or later.

Design Constraints: No Mesh Editing, Slow CSG on Complex Geometry

OpenSCAD has no mesh editing capabilities. It cannot push or pull faces, subdivide polygons, or sculpt surfaces. Every modification goes through the script. For engineers working on prismatic shapes this is not a limitation, but for anyone who needs to work with organic forms or imported mesh files it is a hard boundary.

Constructive solid geometry operations on complex geometry can be computationally expensive. CGAL, which provides the underlying geometry engine, can take a long time on high-polygon models or fail outright when faces are non-manifold. The README does not document specific polygon limits, but the CGAL dependency means performance depends on the geometric complexity of the boolean operations, not just the file size.

OpenSCAD also has no built-in support for assembly constraints, tolerance analysis, or simulation. It produces geometry: verifying that parts fit together, that clearances are correct under thermal expansion, or that assemblies survive mechanical loads requires exporting to a downstream tool.

OpenSCAD vs FreeCAD: Script vs Interactive GUI

FreeCAD is an open-source parametric modeler that provides an interactive graphical workbench. Users create parts by defining constraint-based sketches and applying features like pad, pocket, and chamfer through a GUI. FreeCAD also has a Python scripting console that can automate operations, but the primary interface is graphical and the model file is stored in a binary FreeCAD format.

OpenSCAD has no graphical modeling surface at all. The model is the script, stored as plain text. This makes an OpenSCAD design straightforward to review in a pull request and easy to regenerate in a continuous integration pipeline. A FreeCAD file requires the FreeCAD application to inspect and cannot be meaningfully diffed.

The trade-off is iteration speed. FreeCAD's direct manipulation interface allows rapid visual prototyping. OpenSCAD requires editing the script, saving, and re-rendering for every change. Engineers working on tightly specified, parametric parts often prefer OpenSCAD for that traceability. Those exploring form and proportion tend to find FreeCAD's GUI faster.

Release Cadence and License Considerations

The most recent tagged release is openscad-2021.01, published on 2021-02-07. The repository is not archived and the last push was on 2026-09-23, so development continues well past that release. Snapshot builds generated by GitHub Actions are available for users who want features from the current master branch without building from source.

The repository's license field is marked NOASSERTION. The COPYING file in the repository root contains the actual license terms. The example files in examples/COPYING-CC0.txt carry a CC0 license for the example content. The MCAD submodule has its own license terms separate from the main codebase. Teams that need a confirmed license identifier for legal or compliance purposes should read COPYING directly rather than relying on the repository metadata field.

Editorial conclusion

OpenSCAD suits engineers who need exact, repeatable geometry defined in a version-controllable text file. It is not the right tool when the workflow requires sculpting, mesh painting, or direct face manipulation. Before committing to it, confirm that downstream processes accept STL or OFF output; those are the two 3D export formats the README documents. Also note that the license field in the repository is marked NOASSERTION, so teams with compliance requirements should read the COPYING file in the repository before deployment.

Frequently asked questions

Which is better, OpenSCAD or FreeCAD?

OpenSCAD stores the entire model as a plain text script, which is easy to version-control and diff. FreeCAD provides a graphical workbench with constraint-based sketching and direct feature editing, which suits visual iteration. The README states OpenSCAD targets CAD aspects rather than artistic ones, so the choice depends on whether the workflow values scriptable precision or interactive design speed.

What is OpenSCAD used for?

The README describes it as software for creating solid 3D CAD objects, focused on machine parts and other engineering geometry where exact dimensions matter. It uses constructive solid geometry and 2D extrusion from DXF files, and exports to STL, OFF, and DXF.

Is OpenSCAD still relevant?

The last push to the repository was on 2026-09-23, and development continues on the master branch with snapshot builds available through GitHub Actions. The most recent tagged release is openscad-2021.01, published on 2021-02-07.

How do I install OpenSCAD?

Pre-built binaries for Linux, Windows, and macOS are available at https://www.openscad.org/downloads.html. Building from source requires cloning the repository, running git submodule update --init --recursive, and installing a C++17 compiler, CMake, Qt 5.15 or later, CGAL 5.4 or later, and several other libraries.

Official sources

  1. Issues
  2. openscad/openscad on GitHub
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/openscad-openscad.svg)](https://hysenlabs.com/projects/openscad-openscad)