OpenSCAD - The Programmers Solid 3D CAD Modeller

A software for creating solid 3D CAD objects. It is free and open-source. It focuses on the CAD aspects rather than the artistic aspects of 3D modeling unlike Blender3D.

Category: software, open source, free, 3d, cad, graphics

Stable Version: OpenSCAD 2021.01

Release Date:

Runs on: windows, mac, linux, openbsd, netbsd, freebsd

windows mac linux openbsd netbsd freebsd

 Download OpenSCAD / Install Binaries: Links on the Official Website
Disclaimer: We do not store any binary or executable file formats on this website to provide direct file downloads. All download links of binaries or executables presented on this website, for any software application without exception, are provided only from the application's publisher Official Website and no other locations. This website is not responsible for the accuracy or safety of the software applications presented here. In particular this website section is just a catalog with popular opensource software applications mainly addressed to software developers to easy the access to the open source code.

  Get the Source Code of OpenSCAD / Software Source Code Download


  • Project Developer: OpenSCAD Development Team
  • License: GNU General Public License (GPL) v2
  • OpenSource, Free: Yes
  • Written in: C++, Qt5
Building from Source: dependencies
  • QT5, Boost, QScintilla, OpenCSG, GLEW
  • CGal, Eigen3, Gmp, Mpfr, DoubleConversion
  • Gtk+3, Cairo, Glib2, Harfbuzz, LibXML2, LibZip
  • FontConfig, FreeType2, LiberationFonts
  • CMake, Python, Bison, Flex
  • LLVM or GCC compiler


0 5 4.4
OpenSCAD is one of the fewest free and open-source 3D CAD Modelling software applications that includes an active scripting language (with a syntax easy to learn which is very similar with the Javascript language syntax). The included functional programming language (named Open SCAD language) is used to create models that are previewed on the screen, and rendered into 3D mesh which allows the model to be exported in a variety of 2D/3D file formats. A script in the Open SCAD language can be used to create 2D or 3D models. This script is a free format list of action statements.
To better understand the scripting language of this application see this link and look at the below scripting example.

// sample of Open SCAD scripting language structure
 variable = value;
 operator()   action();
 operator() { action();    action(); }
 operator()   operator() { action(); action(); }
 operator() { operator()   action();
              operator() { action(); action(); } }

// a real example that draws a cube
   x = 4+y;
   rotate(40) square(5,10);
   translate([10,5]) { circle(5); square(4); }
   rotate(60) color("red") { circle(5); square(4); }
   color("blue") { translate([5,3,0]) sphere(5); rotate([45,0,45]) { cylinder(10); cube([5,6,7]); } }

The OpenSCAD provides two main modeling techniques: the first one is constructive solid geometry (CSG) and second there is 2D outlines extrusion. As the data exchange format for these 2D outlines Autocad DXF files are used. In addition to 2D paths for extrusion it is also possible to read design parameters from DXF files. Besides DXF files this application can read and create 3D models in the STL and OFF file formats.
For the working mode it provides 2 separate operating modes: Render or Preview. The Render mode generates the geometry exact how it is including the mesh. The Preview mode is the standard working mode because it uses a simple outline which is very fast to render on the fly (aka real-time preview).
When you open the software, you'll see three frames within the window. The left frame is where you'll write code to model 3D objects. The right frame is where you'll see the 3D rendering of your model.

Pros +
  • a very flexible 3D modelling concept using a dedicated scripting language
  • includes by default a lot of examples
  • the online documentation is quite comprehensive
  • on the official website you can find hints and tutorials, books and videos
Cons -
  • there are some missing features but perhaps will be added in the next releases as the project is still young compared with other well-known 3D CAD software projects
  • the project development looks like it goes a bit slower than expected, the time periods between releases looks longer than usual, especially for bug fixing releases


OpenSCAD is a non-interactive modeler, more like a 3D-compiler that reads a script file that describes the object and renders the 3D model from this script file (see examples below). This gives you, the designer, complete control over the modeling process and enables you to easily change any step in the modeling process or make designs that are defined by configurable parameters.


  • easy to use, intuitive
  • can create 3D objects, extrusions to 3D, projections, 2D objects, primitives, text
  • can handle transformations
  • boolean and conditional functions, iterator functions
  • can handle mathematical operators and functions
  • includes string functions, type test functions
  • have list comprehensions
  • can import and export geometry in various formats
  • import formats:
    • 3D: STL binary/ascii, OFF, AMF, 3MF
    • 2D: DXF, SVG
    • other: CSG via include<> statement ; PNG via surface() function ; TXT various text formats
  • export formats: STL, OFF, AMF, DXF, SVG, CSG, PNG (image), PDF

Screenshot: Main Screen
OpenSCAD - Main Screen

Changelog Highlights

2021-02-07 : version 2021.01

notable changes

  • New features: function literals, exponent function (e.g. 2^3), convexity parameter to resize(), support for generic tail recursion, $vpf for viewport field of view
  • New warnings for: ranges with begin < end, matrix structure problems
  • Changes: allow random seeds to stick between rands() calls, make comparison operators on mixed types return undef, track reason for values turning undef
  • Fixes: range precision, empty geometry handling, search order for imported modules, search highlight for utf8 text, display of matches in search field
  • Improvements: internal handling of data values, performance of array concatenation, float accuracy of mirror matrix calculation, polygon and polyhedron warnings/errors
  • GUI: jump to source code from 3D preview, error-log window for tracking errors and warnings, window menu to allow keyboard access to all docked windows, enable default binary stl output and ascii option, show message in console when caches are flushed, disable HTML rendering in console, enable color scheme for CGAL 2D render, simplified OpenCSG edge shader - with added smoothing
  • Editor: can edit multiple files in tabs (switch via Ctrl+Tab / Ctrl+Shift+Tab), modify numbers via mouse scroll, auto-complete & call-tips for built-ins, configurable code snippets, line bookmarks, jump to error, support for line/block copy and move, convenience context menu to tab header, include<>/use<> files via inline link, Find/Find Next/Find Previous to editor context menu
  • Command line: support reading scripts from STDIN / export to STDOUT, multi-export on command line, new command line options --animate and --export-format, allow view-port variables in command-line mode, allow export to .ast, .csg, .echo and .term in preview mode, Print statistics in cmdline mode as in GUI
  • Add PDF export (single page only)
  • Support for line-cap, line-join and stroke-linejoin in SVG import
  • Change CGAL Union to join least complex geometries first
  • Switch to C++14 and allow usage of header-only CGAL
  • Add support for lib3MF v2.0 API
  • Update AppStream release info
  • New and updated translations
  • Bug Fixes
2019-05-13 : version 2019.05

notable changes

  • New Language Modules: assert() - stop script evaluation on failed constraints, let() - scoped assignment
  • New Language Functions: echo(), ord() - convert from character to Unicode code point, assert() - stop script evaluation on failed constraints, is_undef(), is_list(), is_num(), is_bool(), is_string()
  • New Language Variables: $preview is a special variable which is set to true in preview mode
  • New Language Features: if/else condition, each keyword, C-style for loop, allows looping over characters of a string
  • Language Changes: add angle parameter to rotate_extrude(), import() now supports SVG/3MF/AMF, color() now supports hex color codes, removed glide() and subdiv() which were never implemented
  • New warnings for: module call parameterns don't match module declaration, argument value of of range, duplicate passed argument, children passed to module not accepting children, reference to $special_variables, duplicate assigment
  • Customizer: Allow parametrizing design parameters with GUI customization
  • Support for using 3D-Mouse / Joystick / Gamepad input devices for controlling the 3D view
  • 3D Printing support: Purchase from a print service partner or print to Octoprint
  • New export file formats: SVG, 3MF, AMF
  • Quick-edit and preview of values using Alt-Arrows (Shift-Alt-Arrows on macOS)
  • Added --view cmd-line parameter
  • Play sound notification on render complete
  • Line numbers and filenames are now shown for many errors and warnings
  • New translations
2015-03-10 : version 2015.03

notable changes

  • New Language Features: text() module for 2D text, offset() module for 2D offsets, list comprehensions, let(), chr() and concat() functions, surface() can now take PNG images as input, min() and max() can now take a vector argument, 2D minkowski can now handle polygons with holes, variables can now be assigned in local blocks without using assign()
  • Program Features: SVG and AMF export, --viewall and --autocenter cmd-line parameters, improved cmd-line for Windows platform, new examples
  • GUI Features: a new toolbar with icons, code editor is now based on QScintilla, added a splash screen, the GUI components are now dockable, Tickmarks on axes
  • Color schemes for viewer and editor can be user-edited using JSON files
  • MDI (Multiple Document Interface) is now available on all platforms
  • Performance improvements: 2D (clipper), preview, hull, minkowski, surface, reduce duplicate evaluation of identical expressions, improved recursion behavior, internal cavities are better supported, STL export and import is now more robust, better mirror() and scale() behavior when using negative factors
  • Deprecations: polyhedron() now takes a faces argument rather than triangles, assign() is no longer needed - local variables can be created in any scope
  • New translations
  • Bug Fixes