A low-level Zarr API for Python, inspired by zarrita.js, powered from Rust by Zarrs. Serving up Zarr chunks like your favorite barista!
This has been minimally vibe-coded: mostly but not fully written by hand. Some areas were prototyped with Claude.
This project is for evaluation, to consider whether natively binding to Zarrs can provide better performance. It is not yet production ready.
- Low-level, explicit Zarr access: open arrays and groups, read chunks, and inspect metadata without hidden machinery.
- Both sync and async APIs (
Array/AsyncArray,Group/AsyncGroup). - Rust core via Zarrs for compiled performance.
- NumPy integration: read data into NumPy arrays through the buffer protocol for zero-copy sharing between Rust and Python.
- Variety of data access
- Full type hinting for all operations.
Open a store, then open an Array from it:
from zarrista import Array
from zarrista.store import FilesystemStore
store = FilesystemStore("data/example.zarr")
array = Array.open(store, path="/temperature")Inspect the array's metadata:
array.shape
# [720, 1440]
array.dtype
# DataType(float32)
array.dimension_names
# ["lat", "lon"]Read a subset of the array. Indexing returns a Data buffer, which converts to a NumPy array:
data = array[0:128, 0:128]
arr = data.to_numpy()
arr.shape
# (128, 128)You can also read individual chunks by their grid index:
data = array.retrieve_chunk([0, 0])