Changelog
This changelog covers every package in this repository. Version headings follow Zarr.jl releases.
Unreleased
v0.11.2 - 2026-10-16
Zarr v3 arrays that zarr-python wrote with a zlib compressor, as the
numcodecs.zlibcodec, can now be read, andZarrZlib.ZlibV3Codecwrites that codec. #360zarr_formatis now supported forZGroup, returning the group's Zarr format. #359ZarrCoreis bumped to 0.11.2 to release thezarr_format(::ZGroup)support. #362ZarrZlibis bumped to 0.11.1 to releaseZlibV3Codecandnumcodecs.zlibsupport. #362
v0.11.1 - 2026-10-07
Zarr v3 arrays can now store dimension names. Pass
dimension_names=("x", "y")tozcreateand read them back withdimension_names(z), so arrays written by Zarr.jl open with named dimensions in xarray. Give names in Julia's dimension order, and usenothingfor an unnamed dimension. #345, fixes #319resize!andappend!now throw an error on read-only arrays instead of rewriting the stored metadata and deleting chunks. Resizing through a consolidated store now fails without changing the array, for both Zarr v2 and v3. #342Integer arrays using
DeltaFilternow round-trip correctly when values wrap around the type's limits, such asInt8[-128, 127, -128]. #336, fixes #335Zarr v2 arrays that use the
shuffleorfletcher32filter with element types wider than one byte can now be read. Previously they could be written, but reading them threw aBoundsError. #354ZarrHTTPcan now serve aDirectoryStorefrom its root path. It also rejects requests for files outside the served directory, including..paths and symlinks that point elsewhere, with a400response that explains why. #344ZarrCoreis bumped to 0.11.1 to release theZarrCorechanges above. #356
v0.11.0 - 2026-10-06
Zarr.jl is now split into several smaller packages. using Zarr still loads all of them, so most code needs no changes.
The core array, group, metadata, and storage code now lives in the new lightweight
ZarrCorepackage. #317The HTTP, GCS, S3, and ZIP storage backends moved into
ZarrHTTP,ZarrGCS,ZarrS3, andZarrZip. AWSS3 is still an optional dependency ofZarrS3. #330Blosc, zlib, and Zstandard support moved into
ZarrBlosc,ZarrZlib, andZarrZstd. Each package provides both the Zarr v2 compressor and the Zarr v3 codec. Blosc is the default compressor whenZarrBloscis loaded; withZarrCorealone, data is stored uncompressed by default. #330Compressors, codecs, and URL-based stores register themselves when their package loads. If several URL patterns match, the most specific one is used. To turn off automatic registration, set
RegisterAtInit = falseforZarrCoreinLocalPreferences.tomland call each package'sregister!()yourself. #330Zarr.jl now declares an explicit public API. Exported names are unchanged. Store, codec, filter, and compressor types, documented extension points,
missing_chunk_return_code!, andgcs_credentialsare public. Internal names such asMetadataandZarrFormatare no longer available asZarr.x; useZarr.ZarrCore.xinstead.DateTime64,PermanentZarrCache,BloscCodec, andGzipCodecare no longer accessible throughZarr. #317, #330Fixed reading Zarr v3 arrays opened with
fill_as_missing=true, which threwcannot reinterpret UInt8 as Union{Missing,Float64}. #333For contributors: each package now lives in its own top-level directory, and the root project is a Julia workspace. #339
v0.10.2 - 2026-08-19
Support HTTP.jl 2.x and drop 1.x #322
Add logo and favicon to docs #307
Support reading and writing variable-length strings #311
Add more informative show method for S3Store #320
Fix complex fill values in python interop tests #316
Remove lru keyword from zopen, should use DiskArrays.cache instead
v0.10.1 - 2026-07-07
Add caching to menu, update sharding description #306
Added support for the Zarr V3
fixed_length_utf32string data type #305Added consolidated_metadata reading and writing support for v3 #287
Fix the
ConcurrentReadwrite path silently dropping chunk writes; affected stores such asS3Storewrote array metadata but no data chunks #297Added reading compat for stores produced in python with
numcodecs.blosc#286Bump HTTP compat to 2 #284
V2 performance improvements #280
readblock!fast path for single-chunk full-reads that bypasses the readtask channel and the chunk-shaped scratch buffer, decoding straight into the output arraywriteblock!fast path for single-chunk full-overwrites that bypasses the readtask/writetask channels and the chunk-shaped scratch buffer, encoding straight from the input array into the storeZero-copy chunk write for
NoCompressor+ no filters: the single-chunk fastpath hands areinterpret(UInt8, ain)view straight to the store, skipping the chunk-sizedVector{UInt8}allocation + memcpyNoCompressorwrites: replaceappend!over the reinterpret view with bulkresize!+copyto!in the genericzcompress!fallbackNoCompressorreads: bulk-copyzuncompress!method dispatched on::NoCompressorbypassescopyto!(::Array, ::ReinterpretArray)'s element-by-element walkgetchunkarray_undefskips the dead zero-fill of the chunk-shaped scratch buffer on full-overwrite paths
Added manual pagination in order to go beyond the default 1k #282
Added
waitto writetask inwriteblock!#281Fix getattrs for v3 #277
Add
CachingStore, a store that caches reads from a remote store in a local cache store #231Fix CondaPkg branch in CI, use release version instead #273
Fix creation of on-disk arrays that do not fit in memory #269
Add another consistent caching approach through
zarrcache#299
v0.10.0 - 2026-04-24
Enable
sharding_indexedcodec for Zarr v3 #241outer chunks (shards) are now split into inner chunks with a byte-range index, enabling efficient partial reads of large arrays
Python zarr interoperability tests for sharded arrays using real fixtures generated via PythonCall/zarr-python
Function-based codec registration system with typed
CodecEntryfor extensible V3 codec parsingsharding_indexedcodec context propagation: inner codec parser now receives element-size context so codecs likebloscget the correcttypesizesharding_indexeddecode double-shift bug forindex_location=:start: shard index offsets are now treated as absolute byte offsets from the shard start in all casessharding_indexeddecode fill value:zdecode!now accepts an optionalfill_valueargument so missing inner chunks are filled with the array fill value instead ofzero(T)pipeline_decode!forV2Pipelinenow accepts thefill_valuekeyword argument (ignored, but required to match the unified call site inZArray.readblock!)Ragged inner chunks in
ShardingCodechandled correctly
fixes UI str parsing #259
added zarr_format to ZGroup #258
Add support for S3Path and remove deprecated global_aws_config() #253
(docs) get started #246
update badges #245
setup vitepress #243
Registration system for chunk key encoding #242
test: Consolidate CondaPkg.add calls #240
test: Read Julia-generated v3 fixtures with Python zarr #239
Use CondaPkg.jl#206 for nightly, fix manifest_uuid_path #238
fix docs build #237
consolidate methods #235
Add AbstractChunkKeyEncoding #234
V3 codec pipeline, group creation, and Python interop #232
Add read support for big endian #230
Indent method/type signatures on docstrings #229
Promote header levels in tutorial.md #228
Continue on v3 PR #226
move AWSS3 into extension #224