Skip to content

OpenBIM.rs IFC

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

Status

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, IFC4X1 FINAL, IFC4X2 FINAL 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 module docs distinguish compiled behavior from reserved module ownership, open work is tracked in GitHub issues, and the capability matrix reports crate status. No capability should be inferred from a module or crate name alone.

Use

cargo add openbim-ifc

The install guide lists the JavaScript, Python and C packages too. 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.

Develop

Requires Rust 1.88 or newer.

git clone https://github.com/openbimrs/ifc.git
cd ifc
./scripts/gate.sh

The 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.

Architecture

Every crate lives in crates/. The root keeps the workspace manifest and the tooling around it: xtask/ (the cargo xtask docs and lint tool), scripts/ (the gate and release helpers), docs/, test/fixtures/, tools/ and benchmarks/.

  • ifc-model owns the serialization-independent record graph.
  • ifc-schema interprets EXPRESS schema metadata.
  • ifc-step and ifc-xml are codecs over the model.
  • domain crates expose borrowed projections rather than duplicate object graphs.
  • only ifc-geometry, ifc-georef, and ifc-alignment may depend on neutral Axiolid representation crates; no IFC crate selects a CPU/GPU backend.
  • ifc-geometry keeps those crates optional: representation selection is slot reading over ifc-model and links no geometry code at all.
  • openbim-ifc is the optional-feature facade.

See AGENTS.md for the dependency and behaviour rules and the gate, and each crate's README.md for its design notes.

License

Code is AGPL-3.0-or-later licensed. Embedded catalog data carries the license declared by its own package and data notices.

About

Pure-Rust IFC model, codecs, schema metadata, validation, and typed domain projections

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages