# xbimteam/xbimessentials architecture

> Architecture diagram of the GitHub repository xbimteam/xbimessentials, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/xbimteam/xbimessentials
- Repository: https://github.com/xbimteam/xbimessentials

## Overview

XbimEssentials is a .NET toolkit for reading, writing, validating, and interrogating IFC building-information models. The documented user workflow opens an IFC file through IfcStore, queries model instances and properties, and can validate or export the model. The repository also includes model creation, multiple storage providers, federation, and geometry contracts. STEP parsing and IFC entity code are represented by sampled paths; other format and capability links follow README documentation and the tree, since their implementations were not sampled.

Main entry points: [`Xbim.Ifc/IfcStore.cs`](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Ifc/IfcStore.cs) (IfcStore), [`Xbim.Common/IModel.cs`](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/IModel.cs) (Model contracts), [`Xbim.Common/Configuration/XbimServices.cs`](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/Configuration/XbimServices.cs) (Service configuration), [`Xbim.Common/Step21/Part21Writer.cs`](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/Step21/Part21Writer.cs) (STEP writer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_io["File interchange"]
  node_store["IfcStore<br/>[IfcStore.cs]"]
  node_step["STEP parser<br/>[XbimP21Parser.cs]"]
  node_xml["IFC XML<br/>[XbimXmlReader4.cs]"]
  node_writer["STEP writer<br/>[Part21Writer.cs]"]
  node_xmlwriter["IFC XML writer<br/>[IfcXmlWriter3.cs]"]
end

subgraph group_model["Model runtime"]
  node_model_api["Model contracts<br/>[IModel.cs]"]
  node_instances["Entity collection"]
  node_transactions["Transactions<br/>[Transaction.cs]"]
end

subgraph group_ifc["IFC domain"]
  node_ifc4["IFC4 schema"]
  node_ifc2x3["IFC2x3 schema"]
  node_ifc4x3["IFC4x3 schema"]
  node_validation["Express validation<br/>[IfcValidator.cs]"]
end

subgraph group_services["Providers and services"]
  node_memory["Memory provider"]
  node_esent["Esent provider"]
  node_configuration["Service configuration<br/>[XbimServices.cs]"]
end

subgraph group_capabilities["Model capabilities"]
  node_creation["Fluent creation"]
  node_federation["Model federation<br/>[IFederatedModel.cs]"]
  node_geometry["Geometry contracts"]
  node_extract["IFC extraction<br/>[Extractor.cs]"]
end

node_developer(("Application developer"))
node_ifc_file["IFC file"]
node_output["IFC output"]

node_developer -->|"opens model"| node_store
node_ifc_file -->|"input file"| node_store
node_store -->|"parses STEP"| node_step
node_store -->|"reads XML"| node_xml
node_store -->|"provides model"| node_model_api
node_configuration -->|"registers provider"| node_memory
node_configuration -->|"registers provider"| node_esent
node_memory -->|"creates model"| node_model_api
node_esent -->|"creates model"| node_model_api
node_developer -->|"queries instances"| node_instances
node_model_api -->|"exposes instances"| node_instances
node_developer -->|"validates model"| node_validation
node_developer -->|"builds model"| node_creation
node_creation -->|"creates entities"| node_model_api
node_developer -->|"federates models"| node_federation
node_developer -.->|"requests geometry"| node_geometry
node_developer -->|"extracts data"| node_extract
node_developer -->|"exports model"| node_store
node_store -->|"writes STEP"| node_writer
node_store -->|"writes XML"| node_xmlwriter
node_writer -->|"serializes"| node_output
node_xmlwriter -->|"serializes"| node_output
node_ifc4 -->|"implements entities"| node_model_api
node_ifc2x3 -->|"implements entities"| node_model_api
node_ifc4x3 -->|"implements entities"| node_model_api
node_developer -->|"starts transaction"| node_transactions

click node_store "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Ifc/IfcStore.cs"
click node_step "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/Step21/XbimP21Parser.cs"
click node_xml "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.IO.MemoryModel/Xml/XbimXmlReader4.cs"
click node_writer "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/Step21/Part21Writer.cs"
click node_xmlwriter "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.IO.MemoryModel/Xml/IfcXmlWriter3.cs"
click node_model_api "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/IModel.cs"
click node_instances "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/Model/EntityCollection.cs"
click node_transactions "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/Model/Transaction.cs"
click node_ifc4 "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Ifc4/SharedBldgServiceElements/IfcFlowStorageDevice.cs"
click node_ifc2x3 "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Ifc2x3/SharedBldgServiceElements/IfcFlowStorageDevice.cs"
click node_ifc4x3 "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Ifc4x3/SharedBldgServiceElements/IfcFlowStorageDevice.cs"
click node_validation "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Ifc/Validation/IfcValidator.cs"
click node_memory "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.IO.MemoryModel/MemoryModelProvider.cs"
click node_esent "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.IO.Esent/EsentModelProvider.cs"
click node_configuration "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/Configuration/XbimServices.cs"
click node_creation "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Ifc/Fluent/FluentModelBuilder.cs"
click node_federation "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/Federation/IFederatedModel.cs"
click node_geometry "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/Geometry/IGeometryManager.cs"
click node_extract "https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Ifc/Extractor.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_store,node_step,node_xml,node_writer,node_xmlwriter toneBlue
class node_model_api,node_instances,node_transactions toneAmber
class node_ifc4,node_ifc2x3,node_ifc4x3,node_validation toneMint
class node_memory,node_esent,node_configuration toneRose
class node_creation,node_federation,node_geometry,node_extract,node_developer,node_ifc_file,node_output toneIndigo
```

## Components

### File interchange

- [IfcStore](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Ifc/IfcStore.cs): `Xbim.Ifc/IfcStore.cs`
- [STEP parser](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/Step21/XbimP21Parser.cs): `Xbim.Common/Step21/XbimP21Parser.cs`
- [IFC XML](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.IO.MemoryModel/Xml/XbimXmlReader4.cs): `Xbim.IO.MemoryModel/Xml/XbimXmlReader4.cs`
- [STEP writer](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/Step21/Part21Writer.cs): `Xbim.Common/Step21/Part21Writer.cs`
- [IFC XML writer](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.IO.MemoryModel/Xml/IfcXmlWriter3.cs): `Xbim.IO.MemoryModel/Xml/IfcXmlWriter3.cs`

### Model runtime

- [Model contracts](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/IModel.cs): `Xbim.Common/IModel.cs`
- [Entity collection](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/Model/EntityCollection.cs): `Xbim.Common/Model/EntityCollection.cs`
- [Transactions](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/Model/Transaction.cs): `Xbim.Common/Model/Transaction.cs`

### IFC domain

- [IFC4 schema](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Ifc4/SharedBldgServiceElements/IfcFlowStorageDevice.cs): `Xbim.Ifc4/SharedBldgServiceElements/IfcFlowStorageDevice.cs`
- [IFC2x3 schema](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Ifc2x3/SharedBldgServiceElements/IfcFlowStorageDevice.cs): `Xbim.Ifc2x3/SharedBldgServiceElements/IfcFlowStorageDevice.cs`
- [IFC4x3 schema](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Ifc4x3/SharedBldgServiceElements/IfcFlowStorageDevice.cs): `Xbim.Ifc4x3/SharedBldgServiceElements/IfcFlowStorageDevice.cs`
- [Express validation](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Ifc/Validation/IfcValidator.cs): `Xbim.Ifc/Validation/IfcValidator.cs`

### Providers and services

- [Memory provider](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.IO.MemoryModel/MemoryModelProvider.cs): `Xbim.IO.MemoryModel/MemoryModelProvider.cs`
- [Esent provider](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.IO.Esent/EsentModelProvider.cs): `Xbim.IO.Esent/EsentModelProvider.cs`
- [Service configuration](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/Configuration/XbimServices.cs): `Xbim.Common/Configuration/XbimServices.cs`

### Model capabilities

- [Fluent creation](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Ifc/Fluent/FluentModelBuilder.cs): `Xbim.Ifc/Fluent/FluentModelBuilder.cs`
- [Model federation](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/Federation/IFederatedModel.cs): `Xbim.Common/Federation/IFederatedModel.cs`
- [Geometry contracts](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Common/Geometry/IGeometryManager.cs): `Xbim.Common/Geometry/IGeometryManager.cs`
- [IFC extraction](https://github.com/xbimteam/xbimessentials/blob/master/Xbim.Ifc/Extractor.cs): `Xbim.Ifc/Extractor.cs`

### Other components

- **Application developer**
- **IFC file**
- **IFC output**

## Connections

- Application developer → IfcStore: opens model
- IFC file → IfcStore: input file
- IfcStore → STEP parser: parses STEP
- IfcStore → IFC XML: reads XML
- IfcStore → Model contracts: provides model
- Service configuration → Memory provider: registers provider
- Service configuration → Esent provider: registers provider
- Memory provider → Model contracts: creates model
- Esent provider → Model contracts: creates model
- Application developer → Entity collection: queries instances
- Model contracts → Entity collection: exposes instances
- Application developer → Express validation: validates model
- Application developer → Fluent creation: builds model
- Fluent creation → Model contracts: creates entities
- Application developer → Model federation: federates models
- Application developer → Geometry contracts: requests geometry
- Application developer → IFC extraction: extracts data
- Application developer → IfcStore: exports model
- IfcStore → STEP writer: writes STEP
- IfcStore → IFC XML writer: writes XML
- STEP writer → IFC output: serializes
- IFC XML writer → IFC output: serializes
- IFC4 schema → Model contracts: implements entities
- IFC2x3 schema → Model contracts: implements entities
- IFC4x3 schema → Model contracts: implements entities
- Application developer → Transactions: starts transaction
