Repository navigation
Track upstream neuroconv zarr 3 support; drop the zarr<3 pin when it shipsΒ #129
Description
π€ AI text below π€
Duplicate record of tabedzki/tank-lab-to-nwb#2 β kept in both repos; update both when status changes.
Summary
A fresh install of neuroconv currently fails at import, which breaks the NWB export's converter (tank-lab-to-nwb). We pin zarr<3 as a stopgap. This issue tracks upstream neuroconv's zarr 3 support so we know when to drop the pin.
Cause
- neuroconv (through the latest release, 0.10.2) uses the zarr 2 API at import time:
zarr.codec_registryinneuroconv/tools/nwb_helpers/_configuration_models/_zarr_dataset_io.py:15. - neuroconv does not bound zarr itself; it only requires
hdmf_zarr>=0.11. - hdmf-zarr 0.14.0 migrated to zarr 3 (Migrate hdmf-zarr from zarr-python v2 to v3Β hdmf-dev/hdmf-zarr#325) and requires
zarr>=3.4. The resolver now picks hdmf-zarr 0.14 + zarr 3.4, and the import fails:
AttributeError: module 'zarr' has no attribute 'codec_registry'
Verified 2026-09-25 in a clean Python 3.12 venv:
neuroconv[scanimage,suite2p]alone β zarr 3.4.0 / hdmf-zarr 0.14.0 β import fails.- Adding
zarr<3β zarr 2.18.7 / hdmf-zarr 0.13.0 / numcodecs 0.15.1 β import works. No hdmf-zarr cap needed.
Our stopgap
zarr<3 added to tank-lab-to-nwb dependencies, with a regression test (tests/test_dependency_pins.py) that fails under zarr 3 and passes under zarr 2:
branch tabedzki/build/pin-zarr-lt3 (off building-nwb-converter), commit tabedzki/tank-lab-to-nwb@877892e.
uv.lock was not regenerated because [tool.uv.sources] points at sibling paths that don't resolve. The locked zarr (2.18.4) already satisfies the pin.
Upstream items to track
| Item | Status (2026-09-25) |
|---|---|
| catalystneuro/neuroconv#2062 β bug report for this failure | Closed |
catalystneuro/neuroconv#2063 β stopgap zarr<3 pin in neuroconv |
Merged 2026-09-24, not yet released (0.10.2 lacks it; main is 0.10.3.dev0) |
| catalystneuro/neuroconv#2002 β zarr 3 forward-compat (option renames) | Merged |
| catalystneuro/neuroconv#1749 β "Zarr v3 backend configuration" (the real port) | Draft, review required |
| SpikeInterface/probeinterface#387 β zarr v3 (blocks #1749) | Open |
| SpikeInterface/spikeinterface#4260 β zarr v3 (blocks #1749) | Open |
| hdmf-dev/hdmf-zarr#325 β hdmf-zarr zarr 3 migration | Merged, released as hdmf-zarr 0.14.0 |
When to act
- neuroconv release containing #2063 (β₯ 0.10.3): our pin becomes redundant but harmless; keep it until the next item.
- neuroconv release containing #1749 (zarr 3 support): remove
zarr<3fromtank-lab-to-nwb, updatetests/test_dependency_pins.py(drop the< 3assertion, keep the import check), relock.
We write HDF5 NWB files, so zarr only matters because neuroconv imports it. We don't need zarr 3 features.
Activity