mrkeyoor.com_
Mon 05 Oct 16:27 UTC
Dev Toolsevaluationupdated 05 Oct 2026

build123d review

build123d is a Python library for defining precise 2D and 3D CAD models in code. It gives engineers an algebra-style API and a stateful builder API over the Open Cascade geometry kernel, then exports models for printing, machining, and other CAD tools.

Verdict

Our build123d environment reached 1,044 MB, reported 25 known vulnerabilities, and finished pytest with 0 passing tests, so adoption should start in an isolated prototype rather than a production CAD pipeline. The API is appealing for Python teams that want readable parametric models and can test exported geometry on their own parts. Wait or pin a proven environment if reproducible BREP files and a green clean-container suite are release requirements.

We ran it

Lab card: what happened when we ran build123dScreenshot of build123d (github.com/gumyr/build123d)
Install✓ · 58s133 packages · 1044 MB
Build✓ · 2s
Tests✗ · 87s0 passed · 118 failed · 2 skipped · 67 errors of 185 (pytest)
Known vulns25(pip-audit)
Repo772 files~94,825 lines of source · 35 MB · 6 CI workflows · tests dir

Answers from our run

Does build123d build from source?

Dependencies installed in 58 seconds (133 packages), and the build succeeded in 2 seconds. We cloned commit 71e5466 into a clean Debian container with 3 CPUs and no project-specific setup.

Do build123d's tests pass?

Not all of them: 0 of 185 passed and 118 failed when we ran the project's own test command (pytest), with 67 collection errors. Some failures need services or credentials a bare container does not have.

Does build123d have known vulnerabilities in its dependencies?

pip-audit flagged 25 known advisories in the dependency tree at the time of our run.

Who should not use build123d?

Teams that require a green fresh-container suite: our run had 0 passing tests, 118 failures, 2 skips, and 67 collection/setup errors.

What are the alternatives to build123d?

CadQuery, FreeCAD, OpenSCAD. Our build123d environment reached 1,044 MB, reported 25 known vulnerabilities, and finished pytest with 0 passing tests, so adoption should start in an isolated prototype rather than a production CAD pipeline.

Setup1/51,044 MB installed and the supplied suite failed widely
Docs5/5Clear examples cover both modeling styles and interchange
Community4/53,306 stars, 14 open PRs, and an October 4 push
Maturity2/5v0.13.0 is active, but tests and audit need attention

Who it’s for

Python developers who want dimensions, geometry, and manufacturing output in version-controlled source files.
Mechanical designers comfortable debugging code and geometric-kernel edge cases.
Teams generating families of parts from parameters rather than editing each model by hand.
Educators and researchers who want inspectable CAD logic with STEP, STL, SVG, and DXF interchange.

Who it’s NOT for

Teams that require a green fresh-container suite: our run had 0 passing tests, 118 failures, 2 skips, and 67 collection/setup errors.
Security policies that require a clean dependency audit: pip-audit reported 25 known vulnerabilities in our installed environment.
Designers who want a complete desktop CAD interface: build123d is a Python library and the README recommends adding a separate viewer.
Build pipelines that require byte-for-byte deterministic BREP output today: open issue 1492 reproduces two outputs from the same wire script.
Projects pinned below Python 3.11: the README lists support for Python 3.11 through 3.14.

Setup reality

Our fresh Debian sandbox installed 133 packages in 58 seconds and used 1,044 MB. Commit 71e5466 built in 2 seconds, then pytest failed after 87 seconds: 0 passed, 118 failed, 2 skipped, with 67 collection/setup errors against 185.

Basic use needs Python 3.11 through 3.14 and usually a separate viewer such as ocp_vscode. Import and export features also bring the Open Cascade/OCP geometry stack; no hosted service or credential is required for local modeling.

The log tail showed example subprocesses dying during build123d import, but it was truncated before the underlying exception. Pip-audit also reported 25 known vulnerabilities, so this environment needs investigation before production use.

OCP 8.0.1 powers two different modeling styles

build123d wraps the Open Cascade geometry kernel in Python and lets you describe parts with normal code. Algebra mode keeps objects explicit: create a sketch, subtract a circle, extrude it, then combine the result with another solid. Builder mode uses contexts such as BuildPart and BuildSketch to carry pending geometry and combination state. Both routes produce boundary-representation models suitable for editing and manufacturing interchange.

The measured checkout at commit 71e5466 contained 772 files, about 94,825 lines of source, and occupied 35 MB. That size reflects a broad CAD surface: curves, sketches, solids, selectors, assemblies, importers, exporters, examples, and tests. The README shows STEP and SVG imports plus STL and STEP exports, while its examples target 3D printing, CNC machining, laser cutting, and exchange with desktop CAD programs.

A 1,044 MB environment changes the setup decision

Our install pulled 133 packages in 58 seconds and used 1,044 MB on disk. That is a large Python environment for a library, even before a team adds notebooks, a viewer, or its own geometry assets. The build itself took only 2 seconds. Disk use, dependency review, and container image size will matter more in CI than the package's one-line pip install build123d command suggests.

Python 3.11 through 3.14 is the documented range. The README recommends ocp_vscode as a separate viewer because code alone is a poor way to inspect a fillet, bad face, or inverted solid. No cloud credential is required for local modeling. A useful workstation still needs an editor, viewer, and an agreed export format, plus visual or geometric checks for every part family your team produces.

What happened when we ran it

Our sandbox installed commit 71e5466 in 58 seconds and built it in 2 seconds. Pytest exited with code 1 after 87 seconds. The reported summary was 0 passed, 118 failed, 2 skipped, and 67 collection/setup errors against 185. The run used a fresh unprivileged Debian container with 3 CPUs, 8 GB of RAM, Python 3.12, and no secrets.

The final pytest line reported 118 failures, 2 skips, and 67 errors in 79.40 seconds. Its tail repeatedly showed example subprocesses returning tracebacks that began while importing build123d from src/build123d/__init__.py, then entering build_common. The excerpt cuts off before the exception name or message. We cannot tell from that tail whether the missing piece is a system library, packaging defect, or another setup requirement.

The audit found 25 known vulnerabilities

Pip-audit reported 25 known vulnerabilities in the installed environment. The supplied result does not identify affected packages, advisory IDs, severity, or available fixes, so a stronger claim would be guesswork. A production team should rerun the audit against its locked dependency set, map each advisory to a reachable path, and decide whether pins or package substitutions are needed before shipping the environment.

The repository has 6 CI workflow files and a tests directory, but no Dockerfile. That makes our fresh-container failure more important, because the source clearly intends to be tested while leaving the exact Linux system image to adopters. A project can pass on its own CI matrix and still fail in another clean image. Documenting the required OS packages would narrow that gap once the underlying error is known.

Version 0.13.0 has open geometry regressions

Release v0.13.0 arrived on September 21, 2026, and upgraded the underlying kernel to OCP 8.0.1.0.0. Open issue 1474 links that change to an invalid result from a sweep using a binormal; the reporter also reproduced it in a FreeCAD nightly using OCCT 8.0.1. Geometry-kernel upgrades deserve part-level regression fixtures because a model can complete without producing the intended solid.

Open issue 1492 is more serious for generated artifacts. The same wire construction can retain one of two nearly coincident vertices based on process-specific behavior, changing downstream faces, solids, meshes, and BREP bytes. The report demonstrates two hashes across repeated runs on build123d 0.13.0. Teams using content-addressed caches or checking generated CAD into Git should test their profiles for deterministic output before standardizing on this release.

An October 4 push shows fast work around 289 open items

GitHub showed 3,306 stars and 289 combined issues and pull requests on October 5, 2026. API searches split that total into 275 open issues and 14 open pull requests. The repository was pushed on October 4, less than two weeks after v0.13.0. Those dates show active development, while the large issue queue tells adopters to search by operation and geometry family before assuming a reported edge case is rare.

build123d has one of the clearest Python interfaces for treating CAD as source code, and its algebra mode reads well in review. Our 87-second failed suite and 25 audit findings make the current environment unsuitable for blind adoption. Try a representative part set, validate solids and exported files, lock the working stack, and keep visual checks in the loop. If the same script must produce identical BREP bytes, resolve issue 1492 before calling the pipeline repeatable.

Alternatives

ProjectWhat it isPick it when
CadQueryA mature Python CAD library over Open Cascade with a selector-driven modeling API.pick this instead when existing CadQuery examples, plugins, and team experience matter more than build123d's two modeling styles.
FreeCAD gh↗A full desktop parametric CAD application with Python scripting and many workbenches.pick this instead when interactive sketching, assemblies, drawings, and a desktop interface matter more than a library-first workflow.
OpenSCADA script-based solid modeler built around constructive solid geometry.pick this instead when a smaller declarative language covers the shapes you need and boundary-representation tools are unnecessary.

What people are saying

  1. [github-trending] gumyr/build123d

Sources

  1. build123d README
  2. build123d release v0.13.0
  3. Issue 1492 on nondeterministic BREP output
  4. Issue 1474 on sweep regression
  5. build123d repository facts

More dev tools reviews

OpenCore-Legacy-Patcher · cli · learning-python · github-launch-checklist · blitzstrike · AirCard · the whole board →