Skip to main content

arris

A B-Rep geometric kernel written from scratch in Rust.

An arris is the sharp edge where two surfaces meet — the thing a B-Rep kernel exists to compute.

Arris is a library, not an application: it builds solids, cuts and fuses them, blends their edges, measures, tessellates and exports them. It carries a tolerance on every entity rather than one global epsilon, returns a typed error naming the entities involved rather than panicking on geometry it cannot do, and returns a provenance record from every operation so that a parametric application can name the faces an operation made. Same input, same output, same entity ids, on every platform. Pure Rust, no unsafe, builds for wasm32.

State

Pre-1.0 and under development. The public API breaks between minor versions, and each break is listed, with its fix, in CHANGELOG.md. What is in today:

  • primitives, rigid transforms, and extrude and revolve of a profile of lines, arcs and elliptic arcs;
  • booleans — cut, fuse, common — over every analytic face (plane, cylinder, elliptic cylinder, cone, sphere, torus) in any pose, with multi-shell results (cavities, split cuts, disjoint fuses); sections are exact where they are conics and traced and fitted to NURBS elsewhere;
  • constant-radius fillet and chamfer on plane–plane and plane–cylinder edges, with miters, corners and hole rims;
  • tessellation to a chord tolerance, mass properties (volume, centroid, inertia), plane projection and face frames;
  • a STEP reader that returns a checked body, or a typed refusal naming why, for every solid in a file; STEP AP214, STL and OBJ export; a deterministic native format in JSON and bytes; and one body, with its provenance, as bytes that any later release reads.

Not in yet: booleans with a NURBS face as an operand, blends between faces outside the plane and cylinder pairs, variable-radius blends, sheet and non-manifold bodies, and healing of what a STEP file leaves open. Each of those is a typed refusal today, never a wrong answer.

From Python

pip install arris gives a binding over the same kernel: build a body from primitives and profiles, fillet and cut it, ask what it measures and what the checker says, tessellate it, and write and read STEP, STL, OBJ and body bytes, without compiling a crate. Every operation returns the body and its provenance, and every error is a typed exception.

import arris

model = arris.Model()
plate, _ = model.primitive_box((0, 0, 0), (100, 100, 10))
hole, _ = model.primitive_cylinder((50, 50, -1), (0, 0, 1), 5, 12)
part, record = model.cut(plate, hole)
print(model.mass_properties(part).volume, bool(model.check(part, "full")))

Correctness

Every operation returns a shape that passes the invariant checker, and the checker runs after every operation in debug builds. Every fixture in the test corpus carries an oracle value — volume, area, centroid, counts, point classifications — computed by Open CASCADE, which Arris must match within the fixture's stated tolerance. Open CASCADE is run as the oracle through Python; it is never a build or runtime dependency, and PROVENANCE.md says how it is used and read. Properties (volume additivity, cut-then-fuse, commutativity, STEP round-trip) are tested over random operands in random poses from a fixed seed.

Workspace

Arris is a Cargo workspace. crates/arris is the facade a consumer depends on; it re-exports the layered crates beneath it — arris-math, arris-geom, arris-topo (the representation), arris-check (the invariant checker), arris-ops, arris-mesh, arris-io (the algorithms) and arris-debug (dev-facing: rasteriser, fixtures, property-test strategies; it is not published). crates/arris-py is the Python binding, above the facade and published to PyPI rather than crates.io. A crate never depends on one above it; tools/check-layers.sh enforces that in CI and in the pre-commit hook. The layout and the reasons are in docs/ARCHITECTURE.md; tools/oracle/ is the Open CASCADE test oracle, run through Python and never linked.

Licence

MIT or Apache-2.0, at your option. See LICENSE-MIT and LICENSE-APACHE.

Metadata

Release files for arris 0.5.0

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

Source distribution (sdist)

Source distribution for arris 0.5.0
File Size Uploaded
arris-0.5.0.tar.gz 1.7 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for arris 0.5.0
File Interpreter ABI Platform
arris-0.5.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 abi3 Linux glibc 2.17+ x86-64 Details

Total release size: 4.5 MB

Release files / arris-0.5.0.tar.gz

Download URL arris-0.5.0.tar.gz
Size 1.7 MB
Tags Source
SHA-256 checksum
How to use checksums
91dacc93290ddae28040cc5ee1804cac3bd59a61ce5fa1328ac1ba408218239d
BLAKE2b-256 checksum
How to use checksums
d584ba31aa4f05700f60050bd73bb7016ebadfda31a3c42afea11295fa40205e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release files / arris-0.5.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL arris-0.5.0-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.8 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
d4a2da99e1d1620824b60d981faa46c2523c1ce25854460a1a9bc2cdbfb40181
BLAKE2b-256 checksum
How to use checksums
76b238eddcda0f852d56cfdcf504a1da9f7240a040806b8ad8e9a5674afc1da1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 5, 2026.

Transparency log

Release history Release notifications | RSS feed

0.7.0

2 release files

0.6.0

2 release files

This release

0.5.0 This release

2 release files

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