Pure-Rust IFC infrastructure: schema metadata, entity graph storage, STEP and ifcXML codecs, typed domain projections, schema-aware validation, and explicit bridges to the format-neutral Axiolid geometry contracts.
This is the canonical IFC-family repository for
OpenBIM.rs. The integration repository
pins a verified commit here as packages/ifc.
📖 Documentation — capabilities and status · architecture · roadmap
🤝 Contribute — ready tasks · work board · discussions · support
Read the capability matrix before planning work against this repository. It states, per capability, whether behaviour is implemented, partial, scaffold, or absent, with the file that proves it.
Implemented foundations include:
- schema-agnostic entity/value graph with unknown-data round-tripping and transactional structural edits;
- STEP and ifcXML parsing/writing;
- schema-checked construction and transactional editing by attribute name (
ifc-author); - bundled IFC2x3 TC1, IFC4 ADD2 TC1, and IFC4X3 ADD2 structural schema metadata;
- declared-schema validation against exact version tables, with selected native semantic rules and explicit unsupported reporting for unevaluated semantics;
- borrowed classification, document, library, approval, constraint, property, quantity, material, cost, schedule, construction-resource, systems, spatial, and bounded structural-analysis views;
- classification, document, library, approval, constraint, material, quantity, cost, selected construction-resource, and selected structural-analysis authoring staged through transactions;
- geometry selection/lowering foundations and versioned PSD/QTO catalogs.
Some domain crates remain partial and contain private architecture scaffolds: their
module trees reserve ownership without exposing unimplemented behavior. Their
README, AGENTS.md, and PLAN.md files distinguish compiled behavior from
reserved module ownership, and the capability matrix reports crate status.
No capability should be inferred from a module or crate name alone.
[dependencies]
openbim-ifc = { git = "https://github.com/openbimrs/ifc.git", rev = "a7c4949bb941504ce874bdec13bd81d33491b5cb" }The workspace crates are not published on crates.io yet. This immutable Git
revision is the supported installation source for now; Cargo records Git
revisions in Cargo.lock.
The library target is named ifc:
use ifc::{Model, StepCodec};The default facade feature enables STEP only. Add domain and geometry features explicitly.
Geometry comes in two sizes, because a drawing consumer should not compile a solid modeller:
| Feature | Gets you | Links a kernel |
|---|---|---|
geometry-select |
representation contexts, plan/body selection, placements, units | no |
geometry |
the above plus lowering into the neutral geometry DAG | yes |
Using ifc-geometry directly, default-features = false is the same split.
Both are checked against the resolved dependency graph, not the manifest.
Requires Rust 1.88 or newer.
git clone https://github.com/openbimrs/ifc.git
cd ifc
./scripts/gate.shThe official IFC schema artifacts are not vendored. Tests which need locally checked-out normative references skip honestly when those references are absent; committed generated manifests and redistributable regression fixtures remain self-contained.
ifc-modelowns the serialization-independent record graph.ifc-schemainterprets EXPRESS schema metadata.ifc-stepandifc-xmlare codecs over the model.- domain crates expose borrowed projections rather than duplicate object graphs.
- only
ifc-geometry,ifc-georef, andifc-alignmentmay depend on neutral Axiolid representation crates; no IFC crate selects a CPU/GPU backend. ifc-geometrykeeps those crates optional: representation selection is slot reading overifc-modeland links no geometry code at all.openbim-ifcis the optional-feature facade.
See HERMES.md, AGENTS.md, and the nested context files for executable
boundaries and verification commands.
Code is AGPL-3.0-or-later licensed. Embedded catalog data carries the license declared by its own package and data notices.