A python CAD programming library
Find a file
gumyr 26caed754c
Some checks are pending
benchmarks / benchmarks (macos-14, 3.12) (push) Waiting to run
benchmarks / benchmarks (macos-15-intel, 3.12) (push) Waiting to run
benchmarks / benchmarks (ubuntu-latest, 3.12) (push) Waiting to run
benchmarks / benchmarks (windows-latest, 3.12) (push) Waiting to run
Upload coverage reports to Codecov / run (push) Waiting to run
pylint / lint (3.10) (push) Waiting to run
Run type checker / typecheck (3.10) (push) Waiting to run
Run type checker / typecheck (3.13) (push) Waiting to run
Wheel building and publishing / Build wheel on ubuntu-latest (push) Waiting to run
Wheel building and publishing / upload_pypi (push) Blocked by required conditions
tests / tests (macos-14, 3.10) (push) Waiting to run
tests / tests (macos-14, 3.13) (push) Waiting to run
tests / tests (macos-15-intel, 3.10) (push) Waiting to run
tests / tests (macos-15-intel, 3.13) (push) Waiting to run
tests / tests (ubuntu-latest, 3.10) (push) Waiting to run
tests / tests (ubuntu-latest, 3.13) (push) Waiting to run
tests / tests (windows-latest, 3.10) (push) Waiting to run
tests / tests (windows-latest, 3.13) (push) Waiting to run
Removing make_face changes keeping BoundBox.extent
2025-11-20 13:31:25 -05:00
.github benchmark.yml -> macos-15-intel 2025-10-02 12:16:51 -05:00
docs Fix Example 14 header in introductory_examples.rst 2025-11-20 02:36:46 +10:30
examples Merge branch 'dev' into intersections-2d (fix import conflict) 2025-10-29 13:49:49 -04:00
src/build123d Removing make_face changes keeping BoundBox.extent 2025-11-20 13:31:25 -05:00
tests Removing make_face changes keeping BoundBox.extent 2025-11-20 13:31:25 -05:00
tools deglob.py -> add requested / discussed changes 2025-07-15 16:33:07 -05:00
.gitignore changes to make development more friendly on MacOS 2025-11-16 10:16:25 -05:00
.pylintrc Disable linting on imported modules 2025-01-07 14:26:56 -05:00
.readthedocs.yaml .readthedocs.yaml -> fix tab title version on dev version builds 2025-10-21 09:49:24 -05:00
CITATION.cff Fixing citation date 2025-02-14 13:45:38 -05:00
Citation.md Adding a citation 2025-02-14 13:43:55 -05:00
CONTRIBUTING.md changes to make development more friendly on MacOS 2025-11-16 10:16:25 -05:00
LICENSE Adding LICENSE file 2023-08-20 14:43:46 -04:00
MANIFEST.in scm_versioning MANIFEST.in and pyproject.toml 2023-02-21 21:00:25 -06:00
mypy.ini mypy.ini -> change py_lib3mf to lib3mf 2025-02-27 16:08:10 -06:00
NOTICE Improving attribution 2025-10-23 13:50:50 -04:00
partcad.yaml Updated partcad.yaml to make the examples work in the latest PartCAD 2024-09-20 22:19:34 -07:00
pyproject.toml pyproject.toml -> pin to pytest==8.4.2 per pytest-dev/pytest-xdist/issues/1273 2025-11-12 15:40:23 -06:00
README.md README.md -> use an absolute image link to fix logo on pypi 2025-11-05 13:25:27 -06:00

build123d logo

Documentation Status tests pylint mypy codecov

Python Versions Code style: black License

PyPI version Downloads Downloads/month PyPI - Wheel DOI

Build123d is a Python-based, parametric boundary representation (BREP) modeling framework for 2D and 3D CAD. Built on the Open Cascade geometric kernel, it provides a clean, fully Pythonic interface for creating precise models suitable for 3D printing, CNC machining, laser cutting, and other manufacturing processes. Models can be exported to popular CAD tools such as FreeCAD and SolidWorks.

Designed for modern, maintainable CAD-as-code, build123d combines clear architecture with expressive, algebraic modeling. It offers:

  • Minimal or no internal state depending on mode,
  • Explicit 1D, 2D, and 3D geometry classes with well-defined operations,
  • Extensibility through subclassing and functional composition—no monkey patching,
  • Standards-compliant code (PEP 8, mypy, pylint) with rich pylance type hints,
  • Deep Python integration—selectors as lists, locations as iterables, and natural conversions (Solid(shell), tuple(Vector)),
  • Operator-driven modeling (obj += sub_obj, Plane.XZ * Pos(X=5) * Rectangle(1, 1)) for algebraic, readable, and composable design logic.

The result is a framework that feels native to Python while providing the full power of OpenCascade geometry underneath.

The documentation for build123d can be found at readthedocs.

There is a Discord server (shared with CadQuery) where you can ask for help in the build123d channel.

The recommended method for most users to install build123d is:

pip install build123d

To get the latest non-released version of build123d one can install from GitHub using one of the following two commands:

Linux/MacOS:

python3 -m pip install git+https://github.com/gumyr/build123d

Windows:

python -m pip install git+https://github.com/gumyr/build123d

If you receive errors about conflicting dependencies, you can retry the installation after having upgraded pip to the latest version with the following command:

python3 -m pip install --upgrade pip

Development install:

git clone https://github.com/gumyr/build123d.git
cd build123d
python3 -m pip install -e .

Further installation instructions are available (e.g. Poetry) see the installation section on readthedocs.

Attribution:

Build123d was originally derived from portions of the CadQuery codebase but has since been extensively refactored and restructured into an independent system.