The browser-native TypeScript library for architectural BIM authoring — walls, doors, windows, levels, grids, dimensions, and IFC / PDF / DXF export in one API.
One class. Every architectural element. Every export format.
Pure browser — no server, no plugin, no compromise.
Website · Documentation · Live Demos · npm · OpenGeometry Kernel
Actively maintained. OpenPlans ships regular updates and welcomes bug reports, feature requests, and contributions on GitHub.
OpenPlans is a TypeScript toolkit for authoring architectural plans in the browser. It gives architects, BIM developers, and AEC tooling teams a single, integrated environment to:
- Draft 2D and 3D architectural elements (walls, doors, windows, openings, floors)
- Place reference datums (levels, grids, section lines, elevation markers, project origin)
- Compose printable drawing sheets with linked viewports and dimensions
- Export to IFC (semantic BIM), PDF (vector sheets), and DXF (CAD interchange)
Under the hood, every piece of geometry is generated and operated on by the OpenGeometry kernel — a Rust + WebAssembly CAD kernel that runs entirely in the browser. OpenPlans is the architectural-domain layer; OpenGeometry is the geometry engine.
OpenPlans does not implement its own geometry. Every wall extrusion, every CSG cut for a window, every B-rep solid that ends up in the IFC export is computed by the OpenGeometry kernel.
| OpenGeometry provides | OpenPlans turns it into |
|---|---|
Polygon, Solid, Sweep |
Walls, slabs, openings |
Arc, Line, Polyline, Rectangle |
2D primitives and door swing arcs |
Cuboid, Cylinder |
Generic 3D shapes and volume elements |
Boolean operations (subtract, polygon-with-holes) |
Doors and windows cut into walls |
| IFC B-rep serialization | Standards-compliant IFCWALL, IFCDOOR, IFCWINDOW |
This separation means OpenPlans inherits OpenGeometry's robustness, AI-friendly API surface, and IFC fidelity for free, while focusing on the architectural domain — semantic elements, sheets, dimensions, and exports.
If you need lower-level geometry primitives directly, work with OpenGeometry. If you are building floor plans, drawing sets, or BIM export pipelines in the browser, OpenPlans is the higher-level toolkit you want.
- Floor plan editors — drag-and-drop walls, doors, windows, and room layouts in the browser
- Space planning tools — level-based layouts with grids, section lines, and elevation markers
- BIM authoring apps — export semantically valid IFC from browser interactions, no server round-trip
- Drawing sheet composers — linked viewports on paper frames, exported as vector PDF or DXF
- 3D architectural modellers — switch between orthographic plan view and perspective 3D view
- AI-driven layout generators — declarative TypeScript API makes it straightforward for agents to generate and export buildings programmatically
If you only need a CAD geometry kernel without the architectural semantics, use OpenGeometry directly.
npm install @opengeometry/openplans three camera-controlsimport { CameraMode, OpenPlans } from "@opengeometry/openplans";
const container = document.getElementById("app");
if (!container) throw new Error("Missing app container");
// One class to set up the renderer, camera, and scene
const openPlans = new OpenPlans(container);
// Boot the WebAssembly geometry kernel — must await before creating geometry
await openPlans.setupOpenGeometry();
openPlans.CameraMode = CameraMode.Plan;
// Start placing architectural elements
const wall = openPlans.singleWall();
wall.position.set(2, 0, 0);
const door = openPlans.door();
door.position.set(2, 0, 1);
const window = openPlans.window();
window.position.set(2, 0, 3);That's it — a live 3D scene with walls, doors, and windows, ready to export to IFC or PDF.
Primitives — Line, Arc, Polyline, Rectangle
Shapes — Cuboid, Cylinder
Architectural Elements — SingleWall, PolyWall, WallOpening, Door, Window
Reference Datums — Levels, Grids, ReferencePlanes, SectionLines, ElevationMarkers, ProjectOrigin
Drawing Helpers — PaperFrame (A4 / A3 / A2, portrait & landscape), ViewportBlock, Dimensions (line / angle / radius)
Camera Modes — CameraMode.Plan (orthographic top-down), CameraMode.Model (perspective 3D)
Themes — light, dark, darkBlue
Exports — IFC (semantic BIM with property sets), PDF (vector sheets via jsPDF), DXF (CAD interchange)
The document-first views/sheets API (document-sheet-editor) is available as a preview. The paper-frame PDF path, architectural elements, primitives, and IFC export are the primary production APIs.
Compose linked viewports on a named paper frame and export the result as a downloadable vector PDF. The PaperFrame and ViewportBlock classes are available directly from the package, and PlanPDFGenerator handles the PDF rendering. See docs.openplans.io for the full sheets workflow and API reference.
OpenPlans emits semantically valid IFC with B-rep geometry produced by the OpenGeometry kernel. Walls become IFCWALL, doors become IFCDOOR, windows become IFCWINDOW, each carrying the property sets you'd expect from a BIM authoring tool. See docs.openplans.io for the full IFC workflow and property set reference.
Live demos: try.openplans.io
To run the example gallery locally:
npm install
npm run dev
# open http://localhost:5555Useful entry points by category:
General — Quick Start · IFC export · DXF export
Elements — Single wall · Polyline wall · Wall opening · Door · Window · Opening
Primitives — Line · Arc · Polyline · Rectangle
Datums — All datums · Level · Grid · Section line · Elevation marker · Reference plane · Project origin
Dimensions — Line · Angle · Radius
Drawings & Sheets — Paper frame export · Viewport block
Views — View creation
Full product documentation lives at docs.openplans.io — generated by our auto-docs pipeline and kept in sync with the published package.
For lower-level geometry kernel docs, see docs.opengeometry.io.
OpenPlans is organized as two internal packages under src/packages/:
openplans-core— semantic BIM layer. Owns element types (primitives, shapes, architectural elements, datums), layout/view management, dimensions, and IFC/PDF/DXF exporters. Has no direct renderer dependency.openplans-three— Three.js runtime. Owns scene setup, the render loop, camera (Plan/Model modes), grid, and Three.js helpers. Consumesopenplans-coretypes and drives them through the OpenGeometry kernel.
The OpenPlans class in src/index.ts is the public facade that wires both packages together and is the primary entry point for application code.
src/index.ts Public facade and top-level exports
src/packages/openplans-core/src/ Primitives, shapes, elements, layouts, exporters
src/packages/openplans-three/src/ Three.js runtime, camera, grid, helpers
examples/src/ Browser examples used for manual verification
dist/ Generated library output (do not edit)
examples/dist/ Generated example site output (do not edit)
Prerequisites: Node.js 18 or newer, npm.
npm install
npm run buildUseful commands:
npm run dev— start the Vite example server on port5555npm run build— build the library intodist/npm run build-examples— build the example site intoexamples/dist/
For local development against a sibling OpenGeometry kernel checkout, see developer.md.
- AEC software teams building browser-based plan editors, schematic-design tools, or BIM viewers.
- Architects and design technologists prototyping spatial tools without a desktop CAD installation.
- AI / agent builders generating buildings programmatically and exporting to standards-compliant IFC.
- OpenGeometry users who need an architectural-domain layer instead of working with raw geometry.
- Discord — Join us
- Twitter / X — @openGeometry
- LinkedIn — OpenGeometry
- GitHub Issues — Report a bug or request a feature
OpenPlans is open source under the MIT license. Contributions are welcome — see CONTRIBUTING.md for the workflow.
OpenPlans is part of the OpenGeometry family — a browser-native CAD ecosystem.