Help us shape the future of Go! Take the 2026 Go Developer Survey

neoserver

module
v0.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 1, 2026 License: MIT

README

neoserver

Current version: 0.3.0.

neoserver is a modern, multi-workspace geospatial server written in Go. It publishes PostGIS, DuckDB, GeoParquet, vector-file, and raster data through OGC API - Features, WMS 1.3.0, WFS 2.0, WCS 2.1/2.0.1, OGC API - Tiles, a management REST API, and an embedded administration console.

It is designed as a lightweight, API-driven alternative to GeoServer, with isolated workspaces, configurable service metadata, role-based access control, and an encrypted DuckDB backing store.

Features

  • Workspace-isolated data sources, layers, styles, credentials, and OGC settings
  • PostGIS, DuckDB Spatial, GeoParquet, Shapefile, GeoPackage, GeoJSON, and FlatGeobuf
  • OGC API - Features with CRS, bbox, temporal queries, Queryables, CQL2 text/basic spatial filters, property selection, sorting, and linked paging
  • WMS 1.3.0 with GetMap, GetFeatureInfo, GetLegendGraphic, SLD, time/elevation dimensions, raster/document formats, MapML, and UTFGrid
  • WFS 2.0 with GML/GeoJSON/CSV/GeoPackage/SHAPE-ZIP output, FES filters, stored queries, transactions, and feature locking
  • WCS 2.1 with WCS 2.0.1 compatibility, GeoTIFF/COG and PostGIS raster sources, GML/GeoTIFF output, and 2D subsetting
  • OGC API - Tiles and WMTS 1.0 with Mapbox Vector Tiles, raster map tiles, TileJSON, standard tile matrix sets, and a shared persistent cache
  • Optional workspace STAC catalogs for dataset discovery, mapped asset records, raster Items, and imported metadata
  • Management API and generated Swagger UI
  • Embedded React administration console for catalog, security, imports, caches, styles, settings, and map preview
  • API keys, self-signed JWTs, static/basic authentication, OIDC, workspace RBAC, and per-layer read controls
  • Configurable response caching, resource limits, OpenTelemetry export, and protected pprof endpoints
  • Filesystem or S3-compatible persistent tile caching with quotas and resumable seed/reseed/truncate jobs

Architecture

Management API
    |
    +-- Workspace
        +-- Services (datasource connections)
        |   +-- Published layers and SQL views
        +-- STAC Collections, Items, and source bindings
        +-- Styles
        +-- API keys and claim mappings
        +-- OGC service settings

Published endpoints:
  /workspaces/{workspace}/ogc
  /workspaces/{workspace}/wms
  /workspaces/{workspace}/wfs
  /workspaces/{workspace}/ogc-tiles
  /workspaces/{workspace}/wcs
  /workspaces/{workspace}/wmts
  /workspaces/{workspace}/stac (when enabled)
  /admin

The server stores its configuration and security state in an encrypted DuckDB file. Feature data remains in the configured source systems.

Deployment model and limits

  • One active server per store. The catalog, tile-cache index and mosaic index are DuckDB files held with exclusive locks, so a second process against the same store refuses to start. There is no clustering or active-active high availability; scale by running separate instances with separate stores, and recover by restarting or replacing the single node. Admin CLI commands such as create-token also need the server stopped.
  • Backups are taken offline. Stop the server (or otherwise quiesce all writers) and copy the catalog, audit database and other enabled state together. There is no online backup command.
  • The store key cannot be rotated. A leaked NEOSRV_STORE_KEY means re-initializing the catalog.

See Deployment for details on locking, backups, and store-key recovery.

Install

Released images are published to Docker Hub for Linux amd64:

docker pull tobilg/neoserver:0.3.0     # use :latest for the latest stable release

Each GitHub release also carries the image archive, a CycloneDX SBOM, SHA256SUMS and a qualification.json recording the gates that build passed.

Quickstart with Docker Compose

The minimal-image baseline measured 634 MB uncompressed (230 MB as a compressed Docker archive), about 75% smaller than 0.1.0. The runtime bundles DuckDB extensions for offline startup and omits PROJ datum grids. For precise grid-dependent raster reprojection, add the required grids using the deployment instructions.

Choose your path:

  • UI-first tutorial: Docker + browser, from an empty catalog to a private layer and a working client. No management API commands.
  • API-first tutorial: the same workflow using scripted HTTP requests.
  • Contributor setup: make doctor checks dependencies; make dev starts the backend and hot-reloading console with an isolated local catalog.

Requirements: Docker Compose, curl, jq, and OpenSSL.

For this local tutorial, use the repository's development key. Generate and retain a strong key (openssl rand -hex 32) for any deployment:

export NEOSRV_STORE_KEY=abc123 # Local only; never use in production.
export NEOSRV_SERVER_URLBASE="http://localhost:9000"

Initialize the backing store. The command prints a one-time bootstrap JWT; save it as TOKEN.

docker compose build server
docker compose run --rm --no-deps server init --store-path /data/neoserver.db
export TOKEN="paste-bootstrap-token-here"

Start neoserver and the seeded PostGIS database:

docker compose --profile postgis up --build

Verify the server:

curl http://localhost:9000/health
curl http://localhost:9000/ready
curl -H "Authorization: Bearer $TOKEN" \
  http://localhost:9000/api/v1/workspaces

The store and PostGIS volumes are persistent. On later starts, reuse the same NEOSRV_STORE_KEY and run only the compose up command. Continue with the complete getting started tutorial to create a workspace, publish the included sample data, and access every service.

Deployment

For a native development build, install GDAL 3 development headers first:

make build
export NEOSRV_STORE_KEY="$(openssl rand -hex 32)"
./neoserver init --store-path ./data/neoserver.db
./neoserver serve

For containers and production deployments, persist the backing-store path, supply the original encryption key through a secret manager, configure Server.UrlBase for the externally visible URL, and terminate authenticated traffic with HTTPS. See Deployment for initialization, persistence, proxy, backup, and upgrade guidance.

Documentation

Start and operate
Publish and manage data
  • Data sources — connection formats, discovery, files, remote data, and SQL views
  • WCS 2.1 — raster publication, subsetting, formats, and compatibility
  • SpatioTemporal Asset Catalog — publish existing datasets or import metadata, then search assets within a workspace
  • Management API — task-oriented administration and API reference links
Consume OGC services
Contribute

API reference and UI

After startup:

Replace demo with a workspace name or UUID for workspace endpoints. If Server.BasePath is configured, prepend it to every path.

License

neoserver is distributed under the MIT License. It bundles third-party software under its own terms; see third-party licenses and notices.

Directories

Path Synopsis
cmd
neoserver command
internal
admin
Package admin serves the embedded neoserver administration console.
Package admin serves the embedded neoserver administration console.
cataloglifecycle
Package cataloglifecycle coordinates referentially-complete publication deletion across the primary catalog, operational DuckDB stores, managed files, and process-local runtime state.
Package cataloglifecycle coordinates referentially-complete publication deletion across the primary catalog, operational DuckDB stores, managed files, and process-local runtime state.
conformance
Package conformance contains the canonical requirement-class identifiers advertised by neoserver's OGC services.
Package conformance contains the canonical requirement-class identifiers advertised by neoserver's OGC services.
crs
Package crs provides unified CRS/SRS parsing utilities for geospatial services.
Package crs provides unified CRS/SRS parsing utilities for geospatial services.
datasource
Package datasource provides extension preloading for DuckDB-based datasources.
Package datasource provides extension preloading for DuckDB-based datasources.
datasource/duckdb
Package duckdb provides a DuckDB spatial DataSource implementation.
Package duckdb provides a DuckDB spatial DataSource implementation.
datasource/duckdbsqlview
Package duckdbsqlview provides shared SQL View support for DuckDB-based datasources.
Package duckdbsqlview provides shared SQL View support for DuckDB-based datasources.
datasource/geoparquet
Package geoparquet provides a GeoParquet DataSource implementation using DuckDB.
Package geoparquet provides a GeoParquet DataSource implementation using DuckDB.
datasource/pathpolicy
Package pathpolicy enforces an allowlist over datasource file paths and URLs.
Package pathpolicy enforces an allowlist over datasource file paths and URLs.
datasource/postgis
Package postgis provides a PostGIS DataSource implementation.
Package postgis provides a PostGIS DataSource implementation.
datasource/rasterfile
Package rasterfile implements WCS coverage access for GeoTIFF and Cloud Optimized GeoTIFF files through GDAL.
Package rasterfile implements WCS coverage access for GeoTIFF and Cloud Optimized GeoTIFF files through GDAL.
datasource/rastergrid
Package rastergrid provides shared GDAL target-grid operations for raster file and database-backed coverage sources.
Package rastergrid provides shared GDAL target-grid operations for raster file and database-backed coverage sources.
datasource/rastermosaic
Package rastermosaic provides a managed collection of compatible GeoTIFF granules as one coverage.
Package rastermosaic provides a managed collection of compatible GeoTIFF granules as one coverage.
datasource/vectorfile
Package vectorfile provides a DataSource implementation for vector file formats (Shapefile, GeoPackage, GeoJSON, etc.) using DuckDB's spatial extension.
Package vectorfile provides a DataSource implementation for vector file formats (Shapefile, GeoPackage, GeoJSON, etc.) using DuckDB's spatial extension.
dbschema
Package dbschema implements version guards and transactional upgrades for neoserver's DuckDB state databases.
Package dbschema implements version guards and transactional upgrades for neoserver's DuckDB state databases.
filter/ast
Package ast defines a shared filter AST (Abstract Syntax Tree) for both CQL2 text filters and FES 2.0 XML filters.
Package ast defines a shared filter AST (Abstract Syntax Tree) for both CQL2 text filters and FES 2.0 XML filters.
gdalcap
Package gdalcap centralizes the optional GDAL drivers used by protocol encoders.
Package gdalcap centralizes the optional GDAL drivers used by protocol encoders.
gdalmd
Package gdalmd provides the small portion of GDAL's multidimensional C API that is not exposed by the pinned godal dependency.
Package gdalmd provides the small portion of GDAL's multidimensional C API that is not exposed by the pinned godal dependency.
httputil
Package httputil provides shared HTTP utility functions.
Package httputil provides shared HTTP utility functions.
identity
Package identity provides authentication and identity extraction for neoserver.
Package identity provides authentication and identity extraction for neoserver.
importer
Package importer implements durable, bounded managed-vector import jobs.
Package importer implements durable, bounded managed-vector import jobs.
mgmt
Package mgmt provides the REST management API for neoserver.
Package mgmt provides the REST management API for neoserver.
mosaiccatalog
Package mosaiccatalog owns the optional operational index for managed raster mosaics.
Package mosaiccatalog owns the optional operational index for managed raster mosaics.
ogc
protocolrequest
Package protocolrequest resolves routing semantics once, before authentication, authorization and auditing.
Package protocolrequest resolves routing semantics once, before authentication, authorization and auditing.
rbac
Package rbac provides role-based access control using Casbin.
Package rbac provides role-based access control using Casbin.
renderer
Package renderer provides map rendering functionality for WMS.
Package renderer provides map rendering functionality for WMS.
sld
Package sld provides parsing and evaluation of OGC Styled Layer Descriptor (SLD) documents.
Package sld provides parsing and evaluation of OGC Styled Layer Descriptor (SLD) documents.
sqlutil
Package sqlutil holds the quoting shared by every generated SQL statement.
Package sqlutil holds the quoting shared by every generated SQL statement.
stac
Package stac implements workspace-scoped STAC API 1.0.0.
Package stac implements workspace-scoped STAC API 1.0.0.
staccatalog
Package staccatalog owns the encrypted, workspace-partitioned STAC inventory.
Package staccatalog owns the encrypted, workspace-partitioned STAC inventory.
stacmodel
Package stacmodel validates STAC documents against pinned, offline schemas.
Package stacmodel validates STAC documents against pinned, offline schemas.
stacsource
Package stacsource maps existing neoserver publications to STAC metadata.
Package stacsource maps existing neoserver publications to STAC metadata.
store
Package store provides an encrypted DuckDB backing store for neoserver configuration.
Package store provides an encrypted DuckDB backing store for neoserver configuration.
stylegraphics
Package stylegraphics resolves managed and allowlisted remote graphics for request-scoped portrayal.
Package stylegraphics resolves managed and allowlisted remote graphics for request-scoped portrayal.
testutil/schematest
Package schematest compares frozen baselines with current initialization.
Package schematest compares frozen baselines with current initialization.
tilejobs
Package tilejobs runs durable, resumable persistent-cache maintenance jobs.
Package tilejobs runs durable, resumable persistent-cache maintenance jobs.
tiles
Package tiles provides OGC API - Tiles support for neoserver.
Package tiles provides OGC API - Tiles support for neoserver.
wcs
wfs
Package wfs implements an OGC WFS 2.0.0 (Web Feature Service) server.
Package wfs implements an OGC WFS 2.0.0 (Web Feature Service) server.
wms
Package wms implements an OGC WMS 1.3.0 server.
Package wms implements an OGC WMS 1.3.0 server.
wmts
Package wmts implements the WMTS 1.0.0 KVP and REST bindings.
Package wmts implements the WMTS 1.0.0 KVP and REST bindings.
workspace
Package workspace provides runtime workspace management for neoserver.
Package workspace provides runtime workspace management for neoserver.
testing
fixtures/generate command
Regenerate the synthetic runtime-format fixtures from the repository root: make fixture-formats (requires native GDAL drivers and DuckDB spatial).
Regenerate the synthetic runtime-format fixtures from the repository root: make fixture-formats (requires native GDAL drivers and DuckDB spatial).
officialets/cmd/etsreport command
etsreport renders existing conformance evidence; it never runs the suites.
etsreport renders existing conformance evidence; it never runs the suites.
officialets/patches command
Correct two locking-test defects in ets-wfs20 1.42: the response-element lookup and the use of sampled IDs after destructive transaction tests.
Correct two locking-test defects in ets-wfs20 1.42: the response-element lookup and the use of sampled IDs after destructive transaction tests.
officialets/report
Package report turns existing ETS evidence into static reports.
Package report turns existing ETS evidence into static reports.
ogcapi
Package ogcapi provides conformance tests for OGC API - Features.
Package ogcapi provides conformance tests for OGC API - Features.
ogcapi/geojson
Package geojson provides GeoJSON parsing and validation utilities for OGC API tests.
Package geojson provides GeoJSON parsing and validation utilities for OGC API tests.
ogcapi/links
Package links provides link validation utilities for OGC API tests.
Package links provides link validation utilities for OGC API tests.
ogcapi/testserver
Package testserver provides an in-memory OGC API Features server for testing.
Package testserver provides an in-memory OGC API Features server for testing.
wfs
Package wfs provides WFS 2.0 test utilities.
Package wfs provides WFS 2.0 test utilities.
wfs/capabilities
Package capabilities provides WFS capabilities XML parsing utilities.
Package capabilities provides WFS capabilities XML parsing utilities.
wfs/exceptions
Package exceptions provides OWS 1.1 exception report parsing utilities.
Package exceptions provides OWS 1.1 exception report parsing utilities.
wfs/filter
Package filter provides FES 2.0 filter building utilities.
Package filter provides FES 2.0 filter building utilities.
wfs/gml
Package gml provides GML 3.2 parsing utilities.
Package gml provides GML 3.2 parsing utilities.
wfs/mockserver
Package mockserver provides a mock WFS 2.0 server for testing.
Package mockserver provides a mock WFS 2.0 server for testing.
wms
Package wms provides WMS 1.3.0 conformance testing utilities.
Package wms provides WMS 1.3.0 conformance testing utilities.
wms/capabilities
Package capabilities provides WMS capabilities XML parsing utilities.
Package capabilities provides WMS capabilities XML parsing utilities.
wms/exceptions
Package exceptions provides WMS exception XML parsing utilities.
Package exceptions provides WMS exception XML parsing utilities.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL