★ New · feat/stac

STAC: search the world, publish your own

Two capabilities in one. Browse and ingest imagery from remote public catalogs — Element 84 Earth Search, Microsoft Planetary Computer, or any custom STAC API — and turn a folder of local rasters, vectors, and point clouds into a spec-conformant STAC catalog your whole team can query.

STAC API 1.0.0OGC CQL2 (Filter Ext.)Element 84 Planetary ComputerSAS signingCOG / MVTLAS / LAZ / COPC
Search any catalog

One search box across every STAC API

The browser auto-detects whether a catalog speaks the OGC CQL2 Filter Extension or the older STAC query extension, and emits the right request from a single query — no hand-writing filters.

  • Built-in remote catalogs: Element 84 Earth Search (Sentinel-2 L2A, Landsat C2 L2, NAIP) and Microsoft Planetary Computer (Sentinel-2, Landsat, NASADEM).
  • Planetary Computer SAS signing handled transparently — NeedsSigning asset hrefs are signed server-side so the browser can GET COGs directly.
  • CORS bypass, per-source auth, and Polly retry/circuit-breaker centralized in the .NET proxy.
  • Add any custom STAC API at runtime; schema-driven filter UI reads each collection's queryables — no hardcoded field lists.
POST /api/stac/sources/earth-search/search
// single query → correct dialect per catalog
{
  "collections": ["sentinel-2-l2a"],
  "intersects": {
    "type": "Polygon",
    "coordinates": [/* AOI */]
  },
  "datetime": "2026-05-01/2026-06-30",
  "query": { "eo:cloud_cover": { "lt": 10 } }
}
→ assets rendered as ArcGIS ImageryTileLayer
Publish your own

Your local files, as a STAC catalog

Ingest a folder of GeoTIFFs, COGs, Shapefiles, GeoJSON, GPKG, or LAS/LAZ/COPC and serve it as a spec-conformant STAC API at /stac — landing page, conformance, collections, queryables, items, and GET + POST /search.

🛰️

Auto metadata extraction

AssetMetadataExtractor pulls bbox, CRS, and projection from rasters (GDAL), vectors (OGR), and point clouds (native LasReader).

📦

GeoPackage-backed store

Catalog items persist in a local stac.gpkg — survives restarts, fully offline.

🔎

Spec-conformant surface

STAC API 1.0.0 core, collections, OGC API Features, item-search (+sort, +fields), and the query extension v0.3.0.

🧩

Dynamic filter UI

Reads queryables + collection summaries to build filter widgets — no field list hardcoded.

🖼️

Renders in ArcGIS

STAC assets stream into ImageryTileLayer / ImageryLayer for instant visualization.

🔒

CORS & auth solved

The desktop proxy absorbs browser-hostile CORS, SAS signing, and bearer auth so the client just works.

Two surfaces, one feature

The API at a glance

Remote search is proxied under /api/stac; your own catalog lives under the spec path /stac with management under /api/stacserver.

SurfaceEndpointPurpose
Remote clientGET/POST /api/stac/sourcesList / add / remove remote catalogs
Remote clientPOST /api/stac/sources/{id}/searchSearch a remote catalog (dialect auto)
Remote clientGET /api/stac/sources/{id}/collectionsList collections + queryables
In-app serverGET /stac · /stac/conformanceSTAC 1.0.0 landing + conformance
In-app serverGET /stac/collections/{cid}/itemsServe items from stac.gpkg
In-app serverGET+POST /stac/searchSpec item-search (sort + fields)
ManagementPOST /api/stacserver/collections/{cid}/ingestIngest local files into a collection

Endpoints reflect StacRoutes.cs and StacServerRoutes.cs on commit f714fcc75. STAC version is 1.0.0 per the served conformance document.

publish your own catalog
# ingest a folder of rasters + clouds
POST /api/stacserver/collections/{cid}/ingest
  { "paths": ["D:/imagery/*.tif",
            "D:/clouds/*.laz"] }

# then any STAC client can query it
GET  /stac/collections/{cid}/items
POST /stac/search
  { "bbox": [...] }

● spec-conformant · offline · on :5059
Why it matters

Stop fighting browsers to reach STAC

Browsers can't talk to most STAC APIs directly — CORS, Planetary Computer SAS signing, and bearer auth all block the client. The desktop host sits in between and absorbs all of it, so analysts search and render imagery without ever leaving the map.

Search public catalogs. Publish your own.

Both STAC roles — consumer and provider — ship in a single in-app feature, fully offline-capable.