|
| 1 | +# Release notes |
| 2 | + |
| 3 | +<!-- towncrier release notes start --> |
| 4 | + |
| 5 | +## 0.2.0 (2026-05-11) |
| 6 | + |
| 7 | +### Bugfixes |
| 8 | + |
| 9 | +- `GzipCodecConfiguration.level` is now required, and `GzipCodecMetadata` |
| 10 | + no longer accepts the bare-string `"gzip"` form. The codec's compressed |
| 11 | + output depends on `level`, so metadata that omits it cannot reproducibly |
| 12 | + identify the chunk bytes produced by a writer. **Breaking** for consumers |
| 13 | + that previously typed gzip codec metadata as the bare string or |
| 14 | + constructed a `GzipCodecConfiguration` without `level`. |
| 15 | + ([#3978](https://github.com/zarr-developers/zarr-python/issues/3978)) |
| 16 | +- `BytesCodecObject.configuration` is now `NotRequired`. The configuration |
| 17 | + has no required keys (`endian` is conditionally required at runtime |
| 18 | + based on data type), so the object form may omit it entirely — matching |
| 19 | + the bare-string short-hand. **Soft-breaking** for consumers that |
| 20 | + previously relied on `configuration` always being present. |
| 21 | + ([#3978](https://github.com/zarr-developers/zarr-python/issues/3978)) |
| 22 | +- Better modelling of Zarr v2 stored metadata. Zarr v2 splits a node's |
| 23 | + metadata across two JSON documents (`.zarray`/`.zgroup` and `.zattrs`), |
| 24 | + but `GroupMetadataV2` had no `attributes` field while `ArrayMetadataV2` |
| 25 | + did — an inconsistency. `GroupMetadataV2` now also has an optional |
| 26 | + `attributes` field, and `ArrayMetadataV2.attributes` is now |
| 27 | + `NotRequired` for symmetry. **Soft-breaking** for consumers that |
| 28 | + relied on `ArrayMetadataV2.attributes` always being present. |
| 29 | + ([#3962](https://github.com/zarr-developers/zarr-python/issues/3962)) |
| 30 | + |
| 31 | +### Features |
| 32 | + |
| 33 | +- Added three new top-level types modelling the **strict on-disk** shape |
| 34 | + of Zarr v2 metadata documents: `ZArrayMetadata` (the `.zarray` file), |
| 35 | + `ZGroupMetadata` (the `.zgroup` file), and `ZAttrsMetadata` (the |
| 36 | + `.zattrs` file). Use these when you want a type that faithfully matches |
| 37 | + what's stored on disk; use the merged `ArrayMetadataV2`/`GroupMetadataV2` |
| 38 | + when you want the in-memory representation a Python program typically |
| 39 | + works with. |
| 40 | + ([#3962](https://github.com/zarr-developers/zarr-python/issues/3962)) |
| 41 | +- Added typed constants exposing the spec-permitted values of constrained |
| 42 | + Literal fields, importable at the per-codec module level. For example, |
| 43 | + `from zarr_metadata.v3.codec.bytes import ENDIAN` provides |
| 44 | + `("little", "big")` as a tuple, enabling runtime iteration or validator |
| 45 | + generation without re-stating the Literal values by hand. |
| 46 | + ([#3978](https://github.com/zarr-developers/zarr-python/issues/3978)) |
| 47 | + |
| 48 | +## 0.1.1 (2026-05-06) |
| 49 | + |
| 50 | +### Misc |
| 51 | + |
| 52 | +- First usable release on PyPI. Version 0.1.0 was uploaded then deleted to |
| 53 | + reserve the project name; this version is the first one PyPI will install. |
| 54 | + No source changes from 0.1.0. |
| 55 | + ([#3949](https://github.com/zarr-developers/zarr-python/issues/3949)) |
| 56 | + |
| 57 | +## 0.1.0 (2026-05-01) |
| 58 | + |
| 59 | +### Features |
| 60 | + |
| 61 | +- Initial release. Provides `TypedDict` definitions and `Literal` aliases |
| 62 | + for the JSON shapes specified by Zarr v2 and v3 metadata, plus a subset |
| 63 | + of `zarr-extensions` types and the un-specified-but-widely-used |
| 64 | + consolidated metadata documents. Pair with a runtime validator like |
| 65 | + `pydantic` to check JSON loaded from disk. |
| 66 | + ([#3919](https://github.com/zarr-developers/zarr-python/issues/3919)) |
0 commit comments