Pure-Rust IFC and openBIM infrastructure. No C++ in the dependency graph.
One integration workspace, many independently developed repositories and published crates. Take a single standard, or the facade with the features you need—the cost of what you do not use is zero because each standard is its own crate rather than a feature of a monolith.
Standard-family source is canonical only in its openbimrs/<family> repository.
This integration repository consumes exact Git revisions; it does not mount,
mirror, or own family source. Optional local clones may live under
packages/<family>/, where the parent repository ignores them.
The integration repository is a normal, non-recursive clone:
git clone https://github.com/openbimrs/openbim.git
cd openbim
scripts/gate.shDevelop a family in its own repository. Keeping the checkout below packages/
is only a local filesystem convention, not a Git relationship:
git clone https://github.com/openbimrs/loin.git packages/loin
git clone https://github.com/openbimrs/pkl.git packages/pklA family change is tested and released from that repository. Update this integration repository only when its facade, apps, bindings, or compatibility pins need the new revision.
| Crate | Docs | Source | Standard |
|---|---|---|---|
openbim |
docs.rs | src | Facade; one feature per standard |
openbim-core |
docs.rs | src | Vocabulary shared across standards |
openbim-step |
docs.rs | repository | ISO 10303-21 STEP + ISO 10303-11 EXPRESS syntax |
openbim-ids |
docs.rs | repository | buildingSMART IDS |
openbim-gaeb |
docs.rs | repository | GAEB DA XML 3.1–3.4 beta |
openbim-citygml |
docs.rs | repository | OGC CityGML; reserved scaffold |
openbim-openbimrl |
docs.rs | repository | reserved OpenBIM.rs namespace |
openbim-bsdd |
docs.rs | repository | buildingSMART Data Dictionary; reserved scaffold |
openbim-cde |
API docs pending first release | repository | buildingSMART Foundation API 1.1 + Documents API 1.0 |
openbim-epd |
docs.rs | repository | ISO 22057 EPD data templates |
openbim-bcf |
docs.rs | repository | buildingSMART BCF-XML 2.0/2.1/3.0; corpus-verified reader, writing not implemented |
openbim-icdd |
docs.rs | repository | ISO 21597 ICDD |
openbim-idm |
project docs | repository | ISO 29481-3 idmXML; lossless Rust/Python engine, publication blocked pending schema rights |
openbim-loin |
docs.rs | repository | ISO 7817-3 / EN 17412-3 LOIN |
openbim-mvd |
project docs | repository | buildingSMART mvdXML 1.1 typed codec, rules, and validation |
openbim-dt |
docs.rs | repository | ISO 23387 data templates |
Seven families were also free under their short names and ship as alias crates —
pure re-exports, so the standard is reachable as practitioners name it:
gaeb,
citygml,
openbimrl,
bsdd,
icdd,
idmxml and
loin.
openbim-ifc is the facade (its lib target is named ifc, so call sites read
use ifc::…). Beneath it sit the ifc-* crates: ifc-model is the codec-free
entity graph, ifc-step and ifc-xml are codecs, and the domain crates are
borrowed projections over the model.
openbim-step is the schema-independent ISO 10303-21/11 substrate beneath IFC.
ifc-step converts its generic syntax model into the IFC graph and ifc-schema
lowers its generic EXPRESS AST into IFC registries. XML and ZIP format families
use the maintained quick-xml and zip crates directly and keep domain policy
in their own adapters.
The foundational crates remain published as reserved scaffolds; openbim-epd
and openbim-dt are at 0.1.1, while the remaining original scaffold release
set stays at 0.1.0. Their structure, boundaries, and gates are real, but they
do not yet provide working IFC, IDS, or EPD readers. openbim-step 0.2.1 and
openbim-gaeb 0.1.3 are implemented libraries rather than namespace-only
scaffolds. The new openbim-cde family is also different: its
Foundation/Documents wire models are implemented and exercised, while
HTTP/OAuth execution and full schema validation are explicitly not. GAEB is
also implemented beyond scaffold: it recognizes DA XML 3.1–3.4 beta, resolves
GAEB element namespaces, extracts common BoQ item views, preserves unchanged
bytes exactly, and supports atomic quantity edits only for unique, non-empty IDs
and one safely replaceable value range; mixed-content values fail closed. Full
XSD validation and complete generated bindings are not claimed. See each family
README and docs/ROADMAP.md for the exact capability boundary.
The isolation is checkable rather than promised. Against the published crates:
$ cargo tree -p openbim # default-features = false
openbim v0.1.0
└── openbim-core v0.1.0
$ cargo tree -p openbim # --features ids
openbim v0.1.0
├── openbim-core v0.1.0
└── openbim-ids v0.1.0
└── openbim-core v0.1.0Enabling IDS costs you IDS. That is the whole reason each standard is its own crate rather than a feature of a monolith.
docs/ROADMAP.md tracks what is implemented versus what is scaffolded —
capability claims here are meant to be checkable, not aspirational.
- ADR 0015 — why one crate per standard rather than features of one crate.
- ADR 0016 — superseded record of the former submodule model.
- ADR 0017 — why family repositories are now consumed independently without source mounts.
packages/AGENTS.md— the layering rules and local-checkout convention.
Architecture is enforced by tests, not convention: scripts/gate.sh exercises
the facade, apps, and bindings against the declared family revisions and proves
that enabling one facade feature does not drag in another standard.
AGPL-3.0-or-later