geospec
Geometry specifications for CAD: state what a model must be, and the engine measures the delivered geometry and answers passed, failed or refused. A claim the engine cannot decide is refused with a typed reason, never passed. Native Rust/OCCT engine with NAPI, WASM and Python bindings.
What it does and how it connects
GeoSpec is geometry specifications for CAD: state what a model must be, and the engine measures the delivered geometry and answers passed, failed or refused. A claim the engine cannot decide is refused with a typed reason, never passed. Results are reproducible: the same model bytes, claims and engine version give the same result bytes.
This Nx workspace holds the engine in packages/geospec-engine: a Rust core, a private OCCT bridge, Node NAPI and WASM bindings, and a CPython wheel. Install is npm install geospec-engine or pip install geospec-engine; the npm package carries the WASM build, and NAPI prebuilds install as optional platform dependencies. Compatibility stated in the README is Node 24 and 26 on macOS arm64 and Linux x64 and arm64, WASM elsewhere and in browsers, and CPython 3.13 and 3.14.
A live demo and docs are served at geospec.xyz, with the docs also available as Markdown for agents at geospec.xyz/llms.txt. The project is part of the Tau ecosystem.
Alternatives
Compare side by side- OCCT
The Open CASCADE Technology geometry kernel itself, which GeoSpec builds on, rather than a specification engine that grades models against stated claims.
- CADence
Parametric 3D CAD for makers built with OpenCascade compiled to WebAssembly, rather than a geometry specification engine.
- anvilcad
Free open-source parametric 3D CAD in Rust with its own B-rep kernels, rather than a geometry specification engine.
Recurring errors it addresses
Error Index entries this tool is built to reduce or work around.
- Since OCCT 7.7.0, spherical or toroidal STEP faces with a clockwise outer boundary import as the complement of the bounded patch: 18 spherical faces on a Pro/ENGINEER model grew from 693.8 to 42,569.7 mm2 while BRepCheck_Analyzer calls every face valid. A shape-healing heuristic mistakes the explicit outer boundary for a hole.Error Index
- Boolean operations on two valid lofts sharing an end section return impossible results with no error: Fuse(body, lip) comes back empty and Common is zero on both OCCT 7.9.3 and 8.0.1, and on 8.0.1 Cut is larger than its object, all with IsDone() true. Reproduced on OCCT 7.9.3 and 8.0.1 with measured volumes against a point-classification ground truth; argument order flips the outcome. The reporter traced it to a real F1 airbox model where the same pair lost the body.Error Index
- On long helical thread flanks, intersection tolerance grew from 3e-6 to 1.45e-4, cutting a threaded cylinder failed at 7 of 12 phases, and two more phases returned a valid solid about 60 mm3 too heavy.Error Index
Sources
Not verified
- Pricing: none stated on the repo.
- No independent user voice found: recent repo activity is maintainer pull requests and bot releases.
- Thin source: 0 stars and no user issues; the entry rests on the README and the repo record.
Last verified November 6, 2026. Listings are informational. The evidence score measures public, verifiable evidence and is not an endorsement or a compatibility claim.