freshcrate
Skin:/
Home > Frameworks > pydeck

pydeck

Widget for deck.gl maps

Why this rank:Strong adoptionRecent releaseHealthy release cadence

Description

[![Binder](https://mybinder.org/badge_logo.svg)](https://mybinder.org/v2/gh/uber/deck.gl/binder) [![Documentation Status](https://readthedocs.org/projects/deckgl/badge/?version=latest)](https://pydeck.gl) [![Anaconda-Server Badge](https://anaconda.org/conda-forge/pydeck/badges/version.svg)](https://anaconda.org/conda-forge/pydeck) [![Downloads](https://pepy.tech/badge/pydeck/week)](https://pepy.tech/project/pydeck/week) # pydeck: Large-scale interactive data visualization in Python [![demo](https://user-images.githubusercontent.com/2204757/58838976-1538f400-8615-11e9-84f6-a2fe42bb300b.gif)](https://pydeck.gl/) The pydeck library is a set of Python bindings for making spatial visualizations with [deck.gl](https://deck.gl), optimized for a Jupyter environment. To get started, __[see the documentation](https://pydeck.gl/)__. __[To install pydeck, see the instructions here](https://pydeck.gl/en/latest/installation.html)__. For __interactive demos__, click the binder logo below: [![Binder](https://mybinder.org/static/logo.svg?v=f9f0d927b67cc9dc99d788c822ca21c0)](https://mybinder.org/v2/gh/uber/deck.gl/binder) ## Sample code The following code renders a visualization similar to the one above in a Jupyter notebook: ```python import pydeck as pdk # 2014 locations of car accidents in the UK UK_ACCIDENTS_DATA = ('https://raw.githubusercontent.com/uber-common/' 'deck.gl-data/master/examples/3d-heatmap/heatmap-data.csv') # Define a layer to display on a map layer = pdk.Layer( 'HexagonLayer', UK_ACCIDENTS_DATA, get_position=['lng', 'lat'], auto_highlight=True, elevation_scale=50, pickable=True, elevation_range=[0, 3000], extruded=True, coverage=1) # Set the viewport location view_state = pdk.ViewState( longitude=-1.415, latitude=52.2323, zoom=6, min_zoom=5, max_zoom=15, pitch=40.5, bearing=-27.36) # Render r = pdk.Deck(layers=[layer], initial_view_state=view_state) r.to_html('demo.html') ``` If you're developing outside a Jupyter environment, you can run: ```python r.to_html('demo.html', notebook_display=False) ``` __[See the gallery for more examples.](https://pydeck.gl/#gallery)__ ### Issues and contributing If you encounter an issue, file it in the [deck.gl issues page](https://github.com/visgl/deck.gl/issues/new?assignees=&labels=question&template=question.md&title=) and include your browser's console output, if any. If you'd like to contribute to pydeck, please follow the [deck.gl contribution guidelines](https://github.com/visgl/deck.gl/blob/master/CONTRIBUTING.md) and the [pydeck development installation instructions](https://pydeck.gl/en/latest/contributing.html).

Release History

VersionChangesUrgencyDate
v9.3.3- fix(extensions): MaskExtension compatible with TerrainExtension (#10187) - feat(carto): Clipped polygon labels (#10278) - feat(core): ViewProps.parameters (#10262) - feat(layers): add getPixelOffset prop to ScatterplotLayer (#10178)High5/14/2026
v9.3.2- Fix GeoJsonLayer TypeScript types: elevationScale as number, update deprecated depthTest parameter (#10261) - fix(google-maps, arcgis): Wrap external FB handle (#10253) - fix(react): Align React widget names with pure js (#10239)High4/30/2026
0.9.2Imported from PyPI (0.9.2)Low4/21/2026
v9.3.1- feat(widgets): ScrollbarWidget falls back to controller.maxBounds (#10236) - fix(widgets): ThemeWidget does not apply theme variables on initial add (#10238) - fix(widgets): CoordinateGeocoder edge case handling (#10235) - feat(widgets) unify viewId handling (#10234) - fix(widgets): SplitterWidget types (#10233)High4/17/2026
v9.3.1- feat(widgets): ScrollbarWidget falls back to controller.maxBounds (#10236) - fix(widgets): ThemeWidget does not apply theme variables on initial add (#10238) - fix(widgets): CoordinateGeocoder edge case handling (#10235) - feat(widgets) unify viewId handling (#10234) - fix(widgets): SplitterWidget types (#10233)High4/17/2026
v9.3.1- feat(widgets): ScrollbarWidget falls back to controller.maxBounds (#10236) - fix(widgets): ThemeWidget does not apply theme variables on initial add (#10238) - fix(widgets): CoordinateGeocoder edge case handling (#10235) - feat(widgets) unify viewId handling (#10234) - fix(widgets): SplitterWidget types (#10233)Medium4/17/2026
v9.3.1- feat(widgets): ScrollbarWidget falls back to controller.maxBounds (#10236) - fix(widgets): ThemeWidget does not apply theme variables on initial add (#10238) - fix(widgets): CoordinateGeocoder edge case handling (#10235) - feat(widgets) unify viewId handling (#10234) - fix(widgets): SplitterWidget types (#10233)Medium4/17/2026
v9.3.1- feat(widgets): ScrollbarWidget falls back to controller.maxBounds (#10236) - fix(widgets): ThemeWidget does not apply theme variables on initial add (#10238) - fix(widgets): CoordinateGeocoder edge case handling (#10235) - feat(widgets) unify viewId handling (#10234) - fix(widgets): SplitterWidget types (#10233)Medium4/17/2026
v9.3.1- feat(widgets): ScrollbarWidget falls back to controller.maxBounds (#10236) - fix(widgets): ThemeWidget does not apply theme variables on initial add (#10238) - fix(widgets): CoordinateGeocoder edge case handling (#10235) - feat(widgets) unify viewId handling (#10234) - fix(widgets): SplitterWidget types (#10233)Medium4/17/2026
v9.3.1- feat(widgets): ScrollbarWidget falls back to controller.maxBounds (#10236) - fix(widgets): ThemeWidget does not apply theme variables on initial add (#10238) - fix(widgets): CoordinateGeocoder edge case handling (#10235) - feat(widgets) unify viewId handling (#10234) - fix(widgets): SplitterWidget types (#10233)Medium4/17/2026
v9.3.1- feat(widgets): ScrollbarWidget falls back to controller.maxBounds (#10236) - fix(widgets): ThemeWidget does not apply theme variables on initial add (#10238) - fix(widgets): CoordinateGeocoder edge case handling (#10235) - feat(widgets) unify viewId handling (#10234) - fix(widgets): SplitterWidget types (#10233)Medium4/17/2026
v9.3.0deck.gl v9.3 features big improvements to widgets, controllers and WebGPU. Find out more on [What's New](https://deck.gl/docs/whats-new) and [Upgrade Guide](https://deck.gl/docs/upgrade-guide).Medium4/13/2026
v9.3.0-beta.2- fix(widgets): ZoomWidget works with OrthographicView (#10202) - fix(aggregation-layers) Fix nvidia compilation error (#10191) - fix(widgets): Move @floating-ui/dom to dependencies (#10189)Medium4/11/2026
v9.3.0-beta.1- feat(extensions): Add dashed stroke support for ScatterplotLayer and TextBackgroundLayer (#9976) - chore(test-utils): Separate tape tests from vitest and clean up CI (#10061) - fix(geo-layers): Ensure zoomOffset is correctly part of the round/ceil Z calculation (#9807) - feat(widgets): Add controlled mode and state callbacks (#9973) - chore(mapbox): Remove MapboxLayer and _renderLayersInGroups (#10163) - fix(mapbox): automatically inject 'mapbox' view in overlaid mode for multi-view consistencMedium4/7/2026
v9.3.0-alpha.6- feat(TileLayer): Add visibleMinZoom & visibleMaxZoom props (#10091) - fix(mapbox): onBefore|AfterRender fires without layers (#10166) - fix(mapbox): Prevent crash when deck uninitialized (#10167) - feat(main): export all widgets from deck.gl main module (#10160) - chore: Bump to luma@9.3.1 & loaders@4.4.1 (#10158) - fix(layers): Texture handling in WebGPU (#10157) - chore: Bump luma.gl@alpha.11 (#10141) - chore(json): Typing improvements (#9641) - feat(core): simplify layer plumbing for WebGPUMedium4/2/2026
v9.3.0-alpha.5Release v9.3.0-alpha.5Medium3/31/2026
v9.3.0-alpha.3- feat(core): TerrainController (#10134)Medium3/27/2026
v9.3.0-alpha.2- chore: upgrade Node.js from 20 to 22 (#10051) - chore(core): Use non-deprecated props for lighting module (#10121) - feat(layers): add clipping to TextLayer (#10118) - feat(core): FirstPersonController supports maxBounds (#10115) - feat(core): OrthographicView supports maxBounds (#10108) - feat(core): OrbitController supports maxBounds (#10116) - feat(core): GlobeView supports maxBounds (#10111) - feat(core): more intuitive OrbitController (#10117) - feat(core): controller normalizes viewport Medium3/26/2026
v9.3.0-alpha.1- fix(Tile3DLayer): Pass through tileset loadOptions to Tileset3D (#10079) - feat(Tile3DLayer): mark rendered tiles as drawn (#10058) - chore: bump to luma.gl@9.3 (#10034) - chore: bump to loaders.gl@4.4 (#9972) - feat(widgets): migrate TimelineWidget to RangeInput (#10071) - feat(widgets): Add ScrollbarWidget (#10068) - fix(TerrainExtension): Handle pick events in TerrainExtension & draped layers (#10037) - fix(widgets): Respect min/maxZoom (#10033) - Upgrade Node.js from 18 to 20 across build,Low3/10/2026
v9.2.11- chore: Pin to luma 9.2 & loaders 4.3 (#10062)Low3/5/2026
v9.2.10- fix(core): OrbitController keyboard navigation with padding (#10039) - fix(ColumnLayer): radiusUnits pixels (#10035) - fix(jupyter-widget): bundle error (#10032) - fix(google-maps): Robust DOM positioning when interleaved: false (#9992)Low2/27/2026
v9.2.9- chore: bump probe.gl (#10025) - fix(widgets): GeocoderWidget dark theme colors (#9899) (#9974) - feat(extensions): PathStyleExtension save 1 instance vertex when highPrecisionDash is not used (#10008) - feat(layers): Stricter layer prop types (#10024)Low2/21/2026
v9.2.8- feat(core): Add layout expressions for view positions (#9842)Low2/17/2026
v9.2.7- fix(HeatmapLayer): Correct blending in interleaved mode (#9993) - fix(pydeck): Support pandas 3.x compatibility without breaking pandas 2.x (#9988) - fix(core): Enable shader/pipeline caching for attached WebGL devices (#9971) - fix(widgets): StatsWidget (#9984) - feat(core): Add Deck#getView() method (#9948) - feat(core): Add pickable: '3d' option to all Layers (#9937) - chore(deps): bump dependencies from multiple Dependabot PRs (#9956) - Bump to loaders.gl@4.3 (#9965) - chore(mapbox): RemovLow2/12/2026
v9.2.6- fix(IconManager) Fix icon frame x/y for auto packed icons (#9928) - fix(mapbox): MapboxOverlay: render deck layers in batches (#9939) - chore: bump luma to 9.2.6 (#9940) - feat(core): Improved GlobeController (#9913) - pydeck: Clarify how to pass full controller options (#9897) - fix(core): Reset interaction state for smooth=false (#9908) - fix(IconLayer): don't generateMipmaps before data loaded (#9909) - fix(carto): More defensive code in RasterLayer (#9911) - feat(core): Add `container` to Low1/16/2026
v9.2.5- chore: bump luma 9.2.4 (#9907) - fix(core): Enable shader and pipeline caching by default (#9863) - fix(carto): PointLabelLayer used with formatTiles=mvt (#9906)Low12/9/2025
v9.2.4- pydeck: support Maplibre including Globe projection (#9896) - fix(carto): autoLabels support with formatTiles=mvt (#9900) - pydeck: Update to deck@9.2 (#9895) - fix(core): getTooltip disappears when autoHighlight: true and interleaved: true in MapboxOverlay (deck.gl) (#9889)Low12/8/2025
v9.2.3- Fix DPR changes in interleaved mode by leveraging onResize callback (#9887) - fix(core): Correctly resize drawing buffer on resize (#9886) - Refactor GeohashLayerProps to extend GeoCellLayerProps (#9875) - fix(carto): VectorTileLayer guard against null layers (#9885) - Fix: Make sizeBasis optional in IconLayer type definition (#9883) - Fix interleaved overlay default parameters (#9871) - fix: Remove widget src import (#9833)Low12/3/2025
v9.2.2- chore: tighten peerDependency range to patch (#9821) - Fix type hint of useDevicePixels to allow number input (#9826)Low10/16/2025
v9.2.1- Avoid 9.2 breaking change in Widget base class (#9814) - Simplify Widget class constructor (#9815)Low10/8/2025
v9.2.0The v9.2 release comes with preview of WebGPU support, and a trove of new widgets. See https://deck.gl/docs/whats-new for a full list.Low10/7/2025
v9.2.0-beta.4- Invoke transform function for constant attributes (#9741) - Pass `vertexValid` to SolidPolygonLayer when using binary GeoJSON (#9805) - Add IconLayer sizeBasis prop (#9736) - fix: Maplibre interleaved resize handling (#9803) - Fix potential undefined deck in FPS calculation (#9800)Low10/6/2025
v9.1.15- Fix orthographic scroll zoom transitions (#9769) (#9799)Low10/2/2025
v9.2.0-beta.3- fix(extensions): correctly activate picking module in terrain picking pass (#9768) - fix(widgets): widget bug bash (#9797) - chore(widgets) audit props and docs (#9796) - fix(maplibre): Update default view once projection is known (#9794)Low9/26/2025
v9.2.0-beta.2- chore: bump luma to 9.2.0 (#9792) - fix: HeatmapLayer working with binary data (#9787) - fix: picking on non-geospatial tile layer with modelMatrix (#9703) - CARTO: Support h3 in ClusterTileLayer (#9755)Low9/25/2025
v9.2.0-beta.1Release v9.2.0-beta.1Low9/19/2025
v9.2.0-alpha.3- fix(core): orthographic scroll zoom transitions (#9769) - fix(widgets): Minor widget fixes (#9758) - CARTO: Support h3 in HeatmapTileLayer (#9753) - feat(widgets): Support custom widgets in pydeck via custom_libraries (#9745) - feat(core): Add async DeckPicker methods (#9732) - feat(webgpu): Enable transparency for WebGPU and ported example layers (#9730) - fix(webgpu): Emulate constant attributes as buffers and trigger update on constant change (#9726) - fix(layers): correctly identify elevatLow9/16/2025
v9.1.14- chore: Lock luma.gl to v9.1 (#9705)Low7/28/2025
v9.1.13- fix(google): Do not force canvas resize (#9695) - fix(CARTO): H3 tile bounding box includes edge children (#9693) - fix: onClick callback does not handle dblclick (#9629) - fix(carto): Assign default aggregationExp in fetchMap() (#9668) - fix: filter layers in mapbox overlay, interleaved mode (#9603)Low7/8/2025
v9.2.0-alpha.2- CARTO: refactor to remove fetchmap code (#9619)Low6/4/2025
v9.2.0-alpha.1- feat(widgets): GeocoderWidget and experimental Geocoders (#9610) - Feature: Add A5Layer (#9626) - feat(widgets) Add StatsWidget (#9623) - feat(widgets): New GimbalWidget (#9614) - feat(widgets): New ContextMenuWidget (#9616) - feat(widgets): FpsWidget (#9607) - feat(widget): Add geocoder support to GeolocateWidget (#9608) - [feat] ViewSelectorWidget (#9591) - chore(widgets): Join Widget and WidgetImpl, clean up widgets (#9576) - feat(core): Add View.clone() method (#9588) - feat(widgets): miniLow5/27/2025
v9.1.12- fix: do not touch stencil in _renderPass() (#9630) - chore: Reduce lint errors (#9550) - chore(layers): Change warning to debug message (#9621)Low5/14/2025
v9.1.11- CARTO: Make autoLabels prop optional (#9593)Low4/18/2025
v9.1.10- CARTO: Automatically add labels to line & polygon layers (#9449) - chore: More lint fixes (#9582) - Feat: Add backgroundBorderRadius to TextLayer (#9447) - CARTO: Do not mutate passed in loadOptions objects (#9580)Low4/17/2025
v9.1.9- CARTO: Fallback to hidden tiles for maxDensity (#9578) - fix(carto): RasterTileLayer to support external options (#9561)Low4/14/2025
v9.1.8- fix(mapbox): interleaving by reverting #9483 (#9542)Low3/24/2025
v9.1.7- Append `.js` to WebGPU shaders for script builds (#9537) - fix(carto): Fix tree-shaking of CartoRasterTileLoader (#9535)Low3/21/2025
v9.1.6- CARTO: Default to PointLabelLayer in VectorTileLayer (#9524) - chore: Bump to luma.gl@9.1.5 (WebGPU fixes) (#9525) - feat: line layer and project module port to WGSL, test app for WebGPU line (#9509) - fix(chore): Disable constant attributes under WebGPU (#9506) - chore: WebGPU plumbing (#9502)Low3/19/2025
v9.1.5- DataFilterExtension: Make filterCategories prop optional (#9495) - CARTO: RasterLayer improve shader precision at high zooms (#9518) - fix(scatterplot-layer): use numeric uniform for "filled" to avoid GPU driver bug (#9514) - chore: WebGPU plumbing (#9480) - chore: WebGPU plumbing #1 (#9476) - feat(widgets): new ResetViewWidget (#9478) - feat(widgets): New ScreenshotWidget (#9477)Low3/12/2025
v9.1.4- feat(mapbox): support Mapbox v3 Standard style slot (#9468) - fix(mapbox): relax MapboxOverlay type (#9467) - fix(widgets): ZoomWidget: Prevent crash when used with OrthographicView (#9459)Low2/27/2025
v9.1.3- CARTO: HeatmapTileLayer fix palette updating (#9453) - pydeck: Set default map style if not provided (#9419)Low2/20/2025
v9.1.2- pydeck: Add show_error flag to display error in cell output (#9430) - CARTO: Add worker for cartoPropertiesTile loader (#9429)Low2/17/2025
v9.1.1- fix: Add missing dependencies (#9422) - fix(core): React StrictMode crash (#9421) - fix(extensions): CollisionFilterEffect: Explicitly pass isPicking to preRender (#9417)Low2/11/2025
v9.0.41- CollisionFilterEffect: Explicitly pass isPicking to preRender (#9417)Low2/11/2025
v9.1.0v9.1 brings integration with MapLibre globe projection, React widgets, restored and improved aggregation layers, and under-the-hood rewrites to get ready for WebGPU support. Visit [What's New](https://github.com/visgl/deck.gl/blob/9.1-release/docs/whats-new.md#deckgl-v91) to learn about the new features. Reference the [Upgrade Guide](https://github.com/visgl/deck.gl/blob/9.1-release/docs/upgrade-guide.md#upgrading-to-v91) to upgrade your application from v9.0.Low1/21/2025
v9.0.40- chore: pin ubuntu CI version to fix release workflow (#9351)Low1/15/2025
v9.0.39- CARTO: Support gzip compression in RasterLayer (#9352) - fix(widgets): widget style prop keys should accept camelCase css properties and dashed css variables (#8991)Low1/15/2025
v9.1.0-beta.3- CARTO: Support gzip compression in RasterLayer (#9352) - DataFilterExtension category filtering uint32 attribute (#9350)Low1/15/2025
v9.0.38- CARTO: Fix seams between tiles in RasterTileLayer (#9292)Low12/11/2024
v9.0.37- fix(mapbox) Remove type dependency on mapbox-gl (#9279)Low12/6/2024

Dependencies & License Audit

Loading dependencies...

Similar Packages

geopyPython Geocoding Toolbox2.4.1
llama-indexInterface between LLMs and your datav0.14.22
fionaFiona reads and writes spatial data files1.10.1
tqdmFast, Extensible Progress Meterv4.68.1
inspect-aiFramework for large language model evaluationsmain@2026-06-05

More in Frameworks

langchainThe agent engineering platform
deer-flowAn open-source long-horizon SuperAgent harness that researches, codes, and creates. With the help of sandboxes, memories, tools, skill, subagents and message gateway, it handles different levels of ta
tqdmFast, Extensible Progress Meter
simBuild, deploy, and orchestrate AI agents. Sim is the central intelligence layer for your AI workforce.