A CLI tool for managing cloud-native geospatial data
Project description
Portolan enables organizations to share geospatial data in a low-cost, accessible, sovereign, and reliable way. Built on cloud-native geospatial formats, a Portolan catalog is as interactive as any geospatial portal—but faster, more scalable, and much cheaper to run. A small government's vector data costs a few dollars a month; even full imagery and point clouds typically stay under $50/month.
This CLI converts data to cloud-native formats (GeoParquet, COG), generates rich STAC metadata, and syncs to any object storage—no servers required.
Why Portolan?
| Benefit | How |
|---|---|
| Scalable | Cloud object storage that scales to petabytes |
| Open | 100% open source, open formats (GeoParquet, COG, STAC, Iceberg) |
| AI-Ready | STAC metadata enables semantic search and LLM integration |
| Cheap | Pay only for storage + egress — no servers to run |
| Sovereign | Host anywhere (AWS, GCS, Azure, MinIO, Cloudflare R2) |
| Breaks the GIS silo | Query with DuckDB, Snowflake, BigQuery, Databricks, Pandas — not just GIS tools |
What It Does
- Convert vector/raster data to cloud-native formats (GeoParquet, COG)
- Generate STAC catalogs with rich metadata, thumbnails, and MapLibre styles
- Version datasets with checksums and history tracking
- Sync to S3, GCS, Azure, or any S3-compatible storage
Quick Example
portolan init
portolan dataset add census.parquet --title "Census 2022" --auto
portolan remote add prod s3://my-bucket/catalog
portolan sync
Installation
Recommended: pipx (for global use)
pipx install portolan-cli
This installs portolan in an isolated environment while making the command globally available.
If you don't have pipx installed:
python3 -m pip install --user pipx
python3 -m pipx ensurepath
Alternative: pip
pip install portolan-cli
Note: This installs into your global or user site-packages and may conflict with other packages.
For Development
Use uv for local development:
git clone https://github.com/portolan-sdi/portolan-cli.git
cd portolan-cli
uv sync --all-extras
uv run portolan --help
See Contributing Guide for full development setup.
Documentation
License
Apache 2.0 — see LICENSE
Project details
Release history Release notifications | RSS feed
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.2.0.tar.gz.
File metadata
- Download URL: portolan_cli-0.2.0.tar.gz
- Upload date:
- Size: 445.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d8240bf41b4f4041ec4f16d7f294ad1976447381120d687732b2669a35c74019
|
|
| MD5 |
f6b8675a44c3b8b450712ff86953b538
|
|
| BLAKE2b-256 |
68723a61b0eb870d6b2efffea1ff5a39a39dd2ab682242f659ca5457ebc7a588
|
Provenance
The following attestation bundles were made for portolan_cli-0.2.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.2.0.tar.gz -
Subject digest:
d8240bf41b4f4041ec4f16d7f294ad1976447381120d687732b2669a35c74019 - Sigstore transparency entry: 919711662
- Sigstore integration time:
-
Permalink:
portolan-sdi/portolan-cli@9de4a6a81f788df862989210a979ecf9de8935f3 -
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@9de4a6a81f788df862989210a979ecf9de8935f3 -
Trigger Event:
push
-
Statement type:
File details
Details for the file portolan_cli-0.2.0-py3-none-any.whl.
File metadata
- Download URL: portolan_cli-0.2.0-py3-none-any.whl
- Upload date:
- Size: 10.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a738ac61280603d173372cde6707dffa82a4e98d6248f8da00e47a90ce5fb9da
|
|
| MD5 |
9ffa3bffe7377a448cb2dc404b614590
|
|
| BLAKE2b-256 |
4130708e8283879e9342f95fc6f1ecaaf79776ea30bb17f1acf4d4a80267a578
|
Provenance
The following attestation bundles were made for portolan_cli-0.2.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.2.0-py3-none-any.whl -
Subject digest:
a738ac61280603d173372cde6707dffa82a4e98d6248f8da00e47a90ce5fb9da - Sigstore transparency entry: 919711665
- Sigstore integration time:
-
Permalink:
portolan-sdi/portolan-cli@9de4a6a81f788df862989210a979ecf9de8935f3 -
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@9de4a6a81f788df862989210a979ecf9de8935f3 -
Trigger Event:
push
-
Statement type: