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
TreeLayeris now exported by@deck.gl-community/layers; the deprecatedthreeworkspace temporarily re-exports the same constructor. Update imports to the native package. Removedetail/TreeDetail; canopy overrides targetSplatLayer, 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 name | v9.4 replacement |
|---|---|
WidgetPanel | Panel |
WidgetPanelTheme | PanelTheme |
WidgetPanelThemeMode | PanelThemeMode |
AccordeonWidgetContainer | AccordeonPanelContainer |
TabbedWidgetContainer | TabbedPanelContainer |
ColumnWidgetContainer | ColumnPanelContainer |
PanelBox | BoxPanelContainer |
PanelModal | ModalPanelContainer |
PanelSidebar | SidebarPanelContainer |
PanelFullScreen | FullScreenPanelContainer |
ToolbarPanelContainer | ToolbarComponent |
ToastPanelContainer | ToastComponent |
useEffectiveWidgetPanelThemeMode | useEffectivePanelThemeMode |
Additional migration steps:
- Pass ordered
Panel[]arrays to composite panels instead ofPanelRecordmaps. - Pass a
paneldirectly to shell containers. The descriptor-stylecontainerinput and thePanelContentContainer,PanelContentRenderer, andasPanelContainerhelpers were removed. - Replace
WidgetHostwithPanelManageroutside deck.gl. Inside deck.gl, wrap a component withPanelWidgetor use a named panel widget. - Import
createStudioSettingsWidgetandupdateStudioSettingsWidgetfrom@deck.gl-community/widgets. - Rename the
iconprop on modal and sidebar containers totriggerIcon.
@deck.gl-community/react
Rename the React panel exports:
| v9.3 name | v9.4 replacement |
|---|---|
WidgetPanel | Panel |
WidgetPanelProps | PanelProps |
WidgetPanelThemeMode | PanelHostThemeMode |
@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.1or later. - Requires
@luma.gl/*@~9.3.2or later. - Requires
@loaders.gl/*@^4.4.1or later.
@deck.gl-community/panels / @deck.gl-community/widgets
- New package:
@deck.gl-community/panelsnow owns panel composition, standalone mounting, panel containers, theming, and related standalone UI. @deck.gl-community/widgetsis 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
- Import panel definitions and panel containers from
- New preferred widget wrapper names:
BoxPanelWidgetModalPanelWidgetSidebarPanelWidgetFullScreenPanelWidget
- Compatibility aliases
BoxWidget,ModalWidget, andSidebarWidgetwere removed in v9.4.
@deck.gl-community/editable-layers
- The
@deck.gl-community/layerspeer dependency has been bumped from^9.2.0-betato^9.3.0.
v9.2
@deck.gl-community/editable-layers
- Breaking change:
DrawPolygonMode.modeConfig.preventOverlappingLineshas been renamed toallowSelfIntersectionwith inverted logic.- Replace
{preventOverlappingLines: true}→{allowSelfIntersection: false}(or simply omit — this is now the default) - Replace
{preventOverlappingLines: false}→{allowSelfIntersection: true}
- Replace
@deck.gl-community/leaflet
- Breaking change:
DeckLayerhas been renamed toDeckOverlay.- Replace all imports and usages:
import {DeckLayer} from '@deck.gl-community/leaflet'→import {DeckOverlay} from '@deck.gl-community/leaflet'
- Replace all imports and usages:
@deck.gl-community/graph-layers
- Deprecation: Graph style constants are now defined using literals instead of objects.
- Replace deprecated
NODE_TYPE.CIRCLEwith'circle',EDGE_TYPE.LINEwith'line', etc.
- Replace deprecated
- Deprecation:
GraphLayernow groups styling under astylesheetprop.- Replace
nodeStyle/edgeStylewithstylesheet.nodesandstylesheet.edges.
- Replace
- Deprecation:
graphprop onGraphLayeris being phased out. Provide graphs via thedataprop instead (supportsGraphEngine,Graph, or raw{nodes, edges}/edge arrays) and supply alayoutwhen the layer must build the engine for you. - Breaking change:
JSONLoaderonly normalizes raw JSON payloads. PassGraphinstances directly toGraphLayer.datarather than routing them through the loader.