# GeoLibre: a browser-first GIS that runs the same workspace on desktop, mobile and in Jupyter

> GeoLibre is an MIT-licensed TypeScript GIS built on Tauri v2, React, MapLibre GL JS, DuckDB-WASM Spatial and deck.gl. It ships a WebAssembly geoprocessing toolbox with no Python sidecar, and the same workspace runs in a browser tab, as a native app, and inside a notebook.

**opengeos/GeoLibre** — A lightweight, cloud-native GIS platform for visualizing, exploring, and analyzing geospatial data. It runs in the web browser, on the desktop, on mobile, and inside Jupyter notebooks.

- Repository: https://github.com/opengeos/GeoLibre
- Website: https://geolibre.app
- Stars: 7,678 · Forks: 832
- Language: TypeScript
- License: MIT
- Published: 2026-08-08 · Updated: 2026-08-18 · Language: en
- Canonical page: https://hysenlabs.com/projects/opengeos-geolibre

## What GeoLibre is for, and who ends up using it

The README describes GeoLibre as "a free and open-source, lightweight, cloud-native GIS platform for visualizing, exploring, and analyzing geospatial data" that runs in the web browser, on the desktop, on mobile and inside Jupyter notebooks, "all while keeping your data local and private". That combination is the pitch. The people it fits are analysts who receive a shapefile or a KMZ and do not want to install QGIS on a locked-down laptop, instructors who need students to open the same map from a URL, and notebook users who want an interactive map next to pandas rather than a static PNG. The homepage links point to a hosted web build, desktop installers for Windows, macOS and Linux, a Mac App Store build, iOS and Android apps, a Chrome extension, a Python package and an R package. The GitHub repository is the source of truth for all of them, and the last push was on 2026-08-27.

## The architecture: one React workspace, several shells

GeoLibre is a TypeScript monorepo. The root package.json declares npm workspaces over apps/*, packages/* and workers/*, and names the stack as Tauri v2, React, TypeScript, MapLibre GL JS, DuckDB-WASM Spatial and deck.gl. The map rendering layer is MapLibre GL JS; DuckDB-WASM Spatial handles query and analysis in the browser; deck.gl draws the heavier visual layers. The desktop, Android and iOS builds are Tauri v2 shells around the same frontend, which is why the README can claim the same workspace adapts responsively to mobile and small screens. Three Cloudflare-style workers sit alongside the app: geolibre-viewer-worker, geolibre-collab-worker and geolibre-tiles-worker, plus geolibre-ai-proxy-worker, all exercised by the npm run test:worker script. A Python backend lives under backend/geolibre_server and is tested with pytest. The point of this layout is that the browser build is not a cut-down demo; it is the same code path the desktop binary runs.

## Geoprocessing in the browser without a Python sidecar

The feature that distinguishes GeoLibre from most web maps is the toolbox. The README states that Processing then Whitebox Toolbox opens "1,000+ geoprocessing tools" that execute through a WebAssembly runtime with native raster and vector I/O. The README's wording is explicit that there is "no Python sidecar to install and no server to call", so tools, data and results stay on the machine. Terrain, hydrology, LiDAR, remote sensing and vector analysis are the categories named. This is a real architectural commitment: the same toolbox is listed as available on GeoLibre Web, on the desktop app and in the notebook package. The trade-off is that everything runs inside a browser sandbox with a memory ceiling, and the README does not publish per-tool memory or dataset-size limits, so large rasters are a question you have to answer yourself before trusting the toolbox with production data.

## Installing GeoLibre and running a first map

There are two entry points. The fastest is the hosted build at web.geolibre.app, which needs nothing installed. If you want the desktop app, the README points to the downloads page for Windows, macOS and Linux installers, and to the Mac App Store listing. To run from source, the root package.json defines the scripts; the repository requires Node 22 in the Docker build stage, so match that locally. Clone the repository, install workspace dependencies, then start the desktop shell in development mode.

```bash
npm install
npm run dev
```

the dev script delegates to the geolibre-desktop workspace, so the Tauri window opens with the React frontend attached. For a production bundle of the same app, the build script is the counterpart.

```bash
npm run build
```

If you would rather use it from a notebook, the README links a PyPI package named geolibre and a conda-forge package of the same name, and the repository ships python/examples/getting-started.ipynb as the worked example. The R package is documented separately at r.geolibre.app. For a self-hosted web deployment, the repository includes a Dockerfile and a docker-compose.yml whose web service maps port 8080 by default through GEOLIBRE_WEB_PORT and depends on a healthy geolibre-server and geolibre-collab.

## Self-hosting: what docker-compose.yml actually demands

The Compose file is where the operational details live, and it is more opinionated than the README suggests. The geolibre-web service builds from the root Dockerfile and publishes port 80 inside the container, mapped from ${GEOLIBRE_WEB_PORT:-8080}. It expects two browser-reachable URLs, GEOLIBRE_SHARE_URL and GEOLIBRE_COLLAB_URL, and the comment warns that these are not Compose service names, so a real deployment must override them with public TLS origins. Sign-in is optional and mutually exclusive: you configure either Clerk (GEOLIBRE_CLERK_PUBLISHABLE_KEY, GEOLIBRE_CLERK_WAITLIST) or Auth0 (GEOLIBRE_AUTH0_DOMAIN, GEOLIBRE_AUTH0_CLIENT_ID), never both. The server service assembles GEOLIBRE_DATABASE_URL from POSTGRES_USER and POSTGRES_PASSWORD, and the file carries an unusually candid warning: an @ in the password splits the DSN early and a % starts a percent-escape. The suggested fix is to avoid both characters or percent-encode them in the URL while POSTGRES_PASSWORD keeps the literal value. That is a genuine footgun for anyone who follows the usual advice to pick a strong password.

## Limitations, and when GeoLibre is the wrong tool

The most consequential limitation is the one the README sells as a feature: processing happens in the client. That means the ceiling is the browser tab's memory and the user's machine, not a cluster. Anyone whose workflow is a nightly raster mosaic over a continent, or a batch job that must run unattended, is better served by a server-side engine. The second limitation is ecosystem depth. QGIS carries decades of third-party Python plugins and a desktop processing framework; GeoLibre's extension story is a plugins workspace and a plugins.geolibre.app site, and the README does not describe a plugin API contract or a compatibility guarantee. Third, the repository has a Dockerfile, a docker-compose.yml and a backend server, but the README does not document rollback, database migration steps or downgrade behaviour between releases, so an operator upgrading a self-hosted instance has no stated recovery path. Finally, the version signals are inconsistent: the latest release is tagged v2.8.0, while the root package.json declares version 3.0.0. That is a monorepo versioning choice rather than a defect, but it means you should read release tags, not package.json, when deciding what to deploy.

## GeoLibre compared with QGIS and with MapLibre alone

The comparison people search for is GeoLibre vs QGIS. The difference is deployment model, not feature count. QGIS is a desktop application with a Python plugin ecosystem and a processing framework that can call external binaries; it assumes an installed workstation and, for heavy jobs, a server. GeoLibre assumes a browser and pushes the compute into WebAssembly, which buys zero-install distribution and local data handling at the cost of a memory ceiling and a younger tool ecosystem. The comparison with MapLibre is a category error worth clearing up: MapLibre GL JS is the rendering library GeoLibre is built on, not a competing application. GeoLibre adds the data layer (DuckDB-WASM Spatial), the geoprocessing toolbox, project sharing, collaboration, the Tauri desktop and mobile shells, and the Python and R bindings on top of that renderer. If all you need is a slippy map with vector tiles, MapLibre alone is the smaller dependency; if you need to run a watershed analysis on a DEM you just dragged in, MapLibre alone will not do it.

## Licence, maintenance and upgrade cost

GeoLibre is MIT-licensed, and the LICENSE file sits at the repository root. MIT is permissive: it allows commercial use, modification and redistribution provided the copyright notice and permission notice are retained. It offers no patent grant and no warranty, which matters if you plan to redistribute a modified build inside a product; that is a question for your own counsel, not something this article can settle. On maintenance, the repository is not archived and the last push was on 2026-08-27, with v2.8.0 tagged the same day, v2.7.0 on 2026-08-22 and v2.6.0 on 2026-08-14. Three releases inside a month is a fast cadence, and fast cadences raise the cost of staying current: you should read each release's notes before upgrading a self-hosted deployment, particularly around the backend service and the database URL configuration. The docker-compose.yml comments show the project tracks deployment pitfalls closely, but the README does not describe an upgrade or rollback procedure, so plan your own snapshot before pulling a new image.

## Conclusion

Adopt GeoLibre if you need a GIS that runs from a URL, keeps data local, and offers the same workspace on desktop, mobile and in a notebook. Skip it if you depend on desktop plugins, long-running server jobs, or a documented rollback path for version upgrades. Before committing, verify that the Whitebox Toolbox covers the specific analyses you need, that your raster and vector file sizes stay within what DuckDB-WASM Spatial can hold in memory, and that your deployment's GEOLIBRE_DATABASE_URL password avoids the @ and % characters the docker-compose.yml comments warn about.

## FAQ

### What is GeoLibre?

GeoLibre is a free and open-source, lightweight, cloud-native GIS platform for visualizing, exploring and analyzing geospatial data, built with Tauri v2, React, TypeScript, MapLibre GL JS, DuckDB-WASM Spatial and deck.gl. It runs in the web browser, on the desktop, on mobile and inside Jupyter notebooks, keeping data local and private.

### What are the key differences between GeoLibre and QGIS?

QGIS is a desktop application with a long-established Python plugin ecosystem and a processing framework that can call external binaries, while GeoLibre runs the same workspace in a browser, on desktop, on mobile and in notebooks, and executes its 1,000+ geoprocessing tools through WebAssembly with no Python sidecar and no server call. The practical difference is deployment model and where the compute runs, not the length of the tool list.

### Is GeoLibre the same thing as MapLibre?

No. MapLibre GL JS is the rendering library GeoLibre is built on, not a competing application. GeoLibre adds the data layer (DuckDB-WASM Spatial), the Whitebox geoprocessing toolbox, project sharing and collaboration, the Tauri desktop and mobile shells, and the Python and R packages on top of that renderer.

### Which GIS software is free?

GeoLibre is free and open-source under the MIT licence, and the repository ships its LICENSE file at the root. The README also links the PyPI and conda-forge packages, which are published under the same project.

### What is GeoLibre compared with ArcGIS?

The README does not compare GeoLibre with ArcGIS, so any feature-by-feature claim would be unsupported. What the README does state is that GeoLibre is MIT-licensed, runs in the browser, on desktop, on mobile and in notebooks, and executes its geoprocessing tools locally through WebAssembly with no server call.

## Sources

- [Official documentation](https://geolibre.app)
- [Official README](https://github.com/opengeos/GeoLibre#readme)
- [Project repository](https://github.com/opengeos/GeoLibre)
- [Release notes](https://github.com/opengeos/GeoLibre/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/opengeos-geolibre
