★ New · feat/connectors

Your databases. Already on the map.

Point 3D Map Explorer at Postgres/PostGIS, MySQL, SQLite, SQL Server, BigQuery, or Google Sheets and every table with a geometry column — or even plain lat/long columns — is auto-discovered and served three ways: dynamic MVT vector tiles, OGC API Features, and an ESRI FeatureServer. No ETL, no per-vendor drivers.

Postgres / PostGISMySQLSQLite SQL ServerBigQueryGoogle SheetsDPAPI-encrypted
How it works

One DuckDB hub, every source

A single in-process DuckDB engine ATTACHes each source read-only via its scanner/attach extension — postgres_scanner, mysql_scanner, the bundled sqlite, plus community mssql, bigquery, and gsheets. No per-vendor ADO.NET driver to ship.

  • Automatic spatial discovery — detects typed GEOMETRY/WKB columns, BLOB columns recognized by st_geometrytype, and common names (geom/geometry/the_geom).
  • Lat/long virtualization — if no geometry column exists, synthesizes a POINT view via ST_Point(lon, lat, 4326) from lat/long pairs (flagged isLatLongVirtualized).
  • Three facades over the same data — MVT, OGC API Features, and ESRI FeatureServer, reused by the local-file DuckDBs too.
  • Smart layer pickup — auto-chooses MVT for large layers (>2000 rows), GeoJSON for small ones.
POST /api/connectors
# connect and discover spatial tables
curl -X POST http://localhost:5059/api/connectors \
  -H 'Content-Type: application/json' \
  -d '{
    "name":"prod-pg",
    "kind":"Postgres",
    "connectionString":
      "host=localhost port=5432
       dbname=gis user=postgres
       password=secret"
  }'

→ profile saved, DPAPI-encrypted
→ collections discovered & served
Three ways to read the same data

Point any client at it

Each discovered collection is exposed under /api/spatial/{dbId}/... — so ArcGIS Pro, QGIS, MapLibre, and any OGC client can consume your existing tables with no extra wiring.

Dynamic MVT

/collections/{c}/tiles/{z}/{x}/{y}.mvt — fast PBF vector tiles generated on demand via DuckDB ST_AsMVT.

🌐

OGC API Features

/collections/{c}/items?bbox=&limit=&filter= — modern RESTful GeoJSON with filtering and sorting.

🗺️

ESRI FeatureServer

/FeatureServer/{i}/query?where=&geometry= — drop it straight into an ArcGIS map.

🔒

DPAPI-encrypted profiles

Connection strings encrypted with Windows DataProtectionScope.CurrentUser to connectors.json; decrypted only in memory at connect time.

🔌

Read-only by design

Sources are ATTACHed read-only — your authoritative stores are never written to from the desktop.

✈️

Airgap-aware

Community extensions fail gracefully (profile saved, lastError shown); only bundled official extensions are guaranteed offline.

The API surface

Manage, test, and serve

GroupEndpointNotes
ManagementGET / POST /api/connectorsList / register a source profile
ManagementPOST /api/connectors/testValidate before saving
ManagementGET /api/connectors/{id}/collectionsDiscovered spatial collections
Spatial facadeGET /api/spatial/{dbId}/collections/{c}/itemsOGC API Features (bbox, filter, sortby)
Spatial facadeGET /api/spatial/{dbId}/collections/{c}/tiles/{z}/{x}/{y}.mvtDynamic vector tiles
Spatial facadeGET /api/spatial/{dbId}/FeatureServer/{i}/queryESRI FeatureServer query

Base URL http://localhost:5059. Browser smoke test at /connectors-test.html. Npgsql is not used — by design the app relies on DuckDB's scanner extensions, not per-vendor ADO.NET.

Map the data you already have

Six database kinds, auto-discovered spatial tables, three serving facades — without moving a single row.