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

# Migration Guide

<Update label="2.25.9 -> 2.27.2" description="January 2026">
  * `fromMeasurementData` changed to `addMeasurement` which takes a serialized measurement as argument
  * `zoomExtents` and explode now take only visible bounds into account, not total bounds by default
</Update>

<Update label="2.25.8 -> 2.25.9" description="August 2025">
  * [*ObjectClicked*](/developers/viewer/viewer-api#viewerevent) and [*ObjectDoubleClicked*](/developers/viewer/viewer-api#viewerevent) events now have their picked objects filtered by a default
    [*ObjectPickConfiguration*](/developers/viewer/speckle-renderer-api#objectpickconfiguration)
</Update>

<Update label="2.25.0 -> 2.25.8" description="July 2025">
  * `GeometryData` now stores the original geometry DataChunks instead of just number arrays. This change was the basis of a larger update we made to facilitate larger model loading by minimizing memory allocation during startup and load
  * `ViewerEvent.Busy` has been removed and it's no longer emitted
</Update>

<Update label="2.23.8 -> 2.25.0" description="May 2025">
  * `get clippingVolume` from `SpeckleRenderer` now returns an `OBB`
  * `set clippingvolume` from `SpeckleRenderer` now accepts both `Box3` and `OBB`
  * all intersection methods from `Intersections` now accept both `Box3` and `OBB` as bounds argument
  * `expandBoxRelative` from `World` now accepts both a `Box3` and a `OBB`
  * `requestUpdate` from `SectionOutlines` extension now takes an optional `force` argument that forces an update
</Update>

<Update label="2.23.6 -> 2.23.8" description="February 2025">
  * `Loader`'s `resourceData` changed from `string | ArrayBuffer` to `unknown` to allow each loader to define it's own resource data type
</Update>

<Update label="2.21.2 -> 2.23.6" description="January 2025">
  * `SmoothOrbitControls`'s constructor changed. It no longer takes a `Scene` and `Intersections`, but only a `SpeckleRenderer`
</Update>

<Update label="2.21.2 -> 2.22.2" description="November 2024">
  * `Loader`'s `resourceData` changed from `string | ArrayBuffer` to `unknown` to
    allow each loader to define it's own resource data type
  * `SmoothOrbitControls`'s constructor changed. It no longer takes a `Scene` and
    `Intersections`, but only a `SpeckleRenderer`
</Update>

<Update label="2.21.1 -> 2.22.2" description="October 2024">
  * Entire rendering pipeline got a massive update and it now allows for free user
    customization as well as user defined passes
  * `pipeline` accessors added to `SpeckleRenderer`. This allows for user defined
    rendering pipelines
  * `pipelineOptions` accessors removed from `SpeckleRenderer`
  * `PipelineOutputType` removed. The pipeline's result now depends on the pipeline's
    pass configuration
  * `DynamicAOPassParams`  and it's default removed
  * `StaticAoPassParams` and it's default removed and replaced by `ProgressiveAOPassOptions`
  * A series of pre-defined rendering passes as well as entire rendering pipelines
    have been added
</Update>

<Update label="2.20.2 -> 2.21.1" description="September 2024">
  * `Vector3` and `Box3` have been removed from the viewer's exports. They can now
    be imported from three.js
</Update>

<Update label="2.19.4 -> 2.20.2" description="August 2024">
  * All input mesh vertex colors are now treated as sRGB
</Update>

<Update label="2.19.1 -> 2.19.4" description="July 2024">
  * `NearCameraCalculation` type option added to `CameraController` option.
  * `UpdateFlags.RENDER` no longer resets pipeline. Added `UpdateFlags.RENDER_RESET`
    which forces a pipeline reset
</Update>

<Update label="2.18.16 -> 2.19.1" description="June 2024">
  * Added `tasOnly` as a parameter in all `intersect` variants.
  * The existing `firstHitOnly` option on `Raycaster` now stops on first intersected
    TAS, asa well as first intersected BAS from that TAS (if `tasOnly` is not set)
</Update>

<Update label="2.18.15 -> 2.18.16" description="May 2024">
  * `Vector3Like` replaces `VectorLike` in the arguments of `transformTRS` in `BatchObject`
  * `SpeckleLoader` no longer takes a `priority` argument in it's constructor
  * `addRenderTree` from `SpeckleRenderer` now takes a `RenderTree` as an argument
    instead of a `RenderTree` id
  * `getRenderTree` is now overloaded with a version with no arguments that never
    returns null
  * `intersect` and `intersectRay` arguments have been moved around and both are now
    overloaded
</Update>

<Update label="2.18.14 -> 2.18.15" description="April 2024">
  * Asset now has a mandatory `id` field
  * `getEnvironment` and `getTexture` from `Assets` now only accept `Asset` as argument
  * The concept of `Providers` has been removed entirely
  * `CameraProvider` has been replaced by `SpeckleCamera`
  * `CameraControllerEvent` renamed to `CameraEvent`
</Update>

<Update label="2.18 -> 2.18.14" description="March 2024">
  * `updateClippingPlanes`  in `SpeckleRenderer`  does not take an optional `Plane[]`
    argument anymore
  * `setOptions` from `SelectionExtension` has changed to an accessor
  * `displayOn` and `displayOff` from `SectionTool` are replaced by `visible` accessor
</Update>

<Update label="2.x -> 2.18" description="February 2024">
  The introduction of viewer API 2.0 into our stable channel. The changes to the API
  itself are extensive and there is no point for a step by step guide, as what was
  previously known as API 2.0 will become the single supported viewer API moving forward.
</Update>
