Skip to main content

Icechunk

Icechunk logo

PyPI Conda Forge Crates.io GitHub Repo stars Earthmover Community Slack



Icechunk is an open-source (Apache 2.0), transactional storage engine for tensor / ND-array data designed for use on cloud object storage. Icechunk works together with Zarr, augmenting the Zarr core data model with features that enhance performance, collaboration, and safety in a cloud-computing context.

Documentation and Resources

Crate Structure

The Rust workspace is organized into layered crates:

graph TD
    python[icechunk-python] --> core[icechunk]
    core --> arrow[icechunk-arrow-object-store]
    core --> s3[icechunk-s3 *optional*]
    core --> storage[icechunk-storage]
    core --> format[icechunk-format]
    arrow --> storage
    s3 --> storage
    storage --> types[icechunk-types]
    format --> types
Crate Description
icechunk-macros Procedural macro helpers for tests and internal use
icechunk-types Shared foundational types (Path, ETag, Move, error wrappers) used across all crates
icechunk-format Binary format types and serialization (snapshots, manifests, transaction logs, repo info)
icechunk-storage Storage trait definitions and common storage utilities
icechunk-arrow-object-store Storage backend using Apache Arrow's object_store (in-memory, local, GCS, Azure, etc.)
icechunk-s3 Native AWS S3 storage backend (optional feature)
icechunk Core storage engine: transactions, version control, repositories
icechunk-python PyO3 bindings exposing the engine to Python

Icechunk Overview

Let's break down what "transactional storage engine for Zarr" actually means:

  • Zarr is an open source specification for the storage of multidimensional array (a.k.a. tensor) data. Zarr defines the metadata for describing arrays (shape, dtype, etc.) and the way these arrays are chunked, compressed, and converted to raw bytes for storage. Zarr can store its data in any key-value store. There are many different implementations of Zarr in different languages. Right now, Icechunk only supports Zarr Python. If you're interested in implementing Icechunk support, please open an issue so we can help you.
  • Storage engine - Icechunk exposes a key-value interface to Zarr and manages all of the actual I/O for getting, setting, and updating both metadata and chunk data in cloud object storage. Zarr libraries don't have to know exactly how icechunk works under the hood in order to use it.
  • Transactional - The key improvement that Icechunk brings on top of regular Zarr is to provide consistent serializable isolation between transactions. This means that Icechunk data is safe to read and write in parallel from multiple uncoordinated processes. This allows Zarr to be used more like a database.

The core entity in Icechunk is a repository or repo. A repo is defined as a Zarr hierarchy containing one or more Arrays and Groups, and a repo functions as a self-contained Zarr Store. The most common scenario is for an Icechunk repo to contain a single Zarr group with multiple arrays, each corresponding to different physical variables but sharing common spatiotemporal coordinates. However, formally a repo can be any valid Zarr hierarchy, from a single Array to a deeply nested structure of Groups and Arrays. Users of Icechunk should aim to scope their repos only to related arrays and groups that require consistent transactional updates.

Icechunk supports the following core requirements:

  1. Object storage - the format is designed around the consistency features and performance characteristics available in modern cloud object storage. No external database or catalog is required to maintain a repo. (It also works with file storage.)
  2. Serializable isolation - Reads are isolated from concurrent writes and always use a committed snapshot of a repo. Writes are committed atomically and are never partially visible. No locks are required for reading.
  3. Time travel - Previous snapshots of a repo remain accessible after new ones have been written.
  4. Data version control - Repos support both tags (immutable references to snapshots) and branches (mutable references to snapshots).
  5. Chunk shardings - Chunk storage is decoupled from specific file names. Multiple chunks can be packed into a single object (sharding).
  6. Chunk references - Zarr-compatible chunks within other file formats (e.g. HDF5, NetCDF) can be referenced.
  7. Schema evolution - Arrays and Groups can be added, renamed, and removed from the hierarchy with minimal overhead.

Key Concepts

Groups, Arrays, and Chunks

Icechunk is designed around the Zarr data model, widely used in scientific computing, data science, and AI / ML. (The Zarr high-level data model is effectively the same as HDF5.) The core data structure in this data model is the array. Arrays have two fundamental properties:

  • shape - a tuple of integers which specify the dimensions of each axis of the array. A 10 x 10 square array would have shape (10, 10)
  • data type - a specification of what type of data is found in each element, e.g. integer, float, etc. Different data types have different precision (e.g. 16-bit integer, 64-bit float, etc.)

In Zarr / Icechunk, arrays are split into chunks. A chunk is the minimum unit of data that must be read / written from storage, and thus choices about chunking have strong implications for performance. Zarr leaves this completely up to the user. Chunk shape should be chosen based on the anticipated data access pattern for each array. An Icechunk array is not bounded by an individual file and is effectively unlimited in size.

For further organization of data, Icechunk supports groups within a single repo. Group are like folders which contain multiple arrays and or other groups. Groups enable data to be organized into hierarchical trees. A common usage pattern is to store multiple arrays in a group representing a NetCDF-style dataset.

Arbitrary JSON-style key-value metadata can be attached to both arrays and groups.

Snapshots

Every update to an Icechunk store creates a new snapshot with a unique ID. Icechunk users must organize their updates into groups of related operations called transactions. For example, appending a new time slice to multiple arrays should be done as a single transaction, comprising the following steps

  1. Update the array metadata to resize the array to accommodate the new elements.
  2. Write new chunks for each array in the group.

While the transaction is in progress, none of these changes will be visible to other users of the store. Once the transaction is committed, a new snapshot is generated. Readers can only see and use committed snapshots.

Branches and Tags

Additionally, snapshots occur in a specific linear (i.e. serializable) order within a branch. A branch is a mutable reference to a snapshot--a pointer that maps the branch name to a snapshot ID. The default branch is main. Every commit to the main branch updates this reference. Icechunk's design protects against the race condition in which two uncoordinated sessions attempt to update the branch at the same time; only one can succeed.

Icechunk also defines tags--immutable references to snapshot. Tags are appropriate for publishing specific releases of a repository or for any application which requires a persistent, immutable identifier to the store state.

Chunk References

Chunk references are "pointers" to chunks that exist in other files--HDF5, NetCDF, GRIB, etc. Icechunk can store these references alongside native Zarr chunks as "virtual datasets". You can then update these virtual datasets incrementally (overwrite chunks, change metadata, etc.) without touching the underling files.

How Does It Work?

!!! Note: For a more detailed explanation, have a look at the Icechunk spec.

Zarr itself works by storing both metadata and chunk data into a abstract store according to a specified system of "keys". For example, a 2D Zarr array called myarray, within a group called mygroup, would generate the following keys:

mygroup/zarr.json
mygroup/myarray/zarr.json
mygroup/myarray/c/0/0
mygroup/myarray/c/0/1

In standard regular Zarr stores, these key map directly to filenames in a filesystem or object keys in an object storage system. When writing data, a Zarr implementation will create these keys and populate them with data. When modifying existing arrays or groups, a Zarr implementation will potentially overwrite existing keys with new data.

This is generally not a problem, as long there is only one person or process coordinating access to the data. However, when multiple uncoordinated readers and writers attempt to access the same Zarr data at the same time, various consistency problems emerge. These consistency problems can occur in both file storage and object storage; they are particularly severe in a cloud setting where Zarr is being used as an active store for data that are frequently changed while also being read.

With Icechunk, we keep the same core Zarr data model, but add a layer of indirection between the Zarr keys and the on-disk storage. The Icechunk library translates between the Zarr keys and the actual on-disk data given the particular context of the user's state. Icechunk defines a series of interconnected metadata and data files that together enable efficient isolated reading and writing of metadata and chunks. Once written, these files are immutable. Icechunk keeps track of every single chunk explicitly in a "chunk manifest".

flowchart TD
    zarr-python[Zarr Library] <-- key / value--> icechunk[Icechunk Library]
    icechunk <-- data / metadata files --> storage[(Object Storage)]

Metadata

Release files for icechunk 2.3.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 icechunk 2.3.0
File Size Uploaded
icechunk-2.3.0.tar.gz 3.7 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for icechunk 2.3.0
File
icechunk-2.3.0-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
icechunk-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 Details
icechunk-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64 Details
icechunk-2.3.0-cp314-cp314t-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARM64 Details
icechunk-2.3.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Details
icechunk-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details
icechunk-2.3.0-cp314-cp314t-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 Details
icechunk-2.3.0-cp312-abi3-win_amd64.whl CPython 3.12 abi3 Windows x86-64 Details
icechunk-2.3.0-cp312-abi3-musllinux_1_2_x86_64.whl CPython 3.12 abi3 Linux musl 1.2+ x86-64 Details
icechunk-2.3.0-cp312-abi3-musllinux_1_2_aarch64.whl CPython 3.12 abi3 Linux musl 1.2+ ARM64 Details
icechunk-2.3.0-cp312-abi3-manylinux_2_28_aarch64.whl CPython 3.12 abi3 Linux glibc 2.28+ ARM64 Details
icechunk-2.3.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 abi3 Linux glibc 2.17+ x86-64 Details
icechunk-2.3.0-cp312-abi3-macosx_11_0_arm64.whl CPython 3.12 abi3 macOS 11.0+ ARM64 Details
icechunk-2.3.0-cp312-abi3-macosx_10_12_x86_64.whl CPython 3.12 abi3 macOS 10.12+ x86-64 Details

Total release size: 237.9 MB

Release files / icechunk-2.3.0.tar.gz

Download URL icechunk-2.3.0.tar.gz
Size 3.7 MB
Tags Source
SHA-256 checksum
How to use checksums
9cb98826d5d86412118b9f6ebf9b9495ae5455ccfc184fb0d60545c01b6b7452
BLAKE2b-256 checksum
How to use checksums
c9e0dbb7d08992c463229a56ea477d91f5108105c6327ca3a861d5cd20b441a8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Release files / icechunk-2.3.0-cp314-cp314t-win_amd64.whl

Download URL icechunk-2.3.0-cp314-cp314t-win_amd64.whl
Size 16.3 MB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
2da908e7a241c108974bcae189cf032a83ce7ce19cd82f1dfbbef1636d849e2a
BLAKE2b-256 checksum
How to use checksums
2daea6c060f38e2acc0bcd6971d5afebe602f0bb8edcba4047d3a1aaec30b510
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Release files / icechunk-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl

Download URL icechunk-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Size 17.7 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
d990c30431ac8c2855f8b1dc015c455670902049d14414ba1b6890fbc3b78fe9
BLAKE2b-256 checksum
How to use checksums
f7f27a13e8373a6783a321e8d2d97a459b85835de74302115f2450273c13282d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Release files / icechunk-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl

Download URL icechunk-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Size 17.1 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
80b81a252e4a962114c06bf28a978cf6fe658ed6db1d64058bd950f9d9355a87
BLAKE2b-256 checksum
How to use checksums
94d0f10064ca0b651bd8068d6340ee10fee7bc11e79dcc5c387b8cbda87d3f0c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Release files / icechunk-2.3.0-cp314-cp314t-manylinux_2_28_aarch64.whl

Download URL icechunk-2.3.0-cp314-cp314t-manylinux_2_28_aarch64.whl
Size 16.9 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
e86ecd730346840e2abd672769506976357c4d65ed0d43ce1e96f6d517d9391d
BLAKE2b-256 checksum
How to use checksums
be899b68120ed6d6d501f41350162ce03e96b0a80d2c26088ed6d5df04185578
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Release files / icechunk-2.3.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL icechunk-2.3.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 17.2 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
b118d9b950bf36c5866f417e537c036621b808c1cbf6b5e54f6914f3488ae8e0
BLAKE2b-256 checksum
How to use checksums
efc65bb44e4f1de10cddb78122b60cf259dd3ae7de43d22b28455d7c9b4795a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Release files / icechunk-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl

Download URL icechunk-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl
Size 15.3 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8bb36dcdf8d7e3e4a6e6c31a685016d7adfcc3f6eab3ce834bb6309705ca1d64
BLAKE2b-256 checksum
How to use checksums
b127db6d0d1180873a8a4dfaef4829fa35d649bd983e4b99f7fc272d511d767c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Release files / icechunk-2.3.0-cp314-cp314t-macosx_10_12_x86_64.whl

Download URL icechunk-2.3.0-cp314-cp314t-macosx_10_12_x86_64.whl
Size 16.6 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
26c50e0723f726188b8af1d978a37934a154121726d2eea804c6886562117c14
BLAKE2b-256 checksum
How to use checksums
7a37d5cfb55d3e1dcd51e674df9d23b3c50cb815db35d110c1af246d05ee6d17
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Release files / icechunk-2.3.0-cp312-abi3-win_amd64.whl

Download URL icechunk-2.3.0-cp312-abi3-win_amd64.whl
Size 16.3 MB
Tags CPython 3.12 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
0dc5a0938f8198f648f41ac82170b750772b769ed41f5e05c991b8e08ab3d447
BLAKE2b-256 checksum
How to use checksums
12f0a01d345e820b567267dea79bb9de5f942b2e11f8c39855745926c20c4a08
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Release files / icechunk-2.3.0-cp312-abi3-musllinux_1_2_x86_64.whl

Download URL icechunk-2.3.0-cp312-abi3-musllinux_1_2_x86_64.whl
Size 17.7 MB
Tags CPython 3.12 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
61ebc09cf69d3487ac447cf467903c2eafee13e4d8d3ca057cb3b8b6e7c2d9f1
BLAKE2b-256 checksum
How to use checksums
a2f497e0ad8d964c6cdbc3b3747efebad35bac25c82247922a872f0f84fb83eb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Release files / icechunk-2.3.0-cp312-abi3-musllinux_1_2_aarch64.whl

Download URL icechunk-2.3.0-cp312-abi3-musllinux_1_2_aarch64.whl
Size 17.1 MB
Tags CPython 3.12 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
80fb7dcb8a8f612629c39c3cf42820b01903aad7e45ee7bfced61019e3af57a3
BLAKE2b-256 checksum
How to use checksums
710793289e00f8755cbc51677da70a3dcb9317dce57b36750fd5c2323c4cf04f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Release files / icechunk-2.3.0-cp312-abi3-manylinux_2_28_aarch64.whl

Download URL icechunk-2.3.0-cp312-abi3-manylinux_2_28_aarch64.whl
Size 16.9 MB
Tags CPython 3.12 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
3dee91ee30e02e501cfc106af5aa0375ecb3992686597c3a062247802191f376
BLAKE2b-256 checksum
How to use checksums
a64ad7d39dbfcc1341a7a8d3e90433076e7f90d07964b1cac85fa89d0eca5705
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Release files / icechunk-2.3.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL icechunk-2.3.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 17.2 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
22d3c9ce48094d524b18f811c9befa9b75c81eab05a0a8bafed4ba8ae07c8225
BLAKE2b-256 checksum
How to use checksums
b5826931e6d84b6fd995c1630b3b2578293ad63438befe56e3ba9c87141eaf50
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Release files / icechunk-2.3.0-cp312-abi3-macosx_11_0_arm64.whl

Download URL icechunk-2.3.0-cp312-abi3-macosx_11_0_arm64.whl
Size 15.3 MB
Tags CPython 3.12 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6e7369f442e80c4b3b2919ea5edf9a919a36bff16d34365e9cc5b5a114ea740f
BLAKE2b-256 checksum
How to use checksums
3c90a6fb0a051f5360d797d74246e7bfdc8498460b61de53c729d2370415009e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Release files / icechunk-2.3.0-cp312-abi3-macosx_10_12_x86_64.whl

Download URL icechunk-2.3.0-cp312-abi3-macosx_10_12_x86_64.whl
Size 16.6 MB
Tags CPython 3.12 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
3333ef0ed9c72d239851d81f5508a3bc59f0887c98449d553268efe4f67498f4
BLAKE2b-256 checksum
How to use checksums
e2aedb6926b248affa59d76d17c93c7fb803ad2956c524488a7bcb61b07b1990
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

Release history Release notifications | RSS feed

This release

2.3.0 This release

15 release files

2.2.2

8 release files

2.2.1

8 release files

2.2.0

8 release files

2.1.2

8 release files

2.1.1

8 release files

2.1.0

8 release files

2.0.5

31 release files

2.0.4

31 release files

2.0.3

31 release files

2.0.2

31 release files

1.1.6

45 release files

1.1.4

47 release files

1.1.3

47 release files

1.1.2

47 release files

1.1.0

47 release files

1.0.3

47 release files

1.0.2

47 release files

1.0.1

47 release files

1.0.0

47 release files

0.2.9

21 release files

0.2.8

47 release files

0.2.4

40 release files

0.2.3

40 release files

0.2.2

40 release files

0.2.1

40 release files

0.2.0

40 release files

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