Most CAD software either costs thousands per seat or forces you into a cloud subscription that owns your files. FreeCAD takes the opposite approach: a fully open-source parametric CAD modeller built on the same professional geometry kernel (OpenCASCADE) used by commercial tools, licensed under LGPL, and capable of running completely without a display server for batch automation and CNC pipelines.

What is FreeCAD?

FreeCAD is a general-purpose parametric 3D CAD modeller aimed at mechanical engineers, product designers, architects, and makers. Parametric means that every dimension in your model is a parameter — change the diameter of a bolt hole and every pocket, fillet, and drawing that references it updates automatically.

“FreeCAD is a free and open-source general-purpose parametric 3D computer-aided design modeler and a building information modeling software with finite element method support.”

FreeCAD Source Code on GitHub FreeCAD Website FreeCAD Wiki

Why engineers and makers choose FreeCAD

  • 📐 Parametric modelling — history-based design where changing one dimension cascades through the entire model
  • 🔩 Professional geometry kernel — OpenCASCADE (OCCT), the same technology underlying many commercial CAD tools
  • 🏗️ Workbench system — domain-specific toolsets for FEM, CNC, BIM, technical drawings, and more, all in one app
  • 🐍 Python scripting — every object, feature, and operation is accessible from Python for automation and custom tools
  • 📄 STEP, IFC, STL, DXF — comprehensive import/export for industry-standard CAD interchange formats
  • 🖥️ Headless CLI — run FreeCAD on a server without a display, batch-process designs, integrate into CI/CD pipelines
  • ⚖️ LGPL v2.1+ — free for commercial use, modifications must be shared, linking in proprietary software permitted

How Parametric CAD Works in FreeCAD

The PartDesign workflow is the recommended approach for solid part modelling:

  1. Sketch — draw a 2D shape in the Sketcher workbench and fully constrain it with geometric and dimensional constraints
  2. Feature — apply a 3D operation: Pad (extrude), Pocket (cut), Revolution, Loft, or Sweep
  3. Refine — add Fillets, Chamfers, Shell operations
  4. Repeat — build up a feature tree; every step is editable by double-clicking it

Change the sketch dimension or any feature parameter — FreeCAD re-evaluates the entire tree and the model updates. This is the parametric promise, and FreeCAD delivers it without a subscription.

The Workbench System

FreeCAD organises tools into workbenches — domain-specific toolsets that load on demand. You switch between them as your workflow moves from sketching to machining to analysis:

Modelling

Workbench What it does
Sketcher Constraint-based 2D geometry — the foundation for all PartDesign features
Part Direct CSG modelling — primitives, boolean union/cut/common
PartDesign Feature-based history modelling — the primary workflow for mechanical parts
Assembly Multi-body assemblies with joint-based positioning constraints
Surface Advanced Bézier / B-spline surface modelling
Draft 2D CAD drafting with DXF import/export

Engineering

Workbench What it does
TechDraw Generate technical drawings with orthographic views, sections, annotations, and dimensions — export to PDF or SVG
CAM / Path CNC machining — define toolpaths, simulate material removal, export G-code
FEM Finite Element Analysis — static structural, thermal, and fluid analysis via Calculix

Architecture

Workbench What it does
BIM Building Information Modelling — walls, slabs, roofs, columns, with full IFC 2x3/4 import and export

Data & Automation

Workbench What it does
Spreadsheet Link cells directly to model parameters — data-driven parametric design
Material Material card database (density, Young’s modulus, etc.) shared across FEM and BIM
AddonManager Discover and install community workbenches with one click

File Format Support

FreeCAD’s geometry kernel (OpenCASCADE) handles the heavy lifting for CAD exchange formats:

Category Formats
CAD exchange STEP (with colours), IGES, BREP
Mesh / 3D printing STL, OBJ, 3MF, AMF, PLY, glTF/GLB, Collada
Architecture IFC 2x3, IFC 4, DXF, DWG (via LibreDWG)
2D output SVG, PDF (TechDraw)
Manufacturing G-code (CAM workbench)
Web 3D glTF / GLB
Interchange Alembic, OpenSCAD CSG
Native .FCStd (zipped XML + geometry)

STEP import/export is particularly solid — colours, product hierarchy, and metadata survive the round-trip, which is essential for collaborating with teams using commercial CAD tools.

Installing FreeCAD

Desktop (interactive use)

Headless server (no display required)

This is where FreeCAD becomes a pipeline tool. The freecadcmd binary is FreeCAD’s console entry point — no Qt, no Coin3D, no OpenGL:

# On Ubuntu/Debian
sudo apt install freecad-python3

# Run a Python automation script
freecadcmd my_script.py

# Interactive headless session
freecadcmd
>>> import FreeCAD, Part
>>> doc = FreeCAD.open("bracket.FCStd")
>>> Part.export(doc.Objects, "bracket.step")

No DISPLAY variable, no virtual framebuffer, no desktop session. A plain Ubuntu Server 24.04 VM is sufficient.

Automating FreeCAD with Python

The Python API is first-class — every document object, every workbench operation, every property is accessible programmatically. This is what enables batch processing, automated design variants, and integration with external data sources.

Create and export a parametric model

import FreeCAD as App
import Part

doc = App.newDocument("BracketBatch")

# Create a box
box = doc.addObject("Part::Box", "Bracket")
box.Length = 80.0   # mm
box.Width  = 40.0
box.Height = 5.0

# Cut a hole
cyl = doc.addObject("Part::Cylinder", "Hole")
cyl.Radius = 6.0
cyl.Height = 10.0
cyl.Placement.Base = App.Vector(40, 20, -2)

cut = doc.addObject("Part::Cut", "BracketHole")
cut.Base = box
cut.Tool = cyl
doc.recompute()

# Export
Part.export([cut], "/output/bracket.step")
cut.Shape.exportStl("/output/bracket.stl")
print("Volume:", cut.Shape.Volume, "mm³")

Run it headlessly:

freecadcmd bracket_gen.py

Drive a model from a spreadsheet

The Spreadsheet workbench lets you link cell values directly to model parameters. In a headless script you can update those cell values before recomputing — effectively using FreeCAD as a parametric design engine driven by external data:

import FreeCAD as App

doc = App.open("parametric_bracket.FCStd")
sheet = doc.getObject("Spreadsheet")

# Update parameters from external source
sheet.set("B2", "120")   # Length
sheet.set("B3", "60")    # Width
doc.recompute()

import Part
bracket = doc.getObject("Bracket")
Part.export([bracket], "/output/bracket_120x60.step")

Running FreeCAD in Docker

No official image exists, but the headless build runs cleanly in a container:

FROM ubuntu:24.04

RUN apt-get update && apt-get install -y --no-install-recommends \
    freecad-python3 && \
    rm -rf /var/lib/apt/lists/*

ENTRYPOINT ["freecadcmd"]
docker build -t freecad-headless .

docker run --rm \
  -v /path/to/models:/models \
  -v /path/to/output:/output \
  freecad-headless \
  /models/process_all.py

For a more current FreeCAD version, mount the AppImage into the container instead of using the distro package.

The CNC / CAM Pipeline

The CAM workbench (formerly Path) turns FreeCAD into a complete CNC pre-processor:

  1. Import or model the part — STEP import or native PartDesign
  2. Define a Job — set the stock material, machine coordinate system, and post-processor
  3. Add operations — Profile, Pocket, Drilling, Adaptive clearing, Engraving
  4. Simulate — visualise material removal before cutting
  5. Post-process — export G-code for your specific controller (LinuxCNC, Mach3, Grbl, etc.)

FreeCAD ships post-processor scripts for the most common controllers. Custom post-processors are Python scripts — drop one in the appropriate directory and it appears in the Job dialog.

FEM: Finite Element Analysis

The FEM workbench is a full structural and thermal simulation environment built into FreeCAD. It uses open-source solvers — primarily CalculiX — with no additional licence cost and no seat limit.

Supported analysis types

Analysis type Solver What you get
Static stress CalculiX von Mises stress, principal stresses, displacements
Modal / frequency CalculiX Natural frequencies and mode shapes
Thermal CalculiX Temperature distribution, heat flux
Buckling CalculiX Critical load factors
Fluid (basic) CalculiX Laminar flow approximation
Electrostatics Elmer FEM Electric field and potential
Magnetostatics Elmer FEM Magnetic flux density

FreeCAD also supports exporting to Z88 and Mystran solvers for specialised analyses.

Typical FEM workflow

1. Assign a material — the Material workbench ships cards for common metals, plastics, and composites (density, Young’s modulus, Poisson’s ratio, thermal conductivity). Custom .FCMat cards go in your user material directory.

2. Apply constraints — right-click faces, edges, or vertices:

  • Fixed support (all DOF locked)
  • Force (distributed or concentrated)
  • Pressure (normal to face)
  • Displacement (partial constraint)
  • Fixed temperature / heat flux (thermal)
  • Contact (bonded or sliding between bodies)

3. Mesh the geometry — FreeCAD bundles Salome SMESH and can call Gmsh (install separately). Choose mesh density per region with mesh refinements on fillets and stress concentrations. Tetrahedral elements for complex organic shapes; hexahedral (Gmsh) for structured grids.

4. Run the solver — CalculiX is launched as a subprocess. A typical bracket analysis on a modern laptop completes in seconds. The .inp input file is written to a temp directory and can be inspected or submitted to a remote HPC cluster.

5. Visualise results — the FEM workbench renders colour maps directly in the FreeCAD viewport:

  • von Mises stress (identify yield risk)
  • Displacement magnitude (deformation scale factor adjustable)
  • Principal stress vectors
  • Temperature and heat flux for thermal runs

Results can also be exported to VTK format for post-processing in ParaView.

Scripting FEM headlessly

import FreeCAD as App
import ObjectsFem
import femmesh.gmshtools as gmsh

doc = App.open("bracket.FCStd")
analysis = doc.addObject("Fem::FemAnalysis", "Analysis")

# Add material
mat = ObjectsFem.makeMaterialSolid(doc, "Steel")
mat.Material = {"YoungsModulus": "210000 MPa", "PoissonRatio": "0.30"}
analysis.addObject(mat)

# Mesh, solve, export results
# (full scripting documented on wiki.freecad.org/FEM_Scripting)
doc.recompute()

CFD: Computational Fluid Dynamics with CfdOF + OpenFOAM

For actual fluid dynamics — external aerodynamics, internal pipe flow, heat exchangers, fan performance — FreeCAD pairs with CfdOF and OpenFOAM to form a complete open-source CFD pipeline.

CfdOF is a FreeCAD community add-on that provides a GUI front-end for OpenFOAM. OpenFOAM is the industry-standard open-source CFD solver used by automotive OEMs, aerospace companies, and research institutions worldwide.

CfdOF Source Code on GitHub

What you can simulate

Use case OpenFOAM solver Example
Incompressible external flow simpleFoam Drag/lift on a wing or car body
Incompressible internal flow simpleFoam Pipe networks, valve pressure drop
Transient flow pimpleFoam Vortex shedding, pulsating flows
Compressible flow rhoCentralFoam Supersonic nozzles
Heat transfer buoyantSimpleFoam Natural convection, cooling fins
Rotating machinery MRFSimpleFoam Fans, impellers, turbines
Multiphase interFoam Free-surface flows, sloshing

Installing CfdOF

Step 1 — Install OpenFOAM on the host (not inside FreeCAD):

# Ubuntu 22.04 / 24.04 — OpenFOAM Foundation build
sudo sh -c "wget -O - https://dl.openfoam.org/gpg.key > /etc/apt/trusted.gpg.d/openfoam.asc"
sudo add-apt-repository http://dl.openfoam.org/ubuntu
sudo apt-get update
sudo apt-get install openfoam11

# Source the environment
echo "source /opt/openfoam11/etc/bashrc" >> ~/.bashrc
source ~/.bashrc

Step 2 — Install CfdOF via FreeCAD AddonManager:

Tools → AddonManager → search “CfdOF” → Install

Or manually:

cd ~/.local/share/FreeCAD/Mod
git clone https://github.com/jaheyns/CfdOF

Step 3 — Install cfMesh (the mesher CfdOF uses by default):

In FreeCAD: CfdOF → CfdOF Preferences → Install cfMesh

CFD workflow in FreeCAD + CfdOF

1. Create or import your geometry — model the fluid domain in PartDesign, or import a STEP file. For external aero, create a wind-tunnel box around the object using Part boolean operations and subtract the body (difference()) to get the fluid volume.

2. Set up the analysis — switch to the CfdOF workbench, create a CFD Analysis object, and choose the solver type (simpleFoam for steady incompressible, etc.).

3. Mesh with cfMesh or snappyHexMesh — CfdOF calls cfMesh automatically. Configure:

  • Base mesh cell size
  • Surface refinement on walls and edges
  • Boundary layer (prism layers) for accurate near-wall treatment
CfdOF → Mesh → Create → Set cell size → Run cfMesh

4. Set boundary conditions — click each face of the fluid domain and assign:

  • Inlet: velocity or pressure (U = [30 m/s, 0, 0])
  • Outlet: zero-gradient pressure
  • Walls: no-slip (solid surfaces)
  • Symmetry planes: for half-domain simulations

5. Set physics — turbulence model (k-omega SST is the standard for external aero), fluid properties (density, viscosity), solver iterations and convergence tolerance.

6. Run OpenFOAM — CfdOF writes the OpenFOAM case directory (constant/, system/, 0/), then launches the solver as a subprocess. Residual plots update live in FreeCAD.

7. Post-process in ParaView — CfdOF opens ParaView automatically on completion. Visualise:

  • Pressure coefficient distribution
  • Velocity streamlines
  • Wall shear stress
  • Force and moment coefficients (drag, lift)

The OpenFOAM case directory

CfdOF writes a standard OpenFOAM case structure you can inspect, tweak, and rerun from the terminal:

MyAnalysis/
├── constant/
│   ├── polyMesh/          # Mesh from cfMesh
│   └── transportProperties
├── system/
│   ├── controlDict        # Time steps, output frequency
│   ├── fvSchemes          # Discretisation schemes
│   └── fvSolution         # Linear solver settings
└── 0/
    ├── U                  # Initial/boundary velocity
    ├── p                  # Initial/boundary pressure
    ├── k                  # Turbulence kinetic energy
    └── omega              # Specific dissipation rate

This means advanced users can bypass CfdOF entirely and run OpenFOAM from the command line — CfdOF is a convenience layer, not a lock-in.

Running CFD on a remote server

OpenFOAM scales to HPC clusters via MPI. Run the mesh generation locally in FreeCAD+CfdOF, then copy the case directory to a server and run:

# On the HPC node
source /opt/openfoam11/etc/bashrc
cd MyAnalysis
decomposePar                         # split domain across cores
mpirun -np 32 simpleFoam -parallel   # run on 32 cores
reconstructPar                       # reassemble for post-processing

The FreeCAD model and the OpenFOAM case are separate — the simulation runs on whatever hardware you have, while the geometry stays in FreeCAD.

LGPL Licence — What It Means

FreeCAD is licensed under LGPL v2.1+, which is significantly more permissive than GPL:

  • ✓ Use FreeCAD for commercial projects — no restrictions
  • ✓ Distribute FreeCAD with your product — fine with attribution
  • ✓ Link against FreeCAD libraries in proprietary software — permitted (unlike GPL)
  • ✗ Modify FreeCAD and distribute the modified binary — you must share the modifications

This makes FreeCAD genuinely usable as the backend for commercial design tools, SaaS services that process CAD files, and in-house engineering automation.

Conclusion

FreeCAD has crossed from “promising open-source CAD” to “genuinely useful for real engineering work” with its 1.0 release. The combination of OpenCASCADE’s professional geometry kernel, the modular workbench system, and a fully scriptable Python API puts it in a category of its own in the FOSS world.

For self-hosters and DevOps engineers: the headless freecadcmd CLI and the Docker-friendly architecture make FreeCAD a first-class automation engine for parametric design pipelines, automated STEP/STL exports, and CNC job preparation.

Related tools worth knowing:

  • CadQuery — Python-first parametric CAD also using OpenCASCADE; code-only, no GUI, great for programmatic part generation
  • OpenSCAD — CSG modelling via a scripting language; simpler, less capable, beloved by the maker community; FreeCAD can import .scad files
  • KiCad — FOSS PCB design; FreeCAD is the standard companion for the 3D mechanical enclosure
  • Blender — complements FreeCAD for rendering and organic shapes; STEP export from FreeCAD → Blender is a common workflow