> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ploterr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> What changed in each Floorkit release, newest first.

<Update label="1.2.0" description="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](/floorkit/playbooks/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](/floorkit/guides/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.
</Update>

<Update label="1.1.0" description="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`](/floorkit/api/views/create-model-renderer#notes).
  * **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`](/floorkit/api/editor/project-manager).** 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.
</Update>

<Update label="1.0.0" description="2026-10-06">
  Floorkit 1.0 launched.
</Update>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.