Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/upgrade-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

## Upgrading to v9.3

Upgraded dependencies to [luma.gl v9.3](https://luma.gl/docs/upgrade-guide) and [loaders.gl v4.4](https://loaders.gl/docs/upgrade-guide). Your app may be affected if it contains custom layers.

### OrthographicView

Supplying a 2D array to `zoom` for per-axis zoom has been deprecated.
Expand Down
40 changes: 20 additions & 20 deletions docs/whats-new.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This page contains highlights of each deck.gl release. Also check our [vis.gl bl

## deck.gl v9.3

Target release date: March 2026
Release date: April 13, 2026

### Widgets

Expand Down Expand Up @@ -46,40 +46,40 @@ Aside from the above, all widgets also received the following improvements:
- All widget documentation pages now have live demos and easy-to-follow code samples.
- A bug was fixed where widgets used with the `DeckGL` React component did not block pointer interaction with the canvas underneath.

### Views and Controllers

deck.gl v9.3 is a substantial step forward in 3D navigation and rendering support. See the new [Using with 3D Tiles](./developer-guide/base-maps/using-with-3d-tiles.md) guide for a complete walkthrough.

New `pickable: '3d'` [option](./api-reference/core/layer.md) on all layers enables depth picking, returning actual 3D coordinates on picked geometry.

View layout props (`x`, `y`, `width`, `height`, and padding) now accept CSS-style expressions such as `calc(50% - 10px)` so you can mix relative percentages with fixed pixel offsets when arranging multi-view layouts.

Class-specific improvements:

- New [TerrainController](./api-reference/core/terrain-controller.md) - A terrain-aware controller that automatically adjusts camera elevation to follow 3D tilesets and elevated terrain.
- [MapController](./api-reference/core/map-controller.md) - New `rotationPivot: '3d'` option rotates around the object under the pointer, for more natural interaction with terrain and 3D tiles.
- [OrbitController](./api-reference/core/orbit-controller.md) now uses 3D picking to determine zoom and pan anchors, providing more intuitive navigation around 3D content.
- All controllers - New `maxBounds` option constrains the camera within a (2D or 3D) bounding box, preventing users from navigating outside of the content area.
- [GlobeController](./api-reference/core/globe-controller.md) - Major bug fixes and improved stability.
- [OrthographicView](./api-reference/core/orthographic-view.md) is moving away from 2d-array zoom and adds per-axis `zoom*`, `minZoom*`, `maxZoom*` props.

### Layers

![TextLayer clipping feature](https://github.com/visgl/deck.gl-data/blob/master/images/whats-new/text-clipping.gif?raw=true)

- [TextLayer](./api-reference/layers/text-layer.md) now supports per-object clipping box; and making text "sticky" when its container is partially off-screen. See a demo with this [new example](https://deck.gl/examples/text-layer-clipping).
- [TileLayer](./api-reference/geo-layers/tile-layer.md) adds new `visibleMinZoom` and `visibleMaxZoom` props to control the zoom range at which tiles are drawn, independent of the zoom range at which data is loaded.
- Improvements to [Tile3DLayer](./api-reference/geo-layers/tile-3d-layer.md) including better performance and tile tracking.
- WebGPU now materializes constant layer attributes into full buffers through `AttributeManager`, improving compatibility for layers that rely on constant accessors.

### @deck.gl/extensions
### Extensions

- [PathStyleExtension](./api-reference/extensions/path-style-extension.md) now supports dashed strokes on [ScatterplotLayer](./api-reference/layers/scatterplot-layer.md) and [TextLayer](./api-reference/layers/text-layer.md) backgrounds, in addition to PathLayer. See [#9864](https://github.com/visgl/deck.gl/issues/9864).

### @deck.gl/mapbox

In interleaved mode, `MapboxOverlay` now always renders layers in groups by `beforeId` or `slot`. This enables cross-layer extension handling (e.g. MaskExtension, CollisionFilterExtension) by default, without needing the previously experimental `_renderLayersInGroups` prop.

### Views

View layout props (`x`, `y`, `width`, `height`, and padding) now accept CSS-style expressions such as `calc(50% - 10px)` so you can mix relative percentages with fixed pixel offsets when arranging multi-view layouts.

- [OrthographicView](./api-reference/core/orthographic-view.md) is moving away from 2d-array zoom and adds per-axis `zoom*`, `minZoom*`, `maxZoom*` props.

### Improved 3D Support

deck.gl v9.3 is a substantial step forward in 3D navigation and rendering support. See the new [Using with 3D Tiles](./developer-guide/base-maps/using-with-3d-tiles.md) guide for a complete walkthrough.

- New `pickable: '3d'` [option](./api-reference/core/layer.md) on all layers enables depth picking, returning actual 3D coordinates on picked geometry.
- New [TerrainController](./api-reference/core/terrain-controller.md) - A terrain-aware controller that automatically adjusts camera elevation to follow 3D tilesets and elevated terrain.
- Improvements to [Tile3DLayer](./api-reference/geo-layers/tile-3d-layer.md) including better performance and tile tracking.
- [MapController](./api-reference/core/map-controller.md) - New `rotationPivot: '3d'` option rotates around the object under the pointer, for more natural interaction with terrain and 3D tiles.
- [OrbitController](./api-reference/core/orbit-controller.md) now uses 3D picking to determine zoom and pan anchors, providing more intuitive navigation around 3D content.
- All controllers - New `maxBounds` option constrains the camera within a (2D or 3D) bounding box, preventing users from navigating outside of the content area.
- [GlobeController](./api-reference/core/globe-controller.md) - Major bug fixes and improved stability.

## deck.gl v9.2

Release date: October 7, 2025
Expand Down
5 changes: 2 additions & 3 deletions website/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "project-website",
"version": "9.3.0-alpha.5",
"version": "9.3.0-beta.1",
"private": true,
"description": "Website for vis.gl project",
"scripts": {
Expand All @@ -26,7 +26,6 @@
"@material-ui/lab": "^4.0.0-alpha.57",
"@monaco-editor/react": "^4.4.6",
"@turf/turf": "^7.3.0",
"@vis.gl/react-maplibre": "^1.0.0-alpha.5",
"d3-color": "^3.1.0",
"d3-hierarchy": "^2.0.0",
"d3-request": "^1.0.6",
Expand All @@ -38,7 +37,7 @@
"popmotion": "^11.0.0",
"react": "^18.0.0",
"react-dom": "^18.0.0",
"react-map-gl": "^8.0.0",
"react-map-gl": "^8.1.1",
"react-virtualized-auto-sizer": "^1.0.2",
"source-map-loader": "^5.0.0",
"styled-components": "^5.3.3",
Expand Down
33 changes: 19 additions & 14 deletions website/src/doc-demos/widgets.js
Original file line number Diff line number Diff line change
Expand Up @@ -340,38 +340,43 @@ export function SelectorWidgetDemo() {
})
]} />;
}
function bounce(x, max) {
x = x % (max * 2);
return x >= max ? max - x : x;
}
export function ScrollbarWidgetDemo() {
const data = Array.from({length: 1000}, (_, i) => ({
position: [i * 100, 0, 0],
color: [bounce(i * 11, 255), bounce(i * 7, 255), 100]
const N = 1000;
const Spacing = 40;
const data = Array.from({length: N + 1}, (_, i) => ({
position: [(i - N / 2) * Spacing, 0, 0],
color: [
(Math.sin(i / 20) + 1) * 128,
(Math.sin(i / 20 + Math.PI * 2 / 3) + 1) * 128,
(Math.sin(i / 20 + Math.PI * 4 / 3) + 1) * 128,
]
}));
const contentBounds = [
[-N / 2 * Spacing - Spacing, -Spacing, 0],
[N / 2 * Spacing + Spacing, Spacing, 0]
];

const layers = [
new ScatterplotLayer({
id: 'points',
data: data,
getPosition: d => d.position,
getFillColor: d => d.color,
getRadius: 20,
getRadius: 10,
})
];
return <NonGeoDemoBase
views={new OrthographicView({id: 'ortho'})}
controller={{scrollZoom: false}}
initialViewState={{target: [0, 0], zoom: 0, zoomX: 0, zoomY: 10}}
controller={{scrollZoom: false, maxBounds: contentBounds}}
layers={layers}
widgets={[
new ZoomWidget(),
new ZoomWidget({ zoomAxis: 'X' }),
new ResetViewWidget(),
new ScrollbarWidget({
placement: 'bottom-right',
viewId: 'ortho',
contentBounds: [
[-100, 0, 0],
[100 * 1001, 10, 0]
],
contentBounds,
orientation: 'horizontal',
captureWheel: true
})
Expand Down
35 changes: 14 additions & 21 deletions website/yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -5098,22 +5098,15 @@
resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8"
integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==

"@vis.gl/react-mapbox@8.1.0":
version "8.1.0"
resolved "https://registry.yarnpkg.com/@vis.gl/react-mapbox/-/react-mapbox-8.1.0.tgz#ce08f2942ddd92784ae1cedb35dccad61c613ab0"
integrity sha512-FwvH822oxEjWYOr+pP2L8hpv+7cZB2UsQbHHHT0ryrkvvqzmTgt7qHDhamv0EobKw86e1I+B4ojENdJ5G5BkyQ==

"@vis.gl/react-maplibre@8.1.0":
version "8.1.0"
resolved "https://registry.yarnpkg.com/@vis.gl/react-maplibre/-/react-maplibre-8.1.0.tgz#48844fc47986637f7bd48d481f26d505ac2976c5"
integrity sha512-PkAK/gp3mUfhCLhUuc+4gc3PN9zCtVGxTF2hB6R5R5yYUw+hdg84OZ770U5MU4tPMTCG6fbduExuIW6RRKN6qQ==
dependencies:
"@maplibre/maplibre-gl-style-spec" "^19.2.1"
"@vis.gl/react-mapbox@8.1.1":
version "8.1.1"
resolved "https://registry.yarnpkg.com/@vis.gl/react-mapbox/-/react-mapbox-8.1.1.tgz#cfd3b00595146627a822e3b02538e23f9df29669"
integrity sha512-KMDTjtWESXxHS4uqWxjsvgQUHvuL3Z6SdKe68o7Nxma2qUfuyH3x4TCkIqGn3FQTrFvZLWvTnSAbGvtm+Kd13A==

"@vis.gl/react-maplibre@^1.0.0-alpha.5":
version "1.0.0-alpha.5"
resolved "https://registry.yarnpkg.com/@vis.gl/react-maplibre/-/react-maplibre-1.0.0-alpha.5.tgz#d02eed6a4056b0c52ed4d901481c8e7bcc9e8a77"
integrity sha512-Nk0wNx04kNwvGpIYtllGqjbeX9iSXB0OesVlb48A+BSdOmyanXYgAQjJKC+0pllTAauL9A/EqjbtWONAXAC11g==
"@vis.gl/react-maplibre@8.1.1":
version "8.1.1"
resolved "https://registry.yarnpkg.com/@vis.gl/react-maplibre/-/react-maplibre-8.1.1.tgz#a54fc0d4bb0ad0326a4ccaf9db4ae14600ac79db"
integrity sha512-iUOfzJAhFAJwEZp1644tQb7LOTFgi5/GzdaztkhzNgFVuoF2Ez7guvwZjQAKB9CN2TlHTgNuYH8UW85kO7cVhw==
dependencies:
"@maplibre/maplibre-gl-style-spec" "^19.2.1"

Expand Down Expand Up @@ -10751,13 +10744,13 @@ react-loadable-ssr-addon-v5-slorber@^1.0.1:
dependencies:
"@types/react" "*"

react-map-gl@^8.0.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/react-map-gl/-/react-map-gl-8.1.0.tgz#97ce754e3bbdd49421fc10283119d189db945e00"
integrity sha512-vDx/QXR3Tb+8/ap/z6gdMjJQ8ZEyaZf6+uMSPz7jhWF5VZeIsKsGfPvwHVPPwGF43Ryn+YR4bd09uEFNR5OPdg==
react-map-gl@^8.1.1:
version "8.1.1"
resolved "https://registry.yarnpkg.com/react-map-gl/-/react-map-gl-8.1.1.tgz#64dc28504e77f6db79303f5e8a18b8c6e1bb9533"
integrity sha512-aSqFAFoxvY7wxbGI93Dz0E41171mkAb3GcNbnkFIotmu88OFw495os6mIDZSi7irYNT/PZEIOEHUxhun4ToGuQ==
dependencies:
"@vis.gl/react-mapbox" "8.1.0"
"@vis.gl/react-maplibre" "8.1.0"
"@vis.gl/react-mapbox" "8.1.1"
"@vis.gl/react-maplibre" "8.1.1"

react-router-config@^5.1.1:
version "5.1.1"
Expand Down
Loading