IfcQuery

IfcQuery is a CLI tool for querying and inspecting IFC building models. It provides read-only subcommands for common inspection tasks, all outputting JSON so results can be piped into other tools.

Subcommands:

  • summary — schema version, entity counts, project metadata

  • tree — full spatial hierarchy (IfcProject → Site → Building → Storeys → Spaces → Elements)

  • info — deep inspection of any entity by step ID (attributes, property sets, placement matrix, type, material)

  • select — filter elements by IFC class using the IfcOpenShell selector syntax

  • relations — relationships for an element; use --traverse up to walk the hierarchy to IfcProject

  • clash — geometric intersection and clearance checks; requires the IfcOpenShell C++ geometry bindings

  • validate — schema and constraint validation; add --rules for a full EXPRESS check

  • schedule — work schedules with nested task trees

  • cost — cost schedules with nested cost item trees

  • schema — IFC class documentation using the loaded model’s schema version

  • contexts — geometric representation contexts

  • materials — material definitions (IfcMaterial, layer sets, constituent sets, profile sets)

  • plot — generate a drawing (SVG or PNG) using ifcopenshell.draw; PNG output requires cairosvg

  • render — off-screen 3D render to a PNG image; requires pyvista and the IfcOpenShell C++ geometry bindings

All subcommands accept --format json|text|ids to control output (default: json):

  • json — structured JSON, suitable for piping to jq or ifcedit foreach

  • text — indented human-readable output

  • ids — comma-separated step IDs extracted from list results, suitable for piping directly into ifcedit run parameters

Installation

pip install ifcquery

For PNG output from plot, also install cairosvg:

pip install cairosvg

For 3D rendering with render, also install pyvista:

pip install pyvista

Or install from source:

  1. Install IfcOpenShell

  2. Clone the IfcOpenShell repository.

  3. cd /path/to/IfcOpenShell/src/ifcquery

  4. pip install .

Usage

$ ifcquery model.ifc summary
$ ifcquery model.ifc tree
$ ifcquery model.ifc info 42
$ ifcquery model.ifc select 'IfcWall'
$ ifcquery model.ifc relations 42
$ ifcquery model.ifc relations 42 --traverse up
$ ifcquery model.ifc validate
$ ifcquery model.ifc validate --rules
$ ifcquery model.ifc schedule
$ ifcquery model.ifc cost
$ ifcquery model.ifc schema IfcWall
$ ifcquery model.ifc materials
$ ifcquery model.ifc plot -o floorplan.svg --out-format svg --view floorplan
$ ifcquery model.ifc plot -o floorplan.png --view floorplan
$ ifcquery model.ifc render -o model.png
$ ifcquery model.ifc --format ids select 'IfcWall'

Scripting with ifcedit

ifcquery and ifcedit are designed to compose. Use --format ids to pass query results directly into ifcedit run parameters, or pipe JSON into ifcedit foreach to apply an operation to every matching element:

# Aggregate — pass all IDs as a list parameter
$ ifcedit run model.ifc spatial.unassign_container \
    --products "$(ifcquery model.ifc --format ids select 'IfcWall')"

# Fan-out — one operation per element, model opened and saved once
$ ifcquery model.ifc select 'IfcWindow' | ifcedit foreach model.ifc root.remove_product --product {id}

# Render an element highlighted against everything related to it
$ ifcquery model.ifc render -o relations.png \
    --element "$(ifcquery model.ifc --format ids relations 42)"

# Render a clash — subject and clashing elements highlighted together
$ ifcquery model.ifc render -o clash.png \
    --element "$(ifcquery model.ifc --format ids clash 42)"

See also

Use IfcEdit to make mutations to IFC files from the command line, and IfcMCP for interactive AI-assisted editing.