Graticula

Self-hosted GIS server · v1

A GIS server and its portal, from one container and one Postgres.

Server publishes your PostGIS tables and GeoParquet files as feature, map, vector tile, image and geometry services. Studio does the portal's work — items, members, roles, groups and sharing. ArcGIS Pro, Field Maps and QGIS open them the way they open any ArcGIS server.

  • Speaks the ArcGIS REST API
  • One process, one database
  • Elastic License 2.0
The Studio map viewer: a layer panel on the left and the buildings of Istanbul's historic peninsula drawn as vector tiles from a GeoParquet file.

Server

Publish from PostGIS. The services look like ArcGIS services.

Register a database, choose its tables and publish them. The service directory, the JSON documents and the tokens have the shapes ArcGIS clients already expect, at /rest/services. Where a service is partial, it says which part.

Complete

Feature services

Query and edit PostGIS tables and hosted layers. Attachments, relationships, time and Z/M values. JSON, GeoJSON or PBF. A hosted layer can keep every version of its features: ArcGIS clients ask for a moment in the past, Studio puts a feature back as it was, and the owner chooses how many days to keep. Any layer can be downloaded as a GeoPackage, Shapefile, File Geodatabase, Excel workbook, KML, CSV, GeoJSON or Esri JSON file; a GeoPackage and a File Geodatabase keep the layer's domains.

query · applyEdits · attachments · queryRelatedRecords

Complete

Map services

Maps drawn on the server from each layer's stored symbology, by time where a layer has a time field.

export · identify · legend · query

Complete

Vector tile services

Tiles from hosted data, registered PostGIS tables and GeoParquet files, with styles, icons and a glyph set so labels draw. The cache can be seeded ahead of the first request. A layer's picture markers are drawn from their own images. The glyph set covers Latin, Greek, Cyrillic, Arabic, Hebrew, Armenian, Georgian, Devanagari, Bengali, Tamil and Thai, though MapLibre draws the last three Indic scripts unshaped; Chinese, Japanese and Korean come with an optional build. Tiles can also be cut on the Turkish national grids (TUREF) and exported for offline use, as a VTPK for ArcGIS Pro and Field Maps or as a PMTiles archive.

tile · resources/styles · exportTiles

Complete

Image services

GeoTIFF, JPEG 2000, NetCDF, HDF, ERDAS Imagine and ASCII grids uploaded from Studio, or GeoTIFFs registered where they lie; a NetCDF of variables over time and depth becomes a multidimensional service of slices. Each service is a mosaic dataset's catalog: queried, ordered or composited by a mosaic rule (seamlines included), reordered in Studio, edited as ArcGIS edits one. Eleven raster functions from Hillshade and NDVI to Clip and Statistics, measurement on the ground, a raster attribute table, Download and pyramids. MrSID and ECW are refused by name: only their makers' SDKs read them.

exportImage · identify · query · measure · getSamples

Complete

Geometry service

Buffer, intersect, union, difference, cut, project, autoComplete, reshape, trimExtend and more. findTransformations lists the datum transformations between two references, and project applies the one you name.

Also

OGC interfaces

The same layers over OGC API – Features (filtered in CQL2), WFS 2.0 and 1.1 (editable through WFS-T), and WMS 1.3 and 1.1 (with a style sent as SLD), image services over WMS and WMTS and their values over WCS 2.0 and 1.0, any map in Google Earth through KML, and the vector tiles over OGC API – Tiles, WMTS and TileJSON. Each service answers at its own ArcGIS-style WMSServer and WFSServer address, and its owner turns each face on or off, states its fees and access constraints, and can make it an INSPIRE View and Download service. A layer can have its own title in these lists, and a client that cannot use a token signs in with Basic authentication over HTTPS.

GeoParquet

Serve GeoParquet files where they are.

No import step. DuckDB reads the files in place, and the server publishes them like any other layer.

  • A folder on the server, an https:// address or an s3:// prefix.
  • A DuckDB database file or a MotherDuck database.
  • Feature, map and vector tile services from the same file.
  • Read only: no edits, attachments or related records on these layers.
Browse the GeoParquet services on the demo

The same 1.27 million Istanbul buildings, three ways. One dataset published from a GeoParquet file, a DuckDB database file and a MotherDuck database, each as a feature, map and vector tile service. Open any of them on the demo:

Browse the city services: Istanbul and New York
A map of western Istanbul covered in a dense teal network of roads, drawn by Graticula over an OpenStreetMap basemap.
The whole file: every street is a row in a Parquet file.

Studio

If you have run ArcGIS Enterprise, you already know the shape of this.

Studio is where publishers work. Server is where the operator works. They are one process and one API, so there is no site to create, no data store to install and no portal to federate.

In ArcGIS EnterpriseIn Graticula
A GIS Server site with several machinesOne server process
ArcGIS Data Store, installed separatelyThe PostgreSQL the server already uses
An enterprise geodatabase as a data storeYour own PostGIS, registered, read and write
Portal for ArcGISStudio: items, members, roles, groups, sharing and saved web maps
Server ManagerServer: the operator's console
SAML, OpenID Connect and Active Directory sign-inThe same three, tested against providers the test suite runs
Migrating an ArcGIS Server sitegraticula tools migrate brings layer drawing and field aliases across

Clients

Opened by the clients you already have.

Nothing to install on the desktop and no plug-in. The clients connect to Graticula the same way they connect to an ArcGIS server.

ArcGIS Pro

Add a portal connection, sign in, browse My Content, add a layer and edit it. Vector tile services draw, classified styles included.

ArcGIS Field Maps

Signs in through OAuth 2.0, served by Graticula and completed by the JavaScript SDK; Field Maps itself has not yet been tried on a device. Online data collection uses the same feature services. Offline editing is not supported. A vector tile basemap can be exported as a VTPK, not yet tried in a Field Maps offline area.

ArcGIS Maps SDK for JavaScript

Web apps load the layers and sign people in through the same OAuth flow.

QGIS and OGC clients

Through the ArcGIS REST connection, or through OGC API – Features, WFS, WMS and WCS. Vector tiles through OGC API – Tiles, WMTS or TileJSON. Over OGC, a secured service takes a user name and password over HTTPS.

Install

Docker is the only thing you install.

No .NET SDK, no separate PostgreSQL and no openssl. The images are on the GitHub Container Registry for amd64 and arm64.

  1. Make a key

    It seals stored credentials. There is no default key.

    docker compose run --rm --no-deps server keygen
    echo "GIS_SECRET_KEY=<the value it printed>" > .env
  2. Create the schema

    Migrations are explicit, never automatic.

    docker compose run --rm server migrate --apply
  3. Start it

    It makes its own certificate on the first run and keeps it.

    docker compose up -d
  4. Claim the server

    A new server writes a single-use setup token to its log.

    docker compose logs server | grep -A2 "SETUP REQUIRED"

The full instructions are in the README

Limits

What it does not do yet.

Read this before you plan around it. Each item is a limit today.

  • PostGIS only, for databasesNo Oracle or SQL Server. GeoParquet is the one other source, and it is read only.
  • Single sign-on is not yet proven in productionOIDC, SAML and Active Directory are tested against test providers, not yet against a real Entra ID or AD FS.
  • No offline editingNo replicas or sync, so Field Maps offline areas cannot take features offline. Vector tiles export as VTPK or PMTiles, not yet tried in Field Maps.
  • No geocoding, apps or dashboardsStudio saves web maps. It does not build apps.
  • One machineNo clustering and no failover.
  • Not yet run in productionIt runs and it is tested. Nobody but its author has operated it in production yet.
The full list, with the reasons

See it with real data.

The demo is a running Graticula server: roads, buildings and places from PostGIS, GeoParquet, DuckDB and MotherDuck. Open a service, draw a map, read the JSON.