SuperSTAC (Python)
Many catalogs. One search.
Search across STAC catalogs through one interface, with Python, Rust, or the command line.
This package provides the Python bindings for SuperSTAC.
Status: alpha. APIs are not yet stable. Pre-1.0; expect breaking changes.
superstac provides a synchronous Client and an AsyncClient for asyncio.
Results are Python dictionaries. Some method names resemble pystac-client, but
this is not a drop-in replacement.
Documentation
Read the SuperSTAC documentation for installation, tutorials, and API guides.
Try the Python quickstart notebook for a two-catalog search, footprint map, and GeoJSON export in Colab or Jupyter.
Upgrading from 0.1.0a2
Version 0.2.0 replaces the old Python implementation with a Rust engine.
Use from superstac import Client, AsyncClient and follow the
Python guide to migrate.
Results are dictionaries, matched() counts returned items, and to_geojson()
exports a FeatureCollection. Custom authentication hooks and the full
pystac-client API are not supported. CPython 3.9 or newer is required.
Install
pip install superstac
Or from source:
git clone https://github.com/spatialnode/superstac
cd superstac/crates/python
pip install maturin
maturin develop
Quickstart
Search a single catalog
from superstac import Client
client = Client.open("https://earth-search.aws.element84.com/v1")
search = client.search(
collections=["sentinel-2-l2a"],
bbox=[6.0, 49.0, 7.0, 50.0],
datetime="2024-01-01/2024-01-31",
limit=50,
)
for item in search.items():
print(item["id"], item["properties"]["datetime"])
print(search.matched(), "items")
fc = search.to_geojson() # GeoJSON FeatureCollection dict
Federated across multiple catalogs
Pass a YAML-shaped dict in one call:
from superstac import Client
client = Client({
"catalogs": [
{"id": "earth-search", "url": "https://earth-search.aws.element84.com/v1"},
{"id": "microsoft", "url": "https://planetarycomputer.microsoft.com/api/stac/v1"},
],
"settings": {"deduplicate_items": True, "max_concurrent_catalogs": 8},
})
client.start()
search = client.search(collections=["sentinel-2-l2a"], limit=50)
items = list(search.items())
print(search.metadata) # per-catalog stats: queried, succeeded, failed, dedupes
Or build it up incrementally (any combination is fine):
client = Client()
client.add_catalogs([
{"id": "earth-search", "url": "https://earth-search.aws.element84.com/v1"},
{"id": "microsoft", "url": "https://planetarycomputer.microsoft.com/api/stac/v1"},
])
client.update_settings({"deduplicate_items": True})
client.start()
Async
import asyncio
from superstac import AsyncClient
async def main():
client = await AsyncClient.open("https://earth-search.aws.element84.com/v1")
search = await client.search(collections=["sentinel-2-l2a"], limit=50)
for item in search.items():
print(item["id"])
await client.shutdown()
asyncio.run(main())
Load from YAML
client = Client.from_yaml("superstac.yml") # sync
client = AsyncClient.from_yaml("superstac.yml") # async
License
MIT.
GeoParquet inventories (v0.3)
Wheels include GeoParquet support (superstac.geoparquet_available). Both clients
accept mode="snapshot" or mode="auto", dataset="./data", and
max_snapshot_age_seconds=86400, including through from_yaml() and open().
The default is mode="live" without a dataset.
from superstac import Client
client = Client.from_yaml("superstac.yml")
client.ingest("earth-search", "./data", name="madrid",
collections=["sentinel-2-l2a"],
bbox=[-3.8, 40.3, -3.6, 40.5],
datetime="2025-02-01/2025-02-08",
progress=lambda event: print(event["phase"], event["items_saved"]))
local = Client.from_yaml("superstac.yml", mode="snapshot", dataset="./data")
result = local.search(collections=["sentinel-2-l2a"],
bbox=[-3.8, 40.3, -3.6, 40.5],
datetime="2025-02-01/2025-02-08", sortby=["-datetime"])
AsyncClient.ingest, compact_dataset, and cleanup_dataset are awaitable.
Use incremental_since="2025-02-05T00:00:00Z" with the same named scope to overlay
an acquisition-time window. This does not detect deletions or changes outside the
window; periodic full refreshes remain necessary. Auto mode falls back to live
APIs when complete fresh local coverage is unavailable, and does not persist live
results. Previews and imagery remain remote.
Compaction publishes new files; cleanup defaults to a preview:
client.cleanup_dataset("./data"). Pass apply=True to remove retired files
once snapshot clients have been released. shutdown() stops monitoring but does
not release the snapshot reader lock while the client remains alive.
See the GeoParquet guide for scope coverage, progress, storage budgets, and maintenance semantics.
Metadata
Release files for superstac 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| superstac-0.3.0.tar.gz | 222.4 kB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| superstac-0.3.0-cp39-abi3-win_amd64.whl | CPython 3.9 | abi3 | Windows x86-64 | Details |
| superstac-0.3.0-cp39-abi3-manylinux_2_28_x86_64.whl | CPython 3.9 | abi3 | Linux glibc 2.28+ x86-64 | Details |
| superstac-0.3.0-cp39-abi3-manylinux_2_28_aarch64.whl | CPython 3.9 | abi3 | Linux glibc 2.28+ ARM64 | Details |
| superstac-0.3.0-cp39-abi3-macosx_11_0_arm64.whl | CPython 3.9 | abi3 | macOS 11.0+ ARM64 | Details |
| superstac-0.3.0-cp39-abi3-macosx_10_12_x86_64.whl | CPython 3.9 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 53.3 MB
Release files / superstac-0.3.0.tar.gz
| Download URL | superstac-0.3.0.tar.gz |
|---|---|
| Size | 222.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
2e0240250ed0daaf80266eda905c8332d469a286804e13c6ffdaf97b55b73a17
|
|
BLAKE2b-256 checksum How to use checksums |
16e3eb3ecd9a919f2c65d1ad1c8e79ed7795ac4f290115475d0667efd2fb2130
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / superstac-0.3.0-cp39-abi3-win_amd64.whl
| Download URL | superstac-0.3.0-cp39-abi3-win_amd64.whl |
|---|---|
| Size | 9.7 MB |
| Tags | CPython 3.9 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
6865070572bc210f671443d18a73efc958b6c4c4601a1dc8bc3cbc156a18f75a
|
|
BLAKE2b-256 checksum How to use checksums |
20fb482c1b5dfffafe55b8aeb0f0ae615093ea9f57dac87c0b78d700fc93fdb5
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / superstac-0.3.0-cp39-abi3-manylinux_2_28_x86_64.whl
| Download URL | superstac-0.3.0-cp39-abi3-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 11.5 MB |
| Tags | CPython 3.9 Linux glibc 2.28+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
3396e8567bccfc187c590f20399e8c0b7303993871302f15d0468eeb488c99fc
|
|
BLAKE2b-256 checksum How to use checksums |
126144521c9b1378984a9fea345899b88edbf833e3178e55995236c8f84f7207
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / superstac-0.3.0-cp39-abi3-manylinux_2_28_aarch64.whl
| Download URL | superstac-0.3.0-cp39-abi3-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 11.1 MB |
| Tags | CPython 3.9 Linux glibc 2.28+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
61391f8a8d70c57d5802a61f1e562c0506fa6ad9bbf7adce060b17cd54ab446a
|
|
BLAKE2b-256 checksum How to use checksums |
ff5b61a342af45a3ab18d4faf07a5c1deb751fe991f495f6509923e046c8c502
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / superstac-0.3.0-cp39-abi3-macosx_11_0_arm64.whl
| Download URL | superstac-0.3.0-cp39-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 10.1 MB |
| Tags | CPython 3.9 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
9764a317079c2348d1495e3f146e328d385d651db8ec18fb52df9ef1489ff214
|
|
BLAKE2b-256 checksum How to use checksums |
5a14b1fa1594f92c0d2b45fb2bbf1aba1457db6310b21a7c51258c2503e646f4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / superstac-0.3.0-cp39-abi3-macosx_10_12_x86_64.whl
| Download URL | superstac-0.3.0-cp39-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 10.7 MB |
| Tags | CPython 3.9 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
a56d0deae5285dab5b2d662a50939177acb484de28b8cae9aeb1ef1aead30d4f
|
|
BLAKE2b-256 checksum How to use checksums |
0d2f1792671d2402aae7de3f4c3de65f7627126e956607672ff1045b4b6faa28
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|