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.2

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.2
File Size Uploaded
ifckit-0.3.2.tar.gz 346.4 kB Details

Built distribution (wheel)

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

Total release size: 721.2 kB

Release files / ifckit-0.3.2.tar.gz

Download URL ifckit-0.3.2.tar.gz
Size 346.4 kB
Tags Source
SHA-256 checksum
How to use checksums
214400bcd8be102ceb4ca0f265a99c097e4a041b4211071d0879c80b5d8c1a32
BLAKE2b-256 checksum
How to use checksums
76db32230bda7c6209559d2266b05f8106502f902f3987869e1449e10a2a3ab0
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.2-py3-none-any.whl

Download URL ifckit-0.3.2-py3-none-any.whl
Size 374.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
cd246cc81de1d053a04dd97a9d984e066f3972dbea510ed985a6d1661c5e8336
BLAKE2b-256 checksum
How to use checksums
a72e4ede9f52a0785f55dfe6c64117e04e2c7277bc49e0d1dba1b898cd768556
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

0.3.3

2 release files

This release

0.3.2 This release

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