Skip to main content

ifckit

Framework-agnostic IFC builder library for architecture and infrastructure.

Tests PyPI Docs

Build valid IFC files in pure Python — no CAD host required. Works standalone, from Grasshopper, or via the JSON/CLI interface.

Files created can be viewed in its companion IfcViewer

Live: maucworks.github.io/web-ifc-viewer

alt text
IfcKit integrated with Grasshopper via the JSON pipeline.



alt text
IfcKit as the pythonic gernerator core of a configurator.

Install

pip install ifckit[ifc]    # with ifcopenshell (full functionality)
pip install ifckit         # without ifcopenshell (JSON/schema tools only)

Requires Python 3.9+ (Rhino 8 ships CPython 3.9; needs ifcopenshell==0.8.4.post1, see below).

Quick start: building

from ifckit import IfcModel, IfcSchema, PendingWall, Vec, Plane

model = IfcModel(name="My Project", schema=IfcSchema.IFC4, author="you")
floor = model.add_site("Site A").add_building("Building 1").add_storey("Ground Floor", elevation=0.0)

wall = PendingWall(
    footprint=[Vec(0, 0, 0), Vec(10, 0, 0), Vec(10, 0.3, 0), Vec(0, 0.3, 0)],
    plane=Plane.world_xy(),
    height=3.0,
    name="North Facade",
)
floor.add(wall)
model.save("project.ifc")

See examples/quickstart.py and examples/simple_building.py for fuller examples.

Quick start: bridge

from ifckit import IfcModel, IfcSchema, LengthUnit, PendingBeam, Vec, Line, BridgePartType, IBeamProfile

model = IfcModel(name="Bridge", schema=IfcSchema.IFC4X3, author="you", unit=LengthUnit.MILLIMETRE)
deck = model.add_site("Site A").add_bridge("Main Bridge").add_bridge_part("Deck", BridgePartType.DECK.value)

profile = IBeamProfile(height=600, width=300, web_thickness=10, flange_thickness=10)
beam = PendingBeam(axis=Line(Vec(0, 0, 0), Vec(3000, 0, 0)), profile=profile, name="Main Girder")
deck.add(beam)

model.save("bridge.ifc")

See examples/quickstart_bridge.py and examples/simple_bridge.py for fuller examples including alignments.

Supported schemas and element types

Element Class IFC4 IFC4X3
Wall PendingWall ✓
Slab PendingSlab ✓
Column PendingColumn ✓
Beam PendingBeam ✓ ✓
Space PendingSpace ✓
Alignment PendingAlignment ✓

Profiles: IBeamProfile, LBeamProfile, SteelProfile, and arbitrary polygon profiles.

JSON build

Build an IFC file from a JSON description — useful for CLI pipelines and REST APIs:

from ifckit.json_build import build

build("model.json", "output.ifc")

Or from the command line:

python -m ifckit model.json output.ifc

The JSON schema mirrors the Python API. See examples/example_building.json for a full example.

Grasshopper

Grasshopper Script components are in grasshopper/src/. Each component is a standalone Python file with @component / @input / @output annotations.

To regenerate the .gh file from source, run grasshopper/script/build_gh.py inside the Rhino ScriptEditor with Grasshopper open.

Installing ifckit in Rhino 8

Rhino 8 ships with its own CPython 3.9 environment. That pins the ifcopenshell line: 0.8.4.post1 is the last release with Python 3.9 wheels, so install it explicitly — the [ifc] extra would pull 0.9.0, which requires Python 3.10+. From the Rhino ScriptEditor (EditPythonScript) or a Script component:

import subprocess, sys
subprocess.run(
    [sys.executable, "-m", "pip", "install",
     "ifckit", "ifcopenshell==0.8.4.post1"],
    check=True,
)

ifckit detects the 0.8 serializer API automatically (see ifckit.geom_backend); all build/save/export paths work on both lines.

To install a local development checkout instead:

import subprocess, sys
subprocess.run(
    [sys.executable, "-m", "pip", "install", "-e", r"C:\path\to\ifckit"],
    check=True,
)

After installing, restart Rhino once to make the package available in all Script components.

Development

pip install -e ".[dev]"
pytest tests/          # run tests
ruff check ifckit/     # lint

Metadata

Release files for ifckit 0.3.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ifckit 0.3.3
File Size Uploaded
ifckit-0.3.3.tar.gz 351.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ifckit 0.3.3
File Interpreter ABI Platform
ifckit-0.3.3-py3-none-any.whl Python 3 none any Details

Total release size: 731.7 kB

Release files / ifckit-0.3.3.tar.gz

Download URL ifckit-0.3.3.tar.gz
Size 351.6 kB
Tags Source
SHA-256 checksum
How to use checksums
749de4c3dcfc3e5b8602e3678801ef1294fee9bea7710f567a22ca4b78a6b40b
BLAKE2b-256 checksum
How to use checksums
e072260161ad796b75d15b92b59f1216054dcdc0c1d9f7cad76452af025054a4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / ifckit-0.3.3-py3-none-any.whl

Download URL ifckit-0.3.3-py3-none-any.whl
Size 380.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5d987b5f5e5a94ec77b5c9afa192afa7db93609aa9fa6bf895cdc40aa4802672
BLAKE2b-256 checksum
How to use checksums
4e142a1ebec775b762864efce341ddb2a0f53d532a4294df34fd748415475c84
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.3 This release

2 release files

0.3.2

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page