Skip to content

Home / languages

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.