Overview
IFC-Lite is a next-generation IFC (Industry Foundation Classes) platform built with Rust + WebAssembly for parsing, geometry processing, and WebGPU for 3D visualization. It's designed to be a 95x smaller and significantly faster alternative to existing web-based IFC solutions.
Features
| Feature | Description |
|---|---|
| STEP/IFC Parsing | Zero-copy tokenization at ~1,259 MB/s with full IFC4 schema support (776 entities) |
| Streaming Pipeline | Progressive geometry processing - first triangles render in 300-500ms |
| WebGPU Rendering | Modern GPU-accelerated 3D visualization with depth testing and frustum culling |
| Columnar Storage | Memory-efficient TypedArray storage with 30% string deduplication |
| Zero-Copy GPU | Direct WASM memory binding to GPU buffers |
Quick Start
Option 1: Create a New Project (Recommended)
Get started instantly without cloning the repo:
&&
Or create a React viewer:
&&
Option 2: Install Packages Directly
Add IFC-Lite to your existing project:
import { IfcParser } from '@ifc-lite/parser';
const parser = new IfcParser();
const result = parser.parse(ifcBuffer);
console.log(`Found ${result.entities.length} entities`);
For full 3D rendering, add geometry and renderer packages:
Option 3: Rust/Cargo
For Rust projects:
use parse_ifc;
let result = parse_ifc?;
println!;
Option 4: Clone the Repo (Contributors)
For contributing or running the full demo app:
&&
Open http://localhost:5173 and load an IFC file.
Note: Requires Node.js 18+ and pnpm 8+. No Rust toolchain needed - WASM is pre-built.
Basic Usage
import { IfcParser } from '@ifc-lite/parser';
import { Renderer } from '@ifc-lite/renderer';
// Parse IFC file
const parser = new IfcParser();
const result = parser.parse(ifcArrayBuffer);
// Access entities
const walls = result.entities.filter(e => e.type === 'IFCWALL');
console.log(`Found ${walls.length} walls`);
// Render geometry (requires @ifc-lite/renderer)
const renderer = new Renderer(canvas);
await renderer.loadGeometry(result.geometry);
renderer.render();
Documentation
| Resource | Description |
|---|---|
| User Guide | Complete guide with tutorials and examples |
| API Reference | Rustdoc API documentation |
| Architecture | System design and data flow |
| Contributing | How to contribute to the project |
Architecture
IFC files flow through three layers:
Parser (Rust/WASM) — Zero-copy STEP tokenizer, entity scanner, and geometry processor using nom, earcutr, and nalgebra.
Data (TypeScript) — Columnar TypedArrays for properties, CSR graph for relationships, GPU-ready geometry buffers.
Output — WebGPU renderer, Parquet analytics, glTF/JSON-LD/CSV export.
Project Structure
ifc-lite/
├── rust/ # Rust/WASM backend
│ ├── core/ # IFC/STEP parsing (~2,000 LOC)
│ ├── geometry/ # Geometry processing (~2,500 LOC)
│ └── wasm-bindings/ # JavaScript API (~800 LOC)
│
├── packages/ # TypeScript packages
│ ├── parser/ # High-level IFC parser
│ ├── geometry/ # Geometry bridge (WASM)
│ ├── renderer/ # WebGPU rendering
│ ├── cache/ # Binary cache format
│ ├── query/ # Query system
│ ├── data/ # Columnar data structures
│ ├── spatial/ # Spatial indexing
│ ├── export/ # Export formats
│ └── codegen/ # Schema generator
│
├── apps/
│ └── viewer/ # React web application
│
├── docs/ # Documentation (MkDocs)
└── plan/ # Technical specifications
Performance
Bundle Size Comparison
| Library | Size | Gzipped |
|---|---|---|
| IFC-Lite | ~86 KB | ~28 KB |
| Traditional WASM | 8+ MB | N/A |
| Reduction | 93% | - |
Parse Performance
| Model Size | IFC-Lite | Notes |
|---|---|---|
| 10 MB | ~800ms | Small models |
| 50 MB | ~2.7s | Typical models |
| 100+ MB | ~5s+ | Complex geometry |
Geometry Processing
- 1.9x faster mesh extraction than traditional solutions
- Streaming pipeline with batched processing (100 meshes/batch)
- First triangles visible in 300-500ms
Browser Requirements
| Browser | Minimum Version | WebGPU |
|---|---|---|
| Chrome | 113+ | ✅ |
| Edge | 113+ | ✅ |
| Firefox | 127+ | ✅ |
| Safari | 18+ | ✅ |
Development (Contributors)
For contributing to IFC-Lite itself:
# Rust/WASM development (optional - WASM is pre-built)
&&
Packages
| Package | Description | Status |
|---|---|---|
create-ifc-lite |
Project scaffolding CLI | ✅ Stable |
@ifc-lite/parser |
STEP tokenizer & entity extraction | ✅ Stable |
@ifc-lite/geometry |
Geometry processing bridge | ✅ Stable |
@ifc-lite/renderer |
WebGPU rendering pipeline | ✅ Stable |
@ifc-lite/cache |
Binary cache for instant loading | ✅ Stable |
@ifc-lite/query |
Fluent & SQL query system | 🚧 Beta |
@ifc-lite/data |
Columnar data structures | ✅ Stable |
@ifc-lite/spatial |
Spatial indexing & culling | 🚧 Beta |
@ifc-lite/export |
Export (glTF, Parquet, etc.) | 🚧 Beta |
Rust Crates
| Crate | Description | Status |
|---|---|---|
ifc-lite-core |
STEP/IFC parsing | ✅ Stable |
ifc-lite-geometry |
Mesh triangulation | ✅ Stable |
ifc-lite-wasm |
WASM bindings | ✅ Stable |
Contributing
We welcome contributions! Please see our Contributing Guide for details.
# Fork and clone
# Create a branch
# Make changes and test
# Submit a pull request
License
This project is licensed under the Mozilla Public License 2.0.
Acknowledgments
- Built with nom for parsing
- earcutr for polygon triangulation
- nalgebra for linear algebra
- wasm-bindgen for Rust/JS interop