Skip to main content

Upgrade Guide

Modules in @deck.gl-community are independently maintained, so this page will only list occasional major changes.

Please refer the documentation of each module for detailed upgrade guides.

Unreleased​

RadialLayout.radius now sets the radius of the deepest hierarchy ring. Existing layouts that compensated for oversized rings may need their radius retuned. Angular sectors use the leaf count rather than all graph nodes, so hierarchies with visible internal nodes fill the circle. Nodes outside the hierarchy return no position, and edges with absent endpoints return no geometry.

@deck.gl-community/layers: prepared SplatLayer​

Use data for a direct prepared Gaussian asset or owner rows, and getSource for a constant or per-row asset. Put new hierarchies in a {type: 'prepared-splats', source, hierarchy} descriptor. The compatibility form {data: rows, source, hierarchy} remains supported, but cannot be combined with direct asset data or an explicit getSource.

Sources and hierarchies are immutable; replace them when their columns change. Submission budgets retain minimum visible coverage and transition overlap, and do not cap GPU memory. A tighter maxRenderPixels can take one frame to apply while visibility expands for the broader filter. Planar Cartesian and Web Mercator views in the unwrapped world are supported. Wrapped world copies (MapView.repeat), GlobeView, URL/RAD inputs and sorted transparency report explicit unsupported-input errors. See SplatLayer for input forms and rendering limits. On WebGPU, View.clear is rejected until the upstream nested-render-pass path is fixed; overlapping views without clearing are supported.

@deck.gl-community/layers: native TreeLayer​

  • TreeLayer is now exported by @deck.gl-community/layers; the deprecated three workspace temporarily re-exports the same constructor. Update imports to the native package. Remove detail / TreeDetail; canopy overrides target SplatLayer, and wood overrides target connected meshes. Crop radii now match metres, so halve old values to retain their apparent size. See the native migration notes.

@deck.gl-community/editable-layers​

Edit modes now consistently accept SimpleFeatureCollection, which supports Point, LineString, Polygon and their Multi geometries, and excludes GeometryCollection. This fixes exported constructors such as TranslateMode being incompatible with GeoJsonEditModeConstructor in strict TypeScript projects.

Use SimpleFeatureCollection for editable data and ModeProps<SimpleFeatureCollection> for custom mode handlers. Use SimpleFeature for individual editable features:

import type {
ModeProps,
SimpleFeature,
SimpleFeatureCollection
} from '@deck.gl-community/editable-layers';

const feature: SimpleFeature = {
type: 'Feature',
geometry: {type: 'Point', coordinates: [0, 0]},
properties: {}
};
const data: SimpleFeatureCollection = {type: 'FeatureCollection', features: [feature]};

function handleModeData(props: ModeProps<SimpleFeatureCollection>) {
return props.data.features;
}

GeoJSON's FeatureCollection<SimpleGeometry> is also compatible. Validate or narrow broader GeoJSON input before editing; GeometryCollection is not supported by the edit modes. The existing Feature and FeatureCollection re-exports remain available.

SelectionLayer polygon selection​

Polygon selection no longer waits 250 ms before calling onSelect. If an application relied on that delay, schedule its own deferred work in the callback. Keep SelectionLayer after its pickable target layers. Selection continues to return deck.gl GPU picking infos for visible rendered objects, including GeoJSON and binary layer data.

Private playground schema preview​

The layer/view schema preview now rejects unknown props and invalid accessor constants. Extend a props schema for custom layers or extension props instead of relying on unknown keys passing through. Use createAccessorSchema(valueSchema) in place of the former untyped AccessorSchema. Move camera fields into viewState/initialViewState; view constructor props no longer accept them. Use upstream experimental names (_GlobeView, _WMSLayer, _MultiIconLayer, _TextBackgroundLayer) in @@type. Abstract View is no longer accepted. See the schema reference for the supported JSON profile.

v9.4​

Update deck.gl and luma.gl packages to ~9.4.0. Modules that use loaders.gl require @loaders.gl/*@^4.4.3.

@deck.gl-community/panels​

Panel APIs now use panel-oriented names consistently:

v9.3 namev9.4 replacement
WidgetPanelPanel
WidgetPanelThemePanelTheme
WidgetPanelThemeModePanelThemeMode
AccordeonWidgetContainerAccordeonPanelContainer
TabbedWidgetContainerTabbedPanelContainer
ColumnWidgetContainerColumnPanelContainer
PanelBoxBoxPanelContainer
PanelModalModalPanelContainer
PanelSidebarSidebarPanelContainer
PanelFullScreenFullScreenPanelContainer
ToolbarPanelContainerToolbarComponent
ToastPanelContainerToastComponent
useEffectiveWidgetPanelThemeModeuseEffectivePanelThemeMode

Additional migration steps:

  • Pass ordered Panel[] arrays to composite panels instead of PanelRecord maps.
  • Pass a panel directly to shell containers. The descriptor-style container input and the PanelContentContainer, PanelContentRenderer, and asPanelContainer helpers were removed.
  • Replace WidgetHost with PanelManager outside deck.gl. Inside deck.gl, wrap a component with PanelWidget or use a named panel widget.
  • Import createStudioSettingsWidget and updateStudioSettingsWidget from @deck.gl-community/widgets.
  • Rename the icon prop on modal and sidebar containers to triggerIcon.

@deck.gl-community/react​

Rename the React panel exports:

v9.3 namev9.4 replacement
WidgetPanelPanel
WidgetPanelPropsPanelProps
WidgetPanelThemeModePanelHostThemeMode

@deck.gl-community/graph-layers​

Graph loader imports​

DOTGraphLoader from @deck.gl-community/graph-layers has been removed. Import DOTLoaderWithParser from @loaders.gl/graphs/dot-loader for synchronous parsing or parser-bearing loader use. Pass graph URLs directly to GraphLayer.data with loaders: [DOTLoaderWithParser] and a layout; the layer converts the parsed records and creates its own engine. Already loaded graphs can also be passed to data. A custom graphLoader callback is unnecessary for normalized loader output. DOT syntax validation and strict-graph behavior follow loaders.gl. The loader returns plain graph data instead of Arrow data, and the old dot.version option is removed.

v9.3​

Dependencies​

  • Requires deck.gl@~9.3.0-beta.1 or later.
  • Requires @luma.gl/*@~9.3.2 or later.
  • Requires @loaders.gl/*@^4.4.1 or later.

@deck.gl-community/panels / @deck.gl-community/widgets​

  • New package: @deck.gl-community/panels now owns panel composition, standalone mounting, panel containers, theming, and related standalone UI.
  • @deck.gl-community/widgets is now the deck-facing wrapper layer for panel-based deck.gl widgets.
  • Migration:
    • Import panel definitions and panel containers from @deck.gl-community/panels
    • Pass those panel definitions into wrapper widgets from @deck.gl-community/widgets
  • New preferred widget wrapper names:
    • BoxPanelWidget
    • ModalPanelWidget
    • SidebarPanelWidget
    • FullScreenPanelWidget
  • Compatibility aliases BoxWidget, ModalWidget, and SidebarWidget were removed in v9.4.

@deck.gl-community/editable-layers​

  • The @deck.gl-community/layers peer dependency has been bumped from ^9.2.0-beta to ^9.3.0.

v9.2​

@deck.gl-community/editable-layers​

  • Breaking change: DrawPolygonMode.modeConfig.preventOverlappingLines has been renamed to allowSelfIntersection with inverted logic.
    • Replace {preventOverlappingLines: true} → {allowSelfIntersection: false} (or simply omit — this is now the default)
    • Replace {preventOverlappingLines: false} → {allowSelfIntersection: true}

@deck.gl-community/leaflet​

  • Breaking change: DeckLayer has been renamed to DeckOverlay.
    • Replace all imports and usages: import {DeckLayer} from '@deck.gl-community/leaflet' → import {DeckOverlay} from '@deck.gl-community/leaflet'

@deck.gl-community/graph-layers​

  • Deprecation: Graph style constants are now defined using literals instead of objects.
    • Replace deprecated NODE_TYPE.CIRCLE with 'circle', EDGE_TYPE.LINE with 'line', etc.
  • Deprecation: GraphLayer now groups styling under a stylesheet prop.
    • Replace nodeStyle / edgeStyle with stylesheet.nodes and stylesheet.edges.
  • Deprecation: graph prop on GraphLayer is being phased out. Provide graphs via the data prop instead (supports GraphEngine, Graph, or raw {nodes, edges}/edge arrays) and supply a layout when the layer must build the engine for you.
  • Breaking change: JSONLoader only normalizes raw JSON payloads. Pass Graph instances directly to GraphLayer.data rather than routing them through the loader.