ifcopenshell
Python bindings, utility functions, and high-level API for IfcOpenShell
What it is and what it does
IfcOpenShell is a Python binding to an open-source C++ library for reading and writing IFC (Industry Foundation Classes) files—the standard format for Building Information Models (BIM) in architecture, engineering, and construction. The package provides both low-level schema access and high-level utility functions for extracting, querying, and modifying building geometry and metadata. It supports multiple IFC schema versions and includes geometric processing for spatial analysis.
Typically used by BIM software developers, data analysts, and researchers who need to programmatically access or transform building model data. The library integrates with shapely and numpy for geometric operations, and its runtime dependencies are lightweight and widely available. Active development and a large repository community (2705 stars) indicate ongoing maintenance and real-world adoption in the AEC (architecture, engineering, construction) industry.
Use it for:
- Extract wall, door, and window properties from IFC models for energy analysis or cost estimation.
- Automate clash detection or spatial conflict analysis between building systems.
- Convert IFC models to other formats (via IfcConvert) for interoperability with non-BIM tools.
- Query and validate building model data against project requirements or standards.
- Programmatically generate or modify IFC files for parametric design workflows.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
IfcOpenShell is a Python library for parsing, manipulating, and working with Industry Foundation Classes (IFC) building information models across multiple IFC schema versions.
Yes. IfcOpenShell is actively maintained, carries no known vulnerabilities, and has strong adoption in the BIM community. The LGPL license is permissive for most use cases. Install friction is moderate but manageable thanks to prebuilt wheels. Choose this if you need to work with IFC files programmatically; it is the de facto standard Python library for that task.
Install
ifcopenshell on PyPI
pip
pip install ifcopenshelluv
uv add ifcopenshellpoetry
poetry add ifcopenshellInstalling ifcopenshell
Before you install
Installation is straightforward with prebuilt wheels for Python 3.10–3.13 across macOS (Intel and ARM), Linux, and Windows. The package carries medium install friction due to its compiled nature and six runtime dependencies including shapely and numpy, but wheels eliminate the need to compile from source.
License in practice
IfcOpenShell is licensed under LGPL-3.0-or-later (copyleft). You may use it freely in your own projects, but any modifications to the library itself must be shared under the same license; proprietary applications can link to it as a library without disclosing their own source.
Quickstart
import ifcopenshell
model = ifcopenshell.open('model.ifc')
for wall in model.by_type('IfcWall'):
print(wall.Name)
Requires Python 3.10 or later; IFC file must be in a supported schema (IFC2x3 TC1, IFC4 Add2 TC1, IFC4x1, IFC4x2, or IFC4x3 Add2).
Verify before relying
- Extent of geometric support for IFC4x1, IFC4x2, and IFC4x3 Add2 schemas (description states extensive support for IFC2x3 TC1 and IFC4 Add2 TC1 only).
- Performance characteristics when working with large or complex IFC models.
- Availability and maturity of the Python API relative to the C++ API.
Package facts
| License | not declared (copyleft) |
| Python support | supports the current Python release (<3.15,>=3.10) |
| Install friction | medium — platform-specific wheel |
| Runtime dependencies | 6 — shapely, numpy, isodate, python-dateutil, lark, typing-extensions |
| Maintenance | actively maintained — 123 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 694,928/month — #5,311 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: ifcopenshell-0.8.5-py310-none-macosx_10_15_x86_64.whl; ifcopenshell-0.8.5-py310-none-macosx_11_0_arm64.whl; ifcopenshell-0.8.5-py310-none-manylinux_2_31_aarch64.whl; ifcopenshell-0.8.5-py310-none-manylinux_2_31_x86_64.whl; ifcopenshell-0.8.5-py310-none-win_amd64.whl; ifcopenshell-0.8.5-py311-none-macosx_10_15_x86_64.whl; ifcopenshell-0.8.5-py311-none-macosx_11_0_arm64.whl; ifcopenshell-0.8.5-py311-none-manylinux_2_31_aarch64.whl; ifcopenshell-0.8.5-py311-none-manylinux_2_31_x86_64.whl; ifcopenshell-0.8.5-py311-none-win_amd64.whl; ifcopenshell-0.8.5-py312-none-macosx_10_15_x86_64.whl; ifcopenshell-0.8.5-py312-none-macosx_11_0_arm64.whl; ifcopenshell-0.8.5-py312-none-manylinux_2_31_aarch64.whl; ifcopenshell-0.8.5-py312-none-manylinux_2_31_x86_64.whl; ifcopenshell-0.8.5-py312-none-win_amd64.whl; ifcopenshell-0.8.5-py313-none-macosx_10_15_x86_64.whl; ifcopenshell-0.8.5-py313-none-macosx_11_0_arm64.whl; ifcopenshell-0.8.5-py313-none-manylinux_2_31_aarch64.whl; ifcopenshell-0.8.5-py313-none-manylinux_2_31_x86_64.whl; ifcopenshell-0.8.5-py313-none-win_amd64.whl
Tags
More Scientific/Engineering packages
NumPy provides an N-dimensional array object…
permissive · top 100 on PyPI
pandaspandas provides fast, flexible data structures…
permissive · top 100 on PyPI
scipyscipy provides numerical algorithms for…
permissive · top 100 on PyPI
scikit-learnscikit-learn provides a comprehensive Python…
permissive · top 1,000 on PyPI
dilldill extends Python's pickle module to…
permissive · top 1,000 on PyPI
multiprocessMultiprocess is an enhanced fork of Python's…
permissive · top 1,000 on PyPI
coal-libraryCoal provides collision detection, distance…
permissive · top 15,000 on PyPI
libcoallibcoal provides Python bindings for collision…
permissive · top 15,000 on PyPI
skforecastSkforecast is a Python library for time series…
permissive · top 15,000 on PyPI
cyvcf2cyvcf2 is a Cython wrapper around htslib that…
permissive · top 15,000 on PyPI
scapyScapy is a Python library for forging,…
copyleft · top 5,000 on PyPI
coalCoal is a collision detection and distance…
permissive · top 15,000 on PyPI
lazr.configlazr.config lets you define configuration…
copyleft · top 15,000 on PyPI
cf-unitscf-units provides units of measure as defined…
permissive · top 15,000 on PyPI
contourpyContourPy calculates contours of 2D…
permissive · top 1,000 on PyPI
colcon-cdProvides a shell function for colcon-core that…
permissive · top 15,000 on PyPI