✦ Leaf through your geodata

GeoLeaf
Map your territories, your way

A production-ready mapping framework (v3) built on MapLibre GL JS 6: display and style your geographic data — points, routes, polygons, GeoJSON — straight in the browser, driven by plain JSON files.

  • 100% frontend
  • Open source (MIT)
  • Mobile & field-ready

What you can do with GeoLeaf

Visualise, explore and share your business geodata — no heavy development, no backend dependency, configurable through plain JSON files.

Visualise your geographic data

Without writing a line of code

Display thousands of points, areas and routes on a WebGL map. Automatic clustering, heatmaps, rich popups — all driven by your JSON profiles.

  • Colours, icons, scale windows and custom styles set in JSON — without touching the code
  • Native MapLibre clustering, heatmaps and grouping by category
  • Rich popups and detail sheets: images, links, data tables, action buttons
  • GPU rendering by the MapLibre GL JS engine, across the whole map surface

Explore, filter & analyse

Everything is per-profile configurable

Give your users rich navigation — search, combined filters, a detailed side panel and a table view — with no bespoke development.

  • Instant text search plus filters by category, value or geographic distance
  • Combinable filters persisted to the URL — share a filtered view as a link
  • Multi-column sortable table view, with GeoJSON, CSV, KML, GPX and Excel export
  • Fully configurable side panel — sections, fields and layout defined in JSON

Embed anywhere, with no backend

No proprietary server

GeoLeaf is 100% frontend — one npm import or two tags, a folder of JSON profiles and you are running. No backend dependency, no cloud subscription.

  • Works with Odoo, WordPress, ERPs, REST APIs, static files or a CDN
  • Installable PWA for iOS/Android — offline engine built into the core (tiles, data, sync)
  • One profile = one versionable JSON folder, deployable and hot-swappable
  • Full branding through configuration: logo, colours, themes, language — no recompile
  • Hardened security: strict CSP, XSS/CSRF protection, built-in sanitisation

One framework, many sectors

GeoLeaf adapts to any business context — one JSON profile is enough to move from one sector to the next.

  • 🏕️ Tourism & territories
  • 🏛️ Local & public services
  • 💡 Utilities & energy
  • 🚌 Mobility & transport
  • 🏗️ CMMS & technical assets
  • 🌿 Environment & agriculture
  • 🚚 Logistics & supply chain
  • 🏥 Health & local services
  • 🏢 Real estate & planning

One profile = one folder (profiles/<business_id>)

Each profile is a folder of self-contained JSON files, versionable and deployable independently from the GeoLeaf core. Activate a profile through the global configuration to switch instantly from one business use case to another.

  • profile.json — identity (id, label, version), the map section and the Files manifest.
  • config/core/themes, layers, basemaps, ui, features and mapping.
  • config/plugins/<id>.json — one configuration per module, opaque to the core (Plugin Contract v1, modules.<id> block).
  • layers/<id>/ — one self-contained folder per layer: its declaration, its GeoJSON data and its MapLibre styles.
  • icons/ — the SVG icons belonging to the profile.
Structure of a GeoLeaf profile The profiles/<business_id>/ folder holds profile.json (identity, map section, Files manifest); config/ groups core/ (themes, layers, basemaps, ui, features, mapping) and plugins/ (one <id>.json file per module, Plugin Contract v1); layers/<id>/ holds the layer declaration, a data/ folder of GeoJSON and a styles/ folder of MapLibre styles; icons/ groups the SVG icons belonging to the profile. profiles/<business_id>/ A self-contained folder — versionable, deployable, swappable profile.json identity · map section · Files manifest config/ the profile configuration, in two folders core/ themes · layers · basemaps · ui · features · mapping plugins/ <id>.json — one per module · Plugin Contract v1 layers/<id>/ one self-contained folder per layer <id>_config.json layer declaration data/ *.geojson styles/ *.json — MapLibre styles icons/ SVG icons belonging to the profile folder file Plugin Contract v1 · modules.<id> block

A complete mapping foundation

GeoLeaf is an open-source (MIT) mapping framework, modular and 100% frontend, built to display, structure and explore business geodata.

Interface, themes & panels

Light / dark theme, automatic or forced, customisable colour palettes and a basemap selector. Rich tooltips and popups, a side panel structured by sections, plus legend and table view enabled on demand.

Profiles, layers & formats

One profile = one self-contained versionable folder: categories, sub-categories and SVG icon sets configured in JSON. Native support for points, lines and polygons, vector tiles, OGC API Features, raster, hillshade and WMTS/WMS.

Filters & search

Side filter panel, indexing per layer and per field. Simple or combined text search, filters by tag and category, and search by geographic proximity.

Mobile & offline

A 100% responsive interface, designed for field use on phone and tablet. Installable PWA, with the offline engine built into the core: tile and data caching, synchronisation through IndexedDB.

Security & robustness

Strict Content Security Policy (style-src without unsafe-inline), XSS protection and URL validation at render time, CSRF tokens, prototype-pollution guard. The Excel export was rewritten without a third-party dependency — two CVEs removed.

Integration & maturity

A clean create → destroy → recreate lifecycle, for React remounts and SPA navigation — no layer or marker survives a teardown. Strict TypeScript, extensible Plugin Contract v1 architecture, native internationalisation in 6 languages.

Data formats supported, natively or through a plugin

  • GeoJSON
  • WKT
  • MVT / PMTiles
  • OGC API Features
  • WMTS / WMS
  • FlatGeobuf
  • COG (GeoTIFF)
  • GPX
  • KML / KMZ
  • CSV
  • TopoJSON
  • WebSocket / SSE / GTFS-RT

A kernel, capabilities, plugins

Three layers — and you ship only the ones you need.

13

The kernel

The mapping engine, configuration and security. Always there.

21

The capabilities

Legend, filters, clustering, offline, PWA… Switched on from the profile.

12

The plugins

Print, editing, import, real time… Added when needed, without touching the core.

A capability you don't take isn't deferred — it isn't in the file.

  • 21 → 6 capabilities shipped
  • −18.5% at boot
  • −13 stylesheets

Measured 9 Aug 2026, re-checked on every build.

Ready to integrate in 5 minutes

Install through npm or serve the files from your own origin, then drive the display with your JSON profiles. No build step is required on the integrator side.

app.ts
// npm install @geoleaf/core maplibre-gl
import { Core } from "@geoleaf/core";
import "maplibre-gl/dist/maplibre-gl.css";
import "@geoleaf/core/style.css";

// center is [lat, lng] on the GeoLeaf side; conversion to
// MapLibre ([lng, lat]) happens internally.
Core.init({ mapId: "map", center: [48.8566, 2.3522], zoom: 12 });

MapLibre GL JS 6 is an ESM-only peer dependency — GeoLeaf does not bundle it, so you stay in control of the version. Remember to serve .mjs as text/javascript (nginx: types { text/javascript mjs; }). Getting started guide →

  • Strict TypeScript
  • ESM-only
  • MapLibre GL JS 6
  • WebGL2
  • MIT
  • Node ≥ 22
  • Complete types included and the global namespace published — IntelliSense in VS Code and any LSP editor.
  • Stable, tree-shakable exports subpaths: @geoleaf/core/kernel, /capabilities/<id>, /facades/<name>. The CSS follows the code.
  • Typed events emitted on document: geoleaf:filters:applied, geoleaf:geojson:visibility-changed and more — a documented event API.
  • Installable PWA for iOS/Android, focus trap, aria-modal, prefers-reduced-motion and i18n in 6 languages.

Extend GeoLeaf to fit your needs

The core covers the essentials. Twelve plugins, all MIT-licensed, unlock the advanced use cases: each one is self-contained, and enabled by a single line of JSON.

Connector

@geoleaf-plugins/connector

Universal fetch interceptor for authenticated sources (GeoJSON, FlatGeobuf, KML, CSV, OGC API). Static, JWT or async tokens (OAuth, Keycloak, Auth0), sign-in modal and automatic refresh.

npm

Editor

@geoleaf-plugins/editor

Geometry creation and editing (point, line, polyline, polygon) through Terra Draw, a responsive attribute-form catalog, and online or offline persistence.

npm

Print

@geoleaf-plugins/print

PDF / JPG export at 300 DPI: scale × paper format walkthrough (A4/A3), off-screen re-render, inline legend and north arrow. Annotations included when Measure is loaded.

npm

Measure

@geoleaf-plugins/measure

Distance and area measurement, circle, GPS tracking and georeferenced tooltip annotations. GeoJSON export.

npm

Table

@geoleaf-plugins/table

Table view of your features: multi-column sorting, search, selection linked to the map, and export to GeoJSON, CSV, KML, GPX and Excel.

npm

Geocoding

@geoleaf-plugins/geocoding

Multi-provider address search (Addok, Nominatim, Photon…) with a search pill embedded in the map.

npm

Offline UI

@geoleaf-plugins/offline-ui

The interface for offline mode: cache button, picker for the layers to download and a synchronisation panel. The engine itself ships in the core.

npm

File Import

@geoleaf-plugins/file-import

Convert and import GPX, KML/KMZ, CSV and TopoJSON as GeoJSON layers, entirely in the browser.

npm

FlatGeobuf

@geoleaf-plugins/flatgeobuf

Streaming reads of FlatGeobuf files with spatial bbox filtering, via an R-tree index and HTTP Range requests.

npm

COG

@geoleaf-plugins/cog

Render Cloud Optimized GeoTIFF files as MapLibre image layers: multi-band, colour lookup table, and reads over HTTP Range.

npm

Realtime Layer

@geoleaf-plugins/realtime-layer

Real-time layer updates through polling, WebSocket or SSE, with GTFS-RT decoding — transport, IoT, geographic alerts.

npm

WebSocket

@geoleaf-plugins/websocket

Generic real-time transport infrastructure — reconnection, multiplexing and subscription handling — shared by the layers and the other plugins.

npm

MIT, with no exception

The core and all twelve plugins are published under the MIT licence. No commercial edition, no subscription, no gated feature.

  • Free to use, including commercially
  • Modification and redistribution allowed
  • No proprietary backend dependency

Everything you need to know about GeoLeaf

Yes, entirely. The core and all twelve plugins are published under the MIT licence, with no exception and no commercial edition. You may use them freely, including in professional projects, provided you keep the copyright notice and the licence text when redistributing.
No. GeoLeaf is a 100% frontend library, built on MapLibre GL JS, that consumes JSON data. It works with Odoo, any other ERP, a CMS, a custom API or plain static files, with no imposed server dependency.
The basemap selector only drives the background tiles. Business layers (points, lines, polygons, overlays) are managed separately through the legend and the layer manager, so you control exactly what is displayed.
Yes, and the engine ships in the core: Service Worker, tile and data caching, synchronisation through IndexedDB. The MIT offline-ui plugin only adds the interface — cache button, picker for the layers to download and a synchronisation panel.
MapLibre GL JS 6, declared as a peer dependency: GeoLeaf does not bundle it, so you stay in control of the version. Version 6 is ESM-only and requires WebGL2 — the engine dropped the WebGL1 path. Node 22 or later is only needed for the build toolchain, not to run the map.
GeoLeaf enforces a strict Content Security Policy (style-src without 'unsafe-inline'), escapes HTML and validates URLs at render time (XSS protection), handles CSRF tokens and blocks prototype pollution. The Excel export was rewritten without a third-party dependency, removing two known CVEs.

Need support around GeoLeaf?

GeoLeaf is an open-source framework. If you would like support with integration, designing a business profile, adapting it to your architecture (ERP, API, CMS) or developing specific features, describe your context. We reply within 48 hours.

Website

www.mp-i.pro

LinkedIn

Mattieu Pottier

Availability

Mon – Fri, 9am – 6pm CET