FreeCAD
This is the official source code of FreeCAD, a free and opensource multiplatform 3D parametric modeler.
Top Related Projects
OpenSCAD - The Programmers Solid 3D CAD Modeller
This is an active mirror of the KiCad development branch, which is hosted at GitLab (updated every time something is pushed). Pull requests on GitHub are not accepted or watched.
LibreCAD is a cross-platform 2D CAD program written in C++17. It can read DXF/DWG files and can write DXF/PDF/SVG files. It supports point/line/circle/ellipse/parabola/spline primitives. The user interface is highly customizable, and has dozens of translations.
Parametric 2d/3d CAD
This is the Official source code repository of Synfig Studio animation software
Quick Overview
FreeCAD is an open-source parametric 3D modeling software. It's designed for mechanical engineering and product design but is also used in other fields like architecture. FreeCAD allows users to create complex 3D models, generate 2D drawings, and perform various engineering tasks.
Pros
- Free and open-source, with a large community of contributors
- Cross-platform compatibility (Windows, macOS, Linux)
- Highly customizable and extensible through Python scripting
- Supports a wide range of file formats for import and export
Cons
- Steeper learning curve compared to some commercial CAD software
- User interface can be less intuitive for beginners
- Performance can be slower with very complex models
- Some advanced features found in commercial CAD software may be missing or less refined
Code Examples
# Creating a simple cube
import FreeCAD as App
import Part
doc = App.newDocument()
cube = Part.makeBox(10, 10, 10)
Part.show(cube)
# Creating a cylinder and applying a boolean operation
import FreeCAD as App
import Part
doc = App.newDocument()
cylinder1 = Part.makeCylinder(5, 10)
cylinder2 = Part.makeCylinder(3, 12)
result = cylinder1.cut(cylinder2)
Part.show(result)
# Creating a sketch and extruding it
import FreeCAD as App
import Sketcher
import Part
doc = App.newDocument()
sketch = doc.addObject('Sketcher::SketchObject', 'Sketch')
sketch.addGeometry(Part.LineSegment(App.Vector(0,0,0), App.Vector(10,0,0)))
sketch.addGeometry(Part.LineSegment(App.Vector(10,0,0), App.Vector(10,10,0)))
sketch.addGeometry(Part.LineSegment(App.Vector(10,10,0), App.Vector(0,10,0)))
sketch.addGeometry(Part.LineSegment(App.Vector(0,10,0), App.Vector(0,0,0)))
extrude = doc.addObject('Part::Extrusion', 'Extrude')
extrude.Base = sketch
extrude.Dir = (0, 0, 10)
doc.recompute()
Getting Started
- Download and install FreeCAD from the official website: https://www.freecadweb.org/
- Launch FreeCAD and create a new document
- Choose a workbench (e.g., Part Design, Sketcher, or Draft)
- Start modeling by creating basic shapes or sketches
- Use constraints and parameters to define relationships between objects
- Explore different tools and features to refine your model
- Export your model in the desired format (e.g., STEP, STL, or DXF)
For scripting, you can access the Python console within FreeCAD or write external scripts using the FreeCAD module.
Competitor Comparisons
OpenSCAD - The Programmers Solid 3D CAD Modeller
Pros of OpenSCAD
- Text-based parametric modeling allows for precise control and version control
- Lightweight and runs well on less powerful hardware
- Excellent for creating programmatic, mathematical designs
Cons of OpenSCAD
- Steeper learning curve for users without programming experience
- Limited GUI and interactive modeling capabilities
- Lacks advanced features like assembly modeling and constraints
Code Comparison
OpenSCAD:
module gear(teeth = 20, radius = 5) {
circle(r = radius);
for (i = [0:teeth-1]) {
rotate(i * 360 / teeth) translate([radius, 0, 0]) square([2, 1]);
}
}
gear();
FreeCAD (Python console):
import Part
from FreeCAD import Base
def create_gear(teeth=20, radius=5):
gear = Part.makeCircle(radius)
for i in range(teeth):
angle = i * 360 / teeth
tooth = Part.makeBox(2, 1, 1).translate(Base.Vector(radius, 0, 0))
tooth.rotate(Base.Vector(0,0,0), Base.Vector(0,0,1), angle)
gear = gear.fuse(tooth)
return gear
Part.show(create_gear())
This is an active mirror of the KiCad development branch, which is hosted at GitLab (updated every time something is pushed). Pull requests on GitHub are not accepted or watched.
Pros of KiCad
- Specialized for electronic design automation (EDA) and PCB layout
- Extensive library of electronic components and footprints
- Active community with frequent updates and improvements
Cons of KiCad
- Limited to electronic design, not suitable for general 3D modeling
- Steeper learning curve for non-electronics professionals
- Less flexibility in custom component creation compared to FreeCAD
Code Comparison
KiCad (C++):
void SCH_EDIT_FRAME::OnOpenPCBEditor( wxCommandEvent& event )
{
wxFileName fn( Prj().GetProjectFullName() );
fn.SetExt( KiCadPcbFileExtension );
wxString fullPath = fn.GetFullPath();
KIWAY_PLAYER* frame = Kiway().Player( FRAME_PCB, true );
frame->Show( true );
frame->Raise();
}
FreeCAD (Python):
def makeBox(length, width, height):
box = Part.makeBox(length, width, height)
doc = FreeCAD.activeDocument()
obj = doc.addObject("Part::Feature", "Box")
obj.Shape = box
doc.recompute()
return obj
LibreCAD is a cross-platform 2D CAD program written in C++17. It can read DXF/DWG files and can write DXF/PDF/SVG files. It supports point/line/circle/ellipse/parabola/spline primitives. The user interface is highly customizable, and has dozens of translations.
Pros of LibreCAD
- Lightweight and faster for 2D drafting tasks
- Simpler interface, easier to learn for beginners
- Better compatibility with older hardware
Cons of LibreCAD
- Limited to 2D drafting, no 3D modeling capabilities
- Fewer advanced features compared to FreeCAD
- Smaller community and fewer extensions/plugins
Code Comparison
LibreCAD (C++):
void RS_ActionDrawLine::trigger() {
RS_Line* line = new RS_Line(container, *data);
line->setLayerToActive();
line->setPenToActive();
container->addEntity(line);
}
FreeCAD (Python):
def makeBox(length, width, height):
box = Part.makeBox(length, width, height)
doc = FreeCAD.activeDocument()
obj = doc.addObject("Part::Feature", "Box")
obj.Shape = box
doc.recompute()
LibreCAD focuses on 2D drafting with a C++ codebase, while FreeCAD offers more comprehensive 3D modeling capabilities using Python. LibreCAD's code is more low-level and performance-oriented, whereas FreeCAD's Python code is more accessible and easier to extend. FreeCAD provides a more powerful and flexible platform for complex designs, but LibreCAD excels in simplicity and efficiency for 2D work.
Parametric 2d/3d CAD
Pros of SolveSpace
- Lightweight and fast, with a smaller installation footprint
- Simpler interface, potentially easier for beginners to learn
- Focuses on constraint-based sketching and 3D modeling
Cons of SolveSpace
- Less feature-rich compared to FreeCAD's extensive toolset
- Smaller community and fewer extensions/plugins available
- Limited support for complex assemblies and advanced engineering tasks
Code Comparison
Both projects are primarily written in C++, but their codebases differ in structure and organization.
SolveSpace:
void SolveSpaceUI::MenuFile(int id) {
switch(id) {
case GraphicsWindow::MNU_NEW:
NewFile();
break;
case GraphicsWindow::MNU_OPEN:
OpenFile();
break;
// ...
}
}
FreeCAD:
void Gui::Command::doCommand(DoCmd_Type eType, const char* sCmd, ...) {
va_list ap;
va_start(ap, sCmd);
QString str;
str.vsprintf(sCmd, ap);
va_end(ap);
// ...
}
SolveSpace's codebase is more compact and focused, while FreeCAD's is more extensive and modular, reflecting their different scopes and feature sets.
This is the Official source code repository of Synfig Studio animation software
Pros of Synfig
- Specialized for 2D vector animation, offering a more focused toolset
- Lighter weight and potentially easier to learn for animation-specific tasks
- Cross-platform compatibility (Windows, macOS, Linux)
Cons of Synfig
- Limited to 2D design and animation, lacking 3D modeling capabilities
- Smaller community and fewer resources compared to FreeCAD
- Less frequent updates and potentially slower development cycle
Code Comparison
FreeCAD (Python):
import FreeCAD as App
import Part
box = Part.makeBox(10, 10, 10)
doc = App.newDocument()
Part.show(box)
Synfig (XML-based format):
<canvas version="1.0" width="480" height="270" xres="2834.645752" yres="2834.645752" view-box="-4.000000 2.250000 4.000000 -2.250000">
<layer type="group" desc="Layer 1">
<param name="z_depth">0.0000000000</param>
<param name="amount">1.0000000000</param>
</layer>
</canvas>
The code examples showcase the different approaches: FreeCAD uses Python for 3D modeling, while Synfig employs an XML-based format for 2D animation projects.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
Your own 3D parametric modeler
Website ⢠Documentation ⢠Forum ⢠Bug tracker ⢠Git repository ⢠Blog

Overview
-
Freedom to build what you want FreeCAD is an open-source parametric 3D modeler made primarily to design real-life objects of any size. Parametric modeling allows you to easily modify your design by going back into your model history to change its parameters.
-
Create 3D from 2D and back FreeCAD lets you to sketch geometry constrained 2D shapes and use them as a base to build other objects. It contains many components to adjust dimensions or extract design details from 3D models to create high quality production-ready drawings.
-
Designed for your needs FreeCAD is designed to fit a wide range of uses including product design, mechanical engineering and architecture, whether you are a hobbyist, programmer, experienced CAD user, student or teacher.
-
Cross platform FreeCAD runs on Windows, macOS and Linux operating systems.
-
Underlying technology
- OpenCASCADE A powerful geometry kernel, the most important component of FreeCAD
- Coin3D library Open Inventor-compliant 3D scene representation model
- Python FreeCAD offers a broad Python API
- Qt Graphical user interface built with Qt
Installing
Precompiled packages for stable releases are available for Windows, macOS and Linux on the Releases page.
On most Linux distributions, FreeCAD is also directly installable from the software center application.
For development releases visit the weekly-builds page.
Other options are described on the wiki Download page.
Compiling
FreeCAD requires several dependencies to correctly compile for development and production builds. The following pages contain updated build instructions for their respective platforms:
Reporting Issues
To report an issue please:
- Consider posting to the Forum, Discord channel, or Reddit to verify the issue;
- Search the existing issues for potential duplicates;
- Use the most updated stable or development versions of FreeCAD;
- Post version info from
Help > About FreeCAD > Copy to clipboard
; - Restart FreeCAD in safe mode
Help > Restart in safe mode
and try to reproduce the issue again. If the issue is resolved it can be fixed by deleting the FreeCAD config files. - Start recording a macro
Macro > Macro recording...
and repeat all steps. Stop recording after the issue occurs and upload the saved macro or copy the macro code in the issue; - Post a Step-By-Step explanation on how to recreate the issue;
- Upload an example file (FCStd as ZIP file) to demonstrate the problem;
For more details see:
[!NOTE] The FPA offers developers the opportunity to apply for a grant to work on projects of their choosing. Check jobs and funding to know more.
Usage & Getting Help
The FreeCAD wiki contains documentation on general FreeCAD usage, Python scripting, and development. View these pages for more information:
The FreeCAD forum is a great place to find help and solve specific problems when learning to use FreeCAD.
This project receives generous infrastructure support from
and KiCad Services Corp.
Top Related Projects
OpenSCAD - The Programmers Solid 3D CAD Modeller
This is an active mirror of the KiCad development branch, which is hosted at GitLab (updated every time something is pushed). Pull requests on GitHub are not accepted or watched.
LibreCAD is a cross-platform 2D CAD program written in C++17. It can read DXF/DWG files and can write DXF/PDF/SVG files. It supports point/line/circle/ellipse/parabola/spline primitives. The user interface is highly customizable, and has dozens of translations.
Parametric 2d/3d CAD
This is the Official source code repository of Synfig Studio animation software
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot