@ifc-lite/ifcx
IFC5 (IFCX) parser for IFClite. Parses the JSON-based IFCX format with ECS composition, USD geometry, and federated layer support — and writes IFCX too. Compatible with the existing IFClite data pipeline so you can mix IFC4 STEP and IFC5 IFCX in the same scene.
Installation
npm install @ifc-lite/ifcx
Parse an IFCX file
import { parseIfcx } from '@ifc-lite/ifcx';
const buffer = await fetch('model.ifcx').then(r => r.arrayBuffer());
const result = await parseIfcx(buffer, {
onProgress: ({ phase, percent }) => console.log(`${phase}: ${percent}%`),
});
console.log(`${result.entityCount} entities, ${result.meshes.length} pre-tessellated meshes`);
console.log(`Schema: ${result.schemaVersion}`); // 'IFC5'
// result also carries properties, quantities, relationships, spatial
// hierarchy, and decoded point clouds (result.pointClouds)
// Same MeshData[] shape as @ifc-lite/parser — feed straight into renderer
renderer.loadGeometry(result.meshes);
Auto-detect format
import { detectFormat } from '@ifc-lite/ifcx';
const format = detectFormat(buffer);
// 'ifcx' | 'ifc' | 'glb' | 'unknown'
if (format === 'ifcx') {
await parseIfcx(buffer);
} else if (format === 'ifc') {
await ifcParser.parse(buffer); // @ifc-lite/parser
}
Federated layers
IFCX supports overlays — a base file with the geometry, plus one or more layers that add or override properties. The package merges them in priority order:
import { parseFederatedIfcx } from '@ifc-lite/ifcx';
const result = await parseFederatedIfcx([
{ buffer: baseBytes, name: 'architecture.ifcx' },
{ buffer: psetOverlayBytes, name: 'fire-safety-overlay.ifcx' },
{ buffer: scheduleOverlayBytes, name: 'construction-schedule.ifcx' },
]);
// Properties from later layers take precedence over earlier ones —
// fire-safety FireRating values overwrite anything in the base.
Write IFCX
The low-level writer (IfcxWriter / exportToIfcx) lives in this package. For the full IFC-to-IFC5 conversion path (cross-schema, geometry as USD, mutations applied), use Ifc5Exporter from @ifc-lite/export:
import { Ifc5Exporter } from '@ifc-lite/export';
const exporter = new Ifc5Exporter(store, geometryResult);
const ifcx = exporter.export({ includeGeometry: true });
// ifcx.content → IFCX JSON string, save as .ifcx
API
See the Parsing Guide and API Reference.