Skip to main content

SuperSTAC (Python)

SuperSTAC logo

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)

Source distribution for superstac 0.3.0
File Size Uploaded
superstac-0.3.0.tar.gz 222.4 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for superstac 0.3.0
File
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

Release history Release notifications | RSS feed

This release

0.3.0 This release

6 release files

0.2.0

6 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page