Skip to main content

Python CAD Tools

Python CAD Tools is an installable, typed Python package for defining shared CAD/BIM models and producing STEP, IFC4, GLB, conceptual SVG/DXF/PDF drawings, quantity schedules, validation reports, and manifests in a headless workflow.

The canonical project identities are:

Licensed under AGPL-3.0-only. Published on PyPI.

Install

pip install "python-cad-tools[all]"

Capability-based extras (cad, bim, mesh, drawings, engineering, visualization) install a subset of the curated, version-tested toolchain. See docs/toolchain.md for the supported-library table, the dependency license policy, and the compatibility verification matrix.

Install for development

Python 3.12 or 3.13 is required.

python3 -m venv .venv
.venv/bin/python -m pip install -e '.[dev]'

An ordinary non-editable installation exposes the same package and command:

python3 -m pip install ./dist/python_cad_tools-*.whl
python-cad --version

Build locally

Building the complete distribution requires Python 3.12 or 3.13 and Node.js 22.15.0. From a fresh checkout, create and activate the Python environment before building the viewer. Activation is important because the viewer staging script reads the installed python-cad-tools version from that environment.

python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -e '.[dev]'

cd viewer
npm ci
npm test
npm run build
cd ..

python -m build --wheel --sdist --outdir dist .
python -m twine check dist/*

The viewer build compiles the private TypeScript source and stages its verified, model-free static shell under src/python_cad_tools/_viewer_static/. The final wheel and source archive are written to dist/. To inspect the viewer while developing its source, run npm run preview from viewer/ after npm run build and open the local URL printed by Vite.

To build and serve an actual CAD project with the locally installed editable package, change to that project's directory and run:

python-cad build
python-cad serve

Create a new project

python-cad init --destination my-cad-project
cd my-cad-project
python -m venv .venv
.venv/bin/pip install python-cad-tools
.venv/bin/python-cad build

The scaffold includes model.py, config.py, pyproject.toml, README.md, .gitignore, and generated/.gitkeep. Edit config.py for dimensions and materials; edit model.py for design elements.

Command line

python-cad --version reports the version from installed distribution metadata. Project operations use explicit subcommands:

python-cad init --destination my-project
python-cad validate --project-root .
python-cad build --project-root . --format step --format quantities
python-cad verify --project-root .
python-cad prepare-site --project-root . --destination _site --base-path /
python-cad serve --project-root . --port 0
python-cad clean --project-root .

The project root defaults to the current directory. Builds use project locks, unique staging, final-byte verification, and recoverable journaled promotion. validate writes no artifacts; verify independently reproduces the manifest inventory, sizes, SHA-256 values, schemas, and parser checks. prepare-site deploys the packaged model-free viewer without Node, and serve binds to loopback by default. See docs/viewer-delivery.md for ownership, caching, offline, and deployment details.

Python API

Public symbols are imported from their documented modules:

from pathlib import Path

from python_cad_tools.build import BuildOptions, build_project

result = build_project(BuildOptions(project_root=Path(".")))

Project code should preserve stable semantic IDs, keep geometry parametric, and create geometry and metadata together. Generated artifacts are outputs, never design inputs.

python_cad_tools.recipes lets an element opt into parametric BREP IFC geometry (IfcExtrudedAreaSolid/SweptSolid, IfcBooleanResult/CSG) instead of the default tessellated mesh, verified by a topology round-trip after every build. See docs/neutral-model.md#construction-recipes.

Project-owned drawing annotations use the typed, renderer-independent boundary documented in docs/drawing-extensions.md. One annotation set is validated and rendered consistently to SVG, DXF, and PDF before artifact hashes are recorded.

Python CAD Tools is a curated engineering platform with a two-tier authoring contract: verified authoring through the neutral model (Tier 1), and supported-but-unverified direct use of a pinned library such as ifcopenshell or trimesh (Tier 2). See docs/two-tier-contract.md, docs/neutral-model.md, and docs/toolchain.md.

Verification

.venv/bin/ruff check .
.venv/bin/mypy
.venv/bin/pytest -q
.venv/bin/pytest tests/integration -q
.venv/bin/pytest tests/packaging -q
.venv/bin/pytest tests/typing -q
.venv/bin/python -m build --wheel --sdist --outdir dist .
.venv/bin/python -m twine check dist/*

The default pytest command runs the fast unit suite. Integration, packaging, and external typing suites are explicit release gates. Packaging tests inspect wheel and sdist inventories, install the wheel non-editably into an isolated environment outside the checkout, prove the import resolves from that environment's site-packages, and run python-cad --version.

Viewer TypeScript is maintainer source in viewer/; only its verified, model-free production shell is included in the wheel. See docs/build-semantics.md, docs/manifests.md, docs/project-configuration.md, docs/public-api.md, and docs/viewer-delivery.md for detailed reference.

Metadata

Release files for python-cad-tools 0.1.18

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for python-cad-tools 0.1.18
File Size Uploaded
python_cad_tools-0.1.18.tar.gz 1.0 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for python-cad-tools 0.1.18
File Interpreter ABI Platform
python_cad_tools-0.1.18-py3-none-any.whl Python 3 none any Details

Total release size: 2.1 MB

Release files / python_cad_tools-0.1.18.tar.gz

Download URL python_cad_tools-0.1.18.tar.gz
Size 1.0 MB
Tags Source
SHA-256 checksum
How to use checksums
c8f93fc328938bcc9e4b0c3d4d10a259cebd76d00382d7f2c1796c9ef88249b2
BLAKE2b-256 checksum
How to use checksums
3dffc567cd27f85b1a838b9253fc4302c1b1b047e592822b784bd138e1437f7d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16

Release files / python_cad_tools-0.1.18-py3-none-any.whl

Download URL python_cad_tools-0.1.18-py3-none-any.whl
Size 1.1 MB
Tags Python 3
SHA-256 checksum
How to use checksums
6a24749d2e3686ab2d07f205a4a21d7341068b89ce830218310963ceb5adc0ce
BLAKE2b-256 checksum
How to use checksums
47cb88b5663854634b9d6a9b2d846b3fd7762a3ad608608b385f41fa56d688a2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.16
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page