Skip to content

Crate map

Twenty-one crates in one workspace. Status uses the vocabulary defined on the capabilities page: Implemented means executable behaviour with tests; Scaffold means reserved module names with no behaviour.

L0 — record core

ifc-model

The entity graph. Owns Model, Entity, Value, Header, EntityId, the Codec trait, and IFC's base-64 GlobalId encoding. Schema-, codec-, and domain-agnostic by construction.

Implemented: storage and ordering, the type and reverse-reference indices, dangling-reference detection, bounded graph traversal with cycle reports, GUID encode/decode, and header handling. Remaining module-level ownership seams are tracked in the capability matrix.

L1 — schema and codecs

ifc-schema

EXPRESS schema metadata as queryable data: entity declarations, supertype chains, subtype queries, conformant XML names. Useful for validating an authoring layer's attribute arity against the declared schema.

ifc-step

The ISO 10303-21 physical file codec (.ifc). Generic STEP syntax and EXPRESS parsing are delegated to the openbim-step crate; this crate retains thin model, schema-version, and validation adapters.

ifc-xml

The ifcXML codec (.ifcxml). Implements the same Codec trait, which is what makes format conversion a two-line operation. An explicit IFC4 ADD2 TC1 profile enforces the official namespace and root schema token; compatibility mode keeps the lossless internal dialect available without claiming XSD conformance. Typed parse failures retain entity, attribute, and nested-list paths.

L2 — geometry bridges

ifc-geometry

By far the largest crate. Typed and family-shared borrowed views over the three IFC geometry resource schemas, plus lowering into the neutral axiolid-model DAG. Resolves units, placements, profiles, and representation relationships.

Seven representation-item families lower today; eight more are declared PLANNED with a stated reason. Unimplemented families return a typed Unsupported error rather than panicking or substituting approximate geometry.

ifc-alignment

IFC4X3-only (alignment entities do not exist in IFC2X3 or IFC4). Line and circular-arc horizontal segments, constant-gradient vertical segments, and every closed-form IfcAlignmentCantSegmentTypeEnum cant transition lower exactly; continuity-aware composite curve assembly, linear placement, and station equations are implemented. Five of the six transition-spiral families (CLOTHOID, BLOSSCURVE, COSINECURVE, HELMERTCURVE, SINECURVE) lower exactly, as intrinsic (natural-equation) curves carrying CurvatureLaw -- lossless, with no quadrature, series, or sampling anywhere. HELMERTCURVE is piecewise- quadratic and is held as one curve with two rebased pieces, since a separate curve per half would need the seam position: a non-elementary integral. VIENNESEBEND alone remains a typed refusal -- its law needs the cant swing, which lives in the separate IfcAlignmentCant layout, not on the segment.

Runs still split after a spiral. Continuity into one is provable, but its end point is a Fresnel-type integral, so continuity out of one is not, and Transition has no "unknown" member to express that honestly.

ifc-georef

IFC4/IFC4X3 (attribute layout for IfcMapConversion/IfcProjectedCRS verified identical between both schemas). Project-to-map conversion, CRS/map-unit resolution, project-frame composition onto a separately supplied project frame, and true/grid/project north are implemented. IfcMapConversionScaled and IfcRigidOperation (both IFC4X3-only) remain a typed refusal.

L2 — domain views

ifc-material

Implemented. Material definitions, layer/profile/constituent sets, and template applicability.

ifc-template-catalog

Implemented. Versioned PSD and QTO template data derived from the published IFC4 ADD2 TC1 definitions.

ifc-cost

Partial. Real modules for cost items, quantities, rollup, and schedule views.

ifc-properties

Implemented. Borrowed property-set, quantity, unit, template, and standard library projections, including typed quantity authoring staged on a caller-owned transaction. ifc-template-catalog carries the published catalog data.

ifc-style

Implemented bounded presentation domain. It provides schema-resolved borrowed views for curve, fill, text, surface, texture, styled-item, layer, and named annotation entities; selected core graphs have transaction-staged authoring and deterministic direct-over-layer resolution. It is not a renderer or drawing layout engine.

ifc-classification

Implemented bounded IFC4 classification, document, and library views, hierarchy queries, association lookup, generic external-reference relationships, and transaction-staged authoring for ten concrete records.

ifc-approval

Implemented bounded IFC4 ApprovalResource. Strict borrowed views cover IfcApproval, approval-to-approval relationships, resource relationships, and rooted object associations; matching typed drafts stage the same records. It does not implement signatures, authorization, workflow, or policy evaluation.

ifc-constraint

Implemented bounded IFC4 ConstraintResource. Typed borrowed views and drafts cover metrics, objectives, metric-value SELECT preservation, resource relationships, and rooted object associations. It preserves authored constraints but does not evaluate compliance, formulas, references, tables, or time series.

ifc-schedule, ifc-systems

Implemented bounded schedule/task sequencing and relationship-only distribution system/port/connectivity views.

ifc-resource

Bounded IFC4/IFC4X3 construction-resource slice. Schema-resolved borrowed projections cover six concrete occurrence kinds and authored IfcResourceTime; deterministic queries resolve IfcRelAssignsToResource and budgeted, authored-order IfcRelNests composition. Selected records and relationships have transaction-staged authoring across IFC4 and IFC4X3. It does not schedule or level resources, calculate costs or quantities, interpret calendars, or claim IFC2X3 support (the schema does not declare the entities this crate projects).

ifc-structural

Implemented bounded structural-analysis domain. Schema-resolved borrowed views cover analysis/load/result groups, analytical members and connections, typed boundary and failure/slippage connection conditions, varying-member identities, actions, core static-load values, IFC4+ load configurations, borrowed reactions, and selected relationships across IFC2X3, IFC4 and IFC4X3. Canonical enum membership and exposed entity-specific WHERE/measure constraints are enforced; selected analysis-model, load, member, connection, action, and relationship authoring is transaction-staged. Physical-product and geometry composition is proven only at the facade by shared EntityId; the crate retains no geometry dependency. It is not a solver, FEM layer, geometry evaluator or computed-results engine.

ifc-validate

Implemented schema-structural validation against the exact supported schema, plus nine bounded native rule IDs. It does not claim arbitrary EXPRESS WHERE evaluation or general INVERSE semantics.

ifc-spatial

Implemented. Containment and objectified relationship traversal: reads IfcRelAggregates, IfcRelContainedInSpatialStructure and IfcRelNests into a project/site/building/storey/element tree, reporting orphaned containers and dangling references rather than asserting the canonical hierarchy.

Depends on ifc-model only. The slot layouts it needs are stable across IFC2x3/IFC4/IFC4x3 and are asserted against all three, so it does not pay for a schema parse. See ADR 0008.

ifc-author

Implemented. Schema-checked construction: build an entity by naming its attributes and let ifc-schema resolve the STEP slot positions. Refuses unknown entities and attributes, duplicate sets, missing required attributes, declared-type and aggregate mismatches, and malformed GlobalIds.

It is the write-side counterpart to the domain views, and the reason authoring is not in ifc-model: the record core is L0 and must not depend on the schema tables. See ADR 0007.

L3 — facade

openbim-ifc

The published crate. Re-exports the model unconditionally and gates every codec and domain behind a cargo feature. Library target is named ifc.

Its test suite is where the cross-cutting invariants live: thin_build.rs proves a minimal build compiles no domain code, and costing_roundtrip.rs proves unknown-domain data survives a round trip.

Not in this repository

  • Axiolid — the format-neutral geometry kernel this crate lowers into. Separate project; see the boundary page.
  • openbim-step — generic ISO 10303-21 / EXPRESS substrate.
  • openbimrs/openbim — the integration superproject, which pins a verified commit of this repository as packages/ifc.
  • Sibling standards live in their own repositories under the same organisation: IDS, BCF, ICDD, IDM, LOIN, GAEB, MMC, and others.

Released under the AGPL-3.0-or-later licence. ISO and CEN standards material is not redistributed.