Skip to main content

xpublish-zarr

Zarr-compatible REST API plugin for Xpublish.

xpublish-zarr exposes an xarray.Dataset over HTTP as a consolidated Zarr v3 store, so clients can read it via xarray.open_zarr / zarr.open_consolidated over fsspec's HTTP backend.

This plugin is extracted from xpublish core so that the core can be used without pulling in zarr.

Note on consolidated metadata. v3 consolidated metadata is currently an experimental extension — not yet part of the official Zarr v3 spec, but supported by both zarr-python and xarray. The plugin emits it because it lets clients open the dataset in a single HTTP request and because dropping it would require a directory-listing endpoint (zarr clients need some way to discover the group's children, and HTTP doesn't have a portable listing protocol). If/when the spec lands a different format, we'll follow upstream.

Install

uv add xpublish-zarr
# or
pip install xpublish-zarr

The plugin is auto-registered with xpublish via the xpublish.plugin entry point.

Usage

import xarray as xr

ds = xr.tutorial.open_dataset("air_temperature")
ds.rest.serve(host="0.0.0.0", port=9000)
import xarray as xr

ds = xr.open_zarr("http://0.0.0.0:9000/zarr/", consolidated=True, zarr_format=3)

Endpoints

For a single dataset (mounted at the root):

Path Description
/zarr/zarr.json Root group metadata (includes consolidated metadata)
/zarr/{var}/zarr.json Per-array metadata
/zarr/{var}/c/{i}/{j}/… A variable's chunk (binary), /-separated chunk coords
/zarr/{var}/c The single chunk of a scalar (0-d) variable

For a multi-dataset Rest app the paths are prefixed with /datasets/{dataset_id}.

Caveats

  • Single group only. DataTree / nested groups are not yet supported; this will land once xpublish merges its DataTree handling.
  • No sharding yet. Adding it later is a one-line change at the to_zarr step and does not alter the HTTP surface.
  • Encoding. Each variable's codec pipeline, chunk shape, fill value, and dimension_names come from xarray's own to_zarr path, so the wire format matches what ds.to_zarr(..., zarr_format=3) would produce locally. Set per-variable encoding (compressor, chunks, fill value, dtype) via ds[var].encoding before serving.

Development

This project uses uv for environment and dependency management.

uv sync
uv run pytest

Metadata

Release files for xpublish-zarr 0.1.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 xpublish-zarr 0.1.0
File Size Uploaded Provenance Actions
xpublish_zarr-0.1.0.tar.gz 86.7 kB With provenance Details for xpublish_zarr-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for xpublish-zarr 0.1.0
File Interpreter ABI Platform Actions
xpublish_zarr-0.1.0-py3-none-any.whl Python 3 none any Details for xpublish_zarr-0.1.0-py3-none-any.whl

Total release size: 98.1 kB

Release files / xpublish_zarr-0.1.0.tar.gz

Download URL xpublish_zarr-0.1.0.tar.gz
Size 86.7 kB
Tags Source
SHA-256 checksum
How to use checksums
beaf70016da93b469afb799bcb4743b5b1e5d25a9711e8fa91d2f2a6603441fe
BLAKE2b-256 checksum
How to use checksums
56bfc1e626548cfc2b9d3971be80e32f7c48171d4e7f483ab8a9c8600375e2f3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 May 21, 2026.

Transparency log

Release files / xpublish_zarr-0.1.0-py3-none-any.whl

Download URL xpublish_zarr-0.1.0-py3-none-any.whl
Size 11.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
682e5785207fce39ca8ab1f35c03539a6a78fc9c37b0fe4287a06cca3d1f10d4
BLAKE2b-256 checksum
How to use checksums
7942c48e72849a1121c114c3f9d08306ad421509dbe7d524aa476ad19d4df0cb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 May 21, 2026.

Transparency log

Security for xpublish-zarr 0.1.0

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for xpublish_zarr-0.1.0.tar.gz

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 May 21, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

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