OpenStructure is an independent, open-source BIM authoring platform built with Rust and licensed under the Apache License 2.0. It supports contributions and compatible third-party plugins.
The project aims to provide a practical alternative for parametric building design, documentation, and openBIM interoperability. It is not affiliated with Autodesk or Revit and does not use proprietary Autodesk code, assets, formats, or branding.
OpenStructure has a 13-package Rust workspace with a native egui/eframe desktop,
typed semantic model, atomic edits and bounded snapshot undo/redo, versioned
.osb storage, restricted IFC4 exchange, and a depth-buffered 3D viewport with
matching entity selection. The current native model is schema 83, with ordered
live floor-plan graphics rules for walls, doors, windows and slabs.
Native authoring now includes straight and circular walls, bounded straight-wall joins, hosted doors and windows, floors, ceilings, roofs, stairs, columns, straight-run ramps, stair-hosted railings, casework, rooms, architectural grids, and partial curtain systems. Plan and split views support snapping, selection, dimensions, tags, linked enlarged-plan callouts, sections, schedules, and basic sheet/vector-PDF output. These are development slices, not a production BIM or drawing system; the coverage ledger records the exact supported scope.
Recent plan work adds three-click circular-wall drawing with analytic snaps and bounded 3D/plan geometry; dimensions tied to live outer straight-wall faces; and an optional drag gesture to set door/window width on a visible straight wall. Opening tools also include instance pane and lite controls, window plan symbols, per-plan door/window visibility, and phase-aware schedules with grouping and CSV export. See walls and joins, dimensions, and hosted openings for behavior and limits. The latest drawing updates add cut-and-projection section views, semantic section dimensions, and project material hatches for section cuts. Canvas, sheets, and vector PDF share the same cropped section graphics. See sections, material patterns, and the coverage ledger for supported limits. Recent authoring slices also add typed casework, straight-run ramps, stair railings, and curtain assembly editing. See casework, ramps, and curtain systems.
The B/C development baseline is verified on Windows.
The optional external-plugins build supports explicit directory installation,
a minimal plugin manager, a bounded Wasm runtime, descriptor-driven tools,
background commands/geometry, cancellation/stale-result protection, and staged
project opening. Native full-model plugins require API 63/schema 83; generic API
2/container 2 remain unchanged. Independently built Rust Wall
and Rust column examples exercise authoring,
geometry, history, native storage and missing-provider preservation without
rebuilding the host after installation. Native workflows are recorded for
Wall and column.
Plugin-owned migrations use isolated candidate batches and one final validated transaction; independent single/mixed-type examples cover cancellation, late failures, undo/redo and persistence. Container 2 preserves bounded opaque auxiliary files. Native storage preserves plugin envelopes, exact provider requirements, and versioned plan settings. Opening a file never installs or automatically executes a plugin from that file.
Typed opening properties independently inherit, pin or reset dimensions. Selected jamb handles resize with the opposite jamb fixed; the center grip still moves the whole opening. Drafts do not mutate the model or 3D scene. Native full-model plugins require API 63/schema 83; generic API 2/container 2 remain unchanged. Schema 35 adds independent floor/wall/ceiling project material assignments to rooms, live material-name-plus-code schedule cells, and subdued floor RGB fills in resolved plan rooms. See room finishes. Schema 34 adds editable shared material RGB for native wall layers and opening panels/frames, preserving old UUID swatches on migration. Model schema 33 added optional room floor/wall/ceiling finish codes and saved Room Finish schedules. Rows derive area from current room boundaries, retain diagnostics with blank area when unresolved, and reach the existing sheet preview/vector-PDF table path. Bounded IFC v3 exchange preserves type defaults and per-instance inherit/pin intent (including pins equal to defaults), while accepting earlier v1/v2 files.
Model schema 5 added native hosted doors and windows for straight walls, with repeatable click-to-place previews and real 3D/plan apertures. Schema 8 adds reusable project door/window types with type-shared dimensions, typed placement, legacy conversion and atomic regeneration. Model schema 6 added native wall-bounded rooms with derived centerline areas, plan labels, enclosure diagnostics, and stable topology identity. Level-owned straight room-separation lines now participate in room enclosure and plan authoring. Schema 24 introduced a visual profile-extrusion editor for reusable door/window types; one bounded component profile drives the 3D panel/pane and plan-cut symbol. Schema 25 adds an optional editable frame around the inset panel/pane. Hosted voids are still rectangular, and advanced family operations, nesting, formulas and content libraries remain outside the implemented scope. Curved or plugin-defined opening hosts are also unsupported.
Schema 11 extends native wall-endpoint dimensions with Chain and Baseline layouts. One reporting annotation retains ordered wall endpoints; chains measure consecutive segments, while baselines measure each later point from the first on successive parallel lines. This remains a focused native subset, not Revit-equivalent dimensioning.
Schema 10 adds per-door hinge jamb and swing side, a pickable quarter-circle plan arc and a matching open 3D leaf. Existing and new doors default to Start / Left (positive host normal), preserving the previous leaf geometry through schema-9 migration. Exact opening properties preview and apply these instance settings in one undoable edit. Windows, shared dimensions and wall apertures are unchanged; orientation follows the wall's stored start→end direction.
Schema 9 added native floors/slabs, with later support for bounded holes. Boundaries remain straight-edged and horizontal; slopes, layered assemblies, wall joins, and IFC slab exchange remain future work.
Schema 7 introduced native aligned dimensions: a three-click plan tool, live wall-endpoint measurements, editable offsets and visible orphan diagnostics. Schema 11 adds chain and baseline annotations. Later slices added opening-jamb and outer straight-wall-face references plus deliberate reference repair. Driving constraints and print-faithful annotation remain future work.
History retention now has measured synthetic cost, entry/estimated-byte limits and atomic over-budget rejection. The estimate is not a total application-memory guarantee. IFC4 exchange has independent validation and native desktop controls, with explicit subset/loss limits.
D linked floor-plan authoring is in progress, starting with the tested cut/projection and semantic drawing foundation and native floor/slab sketch workflow. Named plan commands and persisted settings now support migration, undo/redo and save/reopen at the model/controller layer. The native plan/split workspace now supports plan creation/selection, background native-wall drawings, fit/pan/zoom and shared selection with 3D. Plan-settings forms now edit names, ranges, basis, crop, scale and visibility as one validated transaction. Semantic snap queries are available to the controller. Two-point wall drawing now uses snap feedback and exact length/angle drafts with the bundled Wall provider. Finite-line intersection snapping also supports starting walls at checked semantic crossings. Perpendicular snapping projects the current gesture anchor onto finite semantic lines with explicit acquisition checks. Optional axis extensions acquire beyond finite endpoints without changing model geometry or picking. Signed wall offsets preview and create parallel wall copies with exact metre input and one-step undo. Native verification covers two connected exact-input walls in split view, cancellation, save/reopen and shared selection. Architectural grid entities now have persistent identity, validated commands, history and migration. Grid plan integration adds clipped datums, selection and grid-axis snapping for the bundled wall gesture. Grid create/edit forms now provide exact coordinates, previews and transactional Apply/Cancel. Native grid verification covers editing, grid-snapped walls and save/reopen. Wall move/resize click tools now preserve identity with transient previews and single-step undo. Installed column plan integration now displays independent provider outlines with Fit plan, shared selection, form edits, undo/redo and save/reopen. Independent pointer authoring remains unfinished. Native edit inspection verifies split updates and save/reopen. The discovered untitled quick-Save path defect is corrected with destination prompting and regression tests. Full independent plugin pointer authoring and the E1–E4 production drawing/team workflows remain unfinished. The coverage ledger tracks them; this is not a production BIM system or a general architecture-firm release. Production deployment targets, dependency review and publication plans remain open. Historical slice reports retain their original evidence; use the B/C audit and coverage ledger for current status.
OpenStructure, including the host and bundled plugins, is licensed under the Apache License 2.0. You may use, modify, and redistribute it under that license, including for commercial purposes. Independent plugin authors choose the terms for their original plugins. Contributions submitted for inclusion are offered under Apache 2.0; see CONTRIBUTING.md.
Install stable Rust and the native C++ linker prerequisites for your platform. On Windows, use Visual Studio C++ Build Tools and the Windows SDK.
cargo build --workspace --locked
cargo run -p os-app
cargo test --workspace --all-features --locked
cargo clippy --workspace --all-targets --all-features --locked -- -D warnings
cargo fmt --all -- --checkOn the initial Windows development machine, Rust is installed locally under the
ignored work/toolchain/ directory. Use the convenience launcher without changing
the system PATH:
.\tools\cargo.ps1 run -p os-app
.\tools\cargo.ps1 test --workspace --all-features --locked
.\tools\cargo.ps1 run -p os-app '--' --smoke outputs\example.osbThe smoke command requires an existing parent directory and a new output path
and leaves a real project file. Create outputs first, or use example.osb in
the current directory on a fresh clone.
Quote the '--' separator when using the PowerShell script so PowerShell forwards
it to Cargo. The normal cargo executable uses the unquoted separator as shown below.
Open it with cargo run -p os-app -- outputs/example.osb. It exercises plugin load,
wall creation, length/thickness/height/level edits, regeneration, undo/redo and
save/reopen without requiring a display.
- Start the application; a project, site, building, ground level and 3D view exist.
- Choose Architecture → Wall. In the upper-left Properties palette, enter two XY endpoints, thickness and height, then choose Create wall. Scroll the fields to reach Endpoints; the action stays visible. Values are in metres.
- Select a wall in Project Browser or the viewport. Edit its properties and choose Apply changes in Properties or Modify | Walls. Changing Length preserves its start point and direction.
- Use Architecture → Add level, then assign a wall using its Properties Level field and Apply changes. Select an active level in Project Browser and edit its elevation under Manage to regenerate attached walls.
- Drag in the viewport to orbit, scroll to zoom, or choose Fit model from the view footer or View ribbon. Drag the left-column edge or palette divider to adjust the workspace.
- Open File, enter a
.osbpath, and choose Save or Open. Save, Undo and Redo are also in quick access. Ctrl+Z/Ctrl+Y control history; Ctrl+S saves when a text field is not focused. Manage also renames projects.
The light ribbon workspace is specified in the UI design guide. The status bar shows operation feedback; Details expands complete diagnostics.
New/Open/Close prompt before discarding committed unsaved edits. Property fields are a draft until Apply changes. Save to a different existing file prompts before replacement. A failed open preserves the current document.
- Native storage is ZIP + JSON, not SQLite yet; history and derived meshes are not saved. See file format.
- Default builds use trusted bundled plugins. The optional external-plugin build adds bounded Wasm execution, desktop activation and descriptor forms. Deadlines revoke late results; they do not forcibly terminate compiler/file IO work. See the B/C audit for runtime, installation and qualification boundaries.
- Geometry supports straight and circular walls, bounded straight-wall joins, hosted doors/windows on straight walls, and linked building sections. Curved walls cannot yet host openings, join walls, or form room boundaries. General booleans, constraint solving, and CAD kernel integration remain unimplemented. See native sections and the coverage ledger.
- The viewport uses cached CPU depth-buffered rendering and visible-pixel picking, fixing triangle-order artifacts at wall intersections. Resolution is capped at two million pixels; no production GPU renderer or antialiasing is implemented. Plan workflows include native snapping and a basic A3 single-view sheet preview with one-page vector PDF export, not full sheet sets or production printing. See viewport verification and native sheet preview.
- Authoring, schedules, and sheet output cover named native subsets; general analysis services, full drawing sets, and team workflows remain future work.
- IFC exchange supports straight rectangular walls and bounded rectangular hosted door/window voids with linked IFC fillings and types; curved walls, custom opening families, and arbitrary third-party models remain unsupported. Fillings have no IFC Body. Native views/materials/extension data are not preserved; desktop exchange uses explicit loss and replacement confirmations. See the IFC guide.
- Workspace Cargo packages are marked non-publishable. Third-party dependency licenses and redistribution terms remain subject to review before release.
- Semantic, parametric BIM model
- Versioned native
.osbproject format - IFC-based interoperability
- Plugin-first architecture
- Transactional edits with undo/redo
- Offline-first project ownership
- Reproducible builds and testable architecture
- Build prompt
- Build prompt completion audit
- Architecture plan
- UI design guide
- Contributing
- File format
- Plugin protocol and example
- Current capability coverage
- Foundation decision
- Test guide
- Verification results and next tasks
OpenStructure is a working project name pending trademark clearance.
Native section-detail callouts create an enlarged Section and stable station/elevation marker in one undo step, with independent crop/scale and live sheet references (schema 75 / native API 56).
View-owned detail drafting and plain notes now support configured Plans and Sections, with paper-unit text, one straight leader, and shared canvas/sheet/vector-PDF placement (schema 76 / native API 57).