rustytree registers as xr.open_datatree(engine="rustytree") and walks Zarr
v3 hierarchies — both icechunk-backed and vanilla — concurrently in async
across one FFI crossing. The goal is a drop-in faster replacement for
xr.open_datatree(engine="zarr"), especially on icechunk repos served from
object storage where xarray's current per-group sequential decoding is the
dominant cost.
Status
Alpha. xr.open_datatree(..., engine="rustytree") works end-to-end
against both icechunk repositories (pass session.store) and vanilla
Zarr v3 stores (path or s3:// URL). Lazy chunk reads via
RustyBackendArray, CF decoding (incl. metadata-only datetime dtype
inference), the recursive multi-node walk, glob group= filtering, and
non-recursive single-Dataset opens are all in. See
CHANGELOG.md for the per-PR breakdown.
Compatibility
| Surface | Supported | Not supported |
|---|---|---|
| Zarr format | v3 only | v2 — passing zarr_format=2 or consolidated=True raises NotImplementedError; use stock engine="zarr" for v2 stores |
| icechunk | icechunk>=2.0 (the current major) |
older icechunk releases |
| Python | 3.12, 3.13 | older versions |
| Platforms | manylinux x86_64, manylinux aarch64, macOS arm64 (wheels); other platforms via sdist | Windows / macOS Intel / linux musl wheels (build from source via sdist) |
Install
Install from PyPI (the import name stays rustytree; the
distribution name on PyPI is rustytree-xarray because rustytree
collides with an unrelated dormant package):
pip install rustytree-xarray
Or install from source per Quick start below.
Example
Open the public anonymous NEXRAD KLOT icechunk repo on S3:
import icechunk
import xarray as xr
storage = icechunk.s3_storage(
bucket="nexrad-arco", prefix="KLOT",
region="us-east-1", anonymous=True,
)
session = icechunk.Repository.open(storage).readonly_session("main")
# Open the full DataTree (107 nodes — every VCP × sweep combination).
dt = xr.open_datatree(session.store, engine="rustytree")
# Or grab one specific sweep as a flat Dataset (skips walking siblings):
ds = xr.open_dataset(session.store, engine="rustytree",
group="/VCP-12/sweep_0")
# Or apply a glob pattern. "Give me sweep_0 from every VCP" is the
# canonical radar workflow — returns a tree filtered to those matches,
# with the VCP container groups auto-included as ancestors.
sweeps_0 = xr.open_datatree(session.store, engine="rustytree",
group_filter="/*/sweep_0")
engine="rustytree" is a drop-in replacement for engine="zarr" —
same xr.open_datatree / xr.open_dataset entry points, same
storage_options / decode_* kwargs. The full demo (with side-by-side
timings against engine="zarr") is in
notebooks/klot_demo.ipynb.
Quick start
rustytree is a Rust extension built via maturin;
uv sync handles the venv, Python deps,
and the Rust build (via maturin's PEP 517 hook) in one command.
# Clone + enter the repo
git clone https://github.com/aladinor/rustytree.git
cd rustytree
# Install everything: venv, deps, and the compiled Rust extension.
uv sync --extra dev
# Confirm the install
.venv/bin/pytest tests/
# Launch Jupyter and open the demo notebook
.venv/bin/jupyter lab notebooks/klot_demo.ipynb
The notebooks and tests don't require AWS credentials — KLOT is read
anonymously via icechunk's anonymous S3 path. Network speed determines
cold-cache timings (expect ~1–3 s for engine="rustytree" on KLOT
from a home connection; ~50 s for engine="zarr" on the same).
Documentation
docs/architecture.md— what the project is and why the Rust backend wins.docs/usage.md— how to install, run the test suite, and the API surface (inputs,group=patterns, lazy reads, errors).docs/contributing.md— branching, commit conventions, validation gates, per-PR audit.docs/release-process.md— versioning, tag, CHANGELOG roll.
License
Apache License 2.0 (Apache-2.0).
Acknowledgements
Built on zarrs +
zarrs_icechunk +
icechunk.
Sibling project radish proved the
PyO3 + xarray-backend pattern. The bottlenecks this project sets out to
collapse are tracked in xarray PRs
#10742,
#11304, and
#11302.
Metadata
Release files for rustytree-xarray 0.5.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| rustytree_xarray-0.5.1.tar.gz | 1.2 MB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| rustytree_xarray-0.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.13 | CPython 3.13 | Linux glibc 2.17+ x86-64 | Details |
| rustytree_xarray-0.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.13 | CPython 3.13 | Linux glibc 2.17+ ARM64 | Details |
| rustytree_xarray-0.5.1-cp313-cp313-macosx_11_0_arm64.whl | CPython 3.13 | CPython 3.13 | macOS 11.0+ ARM64 | Details |
| rustytree_xarray-0.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.17+ x86-64 | Details |
| rustytree_xarray-0.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.12 | CPython 3.12 | Linux glibc 2.17+ ARM64 | Details |
| rustytree_xarray-0.5.1-cp312-cp312-macosx_11_0_arm64.whl | CPython 3.12 | CPython 3.12 | macOS 11.0+ ARM64 | Details |
Total release size: 67.4 MB
Release files / rustytree_xarray-0.5.1.tar.gz
| Download URL | rustytree_xarray-0.5.1.tar.gz |
|---|---|
| Size | 1.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9c754a56b3ddaf6a306a531c0efa12776f31fda06fb15196ac8cdb99659d198e
|
|
BLAKE2b-256 checksum How to use checksums |
760b961d7334afee63a7a854202250367d6ee9f93c76b5affa141dcd9a943f2a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 21, 2026.
Transparency logRelease files / rustytree_xarray-0.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | rustytree_xarray-0.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 11.8 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
bdcd3ecf7901609a305a97f7ab36224435227e36059585cbbccfe8c6b4cf46f7
|
|
BLAKE2b-256 checksum How to use checksums |
0695360c5d4def1a6d973661a5eae045153dbf2ad1c1d589da1125058714f58d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 21, 2026.
Transparency logRelease files / rustytree_xarray-0.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | rustytree_xarray-0.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 11.2 MB |
| Tags | CPython 3.13 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
aa2ad47501be4fc61041aef4e8db06a7aa31514a78c74fa122e79ab6be0ae106
|
|
BLAKE2b-256 checksum How to use checksums |
98cd74358b90beec53ec52666769d7b36e7a9d429eda1dcfe6cf7cfdd47d6b6d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 21, 2026.
Transparency logRelease files / rustytree_xarray-0.5.1-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | rustytree_xarray-0.5.1-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 10.2 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
aa2a6ad2bad44d30e982313e12af3fdc404048675cc81263cb44c790dc91a072
|
|
BLAKE2b-256 checksum How to use checksums |
1b1672719182f55e49cea0827645cd4c66aa4b4c61d6ec501e04b9d80e9a5eae
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 21, 2026.
Transparency logRelease files / rustytree_xarray-0.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | rustytree_xarray-0.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 11.8 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
ff8f1edf18162d90616cf72bd324cca142408bd7a3798d0c5b875c28014fdc1e
|
|
BLAKE2b-256 checksum How to use checksums |
542e25b563f33f27146d618865c5b71ea37e389dba21a2f611a105a2f62d4630
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 21, 2026.
Transparency logRelease files / rustytree_xarray-0.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | rustytree_xarray-0.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 11.2 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
df616c8d392eb04ee94fe3ab364a68cf600366d06b27b48b297fc64b4c4fd303
|
|
BLAKE2b-256 checksum How to use checksums |
092172f23d03a2ed714ad81e4938a355dbd334bcdd00464ca2e1321148e1dd14
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 21, 2026.
Transparency logRelease files / rustytree_xarray-0.5.1-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | rustytree_xarray-0.5.1-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 10.2 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
036651cf16582b1fc97bb8634fa9103a8282516382211e9146cd11bbea50193d
|
|
BLAKE2b-256 checksum How to use checksums |
c1d20b0a25c8c31773ac9e4c8743b08607b217731ff004994a2f3c267e0cff51
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
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 Sep 21, 2026.
Transparency log