Model history lets you revise a part's dimensions
Change the mounting-hole spacing in a bracket, and you want the rest of the design to follow. FreeCAD records a model's construction history so you can revise its parameters instead of drawing the object again. Its constrained sketches give dimensions a job: they govern the shape. The README also describes producing drawings from the resulting model. That's a useful combination for someone designing physical parts.
Our checkout occupied 482.6 MB across 17,757 files, with roughly 7,768,428 lines of source. The size helps explain why the Python API is only one way into this application. FreeCAD uses OpenCASCADE for geometry, Coin3D for scene representation, and Qt for its interface. Choose it because you want to edit a dimensional model visually and retain control over its construction. Python access alone is a weak reason to adopt the whole stack. FreeCAD's project overview describes that architecture.
What happened when we ran it
Our sandbox installed the selected Python project in 25 seconds, adding 36 packages and using 37 MB on disk; its build step succeeded in 1 second. We ran commit eccfb5b on October 5, 2026, in an unprivileged Debian container with Python 3.12, 3 CPUs, 8 GB of RAM, and no secrets. The selected directory was src/3rdParty/pivy/. Those timings describe the bundled Pivy project, and do not establish that the complete FreeCAD desktop application compiled or launched.
Pytest exited with code 1 after 3 seconds. It reported 0 passed, 0 failed, and 4 collection/setup errors. The affected files were examples/QtDesigner/python/ui_test.py, examples/extend/scale_test.py, tests/pyside_test.py, and tests/visual_test.py. The log shows Pivy's initialization importing from .coin, then stopping with ModuleNotFoundError: No module named 'pivy.coin'. No test assertions ran. The log doesn't establish why that module was unavailable, so prescribing a particular system package would outrun the evidence.
Pip-audit reported 0 known vulnerabilities for the environment we installed. That finding covers the audited Python environment; it doesn't certify FreeCAD's native libraries or downloaded application packages. Our scan found 24 CI workflow files, a tests directory, and no Dockerfile. Having upstream automation is encouraging, but our selected path still stopped during collection. We measured repository setup mechanics here, without checking modeling accuracy, interactive responsiveness, or a completed export.
The packaged application avoids a source-development commitment
The README directs desktop users to precompiled releases for Windows, macOS, and Linux, with Linux software centers as another route. Start there if your job is making parts. Our 37 MB installed Python environment is no estimate of a desktop download's footprint. Local modeling has no documented hosted-service credential requirement, and the sandbox had no secrets. A contributor taking the source route needs the native development environment described in the developer handbook's setup instructions.
That handbook names CMake, a C++ compiler, and Python, and documents Pixi tasks for configuring, building, and running FreeCAD. It also tells contributors to clone submodules. At our commit, the selected directory points to a separate Pivy repository. Its pinned build README describes CMake and Python setup routes. The top-level documentation makes the native stack visible, but the import failure shows that a successful package step alone doesn't prove this checkout is ready for development.
Draft references can move to the wrong endpoint
Open Draft Trimex issue 19189 reports a line's Start and End identities swapping when an endpoint is moved. An expression referring to Start can then follow the opposite end. Our 4 collection errors did not exercise this behavior; the evidence is the reporter's reproduction in Draft, with a linked second line. If your workflow depends on endpoint expressions surviving edits, this is a specific reason to evaluate another modeler or require geometry checks before accepting revised files.
BIM has a separate concern. CustomSpacing issue 33459, reported on FreeCAD 1.1.4, describes rebar turning and moving incorrectly when its host is rotated. The report compares custom spacing with uniform spacing and supplies a reproducing macro. It remains an upstream report, rather than a result from our lab. Anyone generating reinforcement layouts without manual inspection should treat that exact workflow as an adoption blocker until their chosen version behaves correctly.
A small Python environment doesn't settle platform compatibility
The 36 packages in our run describe a fresh Debian environment, while desktop distributions bring their own runtime choices. Issue 33393 reports an illegal-instruction startup crash in the 26.3 RC1 Linux AppImage on an Intel Core 2 Quad processor. The reporter says the 1.1.4 AppImage works on that machine. This is a development-package compatibility warning for that hardware, with a reported working stable alternative; it doesn't support a blanket claim that FreeCAD cannot run on older PCs.
An October push and current issues show active maintenance
GitHub recorded a push on October 11, 2026, and the reviewed issue list contained updates that day. The checkout's 24 CI workflow files are another maintenance signal, although they didn't make our Pivy suite pass. The repository API listed 34,154 stars and 3,992 open issues and PRs combined. Release 1.1.4 arrived on September 28. Together, the push date and current issue activity support calling FreeCAD actively maintained. The backlog still demands workflow-specific judgment.
Pick the modeling interface before picking the repository
OpenSCAD suits designs described in scripts. SolveSpace is another parametric CAD tool to consider when constrained sketching is your main requirement. CadQuery explicitly targets Python modeling without requiring a GUI, making it my first alternative for a server-side geometry job. FreeCAD earns its trial when you need visual model-history editing and drawings. For an automated FreeCAD pipeline, resolve the import path that produced our 4 collection errors before trusting a scheduled job to deliver a usable part.

