Repository navigation
Tracking: feature parity with GeoLibre #77
Description
Tracking issue for feature parity with GeoLibre v3.4.0. Each item names what GeoLibre offers and where RustGIS stands today (missing or partial). Items already on the RustGIS roadmap's "Next" list are marked (Next). The geolibre-rust / Whitebox geoprocessing suite that RustGIS already embeds is not counted either way.
Sources: GeoLibre docs/features.md, docs/data-formats.md and the other GeoLibre docs named per section; RustGIS ROADMAP.md, docs/, and the command registry (crates/engine/src/cmd). Tick an item, or link its PR or sub-issue, as it lands. Some items may be out of scope for a pure-Rust desktop GIS (noted inline); close those as "won't do" with a reason rather than leaving them open.
Data formats & sources
GeoLibre: docs/data-formats.md, docs/features.md › Adding data, SQL and databases
- GeoPackage, GeoParquet, Shapefile (and KMZ) export (Export layers to GeoPackage, GeoParquet, Shapefile and KMZ #92): GeoLibre writes GeoJSON, GeoParquet, Shapefile, GeoPackage, CSV, KML and KMZ. RustGIS is partial: GeoJSON, CSV, FlatGeobuf, KML, GPX and WKT-CSV only (Next)
- Shapefile and GeoPackage in the web app (Open zipped Shapefiles, in the web app too #94, Open GeoPackages in the web app, with a pure-Rust SQLite reader #95): GeoLibre opens both in the browser (Shapefile as a ZIP). RustGIS was partial: desktop only (Next)
- Native KML/KMZ, GPX, GML, DXF/DWG, File Geodatabase, MapInfo and OSM PBF readers: GeoLibre's KML keeps styles, folders and GroundOverlays, its GPX splits into layers, and CAD/GDB get a layer picker. RustGIS is partial: KML/KMZ (styles and folders) and GPX (split into layers) are native and work on the web since Read KML, KMZ and GPX natively, styles included, in the web app too #97, and GML, MapInfo MIF/MID, OSM PBF and TopoJSON are native on the desktop and the web since Native GML, MapInfo MIF/MID, OSM PBF and TopoJSON readers #122. KML GroundOverlays are drawn as raster layers since KML ground overlays: pictures drawn as raster layers #123. DXF drawings are native on the desktop and the web since DXF drawings read natively, on the desktop and in the web app #159 (blocks, hatches, splines, text; a CAD layer picked with "layer"). Still missing: DWG and File Geodatabase open only through GDAL on the desktop
- Excel, LandXML, encoded polylines, GeoRSS: done in Spreadsheets, GeoRSS, LandXML and encoded polylines #118 (Excel/OpenDocument spreadsheets, GeoRSS, LandXML and encoded polylines, on the desktop and the web)
- Delimited text with a projected CRS or address geocoding: x/y columns in any coordinate system, WKT columns and any separator since Delimited text: x/y in any coordinate system, WKT columns, any separator #115; Find Place and address-table geocoding (Nominatim, Photon or your own server) since Geocoding: Find Place and address tables #127
- Remote vector and COG by URL: GeoLibre reads GeoJSON, GeoParquet, FlatGeobuf and COG over HTTP with range requests. Done: Add Data › From URL (
layer.addUrl, Add data by its web address: GeoJSON, CSV, GeoParquet, COG and more #116) adds any supported file by address, and cloud-optimised GeoTIFFs (Cloud-optimised GeoTIFFs by address, read in place by range #132), FlatGeobuf and GeoParquet (GeoParquet and FlatGeobuf by address, read in place by range #152) are read in place by HTTP range on the desktop and the web (a FlatGeobuf's index and the features in view, a GeoParquet's footer and the row groups in view), froms3://buckets too (S3 buckets: s3:// addresses, signed connections and a bucket browser #150) - PMTiles and MBTiles (PMTiles: raster and vector tile archives, by web address or file; a Supported Data Formats page #74, MBTiles: raster and vector tile sets, on the desktop and in the web app #113): raster and vector tile archives, on the desktop and in the web app
- Multidimensional rasters: Zarr/Icechunk, NetCDF-4/HDF5 and kerchunk, with variable and dimension pickers, hyperspectral RGB and a 3D image cube. RustGIS is partial: Zarr 2 and 3 stores (folders and web addresses, desktop and web) with variable and dimension pickers and CF dates since Zarr stores: a variable's map at a time step, by folder or address #147, and NetCDF/HDF variables through GDAL on the desktop since GDAL rasters: JPEG 2000, NetCDF, HDF, ERDAS Imagine, HGT and more #117. Still missing: native NetCDF-4/HDF5, kerchunk, Icechunk, sharded Zarr 3, time animation, hyperspectral RGB and the 3D cube
- GDAL raster formats beyond GeoTIFF and ASCII grid: done in GDAL rasters: JPEG 2000, NetCDF, HDF, ERDAS Imagine, HGT and more #117 (JPEG 2000, NetCDF/HDF subdatasets, ERDAS Imagine, HGT and every raster GDAL reads, on the desktop)
- OGC services: WFS, WMTS, WCS, OGC API Features/Tiles and CSW, with GetCapabilities discovery and auto-refresh. RustGIS is partial: Add Data › From Service… (Map and feature services: WMS, WMTS, WFS, OGC API Features, ArcGIS REST #120) reads WMS, WMTS, WFS and OGC API Features capabilities and adds their layers, besides XYZ/TMS, MVT and MapLibre styles. OGC API Tiles (map and vector tiles, by the advertised templates) since STAC links, Planetary Computer assets and OGC API Tiles #144. WCS coverages (1.0 and 2.0, as GeoTIFFs of the map's area) and CSW catalogue search (records with their service and download links) since Services: WCS coverages and CSW catalogue search #178. Still missing: auto-refresh
- ArcGIS services: FeatureServer, MapServer, ImageServer and VectorTileServer, with OAuth and a Portal browser. RustGIS is partial: FeatureServer, MapServer, ImageServer and VectorTileServer layers through From Service… since Map and feature services: WMS, WMTS, WFS, OGC API Features, ArcGIS REST #120 (a token in the address is carried); OAuth and a Portal browser are missing
- STAC browser and cloud catalogs: STAC, Planetary Computer, Earth Engine, Overture, Source Cooperative, NASA Earthdata, Planet and Hugging Face. RustGIS is partial: STAC Search (any STAC API, Earth Search by default: collections, items with footprints, assets added by address) since STAC search: collections, items with footprints, assets by address #128, Microsoft Planetary Computer with signed assets since STAC links, Planetary Computer assets and OGC API Tiles #144, and Overture Maps (a theme's files in view read in place, or the world as tiles) and Source Cooperative (products browsed, files added by address) since Overture Maps and Source Cooperative #158; Earth Engine, NASA Earthdata, Planet and Hugging Face are missing
- Open-data portal browsers: ArcGIS Hub, Socrata, CKAN, US government portals, geoBoundaries, the OSM Overpass downloader and Natural Earth. RustGIS is partial: the OSM Overpass downloader (presets and tag filters by area) and geoBoundaries (ADM0–ADM5) since Open data: OpenStreetMap by area (Overpass) and geoBoundaries #139, and four Natural Earth sample layers. Search Open Data for CKAN (data.gov and others), Socrata and ArcGIS Hub portals since Search Open Data: CKAN (data.gov), Socrata and ArcGIS Hub #176. More Natural Earth themes are missing
- Database connections: PostgreSQL/PostGIS, SQL Server/Azure SQL with write-back, Apache Iceberg. RustGIS is partial: PostgreSQL/PostGIS tables and SQL queries through DuckDB on the desktop since PostgreSQL/PostGIS databases through DuckDB #125 (read only); SQL Server, write-back and Iceberg are missing
- Spatial SQL workspace: DuckDB Spatial, PGlite/PostGIS or Sedona, with autocomplete, history and results to the map. Done in SQL pane: a DuckDB Spatial workspace #131 on the desktop: an SQL pane (DuckDB Spatial over files, DuckDB databases or PostgreSQL) with a row preview, completion of tables, columns and ST_ functions, a history, and Add to Map. The web app has no in-browser engine yet
- Private S3 buckets: saved connections (keys, profiles, SSO, IAM), an S3 browser and keychain-stored secrets. RustGIS is partial: since S3 buckets: s3:// addresses, signed connections and a bucket browser #150,
s3://addresses wherever data is added by address, SigV4-signed connections (keys, an~/.awsprofile or the environment; AWS and S3-compatible endpoints), saved connections without their secrets, and an S3 browser, on the desktop and the web. Still missing: SSO, IAM roles and keychain-stored secrets - 3D and media data: LiDAR (LAS/LAZ/COPC/EPT) as layers, 3D Tiles, I3S, Gaussian splats, placed glTF models, georeferenced video, geotagged photos, ICESat-2/GEDI. RustGIS is partial: LiDAR (LAS, LAZ and COPC) as point layers since LiDAR point clouds: LAS, LAZ and COPC as point layers #137, and geotagged photos (JPEGs with EXIF GPS as points, with thumbnails in the popup) since Geotagged photos: JPEGs with EXIF GPS as points with thumbnails #175; the rest is missing
- Browser / Data Source Manager: a tree of services, databases, favourites and recents, plus a service library. Done in Data Sources pane: favourites, recent, saved services and a library #157: a Data Sources pane with favourites, recent sources, folders, saved services, databases, S3 connections and STAC APIs, and a library of public services (secrets never kept); services and databases open their browser dialogs rather than expanding inline
- Data deep links (
?data=,?style=,?stac=):?data=,?style=and?tiles=since Web app links that carry data: ?data=, ?style=, ?tiles= #121,?stac=(an item or collection, opened in STAC Search) since STAC links, Planetary Computer assets and OGC API Tiles #144
Map rendering & 3D
GeoLibre: docs/features.md › Map workspace, Rendering engines and 3D globe; docs/*-renderer.md
- 3D terrain: exaggeration, keyless Terrarium tiles, a custom DEM/COG terrain source, Cesium World Terrain. RustGIS is partial: a globe and 2.5D extrusion (Next)
- Full 3D scene content: 3D Tiles, I3S, point clouds, splats, CZML time-dynamic scenes, true-Z vectors. RustGIS: missing (Next)
- MapLibre style fidelity: line labels and road shields, line patterns, hillshade and fill-extrusion in styles. RustGIS is partial
- Basemap catalog: OpenFreeMap, Protomaps, EOX S2 cloudless, regional basemaps, planetary bodies, thumbnail previews. RustGIS is partial: 5 offline basemaps, custom tile layers and a Basemaps plugin
- Multi-map grid: N synchronized panes. RustGIS is partial: Side by Side with two maps and linked views and cursors
- Coordinate grids and readouts: UTM and MGRS/USNG grids, UTM/MGRS/DDM readouts, grid-reference search, pointer elevation. RustGIS is partial: graticule, decimal/DMS and Go To XY
- Live data overlays: RainViewer radar, a Timelapse of annual cloudless imagery, live feeds (quakes, satellites, fires, AIS). RustGIS: missing
- Wikipedia cards, Street View/Mapillary, OpenAerialMap, historical imagery: RustGIS: missing
- On-map right-click menu with quick analysis: copy the coordinate, open it elsewhere, run a buffer, isochrone or viewshed from the point. RustGIS: missing
- Flight simulator, camera tours, atmosphere: RustGIS is partial: a First-Person walk and animation keyframes
-
Multiple rendering engines (MapLibre, Mapbox, Cesium, ArcGIS): likely out of scope by design; RustGIS has a single native renderer
Cartography & styling
GeoLibre: docs/features.md › Layers, styling, and labels; docs/user-guide/styling.md
- Layer groups: nested groups with group opacity and visibility, sort, ungroup. RustGIS: missing
- Rule-based and expression renderers: nested rules with scale ranges. RustGIS: missing (Display Filters are per-scale SQL only)
- Heatmap and point-clustering renderers: RustGIS is partial: hexagon/square aggregation (Next: heat maps)
- More classification methods: standard deviation, geometric interval, manual breaks. RustGIS is partial: Jenks, equal interval, quantile
- Symbol library: a marker library, custom SVG/PNG markers, fill patterns, pie/donut/bar diagrams, arrow lines, inverted-polygon masks, geometry generators. RustGIS is partial: 5 marker shapes
- Style interchange: import/export SLD, QGIS QML, Mapbox GL JSON. RustGIS is partial: MapLibre style export and
.rgisstyle - Smart styling: automatic palette on add, one-click style suggestions. RustGIS: missing
- Label engine depth: expression labels, offset, rotation, wrap, case, priority, de-duplication, number formats. RustGIS is partial: field labels with placement and scale ranges
- On-map legend and colorbar controls: RustGIS is partial: the legend is in Contents and layouts only
- Popup and tooltip designer: field picking, formats (date, link, image), an expression title, hover tooltips. RustGIS is partial: popup modes only
- Raster histogram stretch UI and Raster Attribute Table: RustGIS is partial: stretch types and DRA
- Colour-ramp library and style presets manager: RustGIS is partial
Attribute data & editing
GeoLibre: docs/features.md › Attribute data and expressions; docs/arcgis-editing.md
- Vertex editing: move, add and delete vertices. RustGIS: missing (Next)
- Topological digitizing and CAD dimensions: shared-edge drawing, dimension lines, building massing. RustGIS is partial: snapping, topology validation, traverse
- Write-back to sources: GeoPackage, GeoJSON, PostGIS, SQL Server, ArcGIS FeatureService. RustGIS: missing (edits stay in the project)
- Expression builder and engine: one engine shared by filters, labels, styles and Calculate Field, with a function reference. RustGIS is partial: Calculate Field is
field op field/number - Virtual fields and persistent attribute joins: RustGIS: missing (relationships exist)
- Attribute form designer: widgets, constraints, conditional visibility. RustGIS is partial: domains, subtypes, attribute rules
- Editor tracking fields: created/edited by and at. RustGIS is partial: Archiving keeps edit times
- Table column management: rename, hide and reorder columns, a column explorer. RustGIS is partial: sort, filter, add/delete field
- Quick filters: per-field checkboxes and range/date controls. RustGIS is partial: a definition query
- Selection gestures: polygon, freehand, radius. RustGIS is partial: click and box
- Charts panel and dashboards: histogram, scatter, bar, line, box and pie charts, indicators, cross-filtering. RustGIS is partial: Exploratory Analysis, Infographics, layout/report charts
Analysis
GeoLibre: docs/features.md › Processing and analysis; docs/user-guide/processing.md, model-builder.md, segmentation.md, obia.md
- Spatial join, intersect, union: RustGIS: missing as built-ins (Next)
- More built-in vector tools: attribute join, merge, extract vertices, points along lines, fix/check geometry, random extract, buffer options. RustGIS is partial
- Routing services: isochrones, service areas, OD matrix, multi-stop routing, turn-by-turn (Valhalla/OSRM). RustGIS is partial: shortest path over a line layer
- Geocoding: forward, batch and reverse, with multiple providers and a place search box. RustGIS is partial: a local locator built from a layer
- Spatial statistics: Emerging Hot Spot (Getis-Ord Gi*), composite score builder. RustGIS is partial: Suitability Modeler
- H3 and DGGS grids: H3, A5, DGGRID, DGGAL. RustGIS: missing
- AI segmentation and detection: SAM/SamGeo, ONNX/YOLO detection, OBIA with eCognition import. RustGIS is partial: pixel classification
- Visual Model Builder canvas: a node graph with validation and export to code. RustGIS is partial: step lists
- Re-run or copy history as code; batch runs over a folder: RustGIS is partial: History and models from history
- Viewshed from public terrain tiles (no DEM needed): RustGIS is partial: needs a loaded elevation raster
- Conversion: vector to PMTiles/GeoParquet, raster to COG. RustGIS is partial
- Time Slider: temporal vector, raster and Zarr layers, pixel time series. RustGIS: missing
- Point cloud annotation: ASPRS classes, 3D boxes. RustGIS: missing
- Hydrology and elevation downloaders: NLDI navigation, USGS 3DEP and LiDAR, a global DEM downloader. RustGIS: missing
Layouts & printing
GeoLibre: docs/features.md › Map tools, printing, and media; docs/user-guide/print-layout.md
- SVG layout export: RustGIS is partial: PDF and PNG
- Atlas along a line, page-filtered tables and charts, copy to clipboard: RustGIS is partial: per-feature map series
- Map and video recording: canvas recording, a marker along a line to MP4, camera tours. RustGIS is partial: keyframe PNG frames
- STL 3D export: RustGIS is partial: OBJ and glTF
Sharing, collaboration & publishing
GeoLibre: docs/collaboration.md, docs/server-api.md, docs/user-guide/embedding.md, projects.md, storymaps.md
- Real-time multi-user collaboration: live sessions, permissions, roster, chat. RustGIS: missing
- Review comments: anchored, threaded, resolvable. RustGIS: missing
- Share links, project gallery, accounts: roles, expiry, passwords, a server API. RustGIS: missing (Share As writes static files)
- Story maps: chapters that fly the live map, a presenter view, HTML export. RustGIS is partial: Presentations
- Embed API: a
postMessageprotocol, an npm client, viewer-only and map-only modes, deep links. RustGIS: missing - Import QGIS (
.qgs/.qgz) and ArcGIS Pro (.aprx/.mapx) projects: RustGIS: missing - Autosave, project history, crash recovery, snapshot compare: RustGIS is partial: undo and per-layer archive restore
- Startup preferences and shareable interface settings: RustGIS is partial: Pane Sets and ribbon/QAT customization
- Layer metadata with STAC Item export: RustGIS: missing
- Browser extension ("Open data in …"): RustGIS: missing
Scripting & integrations
GeoLibre: docs/python.md, docs/r.md, docs/notebook.md, docs/mcp.md, docs/plugin-api.md, docs/agent-skill.md
- Python package / Jupyter widget: two-way sync and a leafmap-style API. RustGIS: missing
- In-app Python console: RustGIS is partial: the "Python Window" runs command scripts, not Python
- Live notebook kernel: JupyterLite on the web, JupyterLab on the desktop, driving the live map. RustGIS is partial: built-in command notebooks with
.ipynbin and out - R package: RStudio, Quarto, Shiny,
sf. RustGIS: missing - MCP: drive the running desktop app: RustGIS is partial:
rustgis-cli mcp(MCP server: rustgis-cli mcp for AI agents, with the docs built in #75) works on its own in-memory project - MCP Apps interactive map preview: RustGIS is partial:
view_mapreturns a static PNG - A shipped agent skill (SKILL.md): RustGIS: missing
- Plugin API breadth: side and floating panels, menus, custom layers, map-click tools, assistant tools. RustGIS is partial: commands, tools and a ribbon tab
-
Python FastAPI / GeoPandas processing sidecar: likely out of scope for pure Rust
Platforms & distribution
GeoLibre: docs/android.md, ios.md, mac-app-store.md, downloads.md, self-hosting.md, deployment-capabilities.md, ui-profiles.md
- Android app: RustGIS: missing
- iOS/iPadOS app: RustGIS: missing
- Touch and responsive layout: RustGIS: missing
- Field data collection: forms, photos, GPS or tap placement. RustGIS: missing
- GPS: live position, track logs, digitizing from GPS, NMEA receivers. RustGIS: missing
- PWA and offline basemap tile pre-caching: RustGIS is partial: offline data areas with sync, no PWA
- Docker self-hosting image with runtime config: RustGIS is partial: the static web build
- Deployment capabilities, policies and UI profiles: restrict edit, add, run and export per deployment. RustGIS: missing
- Package-manager and store channels: winget, a Homebrew Cask, the Mac App Store. RustGIS is partial: Microsoft Store MSIX
- Windows code signing: RustGIS: missing (Windows builds are unsigned)
- Auto-update: RustGIS: missing
- Desktop network features: OS trust store, mTLS client certificates, network log, reloading files changed on disk. RustGIS: missing
AI
GeoLibre: docs/user-guide/ai-assistant.md, docs/features.md › AI, Python, and automation
- Voice commands and spoken answers: RustGIS: missing
- Provider profiles and per-feature providers; AWS Bedrock, Vercel AI Gateway: RustGIS is partial: one provider and model at a time
- AI-authored processing models: RustGIS: missing
Other
GeoLibre: docs/features.md › Platforms and interface; docs/i18n.md
- More languages and right-to-left layout: GeoLibre has 20 languages including Arabic, Persian and Hebrew. RustGIS is partial: 15 languages, no RTL
- Translated geoprocessing tool names: RustGIS: missing (possibly deliberate)
- Keyboard-shortcut cheat sheet: RustGIS is partial: Command Search exists
Already at or beyond parity (out of scope here)
- A native single-binary app, with every action a command shared by the ribbon, CLI, notebooks, models, the assistant and MCP
- Map projections on the main map (presets and projected EPSG codes)
- Reports: grouped, with statistics, charts and subreports
- Data design: domains, subtypes, attribute rules, contingent values, relationships, archiving, topology rules, traverse/COGO
- Large GeoPackage, GeoParquet and FlatGeobuf files streamed a view at a time
- Layouts: map frames, grids, extent indicators, map series to PDF
- Sandboxed WASM plugins with permissions and a hash-pinned registry, the same file on desktop, CLI and web
- AI Assistant with local models and per-command approval;
rustgis-cli ask; an MCP server with built-in docs - Imagery: mosaics, mensuration, pixel editor, a trainable classifier, hosted imagery tiles
- Offline areas with two-way sync of edited features
To verify
- Shapefile
.prjhandling: no CRS handling was found in the Shapefile reader, so projected Shapefiles may load unreprojected (needs a test) - Whether layer blend modes apply to vector layers
- Whether raster export writes valid COGs with overviews
- Accessibility compared with GeoLibre's axe-checked screens
- Whether offline areas or the tile cache pre-fetch basemap tiles
- Whether the shortcuts view is a full cheat sheet
- Some GeoLibre features above are taken from its docs and live in plugins or the Cesium engine only
Activity
Export layers to GeoPackage, GeoParquet, Shapefile and KMZ (#92)
Open zipped Shapefiles, in the web app too (#94)
Open GeoPackages in the web app, with a pure-Rust SQLite reader (#95)
Read KML, KMZ and GPX natively, styles included, in the web app too (#97
MBTiles: raster and vector tile sets, on the desktop and in the web a…
Delimited text: x/y in any coordinate system, WKT columns, any separator
Spreadsheets, GeoRSS, LandXML and encoded polylines
GDAL rasters: JPEG 2000, NetCDF, HDF, ERDAS Imagine, HGT and more
Add data by its web address: GeoJSON, CSV, GeoParquet, COG and more
Map and feature services: WMS, WMTS, WFS, OGC API Features, ArcGIS REST
Web app links that carry data: ?data=, ?style=, ?tiles=
Delimited text: x/y in any coordinate system, WKT columns, any separa…
Spreadsheets, GeoRSS, LandXML and encoded polylines
Native GML, MapInfo MIF/MID, OSM PBF and TopoJSON readers
GDAL rasters: JPEG 2000, NetCDF, HDF, ERDAS Imagine, HGT and more
Add data by its web address: GeoJSON, CSV, GeoParquet, COG and more
Map and feature services: WMS, WMTS, WFS, OGC API Features, ArcGIS REST
Web app links that carry data: ?data=, ?style=, ?tiles=
Add data by its web address: GeoJSON, CSV, GeoParquet, COG and more (#…
Map and feature services: WMS, WMTS, WFS, OGC API Features, ArcGIS REST
Web app links that carry data: ?data=, ?style=, ?tiles=
KML ground overlays: pictures drawn as raster layers
KML ground overlays: pictures drawn as raster layers (#123)
GeoParquet and FlatGeobuf by address, read in place by range
GeoParquet and FlatGeobuf by address, read in place by range (#152)
Search Open Data: CKAN (data.gov), Socrata and ArcGIS Hub (#176)
giswqs commentedon Oct 19, 2026
GeoLibre's Web Services menu is tracked in #528: a new Home › Web Data button, one alphabetical list of global services plus a submenu per country.