Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

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.0a1

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.0a1
File Size Uploaded
icechunk-2.3.0a1.tar.gz 3.7 MB Details

Built distributions (wheels)

Table of built distributions (wheels) for icechunk 2.3.0a1
File
icechunk-2.3.0a1-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
icechunk-2.3.0a1-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.0a1-cp314-cp314t-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64 Details
icechunk-2.3.0a1-cp314-cp314t-manylinux_2_28_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ ARM64 Details
icechunk-2.3.0a1-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.0a1-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details
icechunk-2.3.0a1-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.0a1-cp312-abi3-win_amd64.whl CPython 3.12 abi3 Windows x86-64 Details
icechunk-2.3.0a1-cp312-abi3-musllinux_1_2_x86_64.whl CPython 3.12 abi3 Linux musl 1.2+ x86-64 Details
icechunk-2.3.0a1-cp312-abi3-musllinux_1_2_aarch64.whl CPython 3.12 abi3 Linux musl 1.2+ ARM64 Details
icechunk-2.3.0a1-cp312-abi3-manylinux_2_28_aarch64.whl CPython 3.12 abi3 Linux glibc 2.28+ ARM64 Details
icechunk-2.3.0a1-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.0a1-cp312-abi3-macosx_11_0_arm64.whl CPython 3.12 abi3 macOS 11.0+ ARM64 Details
icechunk-2.3.0a1-cp312-abi3-macosx_10_12_x86_64.whl CPython 3.12 abi3 macOS 10.12+ x86-64 Details

Total release size: 239.3 MB

Release files / icechunk-2.3.0a1.tar.gz

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

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

Download URL icechunk-2.3.0a1-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
940bcd3a4c9cb492440a06310bc9423f82f7bb50936f57478c1e57aac9f0cf63
BLAKE2b-256 checksum
How to use checksums
bf6cde42985a04ba971b88ff87269e6ee24964a71b3482ab2ef9b5cbd3b19d16
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

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

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

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

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

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

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

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

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

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

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

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

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

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

Download URL icechunk-2.3.0a1-cp312-abi3-win_amd64.whl
Size 16.4 MB
Tags CPython 3.12 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
4ac508a9ba38dba04b4ea312c6d4cc581f9228ab9b8a5bcceb9d5e6a48fe0be3
BLAKE2b-256 checksum
How to use checksums
72a76c4e21f9230cc57519bb27703cc59efb36e2cda704be91430e1a69556495
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via maturin/1.15.0

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

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

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

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

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

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

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

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

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

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

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

Download URL icechunk-2.3.0a1-cp312-abi3-macosx_10_12_x86_64.whl
Size 16.7 MB
Tags CPython 3.12 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
3df7266f024e2bf225a7c1f346f5cd7d9fd526b08f2971fd3f2c117b2967ce78
BLAKE2b-256 checksum
How to use checksums
c301fd436878d386efef043d4a7364fdd979c3f622707c632dfce26a453937c8
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.0a1 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