# @ifc-lite/data

> Columnar data structures for IFC-Lite

Latest version **5.3.0** (published 2026-09-24) · MPL-2.0 license · 0 weekly downloads

## Install

```sh
npm install @ifc-lite/data
pnpm add @ifc-lite/data
yarn add @ifc-lite/data
bun add @ifc-lite/data
```

## Health

**Score 75/100 (B)** — status: active.

Positive: has types; esm support; no vulnerabilities; has provenance; recently updated; high maintenance score; high quality score.

Warnings: low downloads; large bundle.

## Facts

| | |
|---|---|
| Version | 5.3.0 |
| Published | 2026-09-24 |
| First published | 2026-01-12 |
| Weekly downloads | 0 |
| License | MPL-2.0 |
| TypeScript types | bundled |
| Module format | ESM + CommonJS |
| Dependencies | 1 |
| Unpacked size | 9.7 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 377 |
| Author | Louis True |
| Maintainers | louistrue |
| Keywords | ifc, bim, data, columnar, aec |

## Links

- npm: https://www.npmjs.com/package/@ifc-lite/data
- Repository: https://github.com/LTplus-AG/ifc-lite
- Homepage: https://ifclite.dev/docs/
- Issues: https://github.com/LTplus-AG/ifc-lite/issues
- npm.io page: https://npm.io/package/@ifc-lite/data

## Dependencies (1)

- [@ifc-lite/encoding](https://npm.io/package/@ifc-lite/encoding.md) ^2.2.0

## Alternatives

- [gamedig](https://npm.io/package/gamedig.md) — 29.3K weekly downloads
- [join-monster](https://npm.io/package/join-monster.md) — 12.8K weekly downloads
- [masked](https://npm.io/package/masked.md) — 5.5K weekly downloads
- [@comunica/actor-query-process-explain-logical](https://npm.io/package/@comunica/actor-query-process-explain-logical.md) — 4.7K weekly downloads
- [@veracity/vui](https://npm.io/package/@veracity/vui.md) — 4.6K weekly downloads

## Recent versions

- 5.3.0 (latest) — 2026-09-24
- 5.1.0 — 2026-09-24
- 5.0.0 — 2026-09-20
- 4.5.0 — 2026-09-18
- 4.4.0 — 2026-09-14
- 4.3.0 — 2026-09-13
- 4.2.1 — 2026-09-13
- 4.2.0 — 2026-09-11
- 4.1.0 — 2026-09-10
- 4.0.0 — 2026-09-04
- 3.5.1 — 2026-08-27
- 3.5.0 — 2026-08-27
- 3.4.1 — 2026-08-24
- 3.4.0 — 2026-08-21
- 3.3.0 — 2026-08-13
- … 57 more at https://npm.io/package/@ifc-lite/data/versions

## README

# @ifc-lite/data

Columnar data structures for IFClite. TypedArray-backed storage for entities, properties, quantities, and relationships — the layout that lets `@ifc-lite/parser` hold a 200 MB IFC file in ~30 MB of RAM and lets `@ifc-lite/query` filter it in milliseconds.

## Installation

```bash
npm install @ifc-lite/data
```

## When to use this directly

Most users get these structures for free as the output of `@ifc-lite/parser`'s `parseColumnar()`. Use this package directly when you're:

- Building a custom data source (e.g. server-side parquet → IFClite tables)
- Writing a tool that consumes the columnar format outside the parser pipeline
- Looking up EPSG codes (the geo-reference index is shipped here)

## Build an entity table

```typescript
import { EntityTableBuilder, StringTable } from '@ifc-lite/data';

const strings = new StringTable();
const entities = new EntityTableBuilder(1, strings);

// add(expressId, type, globalId, name, description, objectType)
entities.add(42, 'IFCWALL', '1abc2def3...', 'Wall A', '', '');

const table = entities.build();

console.log(table.count);                    // 1
console.log(strings.get(table.name[0]));     // 'Wall A'
console.log(table.getTypeName(42));          // 'IfcWall'
```

## Relationship graph

Edges are stored CSR-style (compressed sparse row) — fast to traverse, compact in memory.

```typescript
import { RelationshipGraphBuilder, RelationshipType } from '@ifc-lite/data';

const builder = new RelationshipGraphBuilder();

// Storey 100 contains walls 42, 43, 44 (last arg = the IfcRel* express id)
builder.addEdge(100, 42, RelationshipType.ContainsElements, 200);
builder.addEdge(100, 43, RelationshipType.ContainsElements, 200);
builder.addEdge(100, 44, RelationshipType.ContainsElements, 200);

const graph = builder.build();

const contained = graph.getRelated(100, RelationshipType.ContainsElements, 'forward');
console.log(contained); // [42, 43, 44]
```

## EPSG lookup

The full EPSG database ships as a pre-built index — geo-referenced models can resolve coordinate systems offline at runtime.

```typescript
import { lookupEpsgByCode, searchEpsgIndex } from '@ifc-lite/data';

const lv95 = await lookupEpsgByCode(2056);
// { code: '2056', name: 'CH1903+ / LV95', kind: 'projected', ... }

const matches = await searchEpsgIndex('web mercator');
// → top text-search results; ordered by relevance
console.log(matches.map(m => `${m.code} ${m.name}`));
```

The index is generated at build time and committed to the repo, so normal builds stay offline. Refresh it with `pnpm generate:epsg-index`.

## API

See the [API Reference](https://ifclite.dev/docs/api/typescript/#ifc-litedata).

## License

[MPL-2.0](../../LICENSE)

---
_Source: https://npm.io/package/@ifc-lite/data · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
