Pcodec chunks were written as filter 32023, which the HDF Group registry assigns to Granular BitRound (GBR). Pcodec has no registered ID (checked 2026-09-25 against hdf5_plugins/docs/RegisteredFilterPlugins.md, which ends at 32033 with no pcodec entry). GBR's decode is a pass-through, so libhdf5 with that plugin loaded would have returned the compressed bytes as the dataset's values. Write pcodec as 480, from the registry's testing/private range (256-511), named "pcodec (clawhdf5 private)", and document it as non-interoperable: only clawhdf5 with the `pcodec` feature reads it. Chunks under 32023 are still read as pcodec when the filter is named exactly "pcodec" (what clawhdf5 <= 2.7.0 wrote); any other 32023 is UnsupportedFilter. Test: pcodec_uses_private_id_and_reads_legacy_32023. Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
clawhdf5-format
Pure-Rust HDF5 binary format parsing and writing — no C dependencies.
Features
- Zero-copy superblock, object header, and B-tree parsing
- Chunked dataset read/write with filter pipelines
no_stdsupport (disablestdfeature)- Optional parallel reads via Rayon
- SHA-256 provenance tracking
Usage
use clawhdf5_format::Superblock;
let data = std::fs::read("data.h5").unwrap();
let sb = Superblock::from_bytes(&data).unwrap();
println!("HDF5 version {}.{}", sb.version_major(), sb.version_minor());
License
MIT