Python bindings for Geometer CAD geometry operations
Project description
Geometer
Focused C++ geometry library, CLI, Python package, and WASM interface built on OCCT. Geometer provides generic CAD/kernel operations for STEP-to-GLB conversion, STEP HLR projection, exact planar STEP synthesis, planar contouring, and packed planar boolean work.
Documentation
- Developer guide
- Setup
- Architecture
- Design and interface docs
- Requirements
- Contracts
- ADRs
- Release notes
- Examples
Build And Validate
uv sync --group dev
cmake --preset default
cmake --build build --config Release
uv run --group dev rack run --all
uv run pytest tests/L99_release -q
uv run python scripts/validate_native.py
uv run python scripts/validate_python_package.py
Native artifacts are copied to dist/native/<platform>/. Root-level
dist/geometer* artifacts are intentionally not produced.
OCCT is generated dependency state under .deps/. When R2 cache credentials
are configured, build scripts can restore verified prebuilt OCCT archives before
falling back to source builds.
Build WASM artifacts:
python scripts/build_wasm.py
WASM artifacts are copied to:
dist/wasm/browser/dist/wasm/node-test/dist/wasm/planar-browser/
Python Package
PyPI distribution: wn-geometer
Import package: geometer
Install the current release:
python -m pip install wn-geometer==2026.6.10
Basic Python use:
from pathlib import Path
import geometer
version = geometer.version()
projection = geometer.project_step_hlr(
Path("part.step"),
views=[geometer.ProjectionView.top()],
)
glb_bytes = geometer.step_to_glb(Path("part.step"))
step_bytes = geometer.planar_step(
{
"schema": "geometry.planar_step.request.a0",
"units": "mm",
"bodies": [
{
"id": "copper",
"thickness_mm": 0.035,
"regions": [
{
"outer": {
"points": [[0, 0], [10, 0], [10, 5], [0, 5]],
"segments": [{"kind": "line"}] * 4,
}
}
],
}
],
}
)
geometer.write_planar_step(
{
"schema": "geometry.planar_step.request.a0",
"units": "mm",
"bodies": [
{
"id": "copper",
"thickness_mm": 0.035,
"fuse_regions": True,
"regions": [
{
"outer": {
"points": [[0, 0], [10, 0], [10, 5], [0, 5]],
"segments": [{"kind": "line"}] * 4,
}
}
],
}
],
},
"layer.step",
)
The package is executable-backed. Wheels bundle the platform executable under
geometer/native/<platform>/, expose a geometer console command in the
install environment, and call the executable through the JSON batch CLI.
CLI
geometer --version
geometer step-to-glb input.step output.glb
geometer step-project-hlr input.step output.json
geometer step-project-svg input.step output.svg --mode outline --view top
geometer planar-step planar-step-request.json output.step
geometer init-request request.json --step input.step --operation step_hlr_projection_json --output output.json
geometer run request.json response.json
Examples
examples/python/step_hlr_svg.py- no-GUI package example that writes HLR projection JSON, SVG, and GLB outputs.examples/python/pyvista_hlr_viewer.py- PyVista/Qt STEP 3D + HLR preview.examples/wasm/embedded_model_viewer.html- browser viewer using prepared GLB fixtures and the WASM HLR worker.dist/wasm/demos/hlr_demo.htmlanddist/wasm/demos/planar_ring_solver_demo.html- one-file standalone browser demos for release review.examples/cpp/- native Dear ImGui + SDL3 + OpenGL HLR preview.
Serve browser examples from the repo root:
python -m http.server 8123 --bind 127.0.0.1
Open http://127.0.0.1:8123/examples/wasm/embedded_model_viewer.html.
The dist/wasm/demos/*.html files can also be opened directly from disk after
running python scripts/build_wasm.py and the demo bake scripts.
Release
Geometer uses date-based releases per ADR 006:
- Git tag:
vYYYY-MM-DD - PyPI/CMake version:
YYYY.M.D - C ABI generation:
YYYYMMDD
Same-day follow-up releases append a serial to the tag and package version, for
example v2026-05-24-2 and 2026.5.24.2. The C ABI generation stays at
YYYYMMDD unless the C ABI generation itself changes.
Before tagging, run the L99 release gate plus native and package validation:
uv sync --group dev
uv run pytest tests/L99_release -q
uv run python scripts/validate_native.py
uv run python scripts/validate_python_package.py
The repository declares the python-native-wasm Wavenumber development
standards profile. Lightweight CI runs the L99 gate on Ubuntu, Windows, and
macOS. Full native/WASM rebuilds remain explicit validation steps because fresh
OCCT and Emscripten dependency builds are expensive.
License
MIT. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file wn_geometer-2026.6.10-py3-none-win_amd64.whl.
File metadata
- Download URL: wn_geometer-2026.6.10-py3-none-win_amd64.whl
- Upload date:
- Size: 7.2 MB
- Tags: Python 3, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f814ef17a9d09f69e43e843803c522b1890ccecff2cc5c7acf6f8bd193ec4aa3
|
|
| MD5 |
e53766c97babc2c4a8f5bb0548baad6a
|
|
| BLAKE2b-256 |
baabe32d5960d12c80907571ce9d34b0b467e15ceff3e824974e08b413a2c591
|
Provenance
The following attestation bundles were made for wn_geometer-2026.6.10-py3-none-win_amd64.whl:
Publisher:
release.yml on wavenumber-eng/geometer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wn_geometer-2026.6.10-py3-none-win_amd64.whl -
Subject digest:
f814ef17a9d09f69e43e843803c522b1890ccecff2cc5c7acf6f8bd193ec4aa3 - Sigstore transparency entry: 1784150637
- Sigstore integration time:
-
Permalink:
wavenumber-eng/geometer@a3e0a03ec674e5c1dc05daad585071c251d9b779 -
Branch / Tag:
refs/tags/v2026-06-10 - Owner: https://github.com/wavenumber-eng
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a3e0a03ec674e5c1dc05daad585071c251d9b779 -
Trigger Event:
release
-
Statement type:
File details
Details for the file wn_geometer-2026.6.10-py3-none-manylinux_2_39_x86_64.whl.
File metadata
- Download URL: wn_geometer-2026.6.10-py3-none-manylinux_2_39_x86_64.whl
- Upload date:
- Size: 14.3 MB
- Tags: Python 3, manylinux: glibc 2.39+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e14504894403f52cae6bd79c9c0a56103494638555ba2316ebd33ed8eef5c4de
|
|
| MD5 |
9d15b813e6ff8383e03f95a59043d3be
|
|
| BLAKE2b-256 |
06a98c8568c71337be2298966fccf419471b936f18cc0906a2ea201c5ad0fdaf
|
Provenance
The following attestation bundles were made for wn_geometer-2026.6.10-py3-none-manylinux_2_39_x86_64.whl:
Publisher:
release.yml on wavenumber-eng/geometer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wn_geometer-2026.6.10-py3-none-manylinux_2_39_x86_64.whl -
Subject digest:
e14504894403f52cae6bd79c9c0a56103494638555ba2316ebd33ed8eef5c4de - Sigstore transparency entry: 1784150423
- Sigstore integration time:
-
Permalink:
wavenumber-eng/geometer@a3e0a03ec674e5c1dc05daad585071c251d9b779 -
Branch / Tag:
refs/tags/v2026-06-10 - Owner: https://github.com/wavenumber-eng
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a3e0a03ec674e5c1dc05daad585071c251d9b779 -
Trigger Event:
release
-
Statement type:
File details
Details for the file wn_geometer-2026.6.10-py3-none-manylinux_2_39_aarch64.whl.
File metadata
- Download URL: wn_geometer-2026.6.10-py3-none-manylinux_2_39_aarch64.whl
- Upload date:
- Size: 13.6 MB
- Tags: Python 3, manylinux: glibc 2.39+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cf50f70882b9eb1e21b9e0c53ba0a64667270c90981931c0dc8fb6192eed719a
|
|
| MD5 |
1b25365e34f596955a34f86a0a78904c
|
|
| BLAKE2b-256 |
2dd39c97ff141b26bd6ec37de703ffc923677e601d0a4b8001fe6073358b12c5
|
Provenance
The following attestation bundles were made for wn_geometer-2026.6.10-py3-none-manylinux_2_39_aarch64.whl:
Publisher:
release.yml on wavenumber-eng/geometer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wn_geometer-2026.6.10-py3-none-manylinux_2_39_aarch64.whl -
Subject digest:
cf50f70882b9eb1e21b9e0c53ba0a64667270c90981931c0dc8fb6192eed719a - Sigstore transparency entry: 1784150061
- Sigstore integration time:
-
Permalink:
wavenumber-eng/geometer@a3e0a03ec674e5c1dc05daad585071c251d9b779 -
Branch / Tag:
refs/tags/v2026-06-10 - Owner: https://github.com/wavenumber-eng
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a3e0a03ec674e5c1dc05daad585071c251d9b779 -
Trigger Event:
release
-
Statement type:
File details
Details for the file wn_geometer-2026.6.10-py3-none-macosx_11_0_arm64.whl.
File metadata
- Download URL: wn_geometer-2026.6.10-py3-none-macosx_11_0_arm64.whl
- Upload date:
- Size: 10.7 MB
- Tags: Python 3, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fff41eb880b3a493e1b01ecf4c72d6b40e0a6d6afeb2ccef098df9ba8ce2d522
|
|
| MD5 |
c67233724c3b2b2cd5a40cbc16cc065f
|
|
| BLAKE2b-256 |
435ddc4993dae57914edff4d0e6e2a22dfd457545212225c50e796cee66f4151
|
Provenance
The following attestation bundles were made for wn_geometer-2026.6.10-py3-none-macosx_11_0_arm64.whl:
Publisher:
release.yml on wavenumber-eng/geometer
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
wn_geometer-2026.6.10-py3-none-macosx_11_0_arm64.whl -
Subject digest:
fff41eb880b3a493e1b01ecf4c72d6b40e0a6d6afeb2ccef098df9ba8ce2d522 - Sigstore transparency entry: 1784150190
- Sigstore integration time:
-
Permalink:
wavenumber-eng/geometer@a3e0a03ec674e5c1dc05daad585071c251d9b779 -
Branch / Tag:
refs/tags/v2026-06-10 - Owner: https://github.com/wavenumber-eng
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@a3e0a03ec674e5c1dc05daad585071c251d9b779 -
Trigger Event:
release
-
Statement type: