From 6a186f200113e902aabf411c1794fe7ac7ddcf7a Mon Sep 17 00:00:00 2001 From: Daniel Hofbauer Date: Fri, 23 Oct 2026 17:44:21 +0200 Subject: [PATCH 1/6] docs: rework the roadmap, move GeoLibre parity into the repo, add CONTRIBUTING.md The roadmap gets goals, an Underway list, releases 0.4-0.9 and an Exploratory list with linked issues and a last-reviewed date. The GeoLibre parity checklist from #77 moves to GEOLIBRE_PARITY.md, brought up to date, so anyone can tick items in the PR that lands them. CONTRIBUTING.md says what to pick freely and what to coordinate first. Refs #739 --- CONTRIBUTING.md | 46 +++++++ GEOLIBRE_PARITY.md | 309 +++++++++++++++++++++++++++++++++++++++++++++ ROADMAP.md | 184 ++++++++++++++++++++++++--- 3 files changed, 520 insertions(+), 19 deletions(-) create mode 100644 CONTRIBUTING.md create mode 100644 GEOLIBRE_PARITY.md diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..6245c56da --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,46 @@ +# Contributing to RustGIS + +Contributions are welcome. This page covers what to work on and how to propose it. For build, +test, docs and release mechanics see [docs/contributing.md](docs/contributing.md); for code +conventions see [AGENTS.md](AGENTS.md). + +## Most roadmap items have no issue + +[ROADMAP.md](ROADMAP.md) lists where RustGIS is heading. Only a few of its items link to an +issue; **most features have no issue yet**. Don't wait for one to appear before starting. If +something on the roadmap (or not on it) interests you, propose it and open a pull request. + +## How to contribute a feature + +1. **Check for an existing issue.** Search the + [issues](https://github.com/opengeos/RustGIS/issues) and the roadmap. If there is an issue, + comment on it to say you're taking it. +2. **Write a short proposal** if there is no issue. It covers: + - the problem or workflow it serves; + - what you plan to build: the commands it adds, where it sits in the ribbon, which formats or + tools are involved; + - which crates it touches and whether it adds a dependency; + - how you will test it. + + Put it in an issue with the + [feature request](https://github.com/opengeos/RustGIS/issues/new?template=feature_request.yml) + form, or in the description of a draft pull request. For changes that need coordination (see + below) use an issue and wait for a maintainer's reply; otherwise either works. +3. **Open a pull request.** Draft pull requests are welcome early, to get feedback on the + approach before the work is finished. Link the issue (`Closes #123`) and fill in the + [pull request template](.github/pull_request_template.md). Before it is ready for review, it + must meet the rules and quality gates in [AGENTS.md](AGENTS.md). + +## Pick freely or coordinate first + +- **Pick freely**: roadmap items marked _(open)_ are self-contained. Open a pull request directly, + with the proposal in its description; an issue is optional. +- **Coordinate first**: open a proposal issue and wait for a maintainer's reply before writing much + code if your change + - changes the data model (`Feature`, `Coord`, `Renderer`); + - adds a dependency or a crate; + - falls under _Exploratory_ in the roadmap. + +Roadmap releases are focuses, not dates; an item moves when it lands, whatever its release. A +pull request that lands a roadmap item, or an item of [GEOLIBRE_PARITY.md](GEOLIBRE_PARITY.md), +updates that file in the same change. diff --git a/GEOLIBRE_PARITY.md b/GEOLIBRE_PARITY.md new file mode 100644 index 000000000..e8e8cb570 --- /dev/null +++ b/GEOLIBRE_PARITY.md @@ -0,0 +1,309 @@ +# Feature parity with GeoLibre + +_Last reviewed: 2026-10-23 (v0.3.0)._ + +What [GeoLibre](https://github.com/opengeos/GeoLibre) v3.4.0 offers and where RustGIS stands: +**missing** or **partial**, or ticked when done. It moved here from [#77](https://github.com/opengeos/RustGIS/issues/77) so that anyone can keep it +current: **tick or update an item in the pull request that lands it**. Where an item is planned, +_Roadmap_ names its release in [ROADMAP.md](ROADMAP.md). The GeoLibre and Whitebox geoprocessing +suite RustGIS runs 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](ROADMAP.md), [docs/](docs/) and the command registry +(`crates/engine/src/cmd`). Some items may be out of scope for a pure-Rust GIS (noted inline); +strike those through with a reason rather than leaving them open. + +## Data formats & sources +_GeoLibre: docs/data-formats.md, docs/features.md › Adding data, SQL and databases_ + +- [x] **GeoPackage, GeoParquet, Shapefile (and KMZ) export** ([#92](https://github.com/opengeos/RustGIS/issues/92)): GeoLibre writes GeoJSON, + GeoParquet, Shapefile, GeoPackage, CSV, KML and KMZ; RustGIS writes all of them, plus + FlatGeobuf, GPX and WKT. +- [x] **Shapefile and GeoPackage in the web app** ([#94](https://github.com/opengeos/RustGIS/issues/94), [#95](https://github.com/opengeos/RustGIS/issues/95)). +- [ ] **Native KML/KMZ, GPX, GML, DXF/DWG, File Geodatabase, MapInfo and OSM PBF readers**: + partial. KML/KMZ (styles and folders) and GPX (split into layers) are native on the desktop and + the web since [#97](https://github.com/opengeos/RustGIS/issues/97); GML, MapInfo MIF/MID, OSM PBF and TopoJSON since [#122](https://github.com/opengeos/RustGIS/issues/122); KML GroundOverlays as + raster layers since [#123](https://github.com/opengeos/RustGIS/issues/123); DXF (blocks, hatches, splines, text; a CAD layer picked with + "layer") since [#159](https://github.com/opengeos/RustGIS/issues/159); Esri File Geodatabases without GDAL on the desktop (3D multipatches as + footprints). Still missing: DWG (GDAL only) and File Geodatabase in the web app. +- [x] **Excel, LandXML, encoded polylines, GeoRSS** ([#118](https://github.com/opengeos/RustGIS/issues/118)). +- [x] **Delimited text with a projected CRS or address geocoding**: x/y columns in any coordinate + system, WKT columns and any separator ([#115](https://github.com/opengeos/RustGIS/issues/115)); Find Place and address-table geocoding ([#127](https://github.com/opengeos/RustGIS/issues/127)). +- [x] **Remote vector and COG by URL**: Add Data › From URL ([#116](https://github.com/opengeos/RustGIS/issues/116)); COGs ([#132](https://github.com/opengeos/RustGIS/issues/132)), FlatGeobuf and + GeoParquet ([#152](https://github.com/opengeos/RustGIS/issues/152)) read in place by HTTP range on the desktop and the web, from `s3://` too + ([#150](https://github.com/opengeos/RustGIS/issues/150)). +- [x] **PMTiles and MBTiles** ([#74](https://github.com/opengeos/RustGIS/issues/74), [#113](https://github.com/opengeos/RustGIS/issues/113)): raster and vector archives, desktop and web. +- [ ] **Multidimensional rasters**: Zarr/Icechunk, NetCDF-4/HDF5 and kerchunk, with variable and + dimension pickers, hyperspectral RGB and a 3D image cube. Partial: Zarr 2 and 3 stores with + variable and dimension pickers and CF dates ([#147](https://github.com/opengeos/RustGIS/issues/147)), NetCDF/HDF variables through GDAL on the + desktop ([#117](https://github.com/opengeos/RustGIS/issues/117)), data cubes on the time slider with trends. Still missing: native + NetCDF-4/HDF5 ([#396](https://github.com/opengeos/RustGIS/issues/396), _Exploratory_), kerchunk, Icechunk, sharded Zarr 3, hyperspectral RGB and + the 3D cube. +- [x] **GDAL raster formats beyond GeoTIFF and ASCII grid** ([#117](https://github.com/opengeos/RustGIS/issues/117), desktop). +- [ ] **OGC services**: partial. WMS, WMTS, WFS and OGC API Features from their capabilities + ([#120](https://github.com/opengeos/RustGIS/issues/120)), OGC API Tiles ([#144](https://github.com/opengeos/RustGIS/issues/144)), WCS and CSW ([#178](https://github.com/opengeos/RustGIS/issues/178)). Still missing: auto-refresh (_Roadmap: any + time_). +- [ ] **ArcGIS services**: FeatureServer, MapServer, ImageServer and VectorTileServer, with OAuth + and a Portal browser. Partial: the four layer types through From Service… ([#120](https://github.com/opengeos/RustGIS/issues/120)), a token in + the address carried. Missing: OAuth and a Portal browser (_Roadmap: 0.7_). +- [ ] **STAC browser and cloud catalogs**: STAC, Planetary Computer, Earth Engine, Overture, + Source Cooperative, NASA Earthdata, Planet and Hugging Face. Partial: STAC Search ([#128](https://github.com/opengeos/RustGIS/issues/128)), + Planetary Computer with signed assets ([#144](https://github.com/opengeos/RustGIS/issues/144)), Overture Maps and Source Cooperative ([#158](https://github.com/opengeos/RustGIS/issues/158)), NASA + Earthdata (desktop) and Hugging Face. Missing: Earth Engine and Planet. +- [ ] **Open-data portal browsers**: partial. Overpass and geoBoundaries ([#139](https://github.com/opengeos/RustGIS/issues/139)), CKAN, Socrata and + ArcGIS Hub ([#176](https://github.com/opengeos/RustGIS/issues/176)), four Natural Earth sample layers. Missing: more Natural Earth themes; a Web + Data menu of global and per-country services ([#528](https://github.com/opengeos/RustGIS/issues/528)). +- [ ] **Database connections**: PostgreSQL/PostGIS, SQL Server/Azure SQL with write-back, Apache + Iceberg. Partial: PostGIS ([#125](https://github.com/opengeos/RustGIS/issues/125)), MySQL, MariaDB and SQL Server tables read live on the desktop. + Missing: write-back (_Roadmap: 0.7_) and Iceberg. +- [x] **Spatial SQL workspace** ([#131](https://github.com/opengeos/RustGIS/issues/131)): an SQL pane over DuckDB Spatial on the desktop. The web app + has no in-browser engine yet (_Exploratory_). +- [ ] **Private S3 buckets**: partial. `s3://` addresses, SigV4-signed connections, saved + connections without their secrets and an S3 browser, desktop and web ([#150](https://github.com/opengeos/RustGIS/issues/150)). Missing: SSO, IAM + roles and secrets kept in the keychain (_Roadmap: 0.5_). +- [ ] **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. Partial: LAS, LAZ and + COPC as point layers ([#137](https://github.com/opengeos/RustGIS/issues/137)), geotagged photos with thumbnails ([#175](https://github.com/opengeos/RustGIS/issues/175)); the rest is missing. +- [x] **Browser / Data Source Manager** ([#157](https://github.com/opengeos/RustGIS/issues/157)): a Data Sources pane with favourites, recents, + folders, saved services, databases, S3 connections, STAC APIs and a library of public services. +- [x] **Data deep links** (`?data=`, `?style=`, `?tiles=` in [#121](https://github.com/opengeos/RustGIS/issues/121), `?stac=` in [#144](https://github.com/opengeos/RustGIS/issues/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. Partial: a globe, 2.5D extrusion, and tilt, rotation and terrain (from a + DEM or elevation tiles, [#395](https://github.com/opengeos/RustGIS/issues/395)) in the GPU map. +- [ ] **Full 3D scene content**: 3D Tiles, I3S, point clouds, splats, CZML time-dynamic scenes, + true-Z vectors. Missing (_Roadmap: 0.9_, [#726](https://github.com/opengeos/RustGIS/issues/726)). +- [ ] **MapLibre style fidelity**: line labels and road shields, line patterns, hillshade and + fill-extrusion in styles. Partial; vector tiles and labels on the GPU map are underway ([#635](https://github.com/opengeos/RustGIS/issues/635), + [#596](https://github.com/opengeos/RustGIS/issues/596)). +- [ ] **Basemap catalog**: OpenFreeMap, Protomaps, EOX S2 cloudless, regional basemaps, planetary + bodies, thumbnail previews. Partial: a basemap gallery (OpenFreeMap, USGS Imagery), custom tile + layers and a Basemaps plugin. +- [ ] **Multi-map grid**: N synchronized panes. Partial: Side by Side with two maps and linked + views and cursors (_Roadmap: any time_). +- [ ] **Coordinate grids and readouts**: UTM and MGRS/USNG grids, UTM/MGRS/DDM readouts, + grid-reference search, pointer elevation. Partial: graticule, decimal/DMS and Go To XY + (_Roadmap: any time_). +- [ ] **Live data overlays**: RainViewer radar, a Timelapse of annual cloudless imagery, live feeds + (quakes, satellites, fires, AIS). Missing. +- [ ] **Wikipedia cards, Street View/Mapillary, OpenAerialMap, historical imagery**. Missing. +- [ ] **On-map right-click menu with quick analysis**: copy the coordinate, open it elsewhere, run + a buffer, isochrone or viewshed from the point. Missing (_Roadmap: any time_). +- [ ] **Flight simulator, camera tours, atmosphere**. Partial: a First-Person walk and animation + keyframes. +- [ ] ~~Multiple rendering engines (MapLibre, Mapbox, Cesium, ArcGIS)~~: out of scope by design; + RustGIS has its own renderer. + +## Cartography & styling +_GeoLibre: docs/features.md › Layers, styling, and labels; docs/user-guide/styling.md_ + +- [x] **Layer groups**. +- [ ] **Rule-based and expression renderers**: nested rules with scale ranges. Missing; display + filters are per-scale SQL only (_Roadmap: 0.6_). +- [ ] **Heatmap and point-clustering renderers**. Partial: hexagon/square aggregation (_Roadmap: + 0.6_). +- [ ] **More classification methods**: standard deviation, geometric interval, manual breaks. + Partial: Jenks, equal interval, quantile (_Roadmap: 0.4_). +- [ ] **Symbol library**: a marker library, custom SVG/PNG markers, fill patterns, pie/donut/bar + diagrams, arrow lines, inverted-polygon masks, geometry generators. Partial: 5 marker shapes + (_Roadmap: 0.6_ for markers, patterns and a library). +- [ ] **Style interchange**: import/export SLD, QGIS QML, Mapbox GL JSON. Partial: MapLibre style + export and `.rgisstyle` (_Roadmap: 0.6_ for QML and SLD import). +- [ ] **Smart styling**: automatic palette on add, one-click style suggestions. Missing. +- [ ] **Label engine depth**: expression labels, offset, rotation, wrap, case, priority, + de-duplication, number formats. Partial: label classes with SQL queries, field labels with + placement and scale ranges; a labeling pane is underway ([#618](https://github.com/opengeos/RustGIS/issues/618), [#722](https://github.com/opengeos/RustGIS/issues/722)). Expression labels: + _Roadmap: 0.6_. +- [ ] **On-map legend and colorbar controls**. Partial: the legend is in Contents and layouts only + (_Roadmap: 0.6_). +- [ ] **Popup and tooltip designer**: field picking, formats (date, link, image), an expression + title, hover tooltips. Partial: popup modes only (_Roadmap: 0.6_). +- [ ] **Raster histogram stretch UI and Raster Attribute Table**. Partial: stretch types and DRA + (_Roadmap: 0.6_). +- [ ] **Colour-ramp library and style presets manager**. Partial: custom colour ramps and QGIS, + GDAL and GMT palette files. + +## Attribute data & editing +_GeoLibre: docs/features.md › Attribute data and expressions; docs/arcgis-editing.md_ + +- [x] **Vertex editing**: move, add and delete vertices. +- [ ] **Topological digitizing and CAD dimensions**: shared-edge drawing, dimension lines, + building massing. Partial: snapping, topology validation, traverse. +- [ ] **Write-back to sources**: GeoPackage, GeoJSON, PostGIS, SQL Server, ArcGIS FeatureService. + Missing; edits stay in the project (_Roadmap: 0.7_ for GeoPackage and PostGIS). +- [ ] **Expression builder and engine**: one engine shared by filters, labels, styles and Calculate + Field, with a function reference. Partial: Calculate Field is `field op field/number` + (_Roadmap: 0.6_). +- [ ] **Virtual fields and persistent attribute joins**. Missing; relationships exist (_Roadmap: + 0.7_; a one-off join field tool in 0.5). +- [ ] **Attribute form designer**: widgets, constraints, conditional visibility. Partial: domains, + subtypes, attribute rules (_Roadmap: 0.7_). +- [ ] **Editor tracking fields**: created/edited by and at. Partial: archiving keeps edit times + (_Roadmap: 0.7_). +- [ ] **Table column management**: rename, hide and reorder columns, a column explorer. Partial: + sort, filter, add/delete field (_Roadmap: 0.7_). +- [ ] **Quick filters**: per-field checkboxes and range/date controls. Partial: a definition query + (_Roadmap: 0.6_). +- [ ] **Selection gestures**: polygon, freehand, radius. Partial: click and box; Neighborhood + Explorer selects by radius (_Roadmap: 0.4_). +- [ ] **Charts panel and dashboards**: histogram, scatter, bar, line, box and pie charts, + indicators, cross-filtering. Partial: Exploratory Analysis, Infographics, layout/report charts + (_Roadmap: 0.8_ for charts linked to the selection). + +## Analysis +_GeoLibre: docs/features.md › Processing and analysis; docs/user-guide/processing.md, +model-builder.md, segmentation.md, obia.md_ + +- [ ] **Spatial join, intersect, union**. Partial: spatial join, clip and erase are built in; + intersect, union, identity and near are missing (_Roadmap: 0.5_). +- [ ] **More built-in vector tools**: attribute join, merge, extract vertices, points along lines, + fix/check geometry, random extract, buffer options. Partial (_Roadmap: 0.5_). +- [ ] **Routing services**: isochrones, service areas, OD matrix, multi-stop routing, + turn-by-turn (Valhalla/OSRM). Partial: shortest path over a line layer (_Roadmap: 0.8_). +- [ ] **Geocoding**: forward, batch and reverse, with multiple providers and a place search box. + Partial: Find Place and address tables (Nominatim, Photon or your own server), a local locator, + a search box. Missing: reverse geocoding (_Roadmap: 0.8_). +- [ ] **Spatial statistics**: Emerging Hot Spot (Getis-Ord Gi\*), composite score builder. + Partial: Suitability Modeler (_Roadmap: 0.8_ for hot spots). +- [ ] **H3 and DGGS grids**: H3, A5, DGGRID, DGGAL. Partial: A5 grids (_Roadmap: any time_ for + H3). +- [ ] **AI segmentation and detection**: SAM/SamGeo, ONNX/YOLO detection, OBIA with eCognition + import. Partial: pixel classification (_Exploratory_). +- [ ] **Visual Model Builder canvas**: a node graph with validation and export to code. Partial: + ModelBuilder with a node canvas and models from history. +- [ ] **Re-run or copy history as code; batch runs over a folder**. Partial: history copied as + code; batch runs are missing (_Roadmap: 0.5_). +- [ ] **Viewshed from public terrain tiles (no DEM needed)**. Partial: needs a loaded elevation + raster (_Roadmap: 0.8_ for a DEM downloader). +- [ ] **Conversion**: vector to PMTiles/GeoParquet, raster to COG. Partial: GeoParquet and COG + out; vector to PMTiles is missing (_Roadmap: any time_, [#557](https://github.com/opengeos/RustGIS/issues/557)). +- [x] **Time Slider**: vector layers by a date field (`time.bind`), data cubes, trends (Sen's + slope, Mann–Kendall), GIF export. +- [ ] **Point cloud annotation**: ASPRS classes, 3D boxes. Missing. +- [ ] **Hydrology and elevation downloaders**: NLDI navigation, USGS 3DEP and LiDAR, a global DEM + downloader. Missing (_Roadmap: 0.8_ for a DEM downloader). + +## Layouts & printing +_GeoLibre: docs/features.md › Map tools, printing, and media; docs/user-guide/print-layout.md_ + +- [ ] **SVG layout export**. Partial: PDF and PNG (_Roadmap: any time_). +- [ ] **Atlas along a line, page-filtered tables and charts, copy to clipboard**. Partial: + per-feature map series (_Roadmap: any time_ for the clipboard). +- [ ] **Map and video recording**: canvas recording, a marker along a line to MP4, camera tours. + Partial: keyframe PNG frames, time slider GIFs. +- [ ] **STL 3D export**. Partial: OBJ and glTF (_Roadmap: any time_). + +## 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. Missing + (_Exploratory_). +- [ ] **Review comments**: anchored, threaded, resolvable. Missing (_Exploratory_). +- [ ] **Share links, project gallery, accounts**: roles, expiry, passwords, a server API. Missing; + Share As writes static files (_Exploratory_). +- [ ] **Story maps**: chapters that fly the live map, a presenter view, HTML export. Partial: + Presentations. +- [ ] **Embed API**: a `postMessage` protocol, an npm client, viewer-only and map-only modes, deep + links. Partial: the web app embeddable with `?embed`, exchanging the project through + `postMessage` (`apps/rustgis-web/src/embed.rs`); no npm client. +- [ ] **Import QGIS (`.qgs/.qgz`) and ArcGIS Pro (`.aprx/.mapx`) projects**. Missing + (_Exploratory_). +- [ ] **Autosave, project history, crash recovery, snapshot compare**. Partial: undo and per-layer + archive restore (_Roadmap: 0.5_ for autosave and crash recovery). +- [ ] **Startup preferences and shareable interface settings**. Partial: start-up preferences, + Pane Sets and ribbon/QAT customization. +- [ ] **Layer metadata with STAC Item export**. Missing (_Roadmap: 0.7_). +- [ ] **Browser extension ("Open data in …")**. Missing. + +## Scripting & integrations +_GeoLibre: docs/python.md, docs/r.md, docs/notebook.md, docs/mcp.md, docs/plugin-api.md, +docs/agent-skill.md_ + +- [x] **Python package / Jupyter widget**: the `rustgis` package on PyPI runs the engine + in-process, and `rustgis.Map` is a two-way Jupyter widget (anywidget). No leafmap-style API. +- [ ] **In-app Python console**. Partial: the "Python Window" runs command scripts, not Python + (_Exploratory_). +- [ ] **Live notebook kernel**: JupyterLite on the web, JupyterLab on the desktop, driving the live + map. Partial: built-in command notebooks with `.ipynb` in and out. +- [ ] **R package**: RStudio, Quarto, Shiny, `sf`. Missing (_Exploratory_). +- [x] **MCP: drive the running desktop app**: the loopback relay lets external AI clients drive the + app; `rustgis-cli mcp` ([#75](https://github.com/opengeos/RustGIS/issues/75)) runs on its own project. +- [ ] **MCP Apps interactive map preview**. Partial: `view_map` returns a static PNG. +- [x] **A shipped agent skill (SKILL.md)**: [skills/rustgis](skills/rustgis/SKILL.md) installs and + manages the app; the assistant has built-in skills too. +- [ ] **Plugin API breadth**: side and floating panels, menus, custom layers, map-click tools, + assistant tools. Partial: commands, tools, a ribbon tab, assistant skills, process plugins. +- [ ] ~~Python FastAPI / GeoPandas processing sidecar~~: out of scope for pure Rust; process + plugins can run Python. + +## 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**. Missing (_Exploratory_). +- [ ] **iOS/iPadOS app**. Missing (_Exploratory_). +- [ ] **Touch and responsive layout**. Missing (_Exploratory_). +- [ ] **Field data collection**: forms, photos, GPS or tap placement. Missing (_Exploratory_, + [#665](https://github.com/opengeos/RustGIS/issues/665)). +- [ ] **GPS**: live position, track logs, digitizing from GPS, NMEA receivers. Missing + (_Exploratory_). +- [ ] **PWA and offline basemap tile pre-caching**. Partial: the web app is installable with + offline start; offline data areas with sync. Tile pre-caching unverified. +- [ ] **Docker self-hosting image with runtime config**. Partial: the static web build (_Roadmap: + any time_). +- [ ] **Deployment capabilities, policies and UI profiles**: restrict edit, add, run and export per + deployment. Missing. +- [ ] **Package-manager and store channels**: winget, a Homebrew Cask, the Mac App Store. Partial: + winget, Homebrew, the AUR, Fedora COPR and the Microsoft Store; the Mac App Store is missing. +- [ ] **Windows code signing**. Missing (_Roadmap: 0.5_). +- [ ] **Auto-update**. Partial: Check for Updates (_Roadmap: 0.5_ for in-place updates). +- [ ] **Desktop network features**: OS trust store, mTLS client certificates, network log, + reloading files changed on disk. Missing (_Roadmap: 0.5_ for reloading files). + +## AI +_GeoLibre: docs/user-guide/ai-assistant.md, docs/features.md › AI, Python, and automation_ + +- [ ] **Voice commands and spoken answers**. Missing. +- [ ] **Provider profiles and per-feature providers; AWS Bedrock, Vercel AI Gateway**. Partial: + one provider and model at a time. +- [ ] **AI-authored processing models**. 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. Partial: 17 languages; Persian text is drawn right to left, while the panes + keep their left-to-right layout. +- [ ] **Translated geoprocessing tool names**. Missing (possibly deliberate). +- [ ] **Keyboard-shortcut cheat sheet**. Partial: Command Search; rebindable shortcuts are on the + roadmap (_any time_, [#562](https://github.com/opengeos/RustGIS/issues/562)). + +## Already at or beyond parity +- 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 and publication sheets 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 +- Whether raster export writes valid COGs with overviews +- GeoLibre's language count: [#77](https://github.com/opengeos/RustGIS/issues/77) said 20, + `docs/comparison/geolibre.md` says 21 +- 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 diff --git a/ROADMAP.md b/ROADMAP.md index 732506709..f018e5968 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -1,44 +1,195 @@ # Roadmap -Many features are first versions: there are no full 3D scenes or enterprise portal sharing yet. +_Last reviewed: 2026-10-23 (v0.3.0). Reviewed weekly; if this date is old, trust the linked issues +over this page._ + +This page says where RustGIS is heading and where help is most useful. Details live in the linked +issues; feature-by-feature comparison with GeoLibre is tracked in +[GEOLIBRE_PARITY.md](GEOLIBRE_PARITY.md). + +## Goals +- **What exists works.** A feature that crashes, misreads data or is undocumented costs more + than a missing one. Robustness and correct coordinates come before breadth. +- **Finish the everyday workflow first.** Add data, style it, edit it, analyse it, print or share + it: depth in these beats a long list of first versions. +- **Foundations before features.** Build the shared piece once (an expression engine, a secret + store, Z coordinates) and let several features stand on it. +- **One program everywhere.** Desktop, browser, CLI, Python and AI agents share the same commands; + nothing below `apps/` breaks the WebAssembly build. + +## Contributing +Most items below have no issue yet: propose one and open a pull request. See +[CONTRIBUTING.md](CONTRIBUTING.md) for which items to pick freely, which to coordinate first, and +how to write a proposal. Releases below are focuses, not dates; an item moves when it lands, +whatever its release. + +## Underway +- GPU map: vector tiles and labels on the GPU tile layer + ([#635](https://github.com/opengeos/RustGIS/issues/635), + [#596](https://github.com/opengeos/RustGIS/issues/596)). +- Labeling pane: label classes managed in the pane, query editor, more options + ([#618](https://github.com/opengeos/RustGIS/issues/618), + [#722](https://github.com/opengeos/RustGIS/issues/722)). +- Georeferencer: side-by-side window, transform picker, more formats + ([#609](https://github.com/opengeos/RustGIS/issues/609)). +- Script pane: completion of values such as layer and field names + ([#662](https://github.com/opengeos/RustGIS/issues/662)). +- Connection manager for databases and web services + ([#699](https://github.com/opengeos/RustGIS/issues/699)). +- Zonal statistics as a built-in tool ([#718](https://github.com/opengeos/RustGIS/pull/718)). + +## Next + +### 0.4: An update soon +The bugs users hit, the docs and a few quick wins, plus whatever from Underway lands in time; +released soon, not held for the rest. +- Robustness: the Windows 11 start-up failure + ([#375](https://github.com/opengeos/RustGIS/issues/375)), Control-click menus on macOS + ([#707](https://github.com/opengeos/RustGIS/issues/707)), Load Off-Map Data + ([#661](https://github.com/opengeos/RustGIS/issues/661)). +- A pass over the user guide, the comparison pages and the README against what the app does + today (vertex editing, spatial join and kriging are listed as missing or undocumented; some + pages still say 16 languages). +- Styling: a "No fill" button for polygons + ([#644](https://github.com/opengeos/RustGIS/issues/644); a transparent fill works today) + _(open)_; standard deviation, geometric interval and manual breaks _(open)_. +- Selection by polygon and lasso, and a radius tool on the map (Neighborhood Explorer already + selects by radius) _(open)_. + +### 0.5: Solid ground +Correct, robust and recoverable, with the foundations later releases stand on. +- Correct coordinates: grid datum shifts (NTv2 and GeoTIFF grids) for NAD27, NAD83(HARN), + GDA94↔GDA2020 and OSGB36, and a notice whenever a layer is read without its shift; GDA94 + ([#730](https://github.com/opengeos/RustGIS/issues/730)) is one case. _Coordinate first._ +- Reloading files changed on disk. +- Autosave and crash recovery: reopen unsaved work after a crash. +- Signed Windows builds (no SmartScreen warning), then in-place updates. +- A secret store in the OS keychain for database, S3 and service connections (they are kept for + the session only today). +- Overlay tools beside Clip and Erase: intersect, union, identity and near _(open)_. +- Vector tools, each writing a new layer: join field (a one-off attribute join), merge (append + layers), extract vertices, points along lines, check and fix geometry _(open)_. +- Batch runs: one tool over many layers or a folder of files. + +### 0.6: Expressions and cartography +One expression engine, a superset of today's SQL where clause so existing definition queries, +label-class queries and display filters keep working. It replaces the three parsers of today +(where clauses, Calculate Field, attribute rules) and serves Calculate Field, attribute rules, +labels, definition queries, display filters, pop-ups and symbol properties. On top of it: +- Calculate Field with functions, not only `field op value`. +- Expression labels, with offset, rotation, wrapping, case, priority, number formats and halo + colour/width. +- Data-defined symbol size, colour and rotation. +- Rule-based renderer: ordered rules with an expression, symbol and scale range. +- Quick filters in the attribute table; pop-up templates (chosen fields, formats for dates, links + and images, a title). + +And alongside it: +- Kernel density (heat map) as a tool and as a renderer; point clustering. +- SVG and PNG markers, fill patterns and a symbol library. +- A legend and colour bar on the map. +- Style import: QGIS QML and SLD styles applied to layers. +- A histogram for raster stretches; raster attribute tables. + +### 0.7: Data at the source +- Write edits back to GeoPackage and PostGIS (edits stay in the project today). _Coordinate + first._ +- Editor tracking fields (created/edited by and at). +- Attribute table columns: rename, hide and reorder _(open)_. +- Persistent attribute joins and virtual fields. _Coordinate first_ (they change `Feature`). +- Attribute forms: widgets, constraints and conditional visibility, on top of domains and + subtypes. +- Layer metadata, exported as STAC items. +- ArcGIS sign-in (OAuth) and a Portal browser, on the 0.5 secret store. + +### 0.8: Analysis +- Routing: isochrones, service areas and an origin–destination matrix (today shortest path over + a line layer). +- Hot-spot statistics (Getis-Ord Gi\*), and emerging hot spots on the time slider. +- Charts linked to the selection: histogram, scatter, bar and box plots of a layer's fields. +- Reverse geocoding; a DEM downloader so viewshed works without a loaded elevation raster + _(open)_. + +### 0.9: 3D scenes, first steps +- Phases 1–2 of [#726](https://github.com/opengeos/RustGIS/issues/726): Z coordinates kept from + the data and written back; a scene with a free camera and each layer's elevation mode (on the + ground, relative, absolute). +- LiDAR point layers (LAS/LAZ/COPC, read today as points) drawn at their heights in the scene. +- 3D objects and 3D Tiles follow. + +### Self-contained, any time _(open)_ +Built in means no runner download, the selection honoured, geodesic distances and attributes +kept. Before adding a tool, check whether the GeoLibre suite already has it (`gp.tools`); a +built-in version must justify itself on one of those. +- SVG layout export; STL export; copy a layout to the clipboard. +- UTM and MGRS grids and coordinate readouts. +- H3 grids built in, next to the A5 grids (the GeoLibre suite has H3 tools only when its runner + is installed). +- An on-map right-click menu: copy the coordinate, run a buffer or viewshed from the point. +- More than two synced maps side by side. +- Auto-refresh for web service layers. +- Vector to PMTiles export: the PMTiles writer and MVT encoder in `rustgis-tiles` exist but are + only used by tests ([#557](https://github.com/opengeos/RustGIS/issues/557)). +- A catalog of data cubes for the time slider + ([#683](https://github.com/opengeos/RustGIS/issues/683)). +- A Dockerfile for self-hosting the web app. +- Rebindable keyboard shortcuts ([#562](https://github.com/opengeos/RustGIS/issues/562)). + +## Exploratory +Open questions rather than plans; discuss before building. +- Layers kept in their own coordinate system rather than WGS 84. +- Integrating [opengeos/terrio](https://github.com/opengeos/terrio), the pure-Rust raster, vector and point cloud I/O library: which of its drivers, coordinate transformations and GDAL-style operations could back or replace RustGIS's own readers, or stand in for the GDAL program, and which of them build for the web app. +- Collaboration: shared projects, review comments, accounts and a server. +- Mobile and field work: touch layout, GPS, data collection, QFieldCloud + ([#665](https://github.com/opengeos/RustGIS/issues/665)). +- Native NetCDF-4/HDF5 without GDAL ([#396](https://github.com/opengeos/RustGIS/issues/396)), + kerchunk and Icechunk. +- An SQL engine in the web app. +- Planetary coordinate systems ([#223](https://github.com/opengeos/RustGIS/issues/223)). +- Opening QGIS and ArcGIS Pro projects. +- An in-app Python console; an R package. +- AI segmentation and detection (SAM, ONNX models). ## Done - Layered workspace, command registry with undo, project files (`.rgis`), `rustgis-cli`, the web app (WebAssembly, installable with offline start, opened with a project or data by its - web address), 15 interface languages; a ribbon laid out in the order of the work + web address), 17 interface languages; a ribbon laid out in the order of the work (Home, Data, Style, Edit, Analyze, View, Publish), start-up preferences, Check for Updates. - Data: files by their web address; GeoJSON, CSV/TSV (x/y in any EPSG system, or WKT), Excel and OpenDocument spreadsheets, GeoRSS, LandXML, encoded polylines, Shapefile (zipped too, with the coordinate system in its `.prj`), GeoPackage, GeoParquet, FlatGeobuf, KML/KMZ (styles included), GPX, GML, MapInfo MIF, OSM PBF, TopoJSON, DXF and LiDAR (LAS/LAZ/COPC) in, all of them in the web app too (large files read in place, a view at a time); Esri File Geodatabases without GDAL (desktop; 3D multipatches - as footprints with their heights); the vector formats GDAL reads when it is installed, PostGIS, MySQL and MariaDB tables read live (desktop), and SQL queries + as footprints with their heights); the vector formats GDAL reads when it is installed, PostGIS, MySQL, MariaDB and SQL Server tables read live (desktop), and SQL queries and DuckDB databases (DuckDB Spatial) when DuckDB is; GeoJSON, CSV, GeoPackage, GeoParquet, Shapefile, FlatGeobuf, KML/KMZ, GPX and WKT out; standalone tables; geotagged photos and KML ground overlays; geocoding (Find Place, address tables); a Data Sources pane (favourites, recent, saved services, a library) and an SQL pane (DuckDB Spatial); layer, map, style, template, task and package files. -- Open data: STAC search (Planetary Computer assets), Overture Maps, Source Cooperative, +- Open data: STAC search (Planetary Computer assets), NASA Earthdata (desktop), Hugging Face, Overture Maps, Source Cooperative, OpenStreetMap by area (Overpass), geoBoundaries, CKAN, Socrata and ArcGIS Hub portals, and S3 buckets with signed connections and a bucket browser. - Rasters: GeoTIFF/COG (by web address, read in place by range; Zstandard too) and ASCII grids, Zarr 2 and 3 stores (a variable's step, by folder or web address), and JPEG 2000, NetCDF, HDF, ERDAS Imagine… through GDAL, EPSG reprojection, stretch/RGB/classified/shaded-relief - symbology, raster functions, indices, change detection, classification, georeferencing. + symbology, raster functions, indices, change detection, classification, georeferencing; + cloud-optimised GeoTIFFs out; data cubes on a time slider, with trends (Sen's slope, Mann–Kendall). - Services: WMS, WMTS, WFS, WCS, OGC API Features and Tiles, and ArcGIS REST, listed from their capabilities; CSW catalogue search. -- Maps: multiple maps, a GPU renderer (beta) with smooth zoom and pan, a 3D globe with the flat +- Maps: multiple maps, a GPU renderer (beta) with smooth zoom and pan, tilt, rotation and terrain, a 3D globe with the flat map draped over it, projection presets and EPSG codes (features cut along the edge of world projections), a search box for layers, places and coordinates, bookmarks, web tile layers (XYZ/TMS/WMS, Mapbox Vector Tiles, MapLibre styles, PMTiles and MBTiles archives), a basemap gallery (OpenFreeMap, USGS Imagery), worldviews. -- Cartography: single, unique values, graduated colours and proportional symbols; labels with - placement and annotation; custom colour ramps (and QGIS, GDAL and GMT palette files); - masking, display filters, aggregation, extrusion; graphics. -- Editing: create, move, rotate, scale, merge, split, explode; snapping, templates, elevation, +- Cartography: single, unique values, graduated colours and proportional symbols; layer groups; + label classes with SQL queries, placement and annotation; custom colour ramps (and QGIS, GDAL + and GMT palette files); masking, display filters, blend modes, aggregation, extrusion; graphics. +- Editing: create, move, rotate, scale, merge, split, explode, vertex editing; snapping, templates, elevation, topology; domains, subtypes, attribute rules, contingent values, relationships, archiving. -- Analysis: selection by attributes and location; overlay, proximity and summary tools; guided - workflows (viewshed, line of sight, IDW, shortest path, suitability); ModelBuilder and - scripts; the GeoLibre and Whitebox suite (1,000+ tools) natively and in the browser. -- Layouts (map frames, surrounds, map series, PDF), reports, presentations and notebooks. +- Analysis: selection by attributes and location; overlay (clip, erase), proximity (buffer) and summary tools, spatial + join, A5 grids, kriging; guided workflows (viewshed, line of sight, IDW, shortest path, + suitability); ModelBuilder and scripts, and history copied as code; the GeoLibre and Whitebox + suite (1,000+ tools) natively and in the browser. +- Layouts (map frames, surrounds, map series, publication sheets and figures in one command, PDF), + reports, presentations and notebooks; the web app embeddable in a page (`?embed`). - Sharing as open formats (web maps, OGC API Features collections, MapLibre styles, glTF scenes, locators), offline areas with sync, deep learning pixel classification, hosted imagery tiles. @@ -52,8 +203,3 @@ Many features are first versions: there are no full 3D scenes or enterprise port - Desktop packages: Windows installers (setup.exe, .msi), a portable zip and a Store MSIX; a signed and notarized macOS DMG; Linux .deb, .rpm, AppImage and tarballs; Homebrew, the AUR, Fedora COPR and winget; a download mirror at downloads.rustgis.app. - -## Next -- Editing: vertex editing (move, add and delete vertices of existing features). -- Analysis: spatial join, intersect and union, near, heat maps. -- 3D: full scenes with terrain, beyond the globe and 2.5D extrusion. From b839a062125cbaf1ee8a4fbc84afb4a117efd19f Mon Sep 17 00:00:00 2001 From: mavrick Date: Fri, 23 Oct 2026 11:18:43 -0500 Subject: [PATCH 2/6] docs(roadmap): group Next by theme instead of release numbers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Themes keep the useful part of the 0.4–0.9 grouping, the dependencies between items, without reading as a release plan or going stale when work lands out of order. GEOLIBRE_PARITY.md and CONTRIBUTING.md now name the theme too. Co-Authored-By: Claude Opus 5.5 --- CONTRIBUTING.md | 2 +- GEOLIBRE_PARITY.md | 72 +++++++++++++++++++++++----------------------- ROADMAP.md | 23 +++++++-------- 3 files changed, 48 insertions(+), 49 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6245c56da..d2443e17f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -41,6 +41,6 @@ something on the roadmap (or not on it) interests you, propose it and open a pul - adds a dependency or a crate; - falls under _Exploratory_ in the roadmap. -Roadmap releases are focuses, not dates; an item moves when it lands, whatever its release. A +Roadmap themes are not releases or an order; an item moves to Done when it lands. A pull request that lands a roadmap item, or an item of [GEOLIBRE_PARITY.md](GEOLIBRE_PARITY.md), updates that file in the same change. diff --git a/GEOLIBRE_PARITY.md b/GEOLIBRE_PARITY.md index e8e8cb570..066baabc0 100644 --- a/GEOLIBRE_PARITY.md +++ b/GEOLIBRE_PARITY.md @@ -5,7 +5,7 @@ _Last reviewed: 2026-10-23 (v0.3.0)._ What [GeoLibre](https://github.com/opengeos/GeoLibre) v3.4.0 offers and where RustGIS stands: **missing** or **partial**, or ticked when done. It moved here from [#77](https://github.com/opengeos/RustGIS/issues/77) so that anyone can keep it current: **tick or update an item in the pull request that lands it**. Where an item is planned, -_Roadmap_ names its release in [ROADMAP.md](ROADMAP.md). The GeoLibre and Whitebox geoprocessing +_Roadmap_ names its theme in [ROADMAP.md](ROADMAP.md). The GeoLibre and Whitebox geoprocessing suite RustGIS runs is not counted either way. Sources: GeoLibre `docs/features.md`, `docs/data-formats.md` and the other GeoLibre docs named per @@ -45,7 +45,7 @@ _GeoLibre: docs/data-formats.md, docs/features.md › Adding data, SQL and datab time_). - [ ] **ArcGIS services**: FeatureServer, MapServer, ImageServer and VectorTileServer, with OAuth and a Portal browser. Partial: the four layer types through From Service… ([#120](https://github.com/opengeos/RustGIS/issues/120)), a token in - the address carried. Missing: OAuth and a Portal browser (_Roadmap: 0.7_). + the address carried. Missing: OAuth and a Portal browser (_Roadmap: data at the source_). - [ ] **STAC browser and cloud catalogs**: STAC, Planetary Computer, Earth Engine, Overture, Source Cooperative, NASA Earthdata, Planet and Hugging Face. Partial: STAC Search ([#128](https://github.com/opengeos/RustGIS/issues/128)), Planetary Computer with signed assets ([#144](https://github.com/opengeos/RustGIS/issues/144)), Overture Maps and Source Cooperative ([#158](https://github.com/opengeos/RustGIS/issues/158)), NASA @@ -55,12 +55,12 @@ _GeoLibre: docs/data-formats.md, docs/features.md › Adding data, SQL and datab Data menu of global and per-country services ([#528](https://github.com/opengeos/RustGIS/issues/528)). - [ ] **Database connections**: PostgreSQL/PostGIS, SQL Server/Azure SQL with write-back, Apache Iceberg. Partial: PostGIS ([#125](https://github.com/opengeos/RustGIS/issues/125)), MySQL, MariaDB and SQL Server tables read live on the desktop. - Missing: write-back (_Roadmap: 0.7_) and Iceberg. + Missing: write-back (_Roadmap: data at the source_) and Iceberg. - [x] **Spatial SQL workspace** ([#131](https://github.com/opengeos/RustGIS/issues/131)): an SQL pane over DuckDB Spatial on the desktop. The web app has no in-browser engine yet (_Exploratory_). - [ ] **Private S3 buckets**: partial. `s3://` addresses, SigV4-signed connections, saved connections without their secrets and an S3 browser, desktop and web ([#150](https://github.com/opengeos/RustGIS/issues/150)). Missing: SSO, IAM - roles and secrets kept in the keychain (_Roadmap: 0.5_). + roles and secrets kept in the keychain (_Roadmap: solid ground_). - [ ] **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. Partial: LAS, LAZ and COPC as point layers ([#137](https://github.com/opengeos/RustGIS/issues/137)), geotagged photos with thumbnails ([#175](https://github.com/opengeos/RustGIS/issues/175)); the rest is missing. @@ -75,7 +75,7 @@ _GeoLibre: docs/features.md › Map workspace, Rendering engines and 3D globe; d Cesium World Terrain. Partial: a globe, 2.5D extrusion, and tilt, rotation and terrain (from a DEM or elevation tiles, [#395](https://github.com/opengeos/RustGIS/issues/395)) in the GPU map. - [ ] **Full 3D scene content**: 3D Tiles, I3S, point clouds, splats, CZML time-dynamic scenes, - true-Z vectors. Missing (_Roadmap: 0.9_, [#726](https://github.com/opengeos/RustGIS/issues/726)). + true-Z vectors. Missing (_Roadmap: 3D scenes_, [#726](https://github.com/opengeos/RustGIS/issues/726)). - [ ] **MapLibre style fidelity**: line labels and road shields, line patterns, hillshade and fill-extrusion in styles. Partial; vector tiles and labels on the GPU map are underway ([#635](https://github.com/opengeos/RustGIS/issues/635), [#596](https://github.com/opengeos/RustGIS/issues/596)). @@ -102,27 +102,27 @@ _GeoLibre: docs/features.md › Layers, styling, and labels; docs/user-guide/sty - [x] **Layer groups**. - [ ] **Rule-based and expression renderers**: nested rules with scale ranges. Missing; display - filters are per-scale SQL only (_Roadmap: 0.6_). + filters are per-scale SQL only (_Roadmap: expressions and cartography_). - [ ] **Heatmap and point-clustering renderers**. Partial: hexagon/square aggregation (_Roadmap: - 0.6_). + expressions and cartography_). - [ ] **More classification methods**: standard deviation, geometric interval, manual breaks. - Partial: Jenks, equal interval, quantile (_Roadmap: 0.4_). + Partial: Jenks, equal interval, quantile (_Roadmap: fixes and quick wins_). - [ ] **Symbol library**: a marker library, custom SVG/PNG markers, fill patterns, pie/donut/bar diagrams, arrow lines, inverted-polygon masks, geometry generators. Partial: 5 marker shapes - (_Roadmap: 0.6_ for markers, patterns and a library). + (_Roadmap: expressions and cartography_ for markers, patterns and a library). - [ ] **Style interchange**: import/export SLD, QGIS QML, Mapbox GL JSON. Partial: MapLibre style - export and `.rgisstyle` (_Roadmap: 0.6_ for QML and SLD import). + export and `.rgisstyle` (_Roadmap: expressions and cartography_ for QML and SLD import). - [ ] **Smart styling**: automatic palette on add, one-click style suggestions. Missing. - [ ] **Label engine depth**: expression labels, offset, rotation, wrap, case, priority, de-duplication, number formats. Partial: label classes with SQL queries, field labels with placement and scale ranges; a labeling pane is underway ([#618](https://github.com/opengeos/RustGIS/issues/618), [#722](https://github.com/opengeos/RustGIS/issues/722)). Expression labels: - _Roadmap: 0.6_. + _Roadmap: expressions and cartography_. - [ ] **On-map legend and colorbar controls**. Partial: the legend is in Contents and layouts only - (_Roadmap: 0.6_). + (_Roadmap: expressions and cartography_). - [ ] **Popup and tooltip designer**: field picking, formats (date, link, image), an expression - title, hover tooltips. Partial: popup modes only (_Roadmap: 0.6_). + title, hover tooltips. Partial: popup modes only (_Roadmap: expressions and cartography_). - [ ] **Raster histogram stretch UI and Raster Attribute Table**. Partial: stretch types and DRA - (_Roadmap: 0.6_). + (_Roadmap: expressions and cartography_). - [ ] **Colour-ramp library and style presets manager**. Partial: custom colour ramps and QGIS, GDAL and GMT palette files. @@ -133,41 +133,41 @@ _GeoLibre: docs/features.md › Attribute data and expressions; docs/arcgis-edit - [ ] **Topological digitizing and CAD dimensions**: shared-edge drawing, dimension lines, building massing. Partial: snapping, topology validation, traverse. - [ ] **Write-back to sources**: GeoPackage, GeoJSON, PostGIS, SQL Server, ArcGIS FeatureService. - Missing; edits stay in the project (_Roadmap: 0.7_ for GeoPackage and PostGIS). + Missing; edits stay in the project (_Roadmap: data at the source_ for GeoPackage and PostGIS). - [ ] **Expression builder and engine**: one engine shared by filters, labels, styles and Calculate Field, with a function reference. Partial: Calculate Field is `field op field/number` - (_Roadmap: 0.6_). + (_Roadmap: expressions and cartography_). - [ ] **Virtual fields and persistent attribute joins**. Missing; relationships exist (_Roadmap: - 0.7_; a one-off join field tool in 0.5). + data at the source_; a one-off join field tool under solid ground). - [ ] **Attribute form designer**: widgets, constraints, conditional visibility. Partial: domains, - subtypes, attribute rules (_Roadmap: 0.7_). + subtypes, attribute rules (_Roadmap: data at the source_). - [ ] **Editor tracking fields**: created/edited by and at. Partial: archiving keeps edit times - (_Roadmap: 0.7_). + (_Roadmap: data at the source_). - [ ] **Table column management**: rename, hide and reorder columns, a column explorer. Partial: - sort, filter, add/delete field (_Roadmap: 0.7_). + sort, filter, add/delete field (_Roadmap: data at the source_). - [ ] **Quick filters**: per-field checkboxes and range/date controls. Partial: a definition query - (_Roadmap: 0.6_). + (_Roadmap: expressions and cartography_). - [ ] **Selection gestures**: polygon, freehand, radius. Partial: click and box; Neighborhood - Explorer selects by radius (_Roadmap: 0.4_). + Explorer selects by radius (_Roadmap: fixes and quick wins_). - [ ] **Charts panel and dashboards**: histogram, scatter, bar, line, box and pie charts, indicators, cross-filtering. Partial: Exploratory Analysis, Infographics, layout/report charts - (_Roadmap: 0.8_ for charts linked to the selection). + (_Roadmap: analysis_ for charts linked to the selection). ## Analysis _GeoLibre: docs/features.md › Processing and analysis; docs/user-guide/processing.md, model-builder.md, segmentation.md, obia.md_ - [ ] **Spatial join, intersect, union**. Partial: spatial join, clip and erase are built in; - intersect, union, identity and near are missing (_Roadmap: 0.5_). + intersect, union, identity and near are missing (_Roadmap: solid ground_). - [ ] **More built-in vector tools**: attribute join, merge, extract vertices, points along lines, - fix/check geometry, random extract, buffer options. Partial (_Roadmap: 0.5_). + fix/check geometry, random extract, buffer options. Partial (_Roadmap: solid ground_). - [ ] **Routing services**: isochrones, service areas, OD matrix, multi-stop routing, - turn-by-turn (Valhalla/OSRM). Partial: shortest path over a line layer (_Roadmap: 0.8_). + turn-by-turn (Valhalla/OSRM). Partial: shortest path over a line layer (_Roadmap: analysis_). - [ ] **Geocoding**: forward, batch and reverse, with multiple providers and a place search box. Partial: Find Place and address tables (Nominatim, Photon or your own server), a local locator, - a search box. Missing: reverse geocoding (_Roadmap: 0.8_). + a search box. Missing: reverse geocoding (_Roadmap: analysis_). - [ ] **Spatial statistics**: Emerging Hot Spot (Getis-Ord Gi\*), composite score builder. - Partial: Suitability Modeler (_Roadmap: 0.8_ for hot spots). + Partial: Suitability Modeler (_Roadmap: analysis_ for hot spots). - [ ] **H3 and DGGS grids**: H3, A5, DGGRID, DGGAL. Partial: A5 grids (_Roadmap: any time_ for H3). - [ ] **AI segmentation and detection**: SAM/SamGeo, ONNX/YOLO detection, OBIA with eCognition @@ -175,16 +175,16 @@ model-builder.md, segmentation.md, obia.md_ - [ ] **Visual Model Builder canvas**: a node graph with validation and export to code. Partial: ModelBuilder with a node canvas and models from history. - [ ] **Re-run or copy history as code; batch runs over a folder**. Partial: history copied as - code; batch runs are missing (_Roadmap: 0.5_). + code; batch runs are missing (_Roadmap: solid ground_). - [ ] **Viewshed from public terrain tiles (no DEM needed)**. Partial: needs a loaded elevation - raster (_Roadmap: 0.8_ for a DEM downloader). + raster (_Roadmap: analysis_ for a DEM downloader). - [ ] **Conversion**: vector to PMTiles/GeoParquet, raster to COG. Partial: GeoParquet and COG out; vector to PMTiles is missing (_Roadmap: any time_, [#557](https://github.com/opengeos/RustGIS/issues/557)). - [x] **Time Slider**: vector layers by a date field (`time.bind`), data cubes, trends (Sen's slope, Mann–Kendall), GIF export. - [ ] **Point cloud annotation**: ASPRS classes, 3D boxes. Missing. - [ ] **Hydrology and elevation downloaders**: NLDI navigation, USGS 3DEP and LiDAR, a global DEM - downloader. Missing (_Roadmap: 0.8_ for a DEM downloader). + downloader. Missing (_Roadmap: analysis_ for a DEM downloader). ## Layouts & printing _GeoLibre: docs/features.md › Map tools, printing, and media; docs/user-guide/print-layout.md_ @@ -213,10 +213,10 @@ storymaps.md_ - [ ] **Import QGIS (`.qgs/.qgz`) and ArcGIS Pro (`.aprx/.mapx`) projects**. Missing (_Exploratory_). - [ ] **Autosave, project history, crash recovery, snapshot compare**. Partial: undo and per-layer - archive restore (_Roadmap: 0.5_ for autosave and crash recovery). + archive restore (_Roadmap: solid ground_ for autosave and crash recovery). - [ ] **Startup preferences and shareable interface settings**. Partial: start-up preferences, Pane Sets and ribbon/QAT customization. -- [ ] **Layer metadata with STAC Item export**. Missing (_Roadmap: 0.7_). +- [ ] **Layer metadata with STAC Item export**. Missing (_Roadmap: data at the source_). - [ ] **Browser extension ("Open data in …")**. Missing. ## Scripting & integrations @@ -259,10 +259,10 @@ deployment-capabilities.md, ui-profiles.md_ deployment. Missing. - [ ] **Package-manager and store channels**: winget, a Homebrew Cask, the Mac App Store. Partial: winget, Homebrew, the AUR, Fedora COPR and the Microsoft Store; the Mac App Store is missing. -- [ ] **Windows code signing**. Missing (_Roadmap: 0.5_). -- [ ] **Auto-update**. Partial: Check for Updates (_Roadmap: 0.5_ for in-place updates). +- [ ] **Windows code signing**. Missing (_Roadmap: solid ground_). +- [ ] **Auto-update**. Partial: Check for Updates (_Roadmap: solid ground_ for in-place updates). - [ ] **Desktop network features**: OS trust store, mTLS client certificates, network log, - reloading files changed on disk. Missing (_Roadmap: 0.5_ for reloading files). + reloading files changed on disk. Missing (_Roadmap: solid ground_ for reloading files). ## AI _GeoLibre: docs/user-guide/ai-assistant.md, docs/features.md › AI, Python, and automation_ diff --git a/ROADMAP.md b/ROADMAP.md index f018e5968..aa91ed6ad 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -20,8 +20,8 @@ issues; feature-by-feature comparison with GeoLibre is tracked in ## Contributing Most items below have no issue yet: propose one and open a pull request. See [CONTRIBUTING.md](CONTRIBUTING.md) for which items to pick freely, which to coordinate first, and -how to write a proposal. Releases below are focuses, not dates; an item moves when it lands, -whatever its release. +how to write a proposal. Themes under Next are not releases and not in order; where an item +needs another first, it says so. ## Underway - GPU map: vector tiles and labels on the GPU tile layer @@ -40,9 +40,8 @@ whatever its release. ## Next -### 0.4: An update soon -The bugs users hit, the docs and a few quick wins, plus whatever from Underway lands in time; -released soon, not held for the rest. +### Fixes and quick wins +The bugs users hit, the docs and a few quick wins: good first pull requests. - Robustness: the Windows 11 start-up failure ([#375](https://github.com/opengeos/RustGIS/issues/375)), Control-click menus on macOS ([#707](https://github.com/opengeos/RustGIS/issues/707)), Load Off-Map Data @@ -56,8 +55,8 @@ released soon, not held for the rest. - Selection by polygon and lasso, and a radius tool on the map (Neighborhood Explorer already selects by radius) _(open)_. -### 0.5: Solid ground -Correct, robust and recoverable, with the foundations later releases stand on. +### Solid ground +Correct, robust and recoverable, with the foundations other themes stand on. - Correct coordinates: grid datum shifts (NTv2 and GeoTIFF grids) for NAD27, NAD83(HARN), GDA94↔GDA2020 and OSGB36, and a notice whenever a layer is read without its shift; GDA94 ([#730](https://github.com/opengeos/RustGIS/issues/730)) is one case. _Coordinate first._ @@ -71,7 +70,7 @@ Correct, robust and recoverable, with the foundations later releases stand on. layers), extract vertices, points along lines, check and fix geometry _(open)_. - Batch runs: one tool over many layers or a folder of files. -### 0.6: Expressions and cartography +### Expressions and cartography One expression engine, a superset of today's SQL where clause so existing definition queries, label-class queries and display filters keep working. It replaces the three parsers of today (where clauses, Calculate Field, attribute rules) and serves Calculate Field, attribute rules, @@ -91,7 +90,7 @@ And alongside it: - Style import: QGIS QML and SLD styles applied to layers. - A histogram for raster stretches; raster attribute tables. -### 0.7: Data at the source +### Data at the source - Write edits back to GeoPackage and PostGIS (edits stay in the project today). _Coordinate first._ - Editor tracking fields (created/edited by and at). @@ -100,9 +99,9 @@ And alongside it: - Attribute forms: widgets, constraints and conditional visibility, on top of domains and subtypes. - Layer metadata, exported as STAC items. -- ArcGIS sign-in (OAuth) and a Portal browser, on the 0.5 secret store. +- ArcGIS sign-in (OAuth) and a Portal browser, once the secret store (Solid ground) exists. -### 0.8: Analysis +### Analysis - Routing: isochrones, service areas and an origin–destination matrix (today shortest path over a line layer). - Hot-spot statistics (Getis-Ord Gi\*), and emerging hot spots on the time slider. @@ -110,7 +109,7 @@ And alongside it: - Reverse geocoding; a DEM downloader so viewshed works without a loaded elevation raster _(open)_. -### 0.9: 3D scenes, first steps +### 3D scenes, first steps - Phases 1–2 of [#726](https://github.com/opengeos/RustGIS/issues/726): Z coordinates kept from the data and written back; a scene with a free camera and each layer's elevation mode (on the ground, relative, absolute). From a90849ec7b00b34acede3a71e04ee7bd9df3e75b Mon Sep 17 00:00:00 2001 From: mavrick Date: Fri, 23 Oct 2026 11:18:56 -0500 Subject: [PATCH 3/6] docs(roadmap): say what counts as underway; add #745 and #671 A rule anyone can check on GitHub lets the weekly review start from the open pull requests instead of memory. Co-Authored-By: Claude Opus 5.5 --- ROADMAP.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/ROADMAP.md b/ROADMAP.md index aa91ed6ad..706c860bc 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -24,6 +24,10 @@ how to write a proposal. Themes under Next are not releases and not in order; wh needs another first, it says so. ## Underway +An item is underway when it has an open pull request, or someone said on its issue in the last +week that they are working on it. Check here and the +[open pull requests](https://github.com/opengeos/RustGIS/pulls) before starting; to take an item, +comment on its issue and open a draft pull request early. - GPU map: vector tiles and labels on the GPU tile layer ([#635](https://github.com/opengeos/RustGIS/issues/635), [#596](https://github.com/opengeos/RustGIS/issues/596)). @@ -37,6 +41,10 @@ needs another first, it says so. - Connection manager for databases and web services ([#699](https://github.com/opengeos/RustGIS/issues/699)). - Zonal statistics as a built-in tool ([#718](https://github.com/opengeos/RustGIS/pull/718)). +- A "No fill" option for polygons ([#745](https://github.com/opengeos/RustGIS/pull/745), for + [#644](https://github.com/opengeos/RustGIS/issues/644)). +- Editing PostGIS tables and saving the edits back + ([#671](https://github.com/opengeos/RustGIS/pull/671), draft). ## Next @@ -49,9 +57,7 @@ The bugs users hit, the docs and a few quick wins: good first pull requests. - A pass over the user guide, the comparison pages and the README against what the app does today (vertex editing, spatial join and kriging are listed as missing or undocumented; some pages still say 16 languages). -- Styling: a "No fill" button for polygons - ([#644](https://github.com/opengeos/RustGIS/issues/644); a transparent fill works today) - _(open)_; standard deviation, geometric interval and manual breaks _(open)_. +- Styling: standard deviation, geometric interval and manual breaks _(open)_. - Selection by polygon and lasso, and a radius tool on the map (Neighborhood Explorer already selects by radius) _(open)_. @@ -91,8 +97,8 @@ And alongside it: - A histogram for raster stretches; raster attribute tables. ### Data at the source -- Write edits back to GeoPackage and PostGIS (edits stay in the project today). _Coordinate - first._ +- Write edits back to GeoPackage and PostGIS (edits stay in the project today; PostGIS is + underway in [#671](https://github.com/opengeos/RustGIS/pull/671)). _Coordinate first._ - Editor tracking fields (created/edited by and at). - Attribute table columns: rename, hide and reorder _(open)_. - Persistent attribute joins and virtual fields. _Coordinate first_ (they change `Feature`). From 66e8e86bf9ee38f27809781de121e63e014479a0 Mon Sep 17 00:00:00 2001 From: mavrick Date: Fri, 23 Oct 2026 11:19:08 -0500 Subject: [PATCH 4/6] docs: coordinate first on shared contracts; point agents at the roadmap The `.rgis` format, existing command ids and parameters, and the plugin interface are depended on outside the code that changes them. Most pull requests start from an agent reading AGENTS.md, so it now points at the roadmap and the contributing guide. Co-Authored-By: Claude Opus 5.5 --- AGENTS.md | 3 +++ CONTRIBUTING.md | 3 +++ 2 files changed, 6 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index a51d3ce9c..d054f3875 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -4,6 +4,9 @@ RustGIS is a fast, free and open-source GIS in pure Rust for mapping, analyzing geospatial data, on the desktop and in the browser. Its architecture: layered crates, everything is a command, a thin egui front end, headless screenshots for UI work. +Before picking work, read [ROADMAP.md](ROADMAP.md) (check Underway) and +[CONTRIBUTING.md](CONTRIBUTING.md) (what to coordinate first). + ## Never crash - No `unwrap()`, `expect()`, `panic!`, `unreachable!`, `todo!` in non-test code; no `unsafe` (`unsafe_code = "forbid"`). Crate roots carry the `#![deny(clippy::unwrap_used, …)]` block. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d2443e17f..65ae726a5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -39,6 +39,9 @@ something on the roadmap (or not on it) interests you, propose it and open a pul code if your change - changes the data model (`Feature`, `Coord`, `Renderer`); - adds a dependency or a crate; + - changes the `.rgis` project format, or an existing command's id or parameters (the CLI, + Python, MCP and saved scripts call commands by id); + - changes the plugin interface; - falls under _Exploratory_ in the roadmap. Roadmap themes are not releases or an order; an item moves to Done when it lands. A From 3058ed123ef7c2004145f30ee71e9a53a83fc7c9 Mon Sep 17 00:00:00 2001 From: mavrick Date: Fri, 23 Oct 2026 11:19:15 -0500 Subject: [PATCH 5/6] docs(roadmap): add a goal for staying free and self-contained Co-Authored-By: Claude Opus 5.5 --- ROADMAP.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ROADMAP.md b/ROADMAP.md index 706c860bc..bcf8ff318 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -14,6 +14,8 @@ issues; feature-by-feature comparison with GeoLibre is tracked in it: depth in these beats a long list of first versions. - **Foundations before features.** Build the shared piece once (an expression engine, a secret store, Z coordinates) and let several features stand on it. +- **Free and self-contained.** Pure Rust with nothing else to install; GDAL and DuckDB are + optional extras that add formats, not requirements. - **One program everywhere.** Desktop, browser, CLI, Python and AI agents share the same commands; nothing below `apps/` breaks the WebAssembly build. From 121239a9d9f39e67e340b3070590ebfbf7aafc38 Mon Sep 17 00:00:00 2001 From: Daniel Hofbauer Date: Fri, 23 Oct 2026 18:42:05 +0200 Subject: [PATCH 6/6] docs: address review on the roadmap and parity checklist Underway hands off on an issue or a pull request; GeoLibre's baseline links to its v3.4.0 tag; the ArcGIS token line reads clearly; the COG check says what is unverified; the terrio bullet is wrapped. Drops #671, which looks abandoned. --- GEOLIBRE_PARITY.md | 12 +++++++----- ROADMAP.md | 13 +++++++------ 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/GEOLIBRE_PARITY.md b/GEOLIBRE_PARITY.md index 066baabc0..838bff6c7 100644 --- a/GEOLIBRE_PARITY.md +++ b/GEOLIBRE_PARITY.md @@ -2,13 +2,14 @@ _Last reviewed: 2026-10-23 (v0.3.0)._ -What [GeoLibre](https://github.com/opengeos/GeoLibre) v3.4.0 offers and where RustGIS stands: +What [GeoLibre v3.4.0](https://github.com/opengeos/GeoLibre/tree/v3.4.0) offers and where RustGIS stands: **missing** or **partial**, or ticked when done. It moved here from [#77](https://github.com/opengeos/RustGIS/issues/77) so that anyone can keep it current: **tick or update an item in the pull request that lands it**. Where an item is planned, _Roadmap_ names its theme in [ROADMAP.md](ROADMAP.md). The GeoLibre and Whitebox geoprocessing suite RustGIS runs is not counted either way. -Sources: GeoLibre `docs/features.md`, `docs/data-formats.md` and the other GeoLibre docs named per +Sources: GeoLibre [v3.4.0](https://github.com/opengeos/GeoLibre/tree/v3.4.0) `docs/features.md`, +`docs/data-formats.md` and the other GeoLibre docs named per section; RustGIS [ROADMAP.md](ROADMAP.md), [docs/](docs/) and the command registry (`crates/engine/src/cmd`). Some items may be out of scope for a pure-Rust GIS (noted inline); strike those through with a reason rather than leaving them open. @@ -44,8 +45,9 @@ _GeoLibre: docs/data-formats.md, docs/features.md › Adding data, SQL and datab ([#120](https://github.com/opengeos/RustGIS/issues/120)), OGC API Tiles ([#144](https://github.com/opengeos/RustGIS/issues/144)), WCS and CSW ([#178](https://github.com/opengeos/RustGIS/issues/178)). Still missing: auto-refresh (_Roadmap: any time_). - [ ] **ArcGIS services**: FeatureServer, MapServer, ImageServer and VectorTileServer, with OAuth - and a Portal browser. Partial: the four layer types through From Service… ([#120](https://github.com/opengeos/RustGIS/issues/120)), a token in - the address carried. Missing: OAuth and a Portal browser (_Roadmap: data at the source_). + and a Portal browser. Partial: the four layer types through From Service… ([#120](https://github.com/opengeos/RustGIS/issues/120)); a token in + the service address is sent with its requests (saved sources drop it). Missing: OAuth and a + Portal browser (_Roadmap: data at the source_). - [ ] **STAC browser and cloud catalogs**: STAC, Planetary Computer, Earth Engine, Overture, Source Cooperative, NASA Earthdata, Planet and Hugging Face. Partial: STAC Search ([#128](https://github.com/opengeos/RustGIS/issues/128)), Planetary Computer with signed assets ([#144](https://github.com/opengeos/RustGIS/issues/144)), Overture Maps and Source Cooperative ([#158](https://github.com/opengeos/RustGIS/issues/158)), NASA @@ -299,7 +301,7 @@ _GeoLibre: docs/features.md › Platforms and interface; docs/i18n.md_ - Offline areas with two-way sync of edited features ## To verify -- Whether raster export writes valid COGs with overviews +- Whether exported COGs (written today) pass a COG validator: overviews and tile layout - GeoLibre's language count: [#77](https://github.com/opengeos/RustGIS/issues/77) said 20, `docs/comparison/geolibre.md` says 21 - Accessibility compared with GeoLibre's axe-checked screens diff --git a/ROADMAP.md b/ROADMAP.md index bcf8ff318..e7291bf16 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -29,7 +29,7 @@ needs another first, it says so. An item is underway when it has an open pull request, or someone said on its issue in the last week that they are working on it. Check here and the [open pull requests](https://github.com/opengeos/RustGIS/pulls) before starting; to take an item, -comment on its issue and open a draft pull request early. +comment on its issue or pull request and open a draft pull request early. - GPU map: vector tiles and labels on the GPU tile layer ([#635](https://github.com/opengeos/RustGIS/issues/635), [#596](https://github.com/opengeos/RustGIS/issues/596)). @@ -45,8 +45,6 @@ comment on its issue and open a draft pull request early. - Zonal statistics as a built-in tool ([#718](https://github.com/opengeos/RustGIS/pull/718)). - A "No fill" option for polygons ([#745](https://github.com/opengeos/RustGIS/pull/745), for [#644](https://github.com/opengeos/RustGIS/issues/644)). -- Editing PostGIS tables and saving the edits back - ([#671](https://github.com/opengeos/RustGIS/pull/671), draft). ## Next @@ -99,8 +97,8 @@ And alongside it: - A histogram for raster stretches; raster attribute tables. ### Data at the source -- Write edits back to GeoPackage and PostGIS (edits stay in the project today; PostGIS is - underway in [#671](https://github.com/opengeos/RustGIS/pull/671)). _Coordinate first._ +- Write edits back to GeoPackage and PostGIS (edits stay in the project today). _Coordinate + first._ - Editor tracking fields (created/edited by and at). - Attribute table columns: rename, hide and reorder _(open)_. - Persistent attribute joins and virtual fields. _Coordinate first_ (they change `Feature`). @@ -145,7 +143,10 @@ built-in version must justify itself on one of those. ## Exploratory Open questions rather than plans; discuss before building. - Layers kept in their own coordinate system rather than WGS 84. -- Integrating [opengeos/terrio](https://github.com/opengeos/terrio), the pure-Rust raster, vector and point cloud I/O library: which of its drivers, coordinate transformations and GDAL-style operations could back or replace RustGIS's own readers, or stand in for the GDAL program, and which of them build for the web app. +- Integrating [opengeos/terrio](https://github.com/opengeos/terrio), the pure-Rust raster, vector + and point cloud I/O library: which of its drivers, coordinate transformations and GDAL-style + operations could back or replace RustGIS's own readers, or stand in for the GDAL program, and + which of them build for the web app. - Collaboration: shared projects, review comments, accounts and a server. - Mobile and field work: touch layout, GPS, data collection, QFieldCloud ([#665](https://github.com/opengeos/RustGIS/issues/665)).