geozarr-toolkit
Python library for creating and validating GeoZarr-compliant metadata. Provides Pydantic models, helper functions, and a CLI for the modular Zarr conventions:
- spatial: -- Coordinate transforms between array indices and spatial coordinates
- proj: -- Coordinate Reference System (CRS) via EPSG codes, WKT2, or PROJJSON
- multiscales -- Pyramid structures and resolution levels
Installation
pip install "geozarr-toolkit"
Quick start
Create complete GeoZarr-compliant attributes in one call:
from geozarr_toolkit import create_geozarr_attrs
attrs = create_geozarr_attrs(
dimensions=["Y", "X"],
crs="EPSG:32633",
transform=[10.0, 0.0, 500000.0, 0.0, -10.0, 5000000.0],
bbox=[500000.0, 4900000.0, 600000.0, 5000000.0],
shape=[10000, 10000],
)
Or build conventions individually:
from geozarr_toolkit import (
create_spatial_attrs,
create_proj_attrs,
create_zarr_conventions,
SpatialConventionMetadata,
ProjConventionMetadata,
)
# Spatial convention
spatial_attrs = create_spatial_attrs(
dimensions=["Y", "X"],
transform=[10.0, 0.0, 500000.0, 0.0, -10.0, 5000000.0],
)
# Proj convention
proj_attrs = create_proj_attrs(code="EPSG:32633")
# Combine with zarr_conventions array
attrs = {**spatial_attrs, **proj_attrs}
attrs["zarr_conventions"] = create_zarr_conventions(
SpatialConventionMetadata(),
ProjConventionMetadata(),
)
Validation
Validate attributes or Zarr stores against conventions:
from geozarr_toolkit import validate_spatial, validate_proj, detect_conventions
# Validate individual conventions
is_valid, errors = validate_spatial({"spatial:dimensions": ["Y", "X"]})
# Auto-detect and validate all conventions in a dict
from geozarr_toolkit import validate_attrs
results = validate_attrs(attrs)
Working with existing data
Extract convention metadata from rioxarray or GDAL GeoTransforms:
from geozarr_toolkit import from_rioxarray, from_geotransform
# From rioxarray DataArray
attrs = from_rioxarray(da)
# From GDAL GeoTransform
attrs = from_geotransform(
geotransform=(500000.0, 10.0, 0.0, 5000000.0, 0.0, -10.0),
crs_wkt='PROJCS["UTM zone 33N"]',
shape=(10000, 10000),
)
Pydantic models
Use the models directly for type-safe construction and validation:
from geozarr_toolkit import Spatial, Proj
spatial = Spatial(**{"spatial:dimensions": ["Y", "X"]})
proj = Proj(**{"proj:code": "EPSG:4326"})
# Serialize with convention-prefixed keys
attrs = spatial.model_dump(by_alias=True, exclude_none=True)
CLI
# Validate a Zarr store
geozarr validate data.zarr
geozarr validate data.zarr --conventions spatial proj
# Inspect a Zarr store
geozarr info data.zarr
geozarr info data.zarr --json
metazarr
metazarr/ is a client-side JavaScript library and web app for exploring Zarr store hierarchies and validating GeoZarr convention compliance. It runs entirely in the browser with no server required. Deployed at inspect.geozarr.org.
Features:
- Opens remote Zarr v2 and v3 stores (consolidated metadata, directory crawling, or manual path entry)
- Displays full array metadata: shape, dtype, chunks, fill value, codecs/compressor, dimension names, chunk key encoding, memory order, and computed statistics (uncompressed size, chunk count, chunk size)
- Detects sharding (v3
sharding_indexedcodec) - Auto-detects GeoZarr conventions (spatial:, proj:, multiscales, CF) via
zarr_conventionsor attribute prefixes - Validates nodes against convention JSON Schemas (Draft-07 and Draft 2020-12)
cd metazarr
npm install
npm run dev # Start dev server at http://localhost:5173
npm test # Run test suite
Also usable as an ES module:
import { openStore, buildTree, detectConventions, validateNode, buildNodeDocument } from "metazarr";
const result = await openStore("https://example.com/data.zarr");
const tree = buildTreeFromV3(result.v3Entries);
const conventions = detectConventions(tree.attrs);
Development
git clone https://github.com/zarr-developers/geozarr-toolkit.git
cd geozarr-toolkit
uv sync
uv run pytest
License
Metadata
Release files for geozarr-toolkit 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| geozarr_toolkit-0.1.2.tar.gz | 26.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| geozarr_toolkit-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 46.0 kB
Release files / geozarr_toolkit-0.1.2.tar.gz
| Download URL | geozarr_toolkit-0.1.2.tar.gz |
|---|---|
| Size | 26.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
04b4196245210bfc854051729d0c3a92865bc47cf258f70227ae39a5ff40576b
|
|
BLAKE2b-256 checksum How to use checksums |
9600eb0acfacf70c23c26ec84730234657279645be24de289de1a865fcad8a7e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 1, 2026.
Transparency logRelease files / geozarr_toolkit-0.1.2-py3-none-any.whl
| Download URL | geozarr_toolkit-0.1.2-py3-none-any.whl |
|---|---|
| Size | 19.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6d4317b791da7fcb19fce9df345f8f9ee3a1a822eb3bb3aad448ec41b73b526e
|
|
BLAKE2b-256 checksum How to use checksums |
6d2bfb54fdbad8041ca7ffa8332b29afd3697580c8884656540b7ab6a8c56096
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.12.8
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Apr 1, 2026.
Transparency log