Dongdong Kong 95ea999ed3
CI / Dependency audit (push) Waiting to run
CI / E2E smoke (Playwright) (push) Waiting to run
CI / Validate CITATION.cff (push) Waiting to run
CI / Collab relay image (push) Waiting to run
CI / Build and test (push) Waiting to run
Deploy Website / Build website and demo (push) Waiting to run
Deploy Website / Deploy to GitHub Pages (push) Blocked by required conditions
Publish Container Image / Build and publish container image (push) Waiting to run
Deploy studio.geolibre.app / Build and publish (push) Waiting to run
Deploy web.geolibre.app / Build and publish (push) Waiting to run
feat (npm_package): pack core and map into npm package (#2084)
* feat (npm_package): pack core and map into npm package

* fix maplibregl and desktop config

* style: auto-format (ruff + oxfmt) [pre-commit.ci]

* Address review feedback

- packages/core/package.json: move the dist `main`/`types`/`exports` out of
  `publishConfig` semantics that npm ignores. npm only honors publish-time
  *config* there (npm/cli#7586), so the tarball advertised `./src/index.ts`
  while `files` shipped only `dist`. The published entries now go through
  `scripts/prepare-npm-package.mjs`, which hoists them just before publish;
  `publishConfig` also gains the missing `access: public` for a scoped
  package. Fixes the Copilot and CodeRabbit threads on this file.
- packages/core/package.json: `types` pointed at `./dist/index.d.ts`, but
  `tsdown --dts` emits `index.d.mts`. Published consumers would have gotten no
  types at all. Answers the Claude review question about the extension.
- packages/map/package.json: point `main`/`types`/`exports` back at
  TypeScript source. Pointing them at `dist` is what broke CI: `dist` is
  gitignored and nothing builds it, so 12 frontend tests failed with
  ERR_MODULE_NOT_FOUND on `@geolibre/map/derived-geometry` and friends. The
  published dist entries live under `publishConfig` and register every subpath
  the repo exports (`.`, `./headless`, `./derived-geometry`,
  `./pmtiles-layer`), so nothing 404s on npm.
- packages/map/package.json: restore the `^19.0.0` react/react-dom peer ranges.
  Narrowing them to `^19.2.8` was unrelated to packaging and only constrains
  consumers.
- apps/geolibre-desktop/tsconfig.json, vite.config.ts: revert the
  `@geolibre/map` path/alias and the `../../packages/map/src` include. With the
  manifest resolving to source again they are unnecessary, and the include made
  `tsc -b` emit `.js`/`.d.ts` beside the map sources. Fixes the CodeRabbit
  thread on tsconfig.json.
- packages/map/src/headless.ts: restore the requested stack order when a layer
  moves. `syncLayer` on an existing layer leaves it where MapLibre put it, so a
  reorder was silently ignored and the documented bottom-to-top order stopped
  holding. Rebuild from the lowest position whose occupant changed.
- Add scripts/prepare-npm-package.mjs plus tests/prepare-npm-package.test.ts,
  which also guards that every published path is one the package's own tsdown
  entries actually emit.
- Add tests/headless-layer-sync.test.ts covering ordering, insertion, removal
  and dispose.
- Add .github/workflows/publish-packages.yml: build, prepare and publish
  @geolibre/core then @geolibre/map on each GitHub Release, via npm Trusted
  Publishing with provenance, skipping a version already on the registry.
- Add READMEs for both packages (npm renders them) and document the
  source-vs-dist split in CLAUDE.md.

* Address CodeRabbit review feedback

- .github/workflows/publish-packages.yml: read each package's own version for
  the registry check instead of using core's for both. The two move in lockstep
  today, but the moment they diverge the map check would skip an existing
  release or attempt one npm has already seen.
- CLAUDE.md: correct the claim that no workflow runs the package builds. The
  release workflow does build both; what it does not do is verify that every
  path the manifest publishes names a file the build emitted, which is what
  tests/prepare-npm-package.test.ts covers.

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: giswqs <giswqs@gmail.com>
2026-08-24 00:04:25 -04:00
2026-08-22 00:18:57 -04:00
2026-06-10 09:38:26 -04:00
2026-08-22 00:18:57 -04:00

GeoLibre

Launch GeoLibre Web GeoLibre shared project GeoLibre plugins image R package image image Conda Recipe Microsoft Store Mac App Store App Store Google Play Chrome Web Store AUR version FlatPark image DOI Ask DeepWiki

A free and open-source, lightweight, cloud-native GIS platform for visualizing, exploring, and analyzing geospatial data. It runs everywhere you do, in the web browser, on the desktop, on mobile, and inside Jupyter notebooks, all while keeping your data local and private.

It also ships 1,000+ geoprocessing tools that run entirely in your browser on WebAssembly — terrain, hydrology, LiDAR, remote sensing, and vector analysis with no server, no install, and no data ever leaving your machine.

GeoLibre is built with Tauri v2, React, TypeScript, MapLibre GL JS, DuckDB-WASM Spatial, and deck.gl. The same workspace runs as a native desktop app, native Android and iOS apps, in any modern web browser, and adapts responsively to mobile and small screens.

Demos

Click any screenshot to open it at full resolution, or any animation to play the full-quality video.

3D Tiles

GeoLibre demo showing 3D Tiles rendered on a MapLibre map

Open the live project

NYC buildings and subways

Manhattan building footprints extruded in 3D and colored by construction era, with the MTA subway lines and stations on top and a legend generated automatically from the layers' symbology.

Manhattan buildings extruded in 3D and colored by construction era, with MTA subway lines and stations and an auto-generated legend

The animation below runs the Time Slider along the buildings' construction year, from 1850 to 2025, so Manhattan fills in era by era. Click it to play the full-quality video.

Animation of Manhattan buildings appearing by construction year as the Time Slider advances from 1850 to 2025

Open the live project

Planetary basemaps

GeoLibre is not limited to Earth. Planetary basemaps from OpenPlanetaryMap and USGS Astrogeology cover the Moon, Mars, Mercury, Venus, the Galilean moons (Io, Europa, Ganymede, Callisto), Titan, Pluto, and Charon, with a per-project ellipsoid so distance, area, and scale measurements match the body you are mapping. The deep-space starfield behind each globe comes from the Atmosphere Effects plugin.

GeoLibre globe view of Earth over a starfield backdrop GeoLibre globe view of the Moon over a starfield backdrop GeoLibre globe view of Mars over a starfield backdrop
Earth Moon Mars
GeoLibre globe view of Mercury over a starfield backdrop GeoLibre globe view of Pluto over a starfield backdrop GeoLibre globe view of Venus over a starfield backdrop
Mercury Pluto Venus
GeoLibre globe view of Europa over a starfield backdrop GeoLibre globe view of Callisto over a starfield backdrop GeoLibre globe view of Charon over a starfield backdrop
Europa Callisto Charon

Switch bodies from the planet switcher in the Layers panel. See Demos for more.

Video tutorials

Geoprocessing: 1,000+ tools, zero install

The GeoLibre Whitebox toolbox running locally with WebAssembly, listing the full catalog of 1,000+ tools with the Regularize Building Footprints tool selected

Processing → Whitebox Toolbox opens a toolbox of 1,000+ geoprocessing tools that execute in the browser through a WebAssembly runtime with native raster and vector I/O. There is no Python sidecar to install and no server to call — the tools, your data, and the results all stay on your machine, so the full toolbox is available on GeoLibre Web, on the desktop app, and on Android alike.

The tools come from the Whitebox Next Gen suite plus GeoLibre's own WASM tools, and are browsable by category straight from the Processing menu:

Category Tools Examples
Vector 313 overlays, buffers, joins, cleaning, topology, generalization
Raster 256 algebra, filters, reclassification, zonal and focal statistics
Remote sensing 154 spectral indices, band math, classification, change detection
Hydrology 100 flow accumulation, watersheds, stream networks, depression filling
Terrain 99 slope, aspect, hillshade, curvature, ruggedness, viewsheds
LiDAR 65 point-cloud filtering, ground classification, DEM/DSM generation
Conversion 49 format translation to cloud-native GeoParquet, PMTiles, and COG
Network 26 connectivity, cost distance, and routing analysis
Projection 4 reprojection for raster and vector data

Any tool is deep-linkable with a ?tool= URL parameter that preselects it and pre-fills its form. See the Processing Tools guide for details, and Geoprocessing in the Browser for a video walkthrough.

Documentation

Full documentation, including the User Guide and Tutorials, is published at geolibre.app.

Contributions are welcome. See the Contributing guide for the development setup, repository layout, and quality gate.

Sponsor

GeoLibre is free and open source, and stays that way. If it is useful to you or your team, sponsorship is the most direct way to keep development, hosting, and cross-platform distribution going.

See the Become a Sponsor page for what sponsorship supports and for other, free ways to help.

Acknowledgements

GeoLibre is built on the free and open-source geospatial and web communities — including MapLibre GL JS, deck.gl, DuckDB-WASM Spatial, Turf.js, Tauri, React, and many more. See the full Acknowledgements page for the complete list of projects and community contributors.

  • The Atmosphere Effects plugin (deep-space backdrop, parallax starfield, comets, and the globe atmosphere halo) adapts the technique and visual design from Leonel Dias's article Globe atmosphere, halo, and comets — the layered Canvas 2D approach, the halo gradient and "screen" blend, the limb-sampling that keeps the halo aligned under pitch, and the starfield/comet parameters.
  • Community contributors — thanks to Ryanphoenix for many valued contributions, including issue reports, feedback, and improvements.
  • Beta testers — thanks to René van der Velde (Netherlands) for early testing, detailed bug reports, and feature requests.

Citation

If you use GeoLibre in your work, please cite it. GeoLibre is archived on Zenodo, which mints a DOI for every release. The concept DOI below always resolves to the latest version.

DOI

Wu, Q. (2026). GeoLibre: A lightweight, cloud-native GIS platform for visualizing, exploring, and analyzing geospatial data. Zenodo. https://doi.org/10.5281/zenodo.20785400

You can also use GitHub's "Cite this repository" button (which reads CITATION.cff) to copy a ready-made APA or BibTeX entry. See the How to Cite page for more formats.

License

MIT

S
Description
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.|GitHub 镜像 6.7k · 🍴 667
https://github.com/opengeos/geolibre Readme MIT Cite this repository 35 MiB
Languages
TypeScript 90.4%
Python 6.2%
Rust 1.3%
CSS 0.8%
JavaScript 0.7%
Other 0.4%