What's New
This page contains highlights of each deck.gl release. Also check our vis.gl blog for news about new releases and features in deck.gl.
deck.gl v9.2
Release date: October 7, 2025
New widgets | WebGPU layers | Interleaved postprocessing |
Widgets
- A suite of new widgets have been added to the
@deck.gl/widgets
module: - Pre-wrapped React components - deck.gl widgets are available via the
@deck.gl/react
package - Custom widgets in pydeck - via the
custom_libraries
parameter, Python users can integrate custom deck.gl widgets seamlessly - Documentation for styling and custom themes - see Styling Widgets
WebGPU Early Preview
A few deck.gl layers can now be run on WebGPU in the website, by selecting the WebGPU
tab:
See documentation about how to test WebGPU support.
Core
PostProcessEffect
now works correctly in interleaved modeView.clone()
- New method that simplifies creating new Views with modified props, similar toLayer.clone()
- Multi-view clear support - Enhanced support for controlling clear color, depth, and stencil buffers across multiple views, via
clear
,clearColor
,clearDepth
,clearStencil
props
Layers
- New A5Layer - renders cells from the A5 geospatial indexing system. See new Global Grid Layers example
- IconLayer - new
sizeBasis
prop - TextLayer - new
backgroundBorderRadius
prop
CARTO
- ClusterTileLayer and HeatmapTileLayer support H3 data
- VectorTileLayer supports labels for line & polygon data, via new
autoLabels
prop
Mapbox
MapboxOverlay
- When usinginterleaved: true
and a Mapbox v3 Standard style, you may now control the ordering of layers by adding theslot
prop to a layer.
deck.gl v9.1
Release date: Jan 21, 2025
Maplibre Globe View | React Widgets | Aggregation Layers | WebGPU readiness |
Globe View ♥ MapLibre
deck.gl now works seamlessly with the MapLibre v5 globe view for all three Basemap Intergration Modes. The experimental GlobeView
has been updated to match MapLibre's camera at the same zoom level. MapboxOverlay
works with maplibre-gl globe map without additional configuration.
The Maplibre globe view integration was done in close collaboration with the MapLibre team.
React Widgets
deck.gl v9.0 added support for widgets, with v9.1 users can now create React components with the same level of deep deck.gl integration.
- All the official deck.gl widgets can now be easily wrapped into React components with the new
useWidget
hook. - Pre-wrapped React components for existing widget are available from the
@deck.gl/react
package. - To try it out, check out our React getting started example for using widgets in React.
Widgets Developer Guide
deck.gl v9.1 provides the ability to for applications to write React component that integrate with deck.gl using the widget interface.
Aggregation layers upgrade
v9.1 restores the GPU aggregation functionality that was temporarily disabled in v9.0. It brings a major refactor of the aggregation layers, with full TypeScript and unit test coverage.
A new generic Aggregator
interface makes it much easier to support custom aggregation operations. The current implementations of this interface include CPUAggregator
and WebGLAggregator
, with WebGPUAggregator
on the roadmap.
Highlights:
GridLayer
now utilized both CPU and GPU aggregators in the same code path.HexagonLayer
now supports GPU aggregation. Enable withgpuAggregation: true
.GridLayer
andHexagonLayer
can use*ScaleType
,*UpperPercentile
,*LowerPercentile
,onSet*Domain
props along with GPU aggregation.GridLayer
andHexagonLayer
now support non-geospatial views.- New picking info types for each aggregation layer.
See upgrade guide for more details.
WebGPU readiness
- luma.gl has been updated to v9.1 which focuses on improved WebGPU support. For details see release notes and upgrade-guide.
- As part of WebGPU readiness, all shader code in deck.gl v9.1 (layers and extensions) have been migrated to use uniform buffers instead of WebGL1 style uniforms.
- For most users this change should be transparent, but custom layers that add
uniforms
should start migrating asap as WebGL1 style uniform support is being actively phased out.
deck.gl v9.0
Release date: March 21, 2024
WebGPU | ![]() Typescript | Widgets | Category filtering |
WebGPU enablement
deck.gl v9 adopts the luma.gl v9 API. This will enable deck.gl to run on WebGPU in future releases, however it does cause some unavoidable breaking changes.
WebGPU is the next generation API for accessing GPU capabilities on the web. Unlike the incremental transition from WebGL to WebGL2, the shift to WebGPU completely changes the way the browser will interact with the GPU. The new (v9) version of luma.gl has been rewritten to adopt a WebGPU-compatible interface, while maintaining full support for WebGL2. deck.gl v9 has been extensively refactored on top of the new luma.gl API, but the deck.gl API itself includes minimal changes. This should allow applications to smoothly update to the latest version.
While the v9 luma.gl release is feature-complete and well-tested for the WebGL2 adapter, work is still required to provide full WebGPU support. The team is planning to follow the v9 releases soon with v9.1, which will provide the WebGPU implementation in luma.gl along with the complimentary updates in deck.gl.
Development experience
Typescript types, which were provided as an opt-in in 8.9, has now been enabled by default in v9.
All the deck.gl packages are now published as fully ESM-compatible.
Improved FirstPersonController
The behavior of the FirstPersonController has been modified to more accurately reflect the motion of a human, making it more intuitive to navigate a 3D space. In addition, panning is supported.
Category filtering in DataFilterExtension
The DataFilterExtension has been enhanced to support filtering based on categories. A new accessor, getFilterCategory, is added which allows filtering using the new filterCategories.
@deck.gl/widgets
(New module)
You can now add UI components to deck.gl. This new module lets apps add controls and information that can interact with deck.gl's cameras and layers for a better user experience. To get started, check out the example and the documentation.
This module initially contains the following widgets:
You can also create your own widget by implementing the Widget
interface.
@deck.gl/carto
-
New CARTO module architecture: Sources and Layers replace the CartoLayer. Read more in the Upgrade Guide.
-
Public preview for Boundary Sources (experimental): easily aggregate large data volumes aggregated into common or custom geographic boundaries, such as postal codes. Learn more about Boundaries in the CARTO documentation.
Known Limitations
The following issues are known and will be resolved in a v9.0 patch release:
@deck.gl/aggregation-layers
(ScreenGridLayer
, ...) performance - aggregation layers temporarily use CPU fallbacks which are less performant.
deck.gl v8.9
Release date: March 9, 2023
![]() CollisionFilterExtension | ![]() TerrainExtension | ![]() WMSLayer |
Extensions
Two new extensions are added in the 8.9 release: CollisionFilterExtension
and TerrainExtension
.
The CollisionFilterExtension
allows layers to hide features which overlap with other features. An example is a dense ScatterplotLayer
with many points which overlap: by using this extension points that collide with others are hidden such that only one of the colliding points is shown. The collisions are computed on the GPU in realtime, allowing the collisions to be updated smoothly on every frame. Visit the documentation and example to get started.
The experimental TerrainExtension
renders otherwise 2D data along a 3D surface. For example, a GeoJSON of city streets and building footprints can be overlaid on top of a elevation model. It is useful when viewing a mixture of 2D and 3D data sources. The re-positioning of geometries is performed on the GPU. Visit the documentation and example to get started.
In addition, MaskExtension
now supports FirstPersonView
, and supports a new maskInverted
prop.
WMSLayer
The new experimental WMSLayer
simplifies connection to WMS and similar map image services. In contrast to the TileLayer
which loads many small image tiles, the WMSLayer
loads a single image that covers the entire viewport in one single request, and updates the image by performing additional requests when the viewport changes.
Other Enhancements
- MapLibre GL basemap is now supported out-of-the-box by the scripting interface.
BitmapLayer
now mixes translucent pixels correctly (Note: breaking change)TextLayer
handles text outlines better in sdf mode. Outlines are no longer clipped and responds tooutlineWidth
as expected.TextLayer
'smaxWidth
is changed to use a more intuitive unit. See upgrade guide for details.IconLayer
when used with auto packing preserves the aspect ratio of icons.SolidPolygonLayer
andGeoJsonLayer
add a_full3d
prop that tesselate 3D polygons better.@deck.gl/mapbox
now synchronizes camera better when the base map contains terrain.- TypeScript: data prop now correctly typed for each layer class
Code base upgrades
In preparation for the 8.9 release, we made major upgrades to the tools that support the development and publishing of deck.gl. This allows us to iterate faster and makes it easier for first-time users to get started.
- All examples are bootstrapped with vite
- Pre-bundled scripts built with esbuild
- Website rewritten using Docusaurus
- Tests are run with
tsnode
with ESM modules for node, andvite
for the browser
pydeck 0.8
- Compatibility with JupyterLab 3 and Google Colab
- Support
types.Function
in JSON Converter,configuration
anddefault_layer_attributes
in settings - pydeck-carto: support
CartoLayer
, styling functions (color_bins
,color_categories
,color continuous
), and authentication using carto-auth
deck.gl v8.8
Release date: June, 2022
TypeScript
Official typings are now available in deck.gl for public preview. It was a tremendous effort converting the deck.gl code base into TypeScript. We did it not just for TypeScript users to easily consume this library, but also for the overall robustness and maintainability of our own code base.
In v8.x, the types will not be exposed by default to prevent any typing errors from breaking existing TypeScript applications. You can opt in to using the typed version by switching your import statements to the @deck.gl/*/typed
endpoints. Visit getting started with TypeScript to find out more.
Custom Indexing System in TileLayer
The TileLayer is fundamental when it comes to visualizing datasets so big that they cannot fit in the browser's memory. The idea is to only fetch and render content that is visible in the current viewport, and at the appropriate detail level. Up till now, the TileLayer
has exclusively implemented the OSM tile index. If you wish to use it with your dataset, you had to use an offline tool or an backend that partitioned geospatial data into OSM tiles.
Starting from v8.8, the TileLayer
supports custom indexing systems. Applications can now supply a custom implementation of Tileset2D to the TilesetClass
prop. This makes it possible to use incremental loading with other indexing systems such as H3 and S2. The immediate use case is to allow the client visualization to work with any geospatial partitioning algorithm available in a database solution.
Due to this generalization, there is a breaking change affecting indexing properties (x
, y
and z
) in the TileLayer
API. See upgrade guide for details.
MapboxOverlay
The @deck.gl/mapbox
module now exports a new class MapboxOverlay. The class implements Mapbox GL JS's IControl API. When adding a MapboxOverlay
control to an mapbox map, deck.gl layers are rendered in synchronization with the base map layers. This control supports both overlaid and interleaved rendering modes. See the new get started example.
If you are using react-map-gl v7, this is the only solution to use deck.gl with React map control components (Navigationcontrol
, GeolocateControl
, etc.). See example.
@deck.gl/carto
CartoLayer includes native support to work with spatial indexes like H3 or QuadBin. More info here.
Enhancements
- Views now accept a padding option to offset the focal point.
- Improved performance when there are many invisible layers
- Improved picking performance when using the
TileLayer
deck.gl v8.7
Release date: February 25, 2022
MaskExtension
The new MaskExtension allows layers to show/hide objects by a geofence. For example, a map may filter a list of user locations by the boundaries of a given country, or highlight part of a base map that is inside a user-drawn circle or lasso area.
QuadkeyLayer
The new QuadkeyLayer renders filled and/or stroked polygons, with geometry automatically calculated based on a quadkey (geospatial index).
Enhancements
TileLayer
reducedrefinementStrategy: 'no-overlap'
.TileLayer
refinementStrategy
now accepts a callback function enabling customer refinement strategies.TerrainLayer
can now be used with non-geospatial views.ColumnLayer
addsflatShading
prop.GlobeView
lighting in 3D layers is more consistent.GoogleMapsOverlay
supports camera tilt and bearing for raster maps.MVTLayer
now supportspointType: 'text'
inbinary
mode.- Picking with
project3D: true
now returns more accurate result in non-geospatial views.
@deck.gl/carto
- fetchMap - fetchMap is added to the CARTO deck.gl submodule, streamlining the display of maps created using CARTO platform.
- Support for large tables and Databricks. See CARTO documentation for more details.
deck.gl v8.6
Release date: October 11, 2021
Interleaving deck.gl layers with Google Maps vector rendering
The GoogleMapsOverlay class supports Google Maps' new vector map, providing the following advantages:
- Shared 3D space: objects drawn by the
GoogleMapsOverlay
class appear inside the Google Maps scene, correctly intersecting with 3D buildings and behind the contextual labels drawn by Google Maps. - Tilting and rotating the view is supported.
- Rendering uses the same WebGL context as Google Maps, improving performance.
See blog posts from Google Cloud and our own for the potentials of this feature.
Visit the new Google Maps integration example to get started.
OrthographicView
It is now possible to independently control the zoom of the X and Y axes.
- The
zoom
prop of theOrthographicView
now also supports an[x, y]
Array to specify independent zoom levels. - A
zoomAxis
option is added to theOrthographicController
to restrict zooming to the X or Y axes.
MapView
![]() Meter sizes in 8.5 | ![]() Meter sizes in 8.6 |
- Meter sizes are now correctly calculated based on the latitude of the point being drawn, whereas they previously were based on the center point of the viewport. This brings the view into full compliance with the Web Mercator projection.
- A new unit enum
common
is added for scaling geometries without the distortion of the projection method. See updated documentation about the unit system. - A new
projectionMatrix
option allows overriding of the matrix that would otherwise be created from the other view states.
Layer Enhancements
CartoLayer
adds newgeoColumn
andcolumns
props, enables more granular data fetching from CARTO backend.ColumnLayer
andGridCellLayer
addradiusUnits
prop.H3HexagonLayer
now supports manually forcing low-precision, high-performance rendering withhighPrecision: false
.HeatmapLayer
addsweightsTextureSize
anddebounceTimeout
props for fine-tuning performance.MVTLayer
now defaults to handling geometries in binary.Scatterplot
andGeoJsonLayer
add option to turn off antialiasing to avoid artifacts in depth oclusion.TileLayer
no longer purges its cache when data changes, resulting in a smoother "reload" experience
deck.gl v8.5
Release date: July 26, 2021
![]() TextLayer background, border, padding and outline | ![]() GeoJsonLayer pointType | ![]() Tile3DLayer+I3S picking individual objects |
Layer Improvements
MVTLayer
Mapbox Vector Tiles parsing throughput is now 2-3x faster, due to MVT tiles being parsed directly into binary attributes rather than GeoJSON, and additional work (including triangulation) being performed on worker threads. Speed comparison on some example data sets (MVT tiles parsed per second):
Data set | binary: false | binary: true | Speed increase |
---|---|---|---|
Block Groups | 2.86/s | 5.57/s | 1.94x |
Census Layer | 6.09/s | 11.9/s | 1.95x |
Counties Layer | 72.5/s | 141/s | 1.94x |
USA Zip Code Layer | 8.45/s | 20.3/s | 2.4x |
Benchmarks ran using scripts on a 2012 MacBook Pro, 2.3 GHz Intel Core i7, 8 GB, measuring parsing time of MVTLoader only (network time and rendering is not included)
GeoJsonLayer
GeoJSONLayer now supports rendering point features as icons and/or text labels in addition to circles. Use the new pointType
prop:
new GeoJsonLayer({
...
pointType: 'circle+text',
getText: f => f.properties.name,
getTextSize: 12
})
For a full list of new props, visit the updated documentation.
TextLayer
The layer now supports automatically detecting the characters used in the data. Set characterSet: 'auto'
to enable this feature.
New props are added for more flexible styling of the texts:
background
backgroundPadding
outlineWidth
outlineColor
getBackgroundColor
getBorderWidth
getBorderColor
See documentation for details.
Tile3DLayer
Tile3DLayer can now be rendered in multiple views. Previously if you use multiple views it was required to create one Tile3DLayer for each view. Using a single layer is more efficient by sharing the tile cache.
The layer now takes full advantage of new features in I3S 1.7 tile sets, including:
- Picking individual objects inside a tile
- Page nodes (improved performance)
- Draco compressed meshes (improved performance)
- Compressed textures (improved performance)
- PBR materials
- Vertex colors
- UVRegions
Other layer improvements
ScatterplotLayer
addsbillboard
modeTripLayer
addsfadeTrail
modePathLayer
now supports controllingjointRounded
andcapRounded
separately. Dashed lines viaPathStyleExtension
also respects the cap type.PolygonLayer
andGeoJsonLayer
:autoHighlight
now highlight both the outline and the fill of the hovered polygon, instead of either the outline or the fill.HeatmapLayer
now correctly rendersaggregation: 'MEAN'
with user-suppliedcolorDomain
.
Default transpilation and bundle size
The NPM distribution has dropped IE 11 support in exchange for an almost 20% reduction in size.
Entry point | 8.5 Bundle (gzipped) | 8.4 Bundle (gzipped) | Comments |
---|---|---|---|
module (dist/esm) | 398 KB (115 KB) | 485 KB (128 KB) | Transpiled, tree-shaking enabled |
main (dist/es5) | 686 KB (178 KB) | 812 KB (197 KB) | Transpiled, no tree-shaking |
Measured as the footprint of @deck.gl/core, bundled and minified with Webpack 4
To support older or less common browsers, make sure that node_modules
is included in your application's babel settings.
For backward compatibility, the pre-built bundle (dist.min.js
) is not affected by this change.
@deck.gl/react
The DeckGL
React component is rewritten using functional component and hooks.
@deck.gl/carto
- Integration with CARTO 3 platform. With deck.gl and the CARTO 3 platform you can access directly your datasets and tilesets hosted in your current data warehouse (BigQuery, Snowflake, Redshift, Postgres). You don't need to move your data to CARTO plaform.
- A new
CartoLayer
is available to unifyCartoBQTilerLayer
andCartoSQLLayer
. There are migration guides for both: CartoSQLLayer and CartoBQTilerLayer. - New
getData
method in CARTO 3 to support other deck.gl layers.
deck.gl v8.4
Release date: Jan 31, 2021
Better Interaction
Improved experience on mobile devices
All controllers now support smooth easing at the end of dragging and pinching. This can be turned on via the new inertia option:
controller: {inertia: true}
In addition, a three-finger swipe gesture is added to support changing pitch on mobile. It is enabled via the touchRotate
option.
More customizable controller behavior
- New
dragMode
option for flipping pan/rotate modes - The
keyboard
option now accepts an object for customizing movement speed - The
scrollZoom
option now accepts an object for customizing wheel zoom speed and easing
New Deck component API
eventRecognizerOptions
for fine-tuning gesture recognitiononInteractionStateChange
callback- The
getCursor
now receives anisHovering
argument that indicates whether the pointer is over a pickable object.
MVT Layer
TileJSON
The data
prop now accepts a TileJSON URL. The onDataLoad
callback is fired when the TileJSON loads.
Query rendered features
A new method getRenderedFeatures
is added for querying all visible features in the current viewport.
Features in WGS84 coordinates
onHover
, onClick
, onTileLoad
, onTileError
and onViewportLoad
callbacks can now access features in WGS84 coordinates.
Binary mode
A new prop binary
is added to the MVTLayer. If set to true
, it removes the need for serialization and deserialization of data transferred by the worker back to the main process, as well as attribute packing in the main thread. The following numbers show the performance improvements in loading and rendering a full viewport:
N Vertex | Binary | Non-Binary | Change | |
---|---|---|---|---|
Usa Admin States | 12K | 963ms | 1109ms | -13.16% |
Counties Layer | 175K | 1222ms | 1956ms | -37.52% |
Census Tract | 988K | 2713ms | 6242ms | -56.53% |
Block groups | 1.57M | 4261ms | 9202ms | -53.69% |
Usa Zip Code Layer | 1.38M | 2938ms | 6564ms | -55.24% |
Benchmark run on 2017 Macbook Pro, 3,1 GHz Dual-Core Intel Core i5, 16 GB memory, Intel Iris Plus Graphics 650 1536 MB. Resolution 1140x900. Network transfer time is not included
Layer improvements
- All layers
- Add a new
loaders
prop to support additional data formats. See the Data Loading Guide for examples. - Layers that use a texture (e.g.
BitmapLayer
,IconLayer
,SimpleMeshLayer
) now offer consistent support for a variety of input formats. Newly supported are plain object descriptors (e.g.{data: <Uint8Array>, width, height}
) andHTMLVideoElement
that continuously updates. A new proptextureParameters
also allows easy customization of texture settings.
- Add a new
- HeatmapLayer adds new prop
aggregation
which can be eitherSUM
(default) orMEAN
. - BitmapLayer
- picking callbacks now provide information on which pixel was picked.
- Adds experimental
_imageCoordinateSystem
prop, so that raster tiles may render correctly inGlobeView
.
- GlobeView now works with
COORDINATE_SYSTEM.CARTESIAN
andSunLight
. - TileLayer now supports
modelMatrix
. - IconLayer adds
onIconError
callback. - OrthographicView adds
flipY
option. - ArcLayer and LineLayer now render the shortest path with
wrapLongitude: true
.
Additionally, various layers received performance optimization, corrected lighting calculation, and API consistency improvements. See upgrade guide for a list breaking changes in this release.
Functions in declarative language
@@function prefix is included to interpret a string as a JavaScript function.
@deck.gl/carto
Adds helper functions to create data-driven map visualizations using CARTOColors
deck.gl v8.3
Release Date: Oct 12, 2020
New module: @deck.gl/carto
![]() | ![]() |
Integration with the powerful geospatial analytics platform CARTO.
This new modules makes it easy to visualize regular Tables and vector tilesets in CARTO. It offers two new layers:
- CartoSQLLayer: a layer to visualize data hosted in your CARTO account and to apply custom SQL.
- CartoBQTilerLayer: a layer to visualize large datasets (millions or billions of rows) directly from Google BigQuery.
This effort enables applications to leverage CARTO's smart back-end capabilities, dynamic queries and much more. Visit the module's documentation to get started.
TileLayer
getTileData
now receives an additional argumentsignal
that implements AbortSignal. Tile requests may now be aborted if there are too many queued or ongoing requests.- The
getTileData
function passed in to the current layer instance will be called rather than the first layer instance. This allows applications to progressively adjust loading behavior without having to reload all tiles. - New
onTileUnload
callback - URL templates now support
{-y}
for TMS indexing - Experimental support for
GlobeView
inTileLayer
andMVTLayer
- Improved memory usage in tile caching
General Performance
Layers with pickable
disabled (the default) skip generating picking attributes. This can improve initial loading time and memory usage if a large layer does not have to be interactive.
If no layer is pickable, deck no longer creates the picking FrameBuffer to save memory.
Deck
also added some experimental optimization options to allow more fine-grained control of memory usage on memory-restricted devices.
pydeck 0.5
pydeck 0.5 includes new event handlers — on_hover
, on_click
, on_view_state_change
, and on_resize
— which can be used to create rich interactive applications in Jupyter. This release works in sync with deck.gl 8.3.
![]() Event handling in pydeck | ![]() highPrecisionDash in PathStyleExtension |
Other Improvements
SimpleMeshLayer
adds_useMeshColors
prop to use vertex colors frommesh
instead ofgetColor
DataFilterExtension
adds acountItems
option. It enables the GPU to report the number of objects that pass the filter criteria via theonFilteredItemsChange
callback.PathStyleExtension
adds ahighPrecisionDash
option. It creates nicer dashes when used with small path segments, at the price of some CPU overhead.IconLayer
fixed an issue of visual artifacts rendering anti-aliased borders
deck.gl v8.2
Release Date: June 28, 2020
![]() FillStyleExtension | ![]() MVTLayer highlight - v8.1 | ![]() MVTLayer highlight - v8.2 |
Tiled Layers
Many new features are added to TileLayer
, MVTLayer
and TerrainLayer
to improve correctness, performance and ease of use.
MVTLayer
projects more accurately at high zoom levels.autoHighlight
in theMVTLayer
now works on features that are split across multiple tiles, identified by the newuniqueIdProperty
prop.- All geospatially tiled layers now handle high pitch angles better. Far away tiles from the camera are loaded at lower zoom levels, avoiding loading too many tiles.
- Tiled layers now use a request scheduler to prioritize loading the most recently visible tiles during viewport navigation. See the new
maxRequests
prop. TileLayer
may continue to display tiles when underzoomed. See the newextent
prop.- Fine-tune the tiles displayed by the
TileLayer
with the newzRange
prop when dealing with 3D content. This is used by theTerrainLayer
when viewing high-altitude regions. TileLayer
'stileSize
prop can be used to fine-tune the zoom level at which tiles are loaded.TileLayer
'srenderSubLayers
is now always called after the tile layer is loaded, i.e.props.data
is never a Promise.TileLayer
can now be used in multi-view applications, as long as eachTileLayer
instance is rendered into one view. See documentation for an example.
GlobeView

For geospatial data, a new projection mode -- globe projection is now available alongside Web Mercator projection. In this release, the feature is exposed via the experimental GlobeView
class.
Currently there is no base map provider under this view. You may use the BitmapLayer
or GeoJsonLayer
to render a backdrop for your data.
Before getting started with this example, make sure you check out the docs for the limitations of the current implementation.
Antimeridian Handling
GreatCircleLayer
now renders correctly across the 180th meridian.- The
PathLayer
,PolygonLayer
andGeoJsonLayer
now support thewrapLongitude
prop.When enabled, the connection between any two neighboring vertices is drawn on the shorter side of the world, and split into two if it crosses the 180th meridian. Note that this introduces CPU overhead at runtime.
Pydeck
Pydeck 0.4.0 introduces support for JupyterLab 2.0, support for a Google Maps base map, a new UI element for providing text descriptions of a map, and many of the new features of deck.gl 8.2, like the ability to render data to either a globe or a Mercator projection. See the new website for documentation and examples.
Miscellaneous
- Multiple layers that share the same
data
URL now only download the data once. ScatterplotLayer
addedradiusUnits
prop- New
FillStyleExtension
fills polygons with repeated pattern from a sprite image. ArcLayer
addedgreatCircle
prop.GreatCircleLayer
is now a special case of theArcLayer
and support rendering an elevated curve by supplyinggetHeight
.@deck.gl/test-utils
added newtestLayerAsync
API.- When using auto-highlight,
highlightColor
now accepts a callback that returns a color based on which object is picked.
deck.gl v8.1
Release Date: Mar 17, 2020
Growing Tile Solutions
![]() Non-geospatial TileLayer | ![]() MVTLayer | ![]() TerrainLayer |
The @deck.gl/geo-layers
module added many new features to address popular tiled data use cases.
TileLayer
Multiple bugs have been fixed in the TileLayer regarding data fetching and tree traversal.
The layer now supports non-geospatial views. Check out this example by @ilan-gold that renders a 576 Megapixel image of the moon.
New props are added to better control the layer's behavior:
maxCacheByteSize
: for precise management of memory usagerefinementStrategy
: to reduce flashing/overlapping during loadingtileSize
(non-geospatial only)
MVTTileLayer
Based on the TileLayer
, MVTTileLayer loads and renders tiles in the Mapbox Vector Tiles specification. This new layer make it easier to leverage the many great open source tools in use with deck.gl.
This effort is led by contributors from CARTO.
TerrainLayer
TerrainLayer loads color-encoded heightmap and reconstructs 3D mesh surfaces. Check out our example.
ESRI + deck.gl
![]() deck.gl + ArcGIS basemap | ![]() Tile3DLayer + I3S |
In collaboration with GIS industry leader ESRI, we are releasing new experimental features that work with ArcGIS basemap and I3S tiles.
@deck.gl/arcgis
You can now use ArcGIS basemaps with deck.gl. This new module lets apps render deck.gl layers into the WebGL context of ArcGIS API for JavaScript. 3D scene view support is experimental in this initial release. To get started, check out the example and the documentation.
Tile3DLayer and I3S format
Tile3DLayer
is adding preliminary support for the OGC Indexed 3d Scene (I3S) format. See documentation for details.
World Repeating in Web Mercator Maps
The MapView
now supports repeating worlds at low zoom levels. For backward compatibility, this feature is opt-in. Apps may turn it on by setting views: new MapView({repeat: true})
on Deck
or DeckGL
.
Repeating is always on when using MapboxLayer and GoogleMapsOverlay.
As a result, GoogleMapsOverlay
now supports all Google Maps zoom levels.
pydeck 0.3.0
pydeck now uses the binary attribute API to communicate between Python and JavaScript. This greatly increases the speed and the amount of data that it can render.
pydeck now supports external layer modules via a new custom_libraries
setting.
Other Improvements
- When using
Deck
as a stateful component, you can now update itsinitialViewState
prop to reset the camera. - A new prop
onError
is added toDeck
to handle errors, instead of crashing the app. Layer
instances now expose a new memberisLoaded
.PathLayer
's joint calculation is improved when using with short line segments and extreme angles.BrushingExtension
supports a newbrushingTarget
modesource_target
.PathStyleExtension
now has a new modeoffset
. This feature can be used for positioning polygon strokes inside/outside, or rendering overlapped paths in opposite directions.TextLayer
now supports binary attributes.
deck.gl v8.0
Release Date: Dec 20, 2019
Performance
Performance is one of the biggest focus of this update. Layer updates (data change) is 1.5x the speed of the last release, and redraw (viewport change) is 2.5x.
Benchmark of using 1000 ScatterplotLayers on 2016 Macbook Pro, 2.8 GHz Intel Core i7, 16 GB memory, AMD Radeon R9 M370X 2 GB
v7.3 | v8.0 | Change | |
---|---|---|---|
Initialize | 298ms | 235ms | -21% |
Update | 112ms | 72ms | -36% |
Redraw (CPU Time) | 76ms | 26ms | -66% |
Redraw (GPU Time) | 17ms | 10ms | -41% |
In addition to runtime performance, deck.gl also added a production mode to optimize bundle size. The v8.0 minified bundle of @deck.gl/core
is 50kb lighter than that of v7.3.
Better Binary Data Support
It is now possible to replace a layer's accessors with binary data attributes. This technique offers the maximum performance in terms of data throughput in applications where a lot of data is loaded and/or frequently updated:
const data = new Float32Array([
0.7, 0.2, 0, 0, 0, 0,
0.8, 0.6, 0, 0, 5, 0,
0.3, 0.5, 0, 5, 5, 0,
0, 0.8, 0.6, 5, 10, 0,
0, 0.5, 0.7, 10, 10, 0
]);
new deck.ScatterplotLayer({
id: 'points',
data: {
length: 5,
attributes: {
getPosition: {value: data, size: 3, offset: 12, stride: 24},
getFillColor: {value: data, size: 3, offset: 0, stride: 24}
}
}
getRadius: 1
})
This use case is discussed in detail in the performance developer guide.
GPU Data Filter in Aggregation Layers
DataFilterExtension now supports the following layers from @deck.gl/aggregation-layers
:
HeatMapLayer
GPUGridLayer
ScreenGridlayer
(GPU aggregation only)ContourLayer
(GPU aggregation only)GridLayer
(GPU aggregation only)
pydeck
- pydeck now supports JupyterLab.
- The Jupyter widget now allows users to click multiple objects in a visualization and pass them to the Python backend.
- JavaScript errors are now surfaced in the Jupyter UI.
- Support for non-Mercator visualizations.
- The JSON parser has introduced syntactic identifiers in an effort to become more generic and robust. It is able to work with a wider range of data formats and layer types. See upgrade guide for details.
Other New Features and Improvements
- Render to a frame buffer by specifying the
_framebuffer
prop of Deck. - Pick a 3d surface point in the scene by passing
unproject3D: true
todeck.pickObject
ordeck.pickMultipleObjects
. - ArcLayer supports drawing arcs between two 3D positions.
- TextLayer adds a new prop
backgroundColor
. Picking works when the cursor is over an empty pixel in the text. - TextLayer adds
maxWidth
andwordBreak
props to support text wrapping. - ScenegraphLayer adds props
sizeMinPixels
andsizeMaxPixels
. - 64-bit positions are now 3D instead of 2D. This improves render precision when using
OrbitView
. FirstPersonView
now supports pitch; controller works more intuitively; graduates from experimental status.FlyToInterpolator
now supportsduration: 'auto'
.