# BREP
Umbrella crate for the **BREP** CAD kernel family. One dependency that
re-exports the geometry kernel and, behind feature flags, the higher layers of
the stack — so downstream code says `use brep::kernel::…` / `use brep::render::…`
instead of depending on each sibling crate directly.
| `kernel` | *(always)* | [`BREP_kernel`](../BREP_kernel) | The BREP geometry kernel (NURBS B-rep, booleans, tessellation). |
| `gizmos` | `gizmos` | [`BREP_gizmos`](../BREP_gizmos) | In-scene gizmos / overlay widgets (pure geometry + hit-testing). |
| `render` | `render` | [`BREP_render`](../BREP_render) | Windowing-agnostic wgpu render/pick engine. |
| `app` | `app` | [`BREP_app`](../BREP_app) | The eframe (egui + wgpu) CAD application. |
| `reconstruction` | `reconstruction` | [`BREP_reconstruction`](../BREP_reconstruction) | RANSAC recognition-to-kernel reconstruction. |
The kernel is always re-exported; everything above it is opt-in so a headless
geometry consumer never compiles `wgpu` / `eframe`.
```toml
[dependencies]
BREP = "0.3" # kernel only (headless)
BREP = { version = "0.3", features = ["render"] } # + the wgpu render engine
BREP = { version = "0.3", features = ["full"] } # app + render + gizmos
```
Additional features: `reconstruction` (opt-in recognition integration), `full`
(an alias for `app`, which also enables `render` and `gizmos`), and `parallel`
(forwards to the kernel's rayon-parallel tessellation). `full` does not enable
`reconstruction` or `parallel`; request those separately when needed.
> **Package vs. lib name:** the crates.io package is `BREP`; the Rust library is
> `brep` (lowercase, lint-clean). This mirrors the whole family — package
> `BREP_render` / lib `brep_render`, etc. See [PUBLISHING.md](../PUBLISHING.md).
The package is versioned at `0.3.0`, prepared for release; `0.2.0` is the version currently
live on crates.io. Every dependency — including the optional `reconstruction` one, which
used to be path-only and therefore made this crate impossible to package at all — now
carries a registry `version` beside its `path`, and every crate it names is publishable.
The facade is published LAST, because an optional dependency still has to resolve on the
registry at publish time. See [PUBLISHING.md](../PUBLISHING.md) for the order.