pygeoapi is a Python server for the OGC API family of standards. It is an OGC Reference Implementation for several of them, and it focuses entirely on OGC API. neoserver serves OGC API Features and OGC API Tiles alongside the classic WMS, WFS, WCS, and WMTS services, from one catalog managed in a web console.
This comparison is based on the source code and documentation of pygeoapi 0.24.0.
At a glance
| neoserver | pygeoapi 0.24.0 | |
|---|---|---|
| Runtime | Go server, one Docker image with the console and native geospatial libraries | Python application on Flask, Starlette, or Django, also available as a Docker image |
| License | MIT | MIT |
| Configuration | Web console and management REST API, with an encrypted catalog | YAML configuration file, plus an optional Admin API |
| OGC API | Features (with CQL2 and queryables) and Tiles | Features, Tiles, and EDR as Reference Implementation. Processes compliant. Coverages, Maps, and Records in progress. STAC and pub/sub too. |
| Classic services | WMS 1.3.0, WFS 2.0.0/2.0.2, WCS 2.1/2.0.1, WMTS 1.0 | None. WMS and WMTS facades can proxy another server for OGC API Maps and Tiles. |
| Map rendering | Server-side rendering with SLD styles, for WMS, WMTS, and map tiles | Through providers, such as MapScript or a remote WMS |
| Data sources | PostGIS, DuckDB Spatial, GeoParquet, common vector files, GeoTIFF/COG, NetCDF, GRIB2 | PostgreSQL, Oracle, Elasticsearch, OpenSearch, MongoDB, OGR, CSV, GeoJSON, Parquet/GeoParquet, rasterio, xarray, and more |
| Access control | Workspaces, roles, scoped API keys, OIDC console sign-in, and per-layer rules built in | Out of scope. The docs say authentication and authorization must be provided by another service. |
| Tile caching | Persistent cache on the filesystem or S3, with quotas and seeding jobs | Serves existing tiles, or generates vector tiles from PostgreSQL or Elasticsearch |
Where neoserver is a good fit
- You also need WMS, WFS, WCS, or WMTS. Many desktop GIS and existing integrations still use the classic services. neoserver serves them from the same published layers as OGC API. See Serve PostGIS and DuckDB as WMS.
- You need styled maps. neoserver renders maps and map tiles from your data with SLD styles, without a separate rendering server.
- You need access control in the server. Workspaces, roles, scoped API keys, and per-layer read rules are built in. With pygeoapi, you put that in front of it yourself.
- You’d rather manage publishing in a browser. Stores, layers, styles, and service settings are managed in the console instead of a YAML file.
- You serve tiles at scale. WMTS and OGC API Tiles share a persistent cache with seeding jobs.
Where pygeoapi is the better choice
- Breadth of OGC API standards. pygeoapi implements Environmental Data Retrieval, Processes, Coverages, Maps, and Records as well as Features and Tiles. neoserver implements Features and Tiles.
- Reference Implementation status. pygeoapi is an OGC Reference Implementation for OGC API Features, Tiles, and EDR.
- Python extensibility. Providers and processes are Python plugins, so connecting a custom data source or publishing a processing workflow is straightforward for Python teams.
- Data providers. pygeoapi can publish from search engines, document databases, and scientific array formats such as xarray.
Using both
pygeoapi and neoserver can serve the same PostGIS database side by side. For example, neoserver can provide WMS, WFS, and cached tiles with access control, while pygeoapi publishes EDR or Processes for the same data.