npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@opengeometry/openplans

v0.1.5

Published

Browser-native TypeScript library for architectural BIM authoring. One class — OpenPlans — to place walls, doors, windows, floors, levels, grids, and dimensions, then export to IFC, PDF, or DXF. Three.js renderer with an OpenGeometry WebAssembly kernel. N

Readme


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.