IGESLoader is a modern TypeScript-native IGES file loader for Three.js.
Warning
This package is currently in active development and may not be stable. Use with caution.
Note
Wireframe entities (points, lines, arcs, paths, NURBS curves) are supported first. Surfaces and B-rep solids are planned — see docs/ROADMAP.md.
✨ Layered architecture — iges-core parser (no Three.js) + thin IGESLoader
📦 Modern ESM/CJS — Dual package format with tree-shaking support
🔧 Typed geometry model — parseAndResolveIGES() for custom pipelines
⚡ Fast — Optimized build with tsup and pnpm workspaces
🧪 Tested — Unit tests + Wikipedia slot fixture
🤖 AI-friendly — See AGENTS.md and docs/ENTITY_IMPLEMENTATION.md
iges-core/ Parse IGES → ResolvedIGESModel (geometry[])
src/three/ toThreeGroup() → THREE.Group
IGESLoader.ts FileLoader + parse + tessellate
Full details: docs/ARCHITECTURE.md · Roadmap: docs/ROADMAP.md
three is a peer dependency — install it alongside this package (any version >=0.160.0 is supported; development targets Three.js r184).
pnpm add three-iges-loader threeOr using npm:
npm install three-iges-loader threeOr using yarn:
yarn add three-iges-loader threeimport * as THREE from "three";
import { IGESLoader } from "three-iges-loader";
const loader = new IGESLoader();
const iges_file_path = "/file.iges";
loader.load(
// resource URL
iges_file_path,
// called when load is complete
function (object) {
sceneGeometry.add(object);
},
// called when loading is in progress
function (xhr) {
console.log((xhr.loaded / xhr.total) * 100 + "% loaded");
},
// called when loading has errors
function (error) {
console.log("Error: " + error);
}
);import * as THREE from "three";
import { IGESLoader } from "three-iges-loader";
const scene = new THREE.Scene();
const loader = new IGESLoader();
loader.load(
"/path/to/file.iges",
(geometry: THREE.Group) => {
scene.add(geometry);
},
(xhr: ProgressEvent) => {
console.log(`${(xhr.loaded / xhr.total) * 100}% loaded`);
},
(error: Error | ErrorEvent) => {
console.error("Error loading IGES file:", error);
}
);import { useLoader } from "@react-three/fiber";
import { IGESLoader } from "three-iges-loader";
function IgesModel({ url }: { url: string }) {
const group = useLoader(IGESLoader, url);
return <primitive object={group} />;
}import { parseAndResolveIGES, toThreeGroup } from "three-iges-loader";
const text = await fetch("/model.igs").then((r) => r.text());
const model = parseAndResolveIGES(text);
const group = toThreeGroup(model, { convertZUpToYUp: true });
scene.add(group);- Node.js >= 24.0.0 (LTS)
- pnpm (recommended) or npm
# Install dependencies (pnpm workspace: root + packages/iges-core)
pnpm install
# Build iges-core + three-iges-loader
pnpm build
# Run all tests (core unit + loader integration)
pnpm test
# Run tests in watch mode
pnpm test:watch
# Type check
pnpm type-check
# Lint and format
pnpm lint
pnpm formatThe package includes a modern Vite-based example:
# Start the development server
pnpm dev:example
# Build the example
pnpm build:exampleThen open http://localhost:3000 in your browser.
new IGESLoader(manager?: THREE.LoadingManager)load(url, onLoad, onProgress?, onError?)
Load an IGES file from a URL.
url: string- The URL or path to the IGES fileonLoad: (geometry: THREE.Group) => void- Callback when loading is completeonProgress?: (event: ProgressEvent) => void- Callback for loading progressonError?: (event: ErrorEvent | Error) => void- Callback when an error occurs
parse(data)
Parse IGES file content.
data: string- The IGES file content as string- Returns:
THREE.Group- A Three.js Group containing the parsed geometry
import type { ResolvedIGESModel, GeometryEntity, LineGeometry } from "three-iges-loader";| Type | Name | Status |
|---|---|---|
| 116 | Point | ✅ |
| 110 | Line | ✅ |
| 100 | Circular arc | ✅ |
| 106 | Copious data / paths | ✅ partial forms |
| 126 | Rational B-spline curve | ✅ sampled |
| 124 | Transform matrix | ✅ resolve only |
| 102 | Composite curve | ⬜ roadmap |
| 128+ | Surfaces / B-rep | ⬜ deferred |
Contributions are welcome — see CONTRIBUTING.md.
| Doc | Purpose |
|---|---|
| CONTRIBUTING.md | Setup, PR flow, changesets |
| AGENTS.md | AI coding assistants |
| RELEASING.md | Versioning & npm (maintainers) |
| docs/GITHUB_SETUP.md | One-time GitHub/npm configuration |
| SECURITY.md | Vulnerability reporting |
Releases: Semantic versioning via Changesets; merges to main open a Version Packages PR, then publish to npm automatically.
MIT © Alex Marinov
- Based on the original work by Alex Marinov
- Maintained by Konsept Design
- Built with Three.js
- IGES File Specification
- IGES Version 5.3 Specification
- IGES Version 6.0 Specification
- IGES on Wikipedia
Alex Marinov - Konsept Design Limited