Languages#
Icechunk is an open format with a reference implementation in Rust. Most libraries bind to that implementation, so every one of them reads and writes the same repositories. Independent readers implement the spec directly.
Official#
Maintained and released from the main icechunk repository.
| Language | Package | Access | Notes |
|---|---|---|---|
| Rust | icechunk | Read and write | The reference implementation. Rust docs |
| Python | icechunk | Read and write | Works with Zarr Python, Xarray and Dask. API reference |
| JavaScript / TypeScript | @earthmover/icechunk | Read and write | Node.js through native bindings, the browser through WebAssembly. Use with zarrita. JS docs |
Experimental#
Bindings that live in their own repositories, linked below. They bind to the Rust implementation but are not officially supported yet, and their APIs change without notice.
| Language | Package | Access | Notes |
|---|---|---|---|
| Java | icechunk-java | Read and write | Bindings over JNI, a zarr-java store, and connectors for N5, Fiji and BigDataViewer. Not on Maven Central. |
| Julia | Zarrs.jl | Read and write | Julia bindings to the zarrs Rust crate, with Icechunk support. |
Community#
Built and maintained by the community. Some community projects implement the spec directly themselves, rather than using the icechunk crate. This can have advantages, but also means that they may lag behind new spec versions, so check directly with the project to see which versions each one reads.
Read and write#
| Language | Project | Notes |
|---|---|---|
| Go | solomonsealed/icechunk-go | Independent implementation in pure Go. Also compiles to WebAssembly and runs in Cloudflare Workers. |
| Rust (zarrs) | zarrs_icechunk | Lets the zarrs crate read and write Zarr arrays in Icechunk repositories, through the icechunk crate. |
Read only#
| Language | Project | Notes |
|---|---|---|
| C++ | GDAL Icechunk driver | Independent implementation of the spec. |
| TypeScript | EarthyScience/icechunk-js | Independent implementation, designed for zarrita. |
| JavaScript | Neuroglancer | Independent implementation in Google's volumetric viewer. |
R#
Native R bindings are planned. Today, R can use the Python library through reticulate:
library(reticulate)
py_require(c("icechunk", "xarray", "pooch", "scipy"))
ic <- import("icechunk")
xr <- import("xarray")
repo <- ic$Repository$create(ic$local_filesystem_storage("demo-repo"))
session <- repo$writable_session("main")
ds <- xr$tutorial$open_dataset("air_temperature")
ds$to_zarr(session$store, consolidated = FALSE)
session$commit("Add air temperature from R")
session <- repo$readonly_session(branch = "main")
ds <- xr$open_zarr(session$store, consolidated = FALSE)
air <- py_to_r(ds$air$isel(time = 0L)$values)
The Arraylake docs have more R examples, including plotting.
Building something with Icechunk in another language? Open an issue and we'll add it here.