Skip to content

OpenGeometry-io/OpenPlans

OpenGeometry

OpenPlans

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.

npm version license built on OpenGeometry three.js Discord Twitter LinkedIn

Website · Documentation · Live Demos · npm · OpenGeometry Kernel


Actively maintained. OpenPlans ships regular updates and welcomes bug reports, feature requests, and contributions on GitHub.

What is OpenPlans?

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.

Built on OpenGeometry

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.

What you can build

  • 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.

Quick Start

npm install @opengeometry/openplans three camera-controls
import { 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.

Features

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 ModesCameraMode.Plan (orthographic top-down), CameraMode.Model (perspective 3D)

Themeslight, 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.

Paper Frames and PDF Export

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.

IFC Export

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.

Demos

Live demos: try.openplans.io

To run the example gallery locally:

npm install
npm run dev
# open http://localhost:5555

Useful entry points by category:

GeneralQuick Start · IFC export · DXF export

ElementsSingle wall · Polyline wall · Wall opening · Door · Window · Opening

PrimitivesLine · Arc · Polyline · Rectangle

ShapesCuboid · Cylinder

DatumsAll datums · Level · Grid · Section line · Elevation marker · Reference plane · Project origin

DimensionsLine · Angle · Radius

Drawings & SheetsPaper frame export · Viewport block

ViewsView creation

Documentation

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.

Architecture

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. Consumes openplans-core types 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.

Repository Layout

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)

Build From Source

Prerequisites: Node.js 18 or newer, npm.

npm install
npm run build

Useful commands:

  • npm run dev — start the Vite example server on port 5555
  • npm run build — build the library into dist/
  • npm run build-examples — build the example site into examples/dist/

For local development against a sibling OpenGeometry kernel checkout, see developer.md.

Who is this for?

  • 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.

Community

Contributing

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.

About

Design Buildings and Floorplans

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors