IFC Core : IFCx Architecture
IN DEVELOPMENT : subject to change. IFCx is not a released or ratified
specification. It is developed in the public buildingSMART/IFC5-development
repository, whose own examples are explicitly labelled "preliminary and will be
updated." Every fact in this skill is a moving target. NEVER teach IFCx as a
stable target and NEVER recommend it for a production exchange.
IFCx is the JSON data encoding of the IFC5 generation : the .ifcx file format
and its ifcx.dev schema host. This skill explains what an .ifcx file is, how
its composition graph works, and how IFCx relates to IFC5. It is the format-side
counterpart to ifc-core-ifc5-architecture, which covers the IFC5 standard.
Quick Reference
What IFCx is
- IFCx is the JSON data encoding of the IFC5 generation. An IFCx file is, in
the words of the IFC5 examples, "a JSON file, shared as .ifcx."
- The file extension is
.ifcx.
- IFCx data is organised into objects delimited by
{ and } that "hold
the data." These objects can be shared across multiple files, or within one
file.
- Objects can refer to children and can inherit : "This is how you
construct a tree." IFCx is a node-and-attribute composition graph.
- A consumer does NOT read a pre-resolved model : "An implementation needs to
compose the scene from the available data."
- The JSON Schema for IFCx is published at
https://ifcx.dev/@standards.buildingsmart.org/ifc/.
- The schema source is written in TypeSpec (
.tsp files); the JSON Schema
is generated from that TypeSpec source.
ifcx.dev carries the tagline "The schema.org for IFC", signalling a
web-native, semantic, graph-shaped data direction.
What IFCx is NOT
- IFCx is NOT a STEP format. The IFC5 examples state plainly : "There will
not be STEP syntax in IFC 5." An
.ifcx file has no ISO-10303-21
wrapper, no HEADER section, and no FILE_SCHEMA clause.
- IFCx is NOT finalised. The specification is in development; schema,
objects, and structure will change before any release.
- IFCx is NOT the same thing as IFC5. IFC5 is the standard generation; IFCx
is its file format. See the decision tree below.
- IFCx is NOT confirmed to be RDF or JSON-LD. The graph shape is verified;
the specific linked-data serialisation is not. See the labelling pattern.
IFC5 versus IFCx
| Term |
What it names |
| IFC5 |
The next-generation standard : the composition semantics, the modular domain schemas, the layering model. |
| IFCx |
The next-generation data format : the .ifcx JSON encoding and the ifcx.dev JSON-Schema host. |
ALWAYS use "IFC5" for the conceptual standard and "IFCx" / .ifcx for the
concrete file format. NEVER treat the two terms as interchangeable : they are
routinely conflated and the distinction is the point of having two skills.
Decision Trees
Is IFCx the right target for this task?
Is this a production exchange another tool must reliably consume?
|
+-- YES --> NEVER use IFCx. It is in development and not finalised.
| Target a released IFC version : IFC2x3 TC1, IFC4 ADD2 TC1,
| or IFC4.3 ADD2 (STEP / ifcXML / ifcJSON). See
| ifc-core-version-evolution.
|
+-- NO, this is research or prototyping against the IFC5-development repo
--> IFCx is acceptable, WITH the explicit caveat that the .ifcx
structure and schema will change before release.
Which term applies : IFC5 or IFCx?
What is being described?
|
+-- The composition / layering model, modular domain schemas, the
| standard generation as a concept
| --> "IFC5". See ifc-core-ifc5-architecture.
|
+-- A concrete .ifcx file, the JSON encoding, the ifcx.dev schema host
--> "IFCx". This skill.
How to approach an .ifcx file
You have a file with the .ifcx extension.
|
+-- Parse it as JSON. It is a JSON document, not a STEP file.
| NEVER look for ISO-10303-21 / HEADER / FILE_SCHEMA : they are absent.
|
+-- Read the data objects ({ ... }) and their child / inherit references.
|
+-- Compose the scene : resolve the composition tree yourself. The file
| is not a pre-resolved graph.
|
+-- Validate against the JSON Schema at
ifcx.dev/@standards.buildingsmart.org/ifc/ , accepting that the
schema is a development version.
Patterns
Pattern : Treat IFCx as in-development at all times
ALWAYS state "IFCx is in development, subject to change" whenever IFCx is
referenced. The IFC5-development examples are explicitly "preliminary and will
be updated."
- NEVER present an
.ifcx structure, key name, or object shape as stable.
- NEVER recommend IFCx for a real project deliverable.
- NEVER compare an IFCx detail to a released IFC version as if both were fixed :
one side of that comparison is unfinished.
For a production exchange, route to ifc-core-version-evolution and target a
released version.
Pattern : Distinguish IFCx (format) from IFC5 (standard)
IFC5 and IFCx are developed together but name different things. ALWAYS keep them
separate :
- "IFC5" is the standard generation : composition, layering, inheritance
semantics, modular domain schemas. Architecture detail lives in
ifc-core-ifc5-architecture.
- "IFCx" is the data format : the
.ifcx JSON files and the ifcx.dev
schema host.
NEVER write "the IFC5 file" when you mean an .ifcx file, and NEVER write "the
IFCx standard" when you mean the IFC5 generation. When a statement is about
bytes on disk, it is IFCx; when it is about the model concept, it is IFC5.
Pattern : Read the node-and-attribute composition graph
An .ifcx file is a JSON document of data objects. ALWAYS read it as a
composition graph, not as a flat instance list :
- Data objects are delimited by
{ and } and "hold the data."
- An object can reference children and can inherit from another object.
Together these construct a tree.
- Objects can be shared across multiple files, or reused within one file.
- The consuming application composes the scene from the available data : it
resolves the child and inheritance references itself.
ALWAYS resolve the composition before interpreting a final value : a property
may be defined on an inherited object or contributed by a layer, not stated
inline. NEVER assume a single object carries the fully resolved state.
This composition / layering model is the IFC5 mechanic; for the multi-author
layering detail (the non-destructive add-firerating example), see
ifc-core-ifc5-architecture.
Pattern : Expect no STEP syntax in an .ifcx file
ALWAYS parse an .ifcx file as JSON. The IFC5 examples state : "There will not
be STEP syntax in IFC 5."
- An
.ifcx file has NO ISO-10303-21; wrapper, NO HEADER section, NO
FILE_DESCRIPTION / FILE_NAME / FILE_SCHEMA, and NO #id=ENTITY(...)
instance lines.
- NEVER apply STEP Physical File parsing logic to an
.ifcx file.
- If an IFC5 example contains an
originalStepInstance field, that field exists
ONLY to show the relation to the original .ifc SPFF file in the example set.
It is an example artefact, NOT a structural requirement of IFCx. NEVER treat
originalStepInstance as a mandatory IFCx field.
In the IFC5 example set, .ifcx JSON files are paired with .ifc STEP files in
IFC4 / IFC4.3 format purely for demonstration.
Pattern : Resolve the IFCx schema from the @org/path namespace
The IFCx JSON Schema is published at
https://ifcx.dev/@standards.buildingsmart.org/ifc/.
- The
@organization/path form is a package-registry / linked-data style
addressing scheme : the @standards.buildingsmart.org segment identifies
the publishing organisation, and the path segment identifies the schema.
ifcx.dev is published via GitHub Pages from the
https://github.com/buildingSMART/IFCx.dev repository.
- The schema is authored in TypeSpec (
.tsp source files); the JSON Schema
served at ifcx.dev is generated from that TypeSpec source. TypeSpec
replaces EXPRESS as the schema definition language for this generation.
ALWAYS treat the ifcx.dev schema as a development artefact : it is generated
from evolving TypeSpec source and changes with the IFC5-development work.
Pattern : Label graph-data and schema.org claims carefully
ifcx.dev carries the tagline "The schema.org for IFC", and the IFCx mechanics
(named objects with attributes, inheritance, composition, cross-file sharing,
external references to bSDD) are consistent with a web-native, graph-shaped data
direction.
- ALWAYS describe what is verified : JSON encoding, node-and-attribute
objects, composition, inheritance, external references.
- NEVER assert that IFCx is RDF or uses JSON-LD : the specific
linked-data serialisation is not verified against an official source.
- NEVER assert a USD (Universal Scene Description) dependency : the composition
mechanic is verified, a USD lineage is not. State the mechanic, not the
lineage.
When asked about the "schema.org for IFC" tagline, ALWAYS present it as a stated
direction, NEVER as an implemented, finalised technology choice.
Reference Links
references/methods.md : the IFCx fact sheet : verified properties of the
.ifcx format, the schema-publication namespace, the TypeSpec toolchain, the
IFC5-versus-IFCx split, and the verified-versus-unverified boundary.
references/examples.md : worked scenarios : recognising an .ifcx file,
reading the composition graph, the IFC5-versus-IFCx wording test, deciding
whether IFCx applies.
references/anti-patterns.md : the IFCx mistakes this skill prevents, each
with the reason it fails.
Official sources
Related skills
ifc-core-ifc5-architecture : the IFC5 standard generation (composition,
layering, modular domain schemas, TypeSpec).
ifc-core-version-evolution : how IFCx relates to the released IFC versions.
ifc-impl-library-selection : tooling that reads IFCx, including emerging
Rust tooling.
1---2name: ifc-core-ifcx-architecture3description: Use when you encounter an .ifcx file, need to explain the IFCx JSON encoding of the next-generation IFC, or must decide whether IFCx applies to a task. Prevents treating IFCx as a finalised production format, confusing IFCx (the format) with IFC5 (the standard generation), expecting STEP syntax inside an .ifcx file, and over-claiming an RDF or USD lineage that is not verified. Covers the .ifcx JSON file format, the node-and-attribute composition graph with inheritance and children, the "schema.org for IFC" direction, the JSON Schema published at ifcx.dev under the @org/path namespace, and the relationship between IFC5 and IFCx. Keywords: IFCx, .ifcx, IFC5 format, next generation IFC, IFCx JSON, ifcx.dev, schema.org for IFC, composition graph, layering, inheritance, TypeSpec schema, what is an ifcx file, how do I open an ifcx file, IFCx vs IFC5, is IFCx ready, ifcx file will not open, JSON IFC format, IFCx schema namespace, in development.4license: MIT5---67# IFC Core : IFCx Architecture89**IN DEVELOPMENT : subject to change.** IFCx is not a released or ratified10specification. It is developed in the public `buildingSMART/IFC5-development`11repository, whose own examples are explicitly labelled *"preliminary and will be12updated."* Every fact in this skill is a moving target. NEVER teach IFCx as a13stable target and NEVER recommend it for a production exchange.1415IFCx is the JSON data encoding of the IFC5 generation : the `.ifcx` file format16and its `ifcx.dev` schema host. This skill explains what an `.ifcx` file is, how17its composition graph works, and how IFCx relates to IFC5. It is the format-side18counterpart to `ifc-core-ifc5-architecture`, which covers the IFC5 standard.1920## Quick Reference2122### What IFCx is2324- IFCx is **the JSON data encoding of the IFC5 generation**. An IFCx file is, in25 the words of the IFC5 examples, *"a JSON file, shared as .ifcx."*26- The file extension is **`.ifcx`**.27- IFCx data is organised into **objects delimited by `{` and `}`** that *"hold28 the data."* These objects can be **shared across multiple files, or within one29 file.**30- Objects can refer to **children** and can **inherit** : *"This is how you31 construct a tree."* IFCx is a node-and-attribute composition graph.32- A consumer does NOT read a pre-resolved model : *"An implementation needs to33 compose the scene from the available data."*34- The JSON Schema for IFCx is published at35 **`https://ifcx.dev/@standards.buildingsmart.org/ifc/`**.36- The schema source is written in **TypeSpec** (`.tsp` files); the JSON Schema37 is generated from that TypeSpec source.38- `ifcx.dev` carries the tagline **"The schema.org for IFC"**, signalling a39 web-native, semantic, graph-shaped data direction.4041### What IFCx is NOT4243- IFCx is **NOT a STEP format**. The IFC5 examples state plainly : *"There will44 not be STEP syntax in IFC 5."* An `.ifcx` file has **no `ISO-10303-21`45 wrapper, no `HEADER` section, and no `FILE_SCHEMA` clause.**46- IFCx is **NOT finalised**. The specification is in development; schema,47 objects, and structure will change before any release.48- IFCx is **NOT the same thing as IFC5**. IFC5 is the standard generation; IFCx49 is its file format. See the decision tree below.50- IFCx is **NOT confirmed to be RDF or JSON-LD**. The graph shape is verified;51 the specific linked-data serialisation is not. See the labelling pattern.5253### IFC5 versus IFCx5455| Term | What it names |56|------|---------------|57| **IFC5** | The next-generation **standard** : the composition semantics, the modular domain schemas, the layering model. |58| **IFCx** | The next-generation **data format** : the `.ifcx` JSON encoding and the `ifcx.dev` JSON-Schema host. |5960ALWAYS use "IFC5" for the conceptual standard and "IFCx" / `.ifcx` for the61concrete file format. NEVER treat the two terms as interchangeable : they are62routinely conflated and the distinction is the point of having two skills.6364## Decision Trees6566### Is IFCx the right target for this task?6768```69Is this a production exchange another tool must reliably consume?70|71+-- YES --> NEVER use IFCx. It is in development and not finalised.72| Target a released IFC version : IFC2x3 TC1, IFC4 ADD2 TC1,73| or IFC4.3 ADD2 (STEP / ifcXML / ifcJSON). See74| ifc-core-version-evolution.75|76+-- NO, this is research or prototyping against the IFC5-development repo77 --> IFCx is acceptable, WITH the explicit caveat that the .ifcx78 structure and schema will change before release.79```8081### Which term applies : IFC5 or IFCx?8283```84What is being described?85|86+-- The composition / layering model, modular domain schemas, the87| standard generation as a concept88| --> "IFC5". See ifc-core-ifc5-architecture.89|90+-- A concrete .ifcx file, the JSON encoding, the ifcx.dev schema host91 --> "IFCx". This skill.92```9394### How to approach an .ifcx file9596```97You have a file with the .ifcx extension.98|99+-- Parse it as JSON. It is a JSON document, not a STEP file.100| NEVER look for ISO-10303-21 / HEADER / FILE_SCHEMA : they are absent.101|102+-- Read the data objects ({ ... }) and their child / inherit references.103|104+-- Compose the scene : resolve the composition tree yourself. The file105| is not a pre-resolved graph.106|107+-- Validate against the JSON Schema at108 ifcx.dev/@standards.buildingsmart.org/ifc/ , accepting that the109 schema is a development version.110```111112## Patterns113114### Pattern : Treat IFCx as in-development at all times115116ALWAYS state "IFCx is in development, subject to change" whenever IFCx is117referenced. The IFC5-development examples are explicitly *"preliminary and will118be updated."*119120- NEVER present an `.ifcx` structure, key name, or object shape as stable.121- NEVER recommend IFCx for a real project deliverable.122- NEVER compare an IFCx detail to a released IFC version as if both were fixed :123 one side of that comparison is unfinished.124125For a production exchange, route to `ifc-core-version-evolution` and target a126released version.127128### Pattern : Distinguish IFCx (format) from IFC5 (standard)129130IFC5 and IFCx are developed together but name different things. ALWAYS keep them131separate :132133- "IFC5" is the **standard generation** : composition, layering, inheritance134 semantics, modular domain schemas. Architecture detail lives in135 `ifc-core-ifc5-architecture`.136- "IFCx" is the **data format** : the `.ifcx` JSON files and the `ifcx.dev`137 schema host.138139NEVER write "the IFC5 file" when you mean an `.ifcx` file, and NEVER write "the140IFCx standard" when you mean the IFC5 generation. When a statement is about141bytes on disk, it is IFCx; when it is about the model concept, it is IFC5.142143### Pattern : Read the node-and-attribute composition graph144145An `.ifcx` file is a JSON document of data objects. ALWAYS read it as a146composition graph, not as a flat instance list :147148- Data objects are delimited by `{` and `}` and *"hold the data."*149- An object can reference **children** and can **inherit** from another object.150 Together these construct a **tree**.151- Objects can be **shared across multiple files, or reused within one file**.152- The consuming application **composes the scene from the available data** : it153 resolves the child and inheritance references itself.154155ALWAYS resolve the composition before interpreting a final value : a property156may be defined on an inherited object or contributed by a layer, not stated157inline. NEVER assume a single object carries the fully resolved state.158159This composition / layering model is the IFC5 mechanic; for the multi-author160layering detail (the non-destructive `add-firerating` example), see161`ifc-core-ifc5-architecture`.162163### Pattern : Expect no STEP syntax in an .ifcx file164165ALWAYS parse an `.ifcx` file as JSON. The IFC5 examples state : *"There will not166be STEP syntax in IFC 5."*167168- An `.ifcx` file has NO `ISO-10303-21;` wrapper, NO `HEADER` section, NO169 `FILE_DESCRIPTION` / `FILE_NAME` / `FILE_SCHEMA`, and NO `#id=ENTITY(...)`170 instance lines.171- NEVER apply STEP Physical File parsing logic to an `.ifcx` file.172- If an IFC5 example contains an `originalStepInstance` field, that field exists173 ONLY to show the relation to the original `.ifc` SPFF file in the example set.174 It is an example artefact, NOT a structural requirement of IFCx. NEVER treat175 `originalStepInstance` as a mandatory IFCx field.176177In the IFC5 example set, `.ifcx` JSON files are paired with `.ifc` STEP files in178IFC4 / IFC4.3 format purely for demonstration.179180### Pattern : Resolve the IFCx schema from the @org/path namespace181182The IFCx JSON Schema is published at183`https://ifcx.dev/@standards.buildingsmart.org/ifc/`.184185- The `@organization/path` form is a **package-registry / linked-data style186 addressing scheme** : the `@standards.buildingsmart.org` segment identifies187 the publishing organisation, and the path segment identifies the schema.188- `ifcx.dev` is published via GitHub Pages from the189 `https://github.com/buildingSMART/IFCx.dev` repository.190- The schema is authored in **TypeSpec** (`.tsp` source files); the JSON Schema191 served at `ifcx.dev` is **generated** from that TypeSpec source. TypeSpec192 replaces EXPRESS as the schema definition language for this generation.193194ALWAYS treat the `ifcx.dev` schema as a development artefact : it is generated195from evolving TypeSpec source and changes with the IFC5-development work.196197### Pattern : Label graph-data and schema.org claims carefully198199`ifcx.dev` carries the tagline "The schema.org for IFC", and the IFCx mechanics200(named objects with attributes, inheritance, composition, cross-file sharing,201external references to bSDD) are consistent with a web-native, graph-shaped data202direction.203204- ALWAYS describe what is verified : **JSON encoding, node-and-attribute205 objects, composition, inheritance, external references.**206- NEVER assert that IFCx **is** RDF or **uses** JSON-LD : the specific207 linked-data serialisation is not verified against an official source.208- NEVER assert a USD (Universal Scene Description) dependency : the composition209 mechanic is verified, a USD lineage is not. State the mechanic, not the210 lineage.211212When asked about the "schema.org for IFC" tagline, ALWAYS present it as a stated213**direction**, NEVER as an implemented, finalised technology choice.214215## Reference Links216217- `references/methods.md` : the IFCx fact sheet : verified properties of the218 `.ifcx` format, the schema-publication namespace, the TypeSpec toolchain, the219 IFC5-versus-IFCx split, and the verified-versus-unverified boundary.220- `references/examples.md` : worked scenarios : recognising an `.ifcx` file,221 reading the composition graph, the IFC5-versus-IFCx wording test, deciding222 whether IFCx applies.223- `references/anti-patterns.md` : the IFCx mistakes this skill prevents, each224 with the reason it fails.225226### Official sources227228- IFC5 development repository : https://github.com/buildingSMART/IFC5-development229- IFC5 examples FAQ : https://raw.githubusercontent.com/buildingSMART/IFC5-development/main/Examples_FAQ.md230- IFC5 schema readme : https://raw.githubusercontent.com/buildingSMART/IFC5-development/main/schema/readme.md231- IFCx schema host : https://ifcx.dev/232- IFCx.dev repository : https://github.com/buildingSMART/IFCx.dev233234### Related skills235236- `ifc-core-ifc5-architecture` : the IFC5 standard generation (composition,237 layering, modular domain schemas, TypeSpec).238- `ifc-core-version-evolution` : how IFCx relates to the released IFC versions.239- `ifc-impl-library-selection` : tooling that reads IFCx, including emerging240 Rust tooling.