What's New
This page lists module additions and major changes in each release. For detailed release notes, see the repository changelog.
Unreleased
-
Panels:
BoxPanelContainer.headerPanelkeeps key controls visible and mounted when an Infobox is collapsed, including pinnable boxes. -
Website: fix the mobile navigation drawer, replace generic gallery artwork with dedicated example captures, and render the Vega demos on their example pages. Missing previews are labeled explicitly and gallery thumbnail mappings are checked during builds.
-
widgets:
DeckPanelrenders caller-defined scenes in panel canvases on a shared Deck using the 9.4 multi-canvas API, with or without a root canvas. Try the standalone example or the inline docs demo. -
Breaking: basemap-layers has moved to tangram.gl. The community package, style-spec entry point and basemap examples have been removed. See the migration note. Shared tile/MVT layers remain in geo-layers.
-
editable-layers: click-to-draw modes work again under React
<DeckGL>with child base maps such as<Map>. Native clicks now use deck.gl's input element instead of only its canvas. -
EditableGeoJsonLayerandSelectionLayerread the pointer on the level of the point a map camera orbits when no layer ispickable: '3d'. Before, a camera lifted with viewStateposition: [0, 0, z], as deck.gl's terrain controller sets it, drew, edited and selected metres from the cursor, more with pitch and towards the edges of the view. -
Breaking: consolidate overlay and docked side chrome in
SidebarPanelContainerwith independent pin/open state and user pin/hide controls. RemoveSidePanelContainerwithout aliases; migrate visibility toopen/onOpenChange. Content stays mounted across modes. -
Breaking panels API: specialized panels render from typed live props; rename
AccordeonPaneltoAccordionPanel, splitteronChangetoonSplitChange, andinitialSplittodefaultSplit. Controlledsplitis authoritative during dragging. No compatibility names are exported. See the upgrade guide. -
Panels adds constructor components and automatic host resizing to
PanelManager, declarative accordion expansion and initial tab selection, and an updated guide to composition, controlled state, canvas chrome, and dynamically loaded Monaco. -
Community examples and inline demos use shared sleek-dark panel chrome. Playground accepts a panel preset or custom theme through
theme, including its editors and example picker. -
Shorter
TreeLayerandSplatLayerreference pages. The Seasonal Farm TreeLayer demo uses a settings panel for season, crops, wind, size, crown characteristics and canopy budgets, with no text drawn over the canvas. The Tree Lab example is removed. -
Breaking:
SplatLayerdrops the legacy top-levelsourceandhierarchyprops. Pass sources throughgetSource; see the upgrade guide. -
SplatLayerandTreeLayerrender onGlobeView, including MapLibre's globe projection throughMapLibreOverlay. Before, they threw an unsupported-projection error. Gaussians, wood and crops keep an east-north-up pose at each owner, unchanged when the globe switches to Web Mercator above zoom 12, and the globe hides its far side.
v9.4.8
-
BasemapLayerreads glyph bitmaps containing only the border without treating their ink as missing. -
Panels adds compact translucent
sleek-lightandsleek-darkpresets, custom theme definitions, and preset-aware nested inheritance and inversion. -
Panels adds permanent header, footer, and side chrome and optional pinning on
BoxPanelContainer. Opt into docking withPanelManager.contentElement; nested panels can adapt throughusePanelContainerState(). See canvas chrome. -
Panel content can be embedded with
mountPanel,ReactPanel, anduseReactPanel. React hosts accept sleek presets and custom theme definitions; React-owned content retains its context and follows panel mount policies. Collapsing a pinned box releases its docked space and leaves a compact title bar for restoring the panel.
v9.4.7
-
v9.4.7 also publishes the v9.4.6 changes below, whose npm release was interrupted after only
@deck.gl-community/reactpublished. -
EditableGeoJsonLayertooltips are no longer pickable. Before, hovering a measurement tooltip (such as the one left under the cursor after finishing aDrawLineStringModeline) madeModifyModethrow and passed the tooltip to modes as if it were a feature. -
The
layers,geo-layers,infovis-layers,timeline-layersandgraph-layersESM builds load in Node's native ESM loader (Vitest, SSR): shader-module imports such as./splat.wgslnow carry their.jsextension. -
TreeLayerconnected wood now followsupdateTriggers.getTrunkColor,getCoverageWeightand authored wind changes. Before, the wood kept its old values until its data changed. -
SplatLayerandTreeLayerno longer throw when aMapViewrepeats wrapped world copies (repeat: true, asMapboxOverlay/MapLibreOverlayset fromrenderWorldCopies). Gaussians render in the primary world copy only, so apps no longer need to drop the layer at low zoom. -
TreeLayerno longer rewrites every canopy color and crop attribute when an unrelated prop changes, such aswindTime,opacityorhighlightedObjectIndex. Extension accessors and their update triggers now reach the wood, crop and canopy sub-layers. -
EditableGeoJsonLayerin interleaved MapLibre/Mapbox maps keeps only the presses the mode uses (edit handles, drag-to-draw) from the map, so the map pans and clicks while drawing by clicks or inModifyMode. Custom drag modes can declare their presses withEditMode.ownsPointerDown(). -
SelectionPulseExtension(new) pulses selected objects on the GPU. A selection change writes one value per object fromgetSelected; each animation frame sets only uniforms, so a pulse reruns no color accessor and uploads no attributes. It works on deck.gl layers with the GLSLDECKGL_FILTER_COLORhook, such asScatterplotLayer,ColumnLayer,PolygonLayerandSimpleMeshLayer, and onTreeLayerandSplatLayerin WebGL2 and WebGPU. -
TreeLayerandSplatLayercast and receive deck.gl shadows under aLightingEffectlight with_shadow: true(WebGL2), including the translucent canopy, wind, picking and interleaved maps. SetshadowEnabled: falseto keep trees from casting, as before. See TreeLayer shadows.
v9.4.6
-
Breaking: Removed the deprecated
@deck.gl-community/threecompatibility workspace. ImportTreeLayerand its types from@deck.gl-community/layers. -
TreeLayerandSplatLayerspend about a quarter of the CPU time per moving frame over large groves: a generated 17,000-tree orchard with ~15,000 crowns in view orbits at ~11 ms instead of ~48 ms per frame, with the same rendered selection. Trees crossing the view edge keep their instance slots and upload only their own rows, optical fades rewrite only the changed coverage, and the shared canopy budget no longer schedules refinements once the coverage floor exhausts it. A controlledhighlightedObjectIndexnow highlights that source tree or owner in every wood, canopy and crop partition, asautoHighlightdoes.
v9.4.5
TreeLayerandSplatLayercanopies stay visible in interleavedMapboxOverlay/MapLibreOverlaymaps after zooming or panning: the Gaussian depth pre-pass now clears its private target instead of inheriting the basemap'sclearCanvas: false. Small camera moves and orbits keep the shared canopy budget rather than refining every visible crown, andautoHighlighthighlights the hovered tree across wood and canopy sub-layers instead of unrelated trees at the same row index.
v9.4.3
-
SharedTile2DLayerandSharedTileset2Dskip tiles beyond the horizon in aGlobeView, as deck.gl'sTileLayerdoes, instead of requesting the far side of the globe.BasemapLayervector and hillshade sources on a globe request fewer tiles as a result. -
VolumetricVideoLayer(new) turns MP4/MOV frames into a GPU-rendered image-X/image-Y/time volume withcurrentFrame,frameTrail, native-pixel sampling, and GPU static-pixel removal. The community-site demo uses shared device tabs and a settings panel; the standalone version supports local MP4/MOV files and a WebGL/WebGPU toggle. Static filtering applies to every frame, including the selected frame. Both demos include stabilized camera controls and bounded GPU history that preserves the last working volume on allocation failure. Later valid seeks recover from decode failures, failed writes cannot expose stale frame identities, and GPU filter retries restore playback controls. Metadata callbacks can replace the live layer without discarding its newly allocated history. -
SnappableModeadds optional edge snapping and mode-specific click, drag, and source-handle strategies for drawing and editing. Initial clicks and drag-to-draw corners resolve targets before a guide is rendered. Committed shapes use the same snapped position as their preview, and drag events provide the current handle picks even before a pointer move is cached. Existing custom wrappers remain supported. Edge proximity is measured in screen pixels, including Cartesian views and bounded elevated segments. Layer-provided projection accounts for offset origins and model matrices, retaining local coordinates in snap results and padding omitted origin altitude with zero. Additional targets must be converted to the editable data frame.modeConfig.snapperaccepts a customSnapperpolicy; external targets omit editable feature indexes.modeConfig.snapToAdditionalTargetsOnlymakes the default policy target only supplied external features while retaining editable-layer source handles. -
SelectionLayerpolygon selection masks the full picking rectangle, fixing false positives outside wide, diagonal, and concave lassos. It keeps GPU picking and initializes the temporary mask synchronously instead of waiting 250 ms. -
Added a compact TreeLayer demo with eight species, seasons, crops, wind and picking.
-
Editable layers support overlaid MapLibre/Mapbox input targets. Selection masks the full lasso, keeps
guideTypefeatures selectable, and resumes editing after two-finger navigation. -
react-fiber POC:
DeckCanvasattaches multiple React presentation canvases to one shared Deck, with scoped views, layers and widgets. A four-city standalone example demonstrates independent maps, shared hover state and canvas cleanup. -
Private Vega renderer: a shared declarative US-map-to-stacked-bars example moves 24,669 places from SandDance’s historical sample with GPU position/size transitions in the playground, gallery and inline docs, with smooth 2D/3D camera and lighting transitions.
-
Private Vega renderer: geographic polygon/path vertices, colors and outline widths now use GPU transitions when projection signals change.
-
Private Vega renderer: projected GeoJSON shape marks with holes and separate polygons, geographic point symbols, and GPU circle/square lifecycle transitions. A shared declarative geospatial example is available in the playground and inline module docs.
-
The private Vega renderer adds circle/square symbols and stable GPU cuboid entry/exit transitions, with a shared declarative filtering example.
-
Added reusable
SplatLayerwith direct prepared assets, constant/per-rowgetSource, heterogeneous instances, affine transforms, shared refinement budgets, optical transitions and WebGL2/WebGPU rendering. Camera culling includes the filtered footprint, including reduced-resolution targets. Existingsourcecallers remain compatible; prepared sources support globally sorted alpha blending with compatible sources batched together and working buffers retained through refinement; streamed RAD and file-backed scene rendering remain separate upstream work. -
Native
TreeLayerfoliage andSplatLayership without built-in deck.gl foliage-shadow integration. Applications that require foliage shadows must provide them outside these renderers. -
TreeLayermoves to native vis.gl rendering with onegetTreetraits accessor, Gaussian foliage, connected wood, eight species, explicit crops and GPU wind. Canopy refinement is per owner within SplatLayer's shared budget, and foliage uses SplatLayer's weighted order-independent compositing path by default. Woody refinement selects opaque meshes with structural roots retained at a distance. The old import temporarily re-exports the same constructor. -
The playground adds a Vega tab with live JSON editing and shared declarative unit-layout and bar-chart examples.
-
A private, unpublished Vega renderer experiment ports SandDance’s MIT-licensed Vega/deck.gl renderer to vis.gl 9.4, with animated unit-layout examples and upstream attribution.
-
The BasemapLayers overview includes a synchronized comparison with MapLibre, with map, globe, and first-person views.
-
The standalone playground adds local JSON, GeoJSON, CSV, and Arrow IPC uploads with Arrow inspection and
datasource://source-idlayer references. -
GraphLayer.layoutTransitionDurationenables opt-in position interpolation independently of layout redraw throttling. -
The graph viewer includes a live mini-map with click-to-recenter navigation. The playground adds a declarative graph overview using two
OrthographicViews and one sharedGraphLayer.
v10 — In Development
Support for the upcoming deck.gl v10 is in development.
v9.4
Released: September 7, 2026
- WebGPU support: expanded rendering support across editable geometry, global grids, graph layers, and time-series layers. Support varies by module and layer.
- geo-layers: new wind and GPU particle visualization, image-based terrain, and weather-field interpolation.
- layers: new dependency arrows, plus WebGPU support for path outlines and directional path markers.
- infovis-layers: new animation, interval-block, and time-delta layers.
- widgets and panels: new color legends, reusable panel components, floating dialogs, and binary and Apache Arrow data previews.
- react-fiber — new module: a community fork of the React Fiber renderer for composing deck.gl layers and views as React elements.
- editable-layers: isolates edits from interleaved MapLibre/Mapbox pans, keeps
guideTypefeatures selectable, and resumes editing after two-finger navigation.
v9.3
Released: April 15, 2026
- basemap-layers — new module: renders MapLibre and Mapbox style documents directly with deck.gl, with separate map-style loading and evaluation utilities.
- three — new module: Three.js integration experiments, including a layer for rendering varied, seasonal 3D forests.
- geo-layers: shared tile loading and caching across layers and views, plus a tile-grid visualization layer.
- layers: new skybox rendering for flat-map, globe, and first-person views.
- react: React 19 support alongside React 18.
v9.2
Released: February 20, 2026
- widgets — new module: deck.gl view controls, including pan buttons and a zoom slider.
- timeline-layers — new module: compact time-series layers, including horizon graphs, stacked horizon graphs, time axes, and vertical grids.
- graph-layers: declarative graph data and unified stylesheets, directional edge arrows, and new layouts for directed acyclic graphs, radial graphs, hive plots, and graphs with parallel edges.
- editable-layers: polygon-hole drawing and validation, updated GeoJSON types, and geometry-editing improvements.
- leaflet:
DeckLayerrenamed toDeckOverlayfor consistency with other deck.gl integrations.
v9.1
Released: July 8, 2025
- geo-layers — new module: global-grid visualization with pluggable decoders for A5, H3, S2, geohash, and quadkey.
- infovis-layers — new module: compact time-series visualization and utilities for non-geospatial views.
- leaflet: published integration module and a working website example.
- graph-layers: partial modernization of the graph visualization codebase.
v9.0
Released: November 20, 2024
- editable-layers — new module: a community fork of nebula.gl for interactive geometry editing, including circle and ellipse geometry properties.
- Added deck.gl v9 support to selected community modules.
Earlier releases
- layers — new module (December 2023): reusable community layers, initially including tile-source and data-driven 3D tile layers.
- graph-layers — new module (April 2023): graph visualization forked from the archived graph.gl repository.