finds.dev← search

// the find

jupyter-widgets/ipyleaflet

★ 1,538 · TypeScript · MIT · updated May 2026

A Jupyter - Leaflet.js bridge

ipyleaflet wraps Leaflet.js as a Jupyter widget, letting you build interactive maps directly in notebooks with two-way Python-JavaScript state sync. It covers the full Leaflet surface: tile layers, GeoJSON, choropleth, heatmaps, draw controls, vector tiles, and more. The target is data scientists and geospatial analysts who live in notebooks and don't want to leave Python to get a decent map.

The widget model is the right abstraction here — map state stays in sync with Python variables, so you can update a choropleth layer from a pandas DataFrame without touching JavaScript. The layer coverage is genuinely wide: PMTiles, WMS, velocity fields, marker clusters, custom projections — things you'd otherwise need multiple libraries to cover. The split-map control for comparing two tile layers side by side is a genuinely useful feature that folium doesn't have. Playwright-based UI tests with pixel snapshots mean regressions in the actual rendered output get caught, not just Python-side logic.

The two-package split (jupyter_leaflet npm + ipyleaflet Python) adds real friction to local development — you're managing yarn workspaces and webpack just to tweak a widget. Works fine in classic notebook and JupyterLab but breaks in other frontends (VS Code notebooks, Google Colab) because it depends on the full widget protocol; the README doesn't warn you. The choropleth layer requires GeoJSON IDs to match your DataFrame index exactly, and when they don't match, it silently renders nothing — no error, no diagnostic. Velocity layer pulls in a bundled copy of leaflet-velocity with no version pin, so upstream changes can break it without any signal.

View on GitHub → Homepage ↗

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →