This release is a pre-release and may not be stable for production use.
foliplus
foliplus: the missing piece between "see the map" and "use the map". GeoPandas handles data, Folium renders it, foliplus brings it to life.
Scope
Layer data passed to foliplus is read-only: no editing, upload, or deletion.
Data processing happens upstream. foliplus handles the map, not the data.
Features
| Control | Description |
|---|---|
| 📷 ExportControl | Capture a specific area of the map and export it as an image. |
| 🖥️ FullscreenControl | Fullscreen toggle with auto-hide for other controls. |
| 🔥 HeatmapControl | H3 hexbin heatmap with zoom-adaptive resolution and labeled hexagons. |
| 🗂️ LayerControl | Layer panel to organize, inspect, and zoom to map layers. |
| 🎯 LocateControl | Fly to the user's current position. |
| 📏 MeasureControl | Measure distances, areas, and circles; place geocoded markers; then edit by dragging nodes. |
| 📐 ScaleControl | Scale bar with metric units and optional zoom level display. |
| 🔍 SearchControl | Coordinate and address search via pluggable geocode providers. |
Beyond Plugins
Traditional map component libraries treat each tool as an independent plugin. foliplus was designed as one system from the start:
- Components communicate with each other, instead of working in isolation
- Layers are managed centrally, instead of each tool owning its own stack
- Conflicts are resolved automatically, instead of tools interfering with each other
- Third-party components can plug into the system, instead of being locked out
Built-in Coordination
Layer-producing tools register their canvas or layer through LayerControl, which manages z-order, visibility, and lifecycle centrally. This means they share a single layer stack — no z-index clashes, no orphaned DOM elements.
On top of this shared layer foundation, tools coordinate further:
- While measuring, search and locate are blocked to prevent map interaction conflicts
- During export, measurement pauses, heatmap renders in full resolution, and layer order is synced for a complete screenshot
- When a layer is removed from the layer panel, the component that owns it (e.g. measurement) auto-cleans its state
- When layers change, the heatmap refreshes automatically
All of this happens without manual wiring — foliplus handles it internally.
Compatibility
Requires folium>=0.14.0. Leaflet is not a Python dependency — the TypeScript controls run against the Leaflet Folium injects into the page.
CI runs the full suite on Folium's Leaflet (1.9.3) and a bring-up smoke on Leaflet 1.0.0 for pages that load a different pin.
Metadata
Release files for foliplus 0.4.0rc1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| foliplus-0.4.0rc1.tar.gz | 176.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| foliplus-0.4.0rc1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 358.0 kB
Release files / foliplus-0.4.0rc1.tar.gz
| Download URL | foliplus-0.4.0rc1.tar.gz |
|---|---|
| Size | 176.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
787db6603623c506d053fe745db6bf4c19c4a08e128d0bcb02c27eb39bd8288c
|
|
BLAKE2b-256 checksum How to use checksums |
305ffa19adf7307c732eccd738a91bde95ae123950b3d4f9926bcab74337ce93
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Release files / foliplus-0.4.0rc1-py3-none-any.whl
| Download URL | foliplus-0.4.0rc1-py3-none-any.whl |
|---|---|
| Size | 181.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8ab4144a04d9813b0b3f18a2a4fcb643d637c5f63c9d8c21e59375773b7bf65a
|
|
BLAKE2b-256 checksum How to use checksums |
7ff01b55bfb2b71082665b1d8eaf0306a0e01eac3e82541f1137b4f2c813f990
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|