Changelog¶
[0.13.0] - 2025-11-05¶
New Features
¶
- feat: Suppress JupyterLab context menu on Map right click by @kylebarron in !889
- feat: Support two render modes: Standard/deck.gl-first and MapboxOverlay by @kylebarron in !921
- feat: Create richer
Basemapclass and deprecatebasemap_stylearg by @kylebarron in !935 - feat: Move
TripsLayerandArcLayerout of experimental by @kylebarron in !983 - feat: Support for map controls by @kylebarron in !924
- feat: Provide default controls for Map by @kylebarron in !992
- feat: Switch basemap default to overlaid (maplibre-controlled) by @kylebarron in !993
- feat: H3 layer by @kylebarron in !917
- feat: Add A5Layer by @kylebarron in !1001
- feat: Add geohash and s2 layers by @kylebarron in !1007
- feat: Implement view state validation for non map-view states by @kylebarron in !1008
- feat: Add view parameter to viz by @kylebarron in !1013
Performance improvements
¶
- perf: use ThreadPoolExecutor for Parquet serialization and bounds computation by @kylebarron in !902
- perf: Define top-level earcut worker pool by @kylebarron in !954
- perf: Call np.mean once across axis instead of once per column by @kylebarron in !995
- perf: Remove typedArrayManager settings override by @kylebarron in !1003
- perf: Avoid generating str repr of
tableduring rendering by @kylebarron in !1015
Bug fixes
¶
- fix: Fix HeatmapLayer by bumping deck.gl to 9.2 by @kylebarron in !910
- fix: Add
pyarrowtogeopandasextra inpyproject.tomlby @kylebarron in !970 - fix: Fix "fuzziness" of path layers by removing
useDevicePixelsdefault by @kylebarron in !969 - fix: Ensure that the default value of
Map.basemapisMaplibreBasemapif no value ofbasemapwas passed. by @kylebarron in !963 - fix: Restore DataFilterExtension functionality with vectorized accessor input by @kylebarron in !977
- fix: Fix ArcLayer with numpy coords input by @kylebarron in !989
- fix: Ensure view state is updated in Python with a maplibre map renderer by @kylebarron in !1017
- fix: Hack a react re-render on canvas resize by @kylebarron in !1022
Documentation
¶
- docs: Fix list rendering in
Map.add_layerAPI Docs by @kylebarron in !952 - docs: Add developer docs about code profiling by @kylebarron in !1016
Breaking changes
¶
- chore!: Remove deprecated
conparameter tovizby @kylebarron in !953
Other changes¶
- feat: automated UI testing with Playwright by @vgeorge in !906
- chore: Add eslint import ordering to CI by @kylebarron in !931
- test: add bbox selection overlay mode e2e test by @vgeorge in !933
- refactor: Refactor HTML map export by @kylebarron in !934
- refactor: Refactor model initialization logic by @kylebarron in !923
- test: add pytest-ipywidgets bbox testing, remove playwright by @vgeorge in !999
Full Changelog: github.com/developmentseed/lonboard/compare/v0.12.1...v0.13.0
[0.12.1] - 2025-09-18¶
New Features
¶
- feat: New example with marimo and GeoDatafusion by @kylebarron in !881
Bug fixes
¶
- fix: Fix rendering Arrow input with string view/binary view column by @kylebarron in !872
- fix: Add
__all__declarations to modules to fix pylance warnings by @kylebarron in !876 - feat: Support struct GeoArrow input for ArcLayer positions by @kylebarron in !877
Documentation
¶
- docs: Fix examples with GeoArrow Rust by @kylebarron in !878
Full Changelog: github.com/developmentseed/lonboard/compare/v0.12.0...v0.12.1
[0.12.0] - 2025-09-13¶
New Features
¶
- feat: Add new example notebook on accessing spatially-partitioned Overture GeoParquet datasets by @kylebarron in !832
- feat: Allow passing GeoArrow arrays and chunked arrays directly to layer constructors by @kylebarron in !828
- feat: Support parsing
geoarrow.geometryinput; read WKB/WKT without shapely dep by @kylebarron in !846 - feat: Use
100%as default CSS height by @ATL2001 in !835 - feat: Migrate notebook examples to dependency management using
juvby @kylebarron in !821
Breaking changes
¶
- chore!: Require Python 3.10 or higher by @kylebarron in !843
Bug fixes
¶
- fix(arc-layer): Fix migration example by @kylebarron in !830
- fix: Bump geoarrow-rust-core to fix handling of geoarrow geometry by @kylebarron in !864
Other changes¶
- perf: Avoid numpy memory copy when shapely-produced offsets are already
int32by @kylebarron in !845 - chore: Suggest shallow clone of repo in DEVELOP.md by @kylebarron in !825
- chore: Fix mypy lint errors by @kylebarron in !826
- ci: Add CI test for Python 3.13 by @kylebarron in !844
- chore: Cleaner handling of chunked array input into BaseArrowLayer.init by @kylebarron in !855
Full Changelog: github.com/developmentseed/lonboard/compare/v0.11.1...v0.12.0
[0.11.1] - 2025-06-18¶
Bug fixes
¶
- fix: move duckdb imports to inside function by @danielsparing in !813
- chore: Use
>=in typing-extensions version constraint by @kylebarron in !814
Full Changelog: github.com/developmentseed/lonboard/compare/v0.11.0...v0.11.1
[0.11.0] - 2025-06-17¶
Breaking changes
¶
- Require Python 3.9 or higher by @kylebarron in !743
New features
¶
- feat: Reinstate tooltip by @vgeorge in !736.
You can now turn on the tooltip by passing
show_tooltip=TruetoMap. You may also want to passshow_side_panel=Falseto disable the side panel. - Clicked point to Lonboard map by @ATL2001 in !671
- feat: Support
geoarrow.boxarrays from GeoArrow 0.2 spec by @kylebarron in !793 - feat: Allow passing Arrow table as positional argument to layer constructors by @kylebarron in !795
- Switch to the DuckDB Expression API to mitigate sql injection risk by @danielsparing in !777
Visual changes
¶
Bug fixes
¶
- Scope tailwind preflight styles by @Bjoern-Rapp in !740
- Pass state in
to_htmlby @kylebarron in !726 - use dependency state in export by @knaaptime in !731
- fix: ensure GeoArrow field names are set in conversion from shapely by @kylebarron in !794
- Fix accessing default connection for duckdb 1.2 by @kylebarron in !772
- Sanitize geomcolname by @danielsparing in !769
Documentation
¶
- Replace DS Medium link by LinkedIn by @willemarcel in !700
- Geoarrow docstring update by @ATL2001 in !705
- Add docs page with external resources by @kylebarron in !710
- Panel example update by @ATL2001 in !746
- docs: Reword section in "How it works" to reflect GeoParquet 1.1 by @kylebarron in !804
- docs: Add duckdb intersphinx mapping by @kylebarron in !800
- Remove references to custom connection parameter by @danielsparing in !784
- updates for polygon layer documentation by @ATL2001 in !789
Internal changes
¶
- Switch dependency management to uv by @kylebarron in !721
- Support Py3.12 in tests by constraining pyproj in lockfile to versions with wheels by @ceholden in !745
- Enable more ruff linters by @kylebarron in !753
- Reduce ruff warnings by @danielsparing in !778
- chore: Ensure support for GeoArrow 0.2 CRS by @kylebarron in !797
- chore: Bump deck.gl to 9.1 by @kylebarron in !802
- test: Test that parsing WKB/WKT works with Arrow view types by @kylebarron in !801
New Contributors¶
- @knaaptime made their first contribution in !731
- @ceholden made their first contribution in !745
- @Bjoern-Rapp made their first contribution in !740
- @danielsparing made their first contribution in !769
Full Changelog: github.com/developmentseed/lonboard/compare/v0.10.3...v0.11.0
[0.10.3] - 2024-10-15¶
Fixes
¶
- Downgrade minimum traitlets version to fix use with Colab. !687
[0.10.2] - 2024-10-10¶
Fixes
¶
- Fix using
TripsLayer.from_movingpandaswith numpy v2.
[0.10.1] - 2024-10-08¶
Fixes
¶
- Fix import when pandas not installed.
[0.10.0] - 2024-10-07¶
New!
¶
- New
TripsLayerfor animating moving objects, which integrates with MovingPandas. See the Air Traffic Control example and the MovingPandas integration example. - New
ColumnLayerfor rendering extruded cylinders. See the newColumnLayerexample. - Removed required dependencies!
geopandas,pandas,shapely,pyarrow,matplotlib, andpalettableare now optional dependencies. Lonboard will still work out of the box with them, but they aren't required to use Lonboard. This gives Lonboard a smaller footprint and makes it easier to use in environments such as Pyodide. - You can now draw bounding boxes on the map. This is exposed as the
selected_boundsattribute on theMapobject, stored as a two-dimensional bounding box(minx, miny, maxx, maxy). - Improved documentation
- How to use Lonboard in pyodide, a Python environment that is fully running in your browser.
- Add linked maps example by @ATL2001 in !655
- Add troubleshooting doc by @kylebarron in !654
- Add longraph to showcase by @kylebarron in !595
- New
Map.add_layermethod for easily adding more layer(s) to an existingMapinstance. - Add
highlight_colorto change the color ofauto_highlightby @kylebarron in !666 - Use deterministic colors in
vizby @kylebarron in !621 - Categorical data filtering. The
DataFilterExtensionnow has afilter_categoriesattribute that lets you filter categorical data on the map. by @kylebarron in !609
Breaking Changes
¶
- The tooltip shown on hover was replaced with a side panel. You now must click on a geometry to view its attributes. By @vgeorge in !636
Fixes
¶
- We've switched from storing
listobjects to storingtupleobjects (e.g. the list of layers in aMap). The immutability of thetupleensures that a any changes in the sequence of layers will be propagated to the frontend.Fixed in !620 - A class of bugs was fixed when using Arrow input, where the chunking structure of the main
tabledid not match the chunking of accessors. Fixed in !644 - Fix reading from DuckDB with only geometry column by @kylebarron in !625
- Fix attribution by @vgeorge in !561
New Contributors¶
- @MarcSkovMadsen made their first contribution in !539
- @ATL2001 made their first contribution in !655
Full Changelog: github.com/developmentseed/lonboard/compare/v0.9.3...v0.10.0
[0.9.3] - 2024-05-27¶
Fixes
¶
- Fix reprojecting GeoArrow input by @kylebarron in !532
Full Changelog: github.com/developmentseed/lonboard/compare/v0.9.2...v0.9.3
[0.9.2] - 2024-05-14¶
Fixes
¶
What's Changed¶
- Perf: Use ravel, not flatten, for numpy to pyarrow by @kylebarron in !512
- Update docstring in as_html by @kylebarron in !519
- Add type checks to fly_to by @kylebarron in !521
- Add pypi classifiers by @kylebarron in !523
New Contributors¶
Full Changelog: github.com/developmentseed/lonboard/compare/v0.9.1...v0.9.2
[0.9.1] - 2024-05-07¶
Fixes
¶
- Fix parquet-wasm WASM version mismatch by @kylebarron in !508
Full Changelog: github.com/developmentseed/lonboard/compare/v0.9.0...v0.9.1
[0.9.0] - 2024-05-06¶
New!
¶
- Direct DuckDB Spatial integration. Refer to the DuckDB example notebook and the DuckDB page in the documentation. by @kylebarron in !498
- Add overture buildings notebook by @kylebarron in !479
- Adding PathStyleExtension code by @shriv in !487
- Handle mixed geometry types in
vizby @kylebarron in !495 - Render map as static HTML file by @kylebarron in !474. You can use
Map.as_htmlto render a map in notebook environments that support HTML but not widgets. - Improved integration with geoarrow-pyarrow by @kylebarron in !470
Fixes
¶
- Updated Map keyword arguments by @kylebarron in !496
- validate basemap style is a url by @kylebarron in !497
New Contributors¶
- @willemarcel made their first contribution in !486
- @shriv made their first contribution in !487
Full Changelog: github.com/developmentseed/lonboard/compare/v0.8.0...v0.9.0
[0.8.0] - 2024-04-05¶
New!
¶
- A new
PolygonLayer! This layer renders polygon outlines for easier visibility. @kylebarron in !330 - An example using
PolygonLayerby @naomatheus in !351 - Sync view state between JS and Python by @kylebarron in !448
- Support geoarrow array input into
viz()by @kylebarron in !427 - Internal architecture documentation by @kylebarron in !450
Fixes
¶
- Fix CLI with unset
geometry_nameby @kylebarron in !451
Full Changelog: github.com/developmentseed/lonboard/compare/v0.7.1...v0.8.0
[0.7.1] - 2024-03-22¶
Fixes
¶
- Fix CLI with geopackage files by @kylebarron in !434
Full Changelog: github.com/developmentseed/lonboard/compare/v0.7.0...v0.7.1
[0.7.0] - 2024-03-21¶
New!
¶
- There's a new command-line interface (CLI)! Use the
lonboardcommand to quickly visualize one or more data files readable by GDAL! For example:lonboard admins.geojson features.gpkg. By @kylebarron in !379 - Type hinting for constructors and
from_geopandasmethod. This should make it easier to pass the correct parameters into layers. This has been tested to work in IDEs like VSCode, but unfortunately appears not to work in JupyterLab. By @kylebarron in !399

- Warn on missing CRS. One of the most common reasons that you might see an empty map is from accidentally visualizing data that is not in EPSG 4326 (longitude-latitude). We now emit a warning for data that doesn't have a CRS defined on the data. By @kylebarron in !395.
- Lonboard is now on
conda-forge! Install withconda install -c conda-forge lonboard. By @giswqs in !223 - Add PointCloudLayer. By @kylebarron in !396
- Add fly-to map action to "fly" the map to a new location. By @kylebarron in !408
- Docs showcase page by @kylebarron in !401
- Improve default colors in
viz. We now attempt to apply some basic styling onto data passed intoviz. This will likely further improve in the future. By @kylebarron in !389
Fixes
¶
- Set exported HTML height to 100% by @kylebarron in !377
- Raise error on single input to MultiRangeSlider by @kylebarron in !367
- Fix pandas
to_numericFutureWarning by @kylebarron in !368 - Fix viewing polygons in local html files by @kylebarron in !387
- Fix: fix sliced array input for reprojection by @kylebarron in !391
- Fix: Don't reproject for epsg:4326 input by @kylebarron in !392
- Fix: Fix weighted centroid calculation by @kylebarron in !393
- Fix
viz()with__geo_interface__input by @kylebarron in !426 - Add DataFilterExtension notebook to website by @kylebarron in !362
- Allow non-compliant geoarrow CRS metadata by @kylebarron in !369
- Automatically parse geoarrow.wkb to native geoarrow by @kylebarron in !372
- Parse GeoParquet metadata by @kylebarron in !407
- CLI: 'crs' in geoparquet metadata should be optional. by @jwass in !411
Other changes¶
- Creating a new user bug report by @emmalu in !386
- Update epic template by @emmalu in !382
- NormalAccessor by @naomatheus in !376
- Conda: Try including
manifest.infile forstaticfolder inclusion by @kylebarron in !421 - Switch to animated hero image by @kylebarron in !423
- Add CRS to GeoDataFrame in notebook examples by @kylebarron in !419
New Contributors¶
- @emmalu made their first contribution in !382
- @naomatheus made their first contribution in !376
- @jwass made their first contribution in !411
- @giswqs made their first contribution in !223
Full Changelog: github.com/developmentseed/lonboard/compare/v0.6.0...v0.7.0
[0.6.0] - 2024-02-13¶
New!
¶
- DataFilterExtension by @kylebarron in !278
- Multi-range sliders for DataFilterExtension by @kylebarron in !340
- BitmapLayer and BitmapTileLayer by @kylebarron in !288
- Improved GeoArrow interop by @kylebarron in !308
- Allow passing a positional
layersobject intoMapby @kylebarron in !319 - GeoArrow-based multithreaded coordinate reprojection by @kylebarron in !337
- Support
pyarrow.Tablewithgeoarrow.pyarrowextension types as geometry columns by @jorisvandenbossche in !218 - Add ecosystem/integrations documentation by @kylebarron in !350
Fixes
¶
- Add font to index.css to fix static HTML export by @jtmiclat in !284
- Fix displaying tooltip for first row by @kylebarron in !287
- accept matplotlib colormap input to apply_cmap by @kylebarron in !289
- Use preferred OSM tile url by @kylebarron in !290
- set max zoom on osm layer by @kylebarron in !291
- Update contributor docs by @kylebarron in !316
- Check epsg:4326 bounds in layer creation by @kylebarron in !317
- add reference for installing from source by @kylebarron in !318
- Fix inferring number of rows per chunk by @kylebarron in !327
- Fix null checks by @kylebarron in !331
- Set max number of chunks per layer by @kylebarron in !332
- Move accessor length validation to serialization by @kylebarron in !333
- Deduplicate serialization for accessors by @kylebarron in !334
- Multi-dimensional GPU-based data filtering by @kylebarron in !335
- Bump anywidget to 0.9 & simplify Wasm initialization by @kylebarron in !344
- Fix null checks by @kylebarron in !348
- docs fixes by @kylebarron in !354
- Add
DataFilterExtensionexample by @kylebarron in !358 - fix arc layer default arguments by @kylebarron in !359
New Contributors¶
- @jtmiclat made their first contribution in !284
- @jorisvandenbossche made their first contribution in !218
Full Changelog: github.com/developmentseed/lonboard/compare/v0.5.0...v0.6.0
[0.5.0] - 2023-12-01¶
New Features¶
- Improve map height by @vgeorge in !220
- Add method to apply a categorical colormap by @kylebarron in !251
- Deduce environment and set map height in colab and vscode by @kylebarron in !252
- Add various carto basemaps as options by @kylebarron in !268
- Sync the clicked index back to Python by @kylebarron in !270
- Set
width_min_pixelsin PathLayer example by @kylebarron in !276 - Bump deck.gl layers for performance benefits by @kylebarron in !277
Full Changelog: github.com/developmentseed/lonboard/compare/v0.4.2...v0.5.0
[0.4.2] - 2023-11-13¶
Fixed¶
- Fixed ScatterplotLayer rendering by @kylebarron in !246
Full Changelog: github.com/developmentseed/lonboard/compare/v0.4.1...v0.4.2
[0.4.1] - 2023-11-13¶
Fixed¶
- Fixed Polygon rendering by @kylebarron in !243
Full Changelog: github.com/developmentseed/lonboard/compare/v0.4.0...v0.4.1
[0.4.0] - 2023-11-10¶
New Features¶
- New
HeatmapLayer - New
experimentalmodule, with new layers (ArcLayer,TextLayer) and "layer extensions" (BrushingExtension,CollisionFilterExtension). - New "migration" notebook using the experimental
ArcLayer.
Fixed¶
- Add pandas v2 requirement by @kylebarron in !229
- bump anywidget to 0.7.1 by @kylebarron in !233
This should error when the JS files have not been included when packaging.
Full Changelog: github.com/developmentseed/lonboard/compare/v0.3.0...v0.4.0
[0.3.0] - 2023-11-07¶
New Features¶
- Save widget to standalone HTML file by @kylebarron in !199
- Support for rendering inside Visual Studio Code
- Allow customized picking radius by @kylebarron in !212
- New example notebooks
- Automatically downcast data types in
from_geopandasby @kylebarron in !195
Fixed¶
- Allow pandas series as accessor to FloatAccessor by @kylebarron in !208
- Raise error when creating class with unknown keyword argument by @kylebarron in !209
- fix tooltip rendering when not hovering over an object by @kylebarron in !215
Full Changelog: github.com/developmentseed/lonboard/compare/v0.2.0...v0.3.0
[0.2.0] - 2023-11-01¶
Breaking Changes¶
- Layers no longer render a map object. Instead, pass one or more layer instances into a
lonboard.Mapand display that.
New Features¶
- Support multiple layers on a single map.
- Tooltip with data information on hover.
- Allow hex string color input to ColorAccessor.
- Versioned documentation website
- New examples
- Experimental API to change map height
Fixed¶
- Fix handling of 3d coordinates by @kylebarron in !160
- Improved validation error messages by @kylebarron in !161
New Contributors¶
- @chrisgervang made their first contribution in !150
Full Changelog: github.com/developmentseed/lonboard/compare/v0.1.2...v0.2.0
[0.1.2] - 2023-10-24¶
- Actually update
@geoarrow/deck.gl-layersto version 0.2.0, whoops 😅
[0.1.1] - 2023-10-23¶
- Updates to
@geoarrow/deck.gl-layersversion 0.2.0: - Fixed MultiPolygon rendering
- Fixed rendering of polygons with holes.
- Polygon rendering is roughly 35% faster.
[0.1.0] - 2023-10-17¶
- Initial public release.
- Initial support for
ScatterplotLayer,PathLayer, andSolidPolygonLayer.