zarr 3.4.0. Highlights are in the release blog post; the full per-change list is in the release notes. This release adds a required dependency on msgspec>=0.19.
What's Changed
- docs: fix link checker errors and warnings; run weekly by @maxrjones in #4214
- fix: ManagedMemoryStore sync methods must respect the path prefix by @d-v-b in #4204
- fix: minor correctness and hygiene fixes from the sync-pipeline audit by @d-v-b in #4205
- fix: reject malformed chunk keys in DefaultChunkKeyEncoding by @d-v-b in #4219
- fix: explicit store sync-IO capability; wrappers forward it; LatencyStore fixes by @d-v-b in #4206
- docs: add dev blog, update 3.3.0 release notes by @d-v-b in #4191
- fix: make consolidated metadata nesting independent of persisted key order by @d-v-b in #4227
- Convert rst double-backtick docstring markup to markdown by @jhamman in #4193
- fix: preserve non-JSON-serializable storage options in _make_async by @d-v-b in #4239
- chore: bump ruff to 0.16.0 and fix new default-rule violations by @d-v-b in #4213
- docs: add a page linking to the companion packages by @d-v-b in #4247
- docs: update readme by @d-v-b in #4251
- docs: add card for zarr-http-server by @d-v-b in #4249
- fix: allow
require_arrayto accept aZDTypeby @JOhnsonKC201 in #4189 - fix: accept numpy integers as chunk sizes by @d-v-b in #4257
- fix(build): use an sdist allowlist so the zarr sdist stops shipping subpackages by @d-v-b in #4261
- Add unified JSON metadata validation via msgspec (#3285) by @vup903 in #4063
- deps: bump cast-value.rs to >= 0.4.2 by @d-v-b in #4260
- docs: add roadmap page outlining future plans by @d-v-b in #4149
- fix: accept universal-pathlib UPath as a StoreLike value by @d-v-b in #4265
- fix: make the nightly hypothesis failure alarm able to file issues by @glaziermag in #4274
- fix: reject a string-valued zero scale in the scale_offset codec by @dylanpulver in #4279
- fix: keep fill value and attributes in from_array by @paraseba in #4288
- fix: skip exact byte comparison for gzip codec due to timestamp variance by @sheikhayaan in #4270
- docs+test: gzip MTIME documentation follow-up and fused-pipeline test style pass - #310 by @d-v-b in #4296
- feat: name packages that provide a codec zarr cannot find by @arcusbuilds in #4277
- Fix infinite loop in _guess_num_chunks_per_axis_shard for 0-dimensional arrays by @Tomatokeftes in #4305
- fix: resolve chunks=-1 to chunk size 1 on zero-length axes by @d-v-b in #4307
- docs: document Read the Docs slugs for subpackage releases by @cucuwang in #4297
- fix: shape the value buffer for coordinate selections in sharded writes by @dylanpulver in #4284
- fix(sharding): flatten any multi-dim value for coordinate selections in partial writes by @d-v-b in #4316
- fix(chunk-grids): make array creation O(1) in per-dimension chunk count by @d-v-b in #4218
- chore(tests): move gzip mtime-comparison helper out of library code by @d-v-b in #4326
- fix: unsigned index arrays raise IndexError because np.diff wraps and uint64 promotes by @selmanozleyen in #4286
- fix: preserve index bounds and input arrays during normalization by @d-v-b in #4332
- docs: state the rectilinear-flag consequence of #4272 and qualify nchunks_initialized by @d-v-b in #4323
- chore(metadata): import Literal at module level in v2.py by @d-v-b in #4327
- fix(metadata): handle argless KeyError from a codec's from_dict by @d-v-b in #4324
- fix: deep-copy source attributes in from_array by @d-v-b in #4325
- fix: resolve chunks=False to chunk size 1 on zero-length axes by @d-v-b in #4328
- feat: accept numpy arrays as chunks/shards in create_array, Group.create_array and from_array by @d-v-b in #4329
- fix: remove attribute nesting depth limit by @d-v-b in #4330
- test: give the sharded coordinate-selection write path real weight in test_oindex by @d-v-b in #4331
- fix: preserve the source Zarr dtype in from_array by @d-v-b in #4335
- docs: explain from_array attribute copy recursion limit by @d-v-b in #4338
- fix(docs): stop the docs build and docs tests deleting a cwd-relative data/ directory by @d-v-b in #4339
- fix: complete imagecodecs codec package hints by @d-v-b in #4351
- fix(store): retry the LocalStore rename when the destination is busy by @Tomatokeftes in #4358
- refactor(store): polish the LocalStore rename retry from #4358 by @d-v-b in #4359
- docs(blog): zarr 3.4.0 release post by @d-v-b in #4355
- docs: 3.4.0 release notes by @d-v-b in #4360
Dependency updates
- chore(deps): bump the python-dependencies group across 1 directory with 11 updates by @dependabot[bot] in #4216
- chore(deps): bump cryptography from 48.0.1 to 50.0.0 by @dependabot[bot] in #4240
- chore(deps): bump aiohttp from 3.14.1 to 3.14.3 by @dependabot[bot] in #4233
- chore(deps): bump pymdown-extensions from 10.21.3 to 11.0 by @dependabot[bot] in #4197
- chore(deps): bump the actions group across 1 directory with 9 updates by @dependabot[bot] in #4241
- chore(deps-dev): bump the python-dependencies group across 1 directory with 5 updates by @dependabot[bot] in #4242
- chore(deps): bump the actions group with 4 updates by @dependabot[bot] in #4258
- chore(deps): bump the python-dependencies group with 6 updates by @dependabot[bot] in #4259
- chore(deps): bump the python-dependencies group across 1 directory with 7 updates by @dependabot[bot] in #4278
- chore(deps): bump the actions group across 1 directory with 4 updates by @dependabot[bot] in #4294
- chore(deps): bump the python-dependencies group with 7 updates by @dependabot[bot] in #4295
- chore(deps): bump CodSpeedHQ/action from 5.0.3 to 5.2.1 in the actions group by @dependabot[bot] in #4308
- chore(deps-dev): bump the python-dependencies group with 5 updates by @dependabot[bot] in #4309
- chore(deps): bump pymdown-extensions from 11.0 to 11.0.1 by @dependabot[bot] in #4314
- chore(deps): bump the python-dependencies group with 6 updates by @dependabot[bot] in #4337
- chore(deps): bump zizmorcore/zizmor-action from 0.6.2 to 0.6.3 in the actions group by @dependabot[bot] in #4336
New Contributors
- @JOhnsonKC201 made their first contribution in #4189
- @vup903 made their first contribution in #4063
- @glaziermag made their first contribution in #4274
- @dylanpulver made their first contribution in #4279
- @sheikhayaan made their first contribution in #4270
- @arcusbuilds made their first contribution in #4277
- @Tomatokeftes made their first contribution in #4305
- @cucuwang made their first contribution in #4297
Full Changelog: v3.3.0...v3.4.0