XbimEssentials is the .NET layer that hides the IFC schema from you
A .NET library to work with data in the IFC format. This is the core component of the Xbim Toolkit
At a glance
- What is it?
- XbimEssentials is the foundational component of the xbim toolkit, a C# library for reading, writing, validating and interrogating buildingSmart IFC data in any .NET language, covering STEP, IfcXml and IfcZip across IFC2x3 and IFC4. Version 6 replaced a global service locator with standard .NET dependency injection, which is the main upgrade cost.
- Who is it for?
- Adopt XbimEssentials if you need to read or write IFC from .NET without implementing STEP and EXPRESS parsing yourself, and you need IFC2x3 and IFC4 in one API. Skip it if your only need is reading geometry, since the README is clear that visualisation requires the separate Xbim.Geometry package.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 56 days ago.
- What is it written in?
- Mainly C#, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The layer that sits between your code and the EXPRESS schema
XbimEssentials is described as the foundational components of the xbim toolkit, which expands to eXtensible Building Information Modelling for the .NET platform. What it gives you is the ability to read, write, validate and interrogate data in the buildingSmart IFC formats from any .NET language, and the stated motivation is to take away the complexity and heavy lifting of reading and writing Open BIM file formats so you can work at a higher level than the buildingSmart data model without deep understanding of STEP and EXPRESS parsing. That framing matters for how you evaluate the dependency. You are not adopting a format converter, you are adopting an object model with a strongly typed API over the IFC schema, and the type layer is the point. The repository layout reflects that: separate `Xbim.Ifc/`, `Xbim.Ifc2x3/`, `Xbim.Ifc4/` and `Xbim.Ifc4x3/` directories for the schema versions, `Xbim.Common/` for shared infrastructure, `Xbim.IO.Esent/` and `Xbim.IO.MemoryModel/` for the two file storage backends, and a `Schemas/` directory.
IFC is an ISO standard, and the library covers the versions you meet
IFC is described as an ISO Standard and a platform-neutral open file format for data exchange of building information, and XbimEssentials supports the STEP, IfcXml and IfcZip formats. The schema coverage is stated in the README: read and write of the full schema of IFC2x3 and IFC4, including support for the latest Ifc4 Addendum 2. The repository has a directory for IFC4x3 as well, which is the next schema revision, so the tree carries the versions in parallel. The wider toolkit covers adjacent Open BIM formats in sibling repositories, including COBie and BIM Collaboration Format, and there is also support for IFC model verification with IDS through a separate IDS Validator library. The important point for a consumer is that the format layer is not the only concern: an IFC file also carries geometry, and the README says explicitly that to visualise 3D geometries you need the Xbim.Geometry package, which provides geometric and topological operations and visualisation. So XbimEssentials is the data layer, and a full viewer is a second dependency.
Reading a model is a LINQ query over typed objects
The README offers a 60 second tour of reading and writing, and the reading example opens a file and queries it with LINQ.
const string fileName = "SampleHouse.ifc";
using (var model = IfcStore.Open(fileName))
{The point of the sample is the shape of the API. You open a store, and from there you work with typed IFC entities rather than with a parsed document tree, so extracting a set of objects is a query rather than a traversal. The sample file is `SampleHouse.ifc`, exported from a tool such as Revit, and the file lives in the repository under `Tests/TestFiles/`. The store is disposable, hence the `using` block, and the `IfcStore.Open` call is the same entry point regardless of whether the underlying file is STEP, IfcXml or IfcZip, because the format handling is the part the library hides. The documentation site has a larger set of examples under `docs.xbim.net`, and the repository has a `docs/` directory as well.
Version 6 replaced the service locator with dependency injection
The breaking change to plan for is the one the README copies in full. The xbim Toolkit V6 implements a new mechanism for registering internal resources and makes use of standard .NET dependency injection patterns for managing services internally. `Xbim.Common` now introduces an internal DI service that you can optionally integrate with your own DI implementation, for providing logging services and configuring xbim service behaviour such as which model provider to use. The configuration call registers the toolkit's internal dependencies, configures an in-memory model provider, and adds an existing `ILoggerFactory` in place of the default one. Two knock-on changes follow. `IfcStore.ModelProviderFactory` is deprecated, because the new mechanism provides that capability. And the persistent EsentModel is now available automatically through `IfcStore` on Windows, so the previous `UseHeuristicModelProvider()` step is no longer needed to ensure Esent is used, though you can still request it explicitly. The default logging implementation was also removed from the toolkit to reduce external dependencies, so you add your own. The change log is where the detail lives.
Target frameworks, packages and where the code is
The supported targets are stated precisely. As of version 6.1, XbimEssentials supports `.netstandard2.0`, `.netstandard2.1`, `.net8` and `net10`, and supporting `.netstandard2.0` gives support for .NET Framework 4.7.2 upwards. Earlier .NET Framework versions may work but the project cannot support them, which is the sort of statement that saves you a support ticket later. Distribution is through NuGet, with the package published as `Xbim.Essentials`, and the README's component table lists the rest of the toolkit the same way, with `Xbim.Geometry`, `Xbim.IO.CobieExpress` and `Xbim.WindowsUI` each on NuGet and on MyGet feeds. The build runs on Azure Pipelines, with the README showing separate definitions for the master and develop branches, and the MyGet feeds carry prerelease packages for develop and stable packages for master. That two-tier arrangement is the convention to understand: NuGet is what consumers take, MyGet is where in-flight develop builds appear. The repository also carries a solution file, a `Directory.Build.props`, a `global.json` pinning the SDK, and a `XbimOpenSourceKeyFile.snk` for strong naming.
Where XbimEssentials is the wrong choice
There are two clear boundaries, and both come from the scope the README itself sets. The first is geometry. If your requirement is to display a model, this library will not do it, and you need the separate Xbim.Geometry package, which is a different repository, a different dependency and a different release cadence. The second is the fact that this is a C# library on .NET, so the language and the platform are fixed choices rather than preferences. There is also a version question to be honest about. The listed releases are v6.0.517 from April 2025, v6.0.489 and v6.0.445 both from December 2024, and the last push to the repository was on 2026-08-28. The version numbers carry build metadata that does not look like a clean semantic version, and the develop branch publishes prerelease versions separately, so if you need a specific fix you should be prepared to work out which build you actually have. A further gap is that the README does not describe a rollback or a support policy, so the compatibility questions your team will actually ask have to be answered by reading the code and the change log.
Editorial conclusion
Adopt XbimEssentials if you need to read or write IFC from .NET without implementing STEP and EXPRESS parsing yourself, and you need IFC2x3 and IFC4 in one API. Skip it if your only need is reading geometry, since the README is clear that visualisation requires the separate Xbim.Geometry package. Before you commit, read the version 6 upgrade notes, because the move to dependency injection is a breaking change that touches how you configure the model provider and the logger, and check the LICENCE.md file in the repository, since the recorded licence identifier is a custom one.
Frequently asked questions
What is XbimEssentials used for?
It is the foundational .NET library for reading, writing, validating and interrogating buildingSmart IFC data in STEP, IfcXml and IfcZip formats, covering the full IFC2x3 and IFC4 schemas including Ifc4 Addendum 2. It is the core component of the wider xbim toolkit.
What changed in xbim Toolkit version 6?
Version 6 introduces a new mechanism for registering internal resources using standard .NET dependency injection. `Xbim.Common` gains an internal DI service, `IfcStore.ModelProviderFactory` is deprecated, the persistent EsentModel is available automatically through `IfcStore` on Windows, and the default logging implementation was removed so you add your own.
Which .NET versions does XbimEssentials support?
As of version 6.1 it supports .netstandard2.0, .netstandard2.1, .net8 and net10. Supporting .netstandard2.0 gives support for .NET Framework 4.7.2 upwards, and earlier .NET Framework versions may work but are not supported.
Do I need another package to display a model with XbimEssentials?
Yes. The README states that to visualise 3D geometries you need the Xbim.Geometry package, which provides geometric and topological operations and visualisation, in a separate repository from this core data library.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/xbimteam-xbimessentials)Was this useful?