Portolan is an opinionated specification for serverless spatial data infrastructures. It defines how publishers store, organize, document, and serve geospatial data as static files in their own storage. Every Portolan catalog should offer a predictable, high-quality experience for publishers, people, and agents.
Portolan builds on existing standards instead of replacing them. GeoParquet and PMTiles serve vector data, while COG serves raster data. STAC provides a consistent catalog structure and index. Required README and AGENTS.md files explain each catalog to people and agents. The specification also covers operational details such as spatial ordering, bounding boxes, and CORS.
This repository contains the Portolan CLI, an implementation of the specification. It helps publishers:
- Build STAC catalogs with GeoParquet and COG assets.
- Extract ArcGIS, WFS, and Carto sources.
- Generate thumbnails, PMTiles, MapLibre styles, and STAC GeoParquet indexes.
- Track collection versions and checksums without a database.
- Validate catalog metadata, structure, and assets against the Portolan specification.
- Push, pull, sync, and clone catalogs through S3, GCS, Azure, or S3-compatible storage.
- Use structured JSON output, a typed Python API, or backend plugins.
Portolan CLI is pre-1.0 software, as breaking changes are expected for the time being.
uv tool install portolan-cliOr with pip:
pip install portolan-cliStart with the end-to-end publishing example. We plan to add more tutorials over time.
See the full documentation. It includes an auto-generated CLI reference and Python API reference.
git clone https://github.com/portolan-sdi/portolan-cli.git
cd portolan-cli
uv sync --all-extras
uv run pytestSee the contributing guide for details.