fastgeoapi
An OGC API for data that is already cloud-native. Your GeoParquet, your PMTiles, your COG sit in a bucket, and something still needs a standard API in front of them: QGIS, a browser, a partner, an agent. fastgeoapi serves one straight from those formats, where they are, with pygeoapi as the engine — and because reading them means ranged requests over the network, it awaits those reads instead of parking a thread on each.
-
Cloud-native formats, in place
GeoParquet queried by DuckDB and PMTiles read by byte range, from S3, GCS, Azure or Tigris. No load into a database, no pre-cut tile tree, no second copy — and the configuration can live in the same bucket.
GeoParquet provider · PMTiles provider · Config from cloud storage
-
Async where waiting is the cost
A ranged read is a round trip, and a map view asks for fifty at once. Those are awaited together rather than five at a time on a thread pool — with a guard in the test suite that fails if the loop blocks.
-
Standard, and only what you configured
OGC API — Features, Tiles, Processes, Records, EDR and STAC, from pygeoapi unchanged. The route table and
/conformanceare built from your resources, so they describe this server rather than the catalogue. -
Behind authentication, and usable by agents
OAuth2 with JWKS, an API key or Open Policy Agent in front; an MCP endpoint with its own authorization server behind, so a client like Claude can query your collections as tools.
Where to start¶
If you are standing a server up, read Getting started and then the configuration reference.
If you are changing a configuration that already runs, the editor will tell you whether it builds before you save it.
If you are connecting an agent, start at MCP getting started.
Live demo¶
A running instance is at fastgeoapi.fly.dev, on one vCPU in Paris. Four of its collections are cloud-native formats served in place: Overture Maps places, as GeoParquet and as an 18 GB PMTiles archive, both read where Overture publishes them in us-west-2; and a Lazio road extract in the same two shapes, staged in a bucket beside the server — the pair that shows what locality is worth. Its OpenAPI document is published here, and Using fastgeoapi from QGIS puts two of those collections on a map.
Nothing about it is private: the configuration it serves is readable, the datasets it names are readable, and the same document is pygeoapi-config.demo.yml in the repository — so it can be run, diffed and disagreed with. How to read it, and why your own should not be public.
Installation¶
The full instructions — including the authentication options, which are the part worth reading — are in Getting started.