Portolan CLI
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.
Installation
Portolan CLI is pre-1.0 software, as breaking changes are expected for the time being.
uv tool install portolan-cli
Or with pip:
pip install portolan-cli
Documentation
Start 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.
Development
git clone https://github.com/portolan-sdi/portolan-cli.git
cd portolan-cli
uv sync --all-extras
uv run pytest
See the contributing guide for details.
License
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file portolan_cli-0.8.0.tar.gz.
File metadata
- Download URL: portolan_cli-0.8.0.tar.gz
- Upload date:
- Size: 6.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
edf5e9c92d1dced3f073a4e9af15836590fdc1ca5b62e355858306c20888de83
|
|
| MD5 |
1c81d62084576ce2a22a3a775bab53ae
|
|
| BLAKE2b-256 |
d92dd26e9b68415297259d0fff53b65d666d8dc3bf42ccdc2785b3ec2175b479
|
Provenance
The following attestation bundles were made for portolan_cli-0.8.0.tar.gz:
Publisher:
release.yml on portolan-sdi/portolan-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
portolan_cli-0.8.0.tar.gz -
Subject digest:
edf5e9c92d1dced3f073a4e9af15836590fdc1ca5b62e355858306c20888de83 - Sigstore transparency entry: 2665038275
- Sigstore integration time:
-
Permalink:
portolan-sdi/portolan-cli@4180ef961529f9657d553966ca0ce49a02262544 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/portolan-sdi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4180ef961529f9657d553966ca0ce49a02262544 -
Trigger Event:
push
-
Statement type:
File details
Details for the file portolan_cli-0.8.0-py3-none-any.whl.
File metadata
- Download URL: portolan_cli-0.8.0-py3-none-any.whl
- Upload date:
- Size: 749.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
faae665b2902688711beb00cb02488eb106d116c35a4cfe6699ea5d3b88dd1e1
|
|
| MD5 |
ebab5aaf4055ea7973b682631da1b0b3
|
|
| BLAKE2b-256 |
e2829565b6076456605d28315cb5102bb85e1bfc25aacf4927dcd446c7ff8d59
|
Provenance
The following attestation bundles were made for portolan_cli-0.8.0-py3-none-any.whl:
Publisher:
release.yml on portolan-sdi/portolan-cli
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
portolan_cli-0.8.0-py3-none-any.whl -
Subject digest:
faae665b2902688711beb00cb02488eb106d116c35a4cfe6699ea5d3b88dd1e1 - Sigstore transparency entry: 2665038311
- Sigstore integration time:
-
Permalink:
portolan-sdi/portolan-cli@4180ef961529f9657d553966ca0ce49a02262544 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/portolan-sdi
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@4180ef961529f9657d553966ca0ce49a02262544 -
Trigger Event:
push
-
Statement type: