# Ifc Impl Library Selection

> Use when choosing which IFC implementation library to use for a project, or when unsure which tool reads and writes IFC files for a given language, platform, or target IFC version. Prevents picking a library that does not fit the language or platform, expecting this package to teach a library API, asserting an unverified IFCx Rust library, and confusing schema migration with geometry conversion. Covers the library landscape (IfcOpenShell, web-ifc, xBIM, IFC++), the language and platform decision matrix, routing to the owning OpenAEC skill packages, and the emerging state of IFC5 and IFCx tooling. Keywords: IFC library, IfcOpenShell, web-ifc, ThatOpen engine_web-ifc, xBIM, XbimEssentials, IFC++, ifcx-rs, which IFC library should I use, read IFC in Python, parse IFC in the browser, IFC in dotnet, IFC in Rust, IFC WASM, library decision matrix, pointer skill, which tool for IFC, how do I open an IFC file in code, "library does not support my IFC version", "no IFC library for my language", "IFC parsing is too slo

- Skill: `impertio-studio/ifc-impl-library-selection` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add impertio-studio/ifc-impl-library-selection`
- Raw SKILL.md: https://api.skillmd.com/api/skills/impertio-studio/ifc-impl-library-selection/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Integrations & APIs
- License: MIT
- Author: Impertio-Studio (https://skillmd.com/u/impertio-studio)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/impertio-studio/ifc-impl-library-selection

---


# ifc-impl-library-selection

IN DEVELOPMENT : subject to change. IFC5 and IFCx are not released standards.
The IFCx Rust tooling named in this skill is emerging and unverified ; treat
that row as a moving target. The IFC2x3, IFC4, and IFC4.3 library guidance
below is stable.

This is a POINTER skill. It routes a reader to the right IFC implementation
library and to the OpenAEC skill package that owns that library's detail. It
does NOT teach any library API. The IFC skill package teaches the IFC standard
itself : schema, entities, formats, geometry, version evolution. Library APIs,
installation, and code belong to the dedicated per-library packages.

For the IFCx data format see `ifc-core-ifcx-architecture`. For changing a
file's schema version see `ifc-impl-version-migration`.

## Quick Reference

### The package-boundary rule

- ALWAYS treat a library as a pointer here : name it, state what it does, route
  to the owning package. NEVER write library API calls, install commands, or
  code snippets in this package.
- ALWAYS pick the library by language, platform, and target IFC version, in
  that order. The language is the hardest constraint : a .NET project cannot
  consume a Python library.

### The library landscape

| Library | Language | Runtime / platform | Verified IFC version coverage |
|---------|----------|--------------------|-------------------------------|
| IfcOpenShell | Python and C++ | desktop, server, CLI ; embedded in Blender via Bonsai | IFC2x3, IFC4, IFC4.3, plus runtime-loaded schemas |
| web-ifc (ThatOpen `engine_web-ifc`) | TypeScript and C++ compiled to WebAssembly | browser and Node.js | reads and writes IFC ; exact version list is owned by the ThatOpen package |
| xBIM Toolkit (XbimEssentials) | C# / .NET | .NET desktop and server | IFC2x3 and IFC4 |
| IFC++ | C++ | native desktop applications | C++ IFC implementation ; exact version list owned by the IFC++ project |

NEVER assert an IFC version a library supports beyond the "verified" column.
When a project needs a version not listed as verified, route the reader to the
owning package or project to confirm.

### Routing to the owning OpenAEC package

| Library | Owning package for API detail |
|---------|-------------------------------|
| IfcOpenShell | `Blender-Bonsai-ifcOpenShell-Sverchok` skill package |
| web-ifc | `ThatOpen` skill package |
| xBIM Toolkit | no OpenAEC package : route to the xBIM project documentation |
| IFC++ | no OpenAEC package : route to the IFC++ project documentation |

### Hard rules

- ALWAYS match the library language to the project language first. This filters
  the list before any other criterion.
- ALWAYS route library API questions to the owning package. This skill answers
  "which library", never "how to call it".
- NEVER recommend `IfcConvert` for changing an IFC schema version : it is a
  geometry / file-format converter. Schema-version migration is the `ifcpatch`
  Migrate concept. See `ifc-impl-version-migration`.
- NEVER assert a concrete repository for IFCx Rust tooling. No `ifcx-rs`
  repository is verified to exist. Refer to it only as "emerging Rust tooling
  for IFCx".
- NEVER present a community Rust project as an OpenAEC package.

## Decision Trees

### Which library for which language and platform?

```
What language and platform is the project?
|
+-- Python (data pipeline, automation, server, CLI)
|   --> IfcOpenShell        owning package : Blender-Bonsai-ifcOpenShell-Sverchok
|
+-- TypeScript / JavaScript, runs in a browser or Node.js
|   --> web-ifc             owning package : ThatOpen
|
+-- C# / .NET (desktop or server)
|   --> xBIM Toolkit        no OpenAEC package : xBIM project docs
|
+-- C++ (native, high-performance desktop)
|   --> IfcOpenShell (C++ core) or IFC++
|   --> IfcOpenShell owning package : Blender-Bonsai-ifcOpenShell-Sverchok
|
+-- Rust
|   --> emerging only : see the IFC5 / IFCx branch below
|
+-- Blender add-on / 3D authoring inside Blender
    --> Bonsai (built on IfcOpenShell)
        owning package : Blender-Bonsai-ifcOpenShell-Sverchok
```

### Which library for which target IFC version?

```
What IFC version must the project read or write?
|
+-- IFC2x3 or IFC4
|   --> any of IfcOpenShell, web-ifc, xBIM (all cover this range)
|
+-- IFC4.3 (infrastructure : roads, rail, ports)
|   --> IfcOpenShell has verified IFC4.3 coverage.
|       For web-ifc, confirm IFC4.3 coverage with the ThatOpen package.
|       xBIM verified coverage is IFC2x3 and IFC4 only : confirm IFC4.3
|       support with the xBIM project before relying on it.
|
+-- IFC5 / IFCx (.ifcx JSON)
    --> see the next tree : tooling is emerging, not production-ready
```

### IFC5 / IFCx tooling : emerging

```
Does the project target IFC5 / IFCx (.ifcx JSON) ?
|
+-- Yes
|   --> Tooling is in development. IFC5 and IFCx are not released standards.
|       NEVER treat IFC5 / IFCx library support as production-ready.
|       Rust tooling for IFCx exists only as emerging work : NEVER assert a
|       concrete repository. Community Rust projects exist (clearly labelled
|       community, NOT OpenAEC). See ifc-core-ifcx-architecture.
|
+-- No  --> use the language / version trees above.
```

### Library question, or API question?

```
What is being asked?
|
+-- "Which library should this project use?"
|   --> this skill : the decision matrix above
|
+-- "How do I call this library / install it / write this code?"
    --> NOT this skill. Route to the owning package :
        IfcOpenShell  -> Blender-Bonsai-ifcOpenShell-Sverchok package
        web-ifc       -> ThatOpen package
        xBIM, IFC++   -> the project's own documentation
```

## Patterns

### Pattern : select by primary language first

ALWAYS filter the library list by the project's implementation language before
weighing any other factor. A library is only usable from its own language
ecosystem : IfcOpenShell from Python or C++, web-ifc from TypeScript or
JavaScript, xBIM from .NET. The language constraint is absolute and removes
most of the table immediately.

### Pattern : select by deployment target

After the language filter, confirm the deployment target fits :

- Browser or Node.js front end : web-ifc compiles to WebAssembly and runs
  client-side at near-native speed.
- Desktop or server batch processing : IfcOpenShell (Python or C++) and xBIM
  (.NET) run natively without a browser runtime.
- Inside Blender : Bonsai, which is built on IfcOpenShell.

### Pattern : route to the owning package

Once a library is chosen, ALWAYS hand off API detail to the owning OpenAEC
package : IfcOpenShell to the `Blender-Bonsai-ifcOpenShell-Sverchok` package,
web-ifc to the `ThatOpen` package. For xBIM and IFC++ there is no OpenAEC
package : route the reader to the project's own documentation. This skill stops
at the recommendation ; it never crosses into API teaching.

### Pattern : handle an IFC5 / IFCx request honestly

When a project asks for IFC5 / IFCx (.ifcx) support, state plainly that IFC5
and IFCx are in development and that tooling is emerging, not production-ready.
Name Rust tooling only as "emerging" : NEVER assert a repository such as
`ifcx-rs`, which is unverified. If a Rust pointer is needed, community projects
exist and MUST be labelled community projects, never OpenAEC packages. Route
the reader to `ifc-core-ifcx-architecture` for the format itself.

### Pattern : do not confuse the two "convert" tools

A reader asking to "convert an IFC file" wants one of two unrelated things.
Changing the IFC schema version is the `ifcpatch` Migrate concept, covered by
`ifc-impl-version-migration`. Converting IFC geometry into a mesh or non-IFC
format (OBJ, glTF, DAE) is `IfcConvert`. NEVER recommend `IfcConvert` for a
schema-version change. Both tools' API detail belongs to the
`Blender-Bonsai-ifcOpenShell-Sverchok` package.

## Reference Links

- `references/methods.md` : the full library landscape detail, capabilities,
  owning packages, verification status, source URLs.
- `references/examples.md` : worked library-selection scenarios by language,
  platform, and target version.
- `references/anti-patterns.md` : the library-selection mistakes and why each
  one fails.

Related skills : `ifc-core-ifcx-architecture`, `ifc-impl-version-migration`,
`ifc-impl-format-transcoding`, `ifc-core-validation`.

Authoritative sources (see `SOURCES.md`) :
- IfcOpenShell : https://ifcopenshell.org/ and https://docs.ifcopenshell.org/
- web-ifc : https://github.com/ThatOpen/engine_web-ifc
- xBIM : https://docs.xbim.net/
- IFC++ : https://ifcquery.com/
- IFC5 development : https://github.com/buildingSMART/IFC5-development

