Skip to main content
2026-10-14
Create and edit site massing with one project and one undo history, through commands and the plan and 3D editors. See Site massing for a worked study.

Check these when you upgrade

  • Breaking: create and edit a Building through a project. Use massBuildingCommand with ProjectManager.apply, then edit through commands or the managed editors. Standalone new Building({ profile, height }), segments without storeys, storeyHeight, Building.setStoreys, Building.addSegment, Building.removeSegment, regenerateStoreys, storeyHeightFor and STOREY_HEIGHT_BY_USE are removed. See Model a mass.
  • Files with showMassing need 1.2.0. Floorkit 1.1.0 refuses that new plan-view field. Files without it still open in both versions. Update custom saved-view validators to accept it.
  • BuildingEditCommand has new members. Add replace-mass, add-building, remove-building and replace-site to exhaustive switches. ProjectFileError also adds building-in-use and site-in-use; storey-in-use can now be reported by a mass edit.
  • Recheck floor area against the site’s grade and area definitions. A storey entirely at or below grade is a basement. Basement, parking, core and mechanical areas do not count toward FAR unless the rules include them. Set BmStorey.areaKind explicitly where needed; pass { grade } to massQuantities or Building.quantities for a site above or below zero.
  • Sections and elevations exclude masses. A view that selects only a mass gives empty-view. Use a massing plan and 3D view, or convert the mass to a shell for physical cuts.
  • Masses use colours by use when no colour is set. Set color on the mass or pass massColors: {} to keep the previous default. Plan views and sheets can now fill mass parts with their colours; update screenshot or PDF expectations accordingly.
  • The plan editor reports deselection after undo. A select listener must accept undefined when undo removes the selected element. A storey-setting edit in a mass building also reports the changed objects.
  • Custom editable targets can supply activePart. The editors preserve the selected mass part during gestures and after saving or undoing. Hosts with custom EditableTarget implementations can provide its saved part id alongside selectPart.

Added

  • Mass, building and site commands. replace-mass, add-building, remove-building and replace-site work through BuildingSession and ProjectManager, including batches, undo and redo. massBuildingCommand creates a mass from an outline; massSegmentHeightCommand changes a part’s height in whole storeys.
  • Plan and 3D mass editing. Select a part, reshape, move, turn or delete it. Push/pull changes its height in 3D. Each completed gesture saves one command; edits that break a saved view or remove occupied storeys are refused.
  • Draw a building in the plan. ManagedPlanEditor.startMassDrawing draws and saves a new mass as one step. startOutlineDrawing returns an outline for an app’s own creation flow. Escape cancels without saving.
  • Site massing on plans and sheets. showMassing: true draws mass parts, the parcel and the at-grade setback line in plan views, sheets and PDF exports. ProjectManager.setBuildableEnvelope shows the supplied envelope in 3D; it is a display setting, not part of a saved project.
  • Area kinds and colours for mass parts. Save BmStorey.areaKind and optional BmMassSegment.color. GUIEditor.onDrag exposes live figures during supported gestures before the command is saved.

Changed

  • Mass, building and site edits preserve unaffected objects. A storey-setting edit in a mass building rebuilds the affected storey and mass.
  • A rebuilt mass keeps its active part. Height drags keep materials and unchanged parts across geometry writes.

Fixed

  • Setback checks measure clearance edge to edge, including concave parcels.
  • Basement classification uses site grade when calculating floor area ratios.
  • Editor keyboard focus and selection grips recover correctly after mass edits and undo. Plan move/turn feedback works when an app loads another copy of Three.js.
2026-10-11
One object for an open project, commands for each element of a storey, and edits that stay fast in a large building.

Check these when you upgrade

  • The mouse wheel pans the 2D plan and the sheet. In 1.0.0 it zoomed. Call setNavigation(MOUSE_NAVIGATION) on the view to keep the zoom. See createModelRenderer.
  • Install opengeometry@^2.0.18. Floorkit needs 2.0.18 or later.
  • Selection and hover are blue. Set --op-accent: #000000 on the editor container to keep the black look.
  • Drawing text uses Paper Mono. On screen and in SVG, load Paper Mono in your page, or the text shows in Courier. A PDF needs no font. To keep the old look, set fontFamily in the typography of the sheet style and in the dimension styles.
  • Editor readouts use the system monospace font. Set --op-ui-font on the editor container for a different font.
  • TypeScript: two unions are larger. BuildingEditCommand has new kinds, and the kind of a change event can be restore. A switch that must cover each member needs the new cases.
  • onChange reports are more exact. A moved block gives move and an added element gives create. The labels of a door or a window that moves off its wall or to a different wall changed. ogids names only the elements that the step changed.
  • Objects stay the same after an edit. An edit builds again only what changed, so the other objects are not new objects. Do not write position, rotation or scale on a Floorkit object below a storey group: use an edit command. Do not write into a drawing that the plan editor made.
  • The model check is stricter. A column, a beam or a railing with a number that the build cannot use is refused when a file opens. A stair with more than 1,000 risers is refused.

Added

  • ProjectManager. One object holds an open project: the building, the views, the sheets and the markers. It has one undo history, it mounts a plan editor, it connects a 3D editor, and it exports sheets.
  • Commands for the elements of a storey. add-element, replace-element and remove-element change slabs, roofs, spaces, stairs, columns, beams, railings and blocks.
  • Commands for block definitions and for storeys. add-asset, replace-asset, remove-asset, add-storey, remove-storey and replace-storey-settings.
  • A batch command. { kind: 'batch', commands: [...] } applies several commands as one step with one undo. When one command fails, nothing changes.
  • A change event names what changed. The events of BuildingSession.subscribe and ProjectManager.subscribe have an optional changed list of live ids, so your app can refresh only those elements.
  • setNavigation. Set how the wheel and the mouse buttons move the 2D plan and the sheet.
  • A block moves and turns in both editors.

Changed

  • Edits are fast in a large building. An edit builds again only the elements that changed, and the plan editor draws again only those. In a storey of 160 rooms, a slab move takes about 5 ms (before about 2.2 s), and a door move takes about 46 ms (before about 2.2 s).
  • The first plan draw of a large storey is faster. At 160 rooms it takes about 0.24 s. It took about 64 s.
  • More moves of a wall at a corner are accepted.
  • A body up to 1 km from the origin of the model draws in a plan, a section and an elevation.
  • A selected wall in the 2D plan editor shows its outline, with no bounding box and no rotate dot.

Fixed

  • A dragged wall end joins the wall it is released on.
  • The wall outline stays whole after a wall drag.
  • A drag that is refused or cancelled puts the element back, and the 2D plan shows the saved plan again.
  • The undo of a live edit puts the element back exactly.
  • The plan symbol of a door or a window no longer shows in the 3D view.
  • A wall cuts its holes again when only its axis moves.
  • LineDimension prints no debug logs.
  • A door, a window or a wall opening disposes its kernel bodies.
2026-10-06
Floorkit 1.0 launched.
Last modified on October 14, 2026