[Feature]: Open GeoLibre (.geolibre) projects as maps
Maintainers usually reply within 1 day
@Mavrick-F is already working on this.
Since Oct 26, 2026.
Assessment
This issue has not been assessed yet.
Description
Before you start
- I searched the existing issues and the roadmap and did not find a duplicate request.
What problem does this solve?
RustGIS and GeoLibre are meant to be used together (#951), but neither opens the other's project file. To move a GeoLibre project into RustGIS today, you export each layer, add it again and redo its styling. giswqs suggested starting with RustGIS opening .geolibre projects; GeoLibre opening .rgis follows once RustGIS reads a wider range of data.
Proposed solution
Open a .geolibre (or legacy .geolibre.json) project as a new map of the current project, the way supported QGIS projects open (project.importQgis). Whatever can't come across is reported per layer, not silently dropped.
The format. A .geolibre file is plain JSON, documented at geolibre.app/project-format. The TypeScript types in packages/core/src/types.ts and the lenient parseProject in packages/core/src/project.ts are the working spec. version is "0.1.0" or "0.2.0" (v3.5.0). There is no JSON Schema and no zip variant.
Command. project.importGeolibre {"path"? | "url"? | "text"? | "data"?, "dir"?}, with the same inputs and size limits as project.importQgis, plus url: a project by its web address, such as a GeoLibre share link or a hosted demo. A shared GeoLibre workspace, as deniial00 suggests in #951, stores the same JSON, so it could feed the same importer later. It returns {map, layers, notes} and shows the same summary ("Imported X of Y GeoLibre layers; N drawn differently, M left out"). Open on the desktop and Project › New offer it by extension, and the web app's ?project= link accepts a .geolibre address. It works in the web app for layers that live at a web address or inline.
Parser. A module in rustgis-map beside qgis/, reading the JSON into existing RustGIS types and collecting Approximated / Skipped notes, as qgis::Report does.
What comes across in the first version:
| GeoLibre | RustGIS |
|---|---|
mapView (centre, zoom, bearing) |
the map's view |
basemapStyleUrl (a MapLibre style URL) |
a web tile layer from the MapLibre style |
geojson with inline features or metadata.embeddedGeoJSON |
an in-project layer |
sourcePath (an absolute local path) |
the file, if it exists; else the same name in dir; else a note |
xyz, wms, wmts, vector-tiles, pmtiles, mbtiles, cog, raster, flatgeobuf, geoparquet, zarr, lidar by URL or path |
the matching RustGIS layer |
visible, opacity, layerGroups, layer order (beforeId) |
the same |
vectorStyleMode single, categorized, graduated (with vectorStyleStops), proportional size |
single, unique values, graduated colours, proportional symbols |
labels (field, halo, zoom range) |
a label class |
bookmarks |
bookmarks |
Reported as left out or approximated:
- Approximated:
rule-basedandexpressionstyles (until RustGIS has an expression engine), and MapLibre expressions in filters, labels and pop-ups, drawn with the layer's base symbol. - Left out:
deckgl-viz,video,gaussian-splatand3d-tileslayers; Cesium, Mapbox and ArcGIS renderers. - Left out, possible later:
duckdb-queryandsql-querylayers (desktop with DuckDB), and print layouts. - Ignored, with one note: plugin settings, story maps, dashboards, comments, models and processing history.
Tests.
- Fixtures written for RustGIS from the documented format, not copied from GeoLibre: one per layer kind and style mode, plus a project newer than
0.2.0and a malformed one. - The engine's
hostile_params_never_paniccovering the new command. - A round trip of GeoLibre's hosted earthquakes demo (graduated by depth, sized by magnitude) checked by hand and described in the PR.
- Docs: a "GeoLibre projects" section in
docs/user-guide/workspace.mdbeside QGIS, and the FAQ indocs/comparison/geolibre.md.
It adds a command but changes no existing command, no .rgis field and no dependency (serde_json is already there).
Two assumptions, unless someone sees a reason otherwise:
- A new map in the current project, as QGIS projects open, rather than replacing the project. The current project and its unsaved work stay untouched, and the map can be saved as a
.rgislike any other. - A newer
versionthan RustGIS knows is read as far as it can be, with a note saying so. GeoLibre's own reader is lenient in the same way, and refusing would block a project over fields RustGIS may not need.
I'd like to take this.
Estimated scope
Medium: a broader feature that is feasible in a reasonable timeframe
Alternatives considered
- A shared project format. Bigger, and it couples two projects that change at different speeds. Importing keeps each format free to change.
- Importing layers only, without styles. That's what exporting the data already gives; the styles are the part worth carrying across.
- GeoLibre opening
.rgisfirst. giswqs suggested the other order, since RustGIS doesn't yet read every data type GeoLibre projects use.
- Dominant language
- Rust
- Stars
- 1.9k
- Forks
- 268
- Avg merge
- 3h 17m
- Merged PRs (30d)
- 736
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from opengeos/RustGIS
-
Difficulty 5/5 Over a week Newbie friendliness 30/100
Maintainers usually reply within 1 day
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 35/100
Maintainers usually reply within 1 day
-
[Bug]: Clip, Dissolve, Simplify and other geometry tools move vertices beyond ±85.05° onto 85.05° (polar polygons vanish)Possibly taken @flight1973 claimed this today. Openbug
Difficulty 5/5 Over a week Newbie friendliness 47/100
opengeos/RustGIS#1033 · 4 comments ·
Maintainers usually reply within 1 day
-
Difficulty 5/5 Over a week Newbie friendliness 25/100
Maintainers usually reply within 1 day
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 25/100
opengeos/RustGIS#1019 · 3 comments ·
Maintainers usually reply within 1 day
All issues in opengeos/RustGIS
Similar issues
-
desktop documentation
Difficulty 1/5 Under an hour Newbie friendliness 90/100
vfarcic/dot-agent-deck#2008 ·
Maintainers usually reply within 1 day
-
L: javascript
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
dependabot/dependabot-core#16744 ·
Maintainers usually reply within 1 day
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 68/100
nautechsystems/nautilus_trader#5486 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
Maintainers usually reply within 1 day
-
Bump rustls-webpki, webpki-roots and webpki-root-certs for the emSign distrust (CVE-2026-111943)Open
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
Maintainers usually reply within 1 day