GeoLibre 1.0: A Free, Open-Source Cloud-Native GIS That Runs Anywhere
I am excited to introduce GeoLibre, a free and open-source, lightweight, cloud-native GIS platform for visualizing, exploring, and analyzing geospatial data. This is the most powerful software I have ever built, and it is also the easiest one to use. One application runs everywhere: in your web browser, as a native desktop app, on your phone, and inside a Jupyter notebook. There is no account, no server, and no cost. Everything runs locally and your data stays private. Nothing leaves your browser unless you request online data.
Video tutorial: Introducing GeoLibre 1.0, a cloud-native GIS that runs everywhere
In this tutorial, I walk through GeoLibre 1.0 step by step: how to install and run it, load vector and raster data, stream gigabyte-scale cloud-native datasets without downloading them, edit attributes and geometry, work with PMTiles, 3D tiles, LiDAR point clouds, and DuckDB, and share your projects as static links.
What You Will Need¶
A modern web browser. That is all you need for the web version.
Optionally, the desktop app for heavier geoprocessing (Linux, macOS, and Windows).
Optionally, Python 3.10 or later if you want to run GeoLibre inside a Jupyter notebook.
Three Ways to Run GeoLibre¶
GeoLibre is one application that runs on multiple platforms. There are three ways to get started.
1. In a web browser. Go to geolibre.app and open the web version. It runs as a static website hosted on GitHub Pages, so everything works offline once loaded. The layout is fully responsive, so on a phone or small screen it hides the side panels and adapts the toolbar automatically. You can toggle light or dark mode from the upper right corner, or let it follow your system setting.
2. As a desktop app. Download the installer from the GitHub releases page. The app is tiny, only about 30 MB, compared to the gigabytes that QGIS or ArcGIS Pro require. On Linux, make the downloaded file executable and run it. On macOS and Windows you may need to adjust your security settings to allow it to run. The desktop version includes extra functionality, such as running Python programs for heavier geoprocessing.
3. In a Jupyter notebook. Install the lightweight package and launch a map with a single line. It has very few dependencies, so installation takes only seconds.
import geolibre
m = geolibre.Map()
mThe notebook experience is bidirectional. You can open projects, add data, and customize layers just like the web version, and you can also query the map state from Python, including the center, coordinates, and number of data layers. You can save your work as a project file and load it back later with all layers preserved.
Loading Vector Data¶
The easiest way to add vector data is to drag and drop a file onto the map. GeoLibre renders it instantly. From there you can use the toolbar in the upper left corner to:
Zoom to layer: jump the map to a layer’s extent.
Identify: click any feature to inspect its attributes.
Attribute table: expand the table from the bottom left to view, sort, and edit records.
Check Zoom to selection in the attribute table to highlight the matching feature on the map when you select a row. The selection stays synchronized between the table and the map in both directions.
To edit attributes, click Edit, change any value, and click Save. You can then export the layer as GeoJSON, GeoParquet, or CSV. To edit geometry, open the layer menu (the three dots), enable Edit geometry, and use the editing toolbar to move features, drag vertices, rotate, delete, copy, or draw new polygons. Click Save to commit your changes back to the layer and attribute table.
Loading Raster Data¶
Paste the URL of any Cloud Optimized GeoTIFF and click load, or select a file from your local computer. A 1.5 GB land cover dataset loads in well under a second. For digital elevation models you can change the color map on the fly, switch between single-band and RGB rendering for multispectral data, inspect pixel values by clicking the map, and adjust the contrast stretch.
Streaming Gigabyte-Scale Data¶
This is where cloud-native geospatial really shines. GeoLibre can stream large datasets directly from the internet without downloading them. When you add a vector layer, choose the streaming option and paste a URL to a remote GeoParquet file. GeoLibre lazily loads the DuckDB spatial extension, builds vector tiles on demand, and renders the data on the fly.
In the video, I stream a sorted 180 GB GeoParquet file with millions of polygons. The tiles generate dynamically as you pan and zoom, and you can still click features to inspect their attributes. This works because of the combination of DuckDB and GeoParquet, all running directly in your browser. You can render gigabytes of data with no server and no downloads.
Cloud-Native Formats and Services¶
GeoLibre supports a wide range of cloud-native formats and web services:
Web services: XYZ tiles, WMS, and WFS (with a configurable refresh interval for live data).
GeoParquet and FlatGeobuf: cloud-native vector formats.
PMTiles: load global datasets like Overture building footprints, change colors, and switch between 2D and 3D extrusion.
3D tiles: add a tileset and zoom to it for 3D scenes.
LiDAR point clouds: stream point clouds from the web with elevation or RGB classification coloring.
DuckDB: connect to a remote DuckDB file, browse its tables, run SQL queries, and render results directly on the map. The desktop version also supports PostgreSQL and a built-in Python console for more computing power.
You can also load delimited text and CSV files with latitude and longitude columns, and GPS tracks in GPX format (desktop version).
Map Controls and Decorations¶
GeoLibre includes a rich set of map controls and decorations that are all saved with your project:
Scale bar, terrain control, and a location search box.
Color bars for raster layers, with custom labels, units, and orientation.
Legends, defined easily or imported as a dictionary.
Custom HTML overlays for adding notes or branding.
Distance and area measurement tools.
Bookmarks for saving and navigating between locations, with import and export.
View state inspector for copying the center, bounds, and zoom level.
A minimap for wider context.
Plugins¶
GeoLibre has a plugin system, similar to the QGIS plugin manager or the ArcGIS toolbox, that lets you extend the application with new functionality. Plugins are written in TypeScript. If you build one, you can submit a pull request to make it available for everyone. See the plugins page in the app for documentation on developing and publishing a plugin.
Sharing Projects¶
Everything you do on the map can be saved as a project file, which is simply a GeoJSON file with your data and visualization settings. To share a project, sign in at geolibre.app with Google, GitHub, or a new account, then upload your project file or generate an API token to upload directly from the app.
Once shared, you get a static URL that anyone can open to see the same data, layers, styling, and attribute table. To present a clean, control-free view, append the map only option to the URL to hide the side panels. The shared page is completely static, hosted on GitHub Pages, with no server involved.
Architecture¶
GeoLibre is built on a modern, open-source stack:
MapLibre GL JS for the rendering engine.
React and TypeScript for the user interface.
Tauri (Rust) for the desktop app, which is why it is roughly 10 to 20 times smaller than an Electron equivalent.
DuckDB for spatial queries and format conversion.
deck.gl for WebGPU-accelerated visualization.
Resources¶
This release packs in a huge number of features, and a short video can only scratch the surface. In follow-up videos, I will cover plugins and data processing in more depth. GeoLibre lowers the bar for accessing geospatial data: all you need is a browser, and you can run the same application on your desktop, your phone, or inside a Jupyter notebook. If you have feature requests or run into bugs, please leave a comment or open an issue on the GitHub repository. And if you find GeoLibre useful, please give it a star.