← All projects

Published by KnownBetter Studios → This page is the engineering case study.

ageomaps

In development

A Rust desktop GIS for readable, repeatable, branchable and comparable analysis workflows.

GISGeospatialRustC++QtDesktop App

At a glance

  • Outcome: Builds readable, repeatable, branchable and comparable Rust GIS workflows through owned C++ and native Qt/MapLibre. Serves small municipalities, counties and businesses without enterprise contracts; see KnownBetter Studios for pricing and pilot contact.
  • Status: Works daily: 6,468 commits across 119 separate days from April 25 through September 11, 2026; 511 since August 30. Has no public release; targets a 2027 beta. Runs Linux AppImage release manually without end-to-end proof.
  • Role: Works solo; owns architecture, bridge design, debugging and validation. Reviews AI-assisted implementation.
  • Stack & libraries: Uses a 53-crate Rust workspace; project-owned C++/cxx-qt integrates Qt 6/MapLibre Native; GEOS/GDAL back the engines; GGUF inference runs locally for the planner; Nix supplies the flake toolchain.
  • Source: Keeps source private; publishes the project site.
  • Validation: Uses 882 test files, including 70 pre-UI contracts, plus 27 build-checked invariants. MapLibre smoke decodes PNG and checks pixel colors/request counters. Five profiles cover core, native, shell, tiles and release; CI runs core on pushes, native and opt-in tiers on dispatch, and Qt shell where MapLibre exists; release blocks skipped checks.
  • Limitations: Supports tree branches without merge and reruns whole steps on partial cache hits. Uses Helmert approximations when reprojection needs datum grids; defers row-level diffs. Registers four raster workflow operations despite additional terrain kernels, and keeps gated natural-language planning pre-release.

Execution policy

Blocks only safety, corruption, credentials and irreversible operations. Marks other runnable work Ready, Needs review or Blocked. Defaults expensive work to preview; drafts reviewable plain-language plans without executing them.

Workflow execution

Mirrors editable disk files with implicit edges and blanks. Compiles them into ordered plans with resolved upstream outputs. Addresses results by operation, inputs, parameters and tool versions; the engine, cache and review panel use it.

Preserves step identity for diffs and downstream invalidation. Since September, executes the minimum affected suffix and ready prefixes in unfinished projects. Saved versions pin addresses and bytes. Older checkouts restore workflows and recompute missing cache entries in the background as dirty.

Capabilities

  • Runs GEOS buffer, clip, dissolve, overlay, spatial joins, grid generation, summarize-within and district-summary vector analysis.
  • Runs raster clip, reproject, calculate and zonal-statistics workflow steps. Also implements reclassify, terrain and viewshed kernels.
  • Ingests GeoJSON, FileGDB, GeoPackage, GeoParquet and municipal FeatureServer sources with opt-in live refresh. Preserves QGIS models, ArcGIS toolboxes and FME workspaces structurally as blocked placeholders; bounded reading recovers classic ESRI .lyr source records.
  • Records reviews, receipts, health, checkpoints, saves, branch checkouts and unlimited version-board comparisons. Content-addressed decision commits identify stale deliverable pages.
  • Exports PDF/A-1b, PNG, SVG, PowerPoint, DOCX and static HTML in a separate worker. CLI re-derives receipts from sessions to verify deliverables.
  • Compiles manual and plain-language plans identically. Gates opt-in live inference by environment.

Network policy

Keeps files/prompts/models local unless disclosed. Since September, production calls declare content and policy; a build check limits HTTP clients to two crates. Uses broker-vended local channels and revocable per-request remote wrappers. Records model inputs on proposals and receipts.

Compiles policy derivatives: geometry type, feature count, CRS, snapped centroid and generalized extent. Policy vocabulary exceeds compiler output.

Native bridge

Connects Rust, Qt and MapLibre Native through 6,086 owned C++ lines in thirteen files. Shell bridge has 3,536; excludes upstream and generated code.

Provides project-storage tile/basemap/glyph file sources and Qt shell/render driver. Manages Rust/C++/Qt lifetimes, shutdown and main-thread rules. Tests quiesce QML animations and drain the Qt engine before teardown because lifetime bugs crash without either language’s stack trace. Smoke decodes PNGs, counts pixels against the canvas contract, checks file-source counters and rejects project tile URLs in MapLibre logs. Upstream MapLibre/Qt are not owned.