Hacktoberfest 2026: the issues maintainers tagged for October, open and beginner-friendly. Browse Hacktoberfest issues

[Feature]: Open GeoLibre (.geolibre) projects as maps

Open
#962 0 comments 0 reactions 1 assignee View on GitHub

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

enhancement
Before you start
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-based and expression styles (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-splat and 3d-tiles layers; Cesium, Mapbox and ArcGIS renderers.
  • Left out, possible later: duckdb-query and sql-query layers (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.0 and a malformed one.
  • The engine's hostile_params_never_panic covering 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.md beside QGIS, and the FAQ in docs/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 .rgis like any other.
  • A newer version than 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 .rgis first. 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

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from opengeos/RustGIS

All issues in opengeos/RustGIS

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.