Skip to content

Releases: hdmf-dev/hdmf

6.0.1

05 May 07:55
0d61982

Choose a tag to compare

HDMF 6.0.1 (May 5, 2026)

Fixed

  • Fixed ROS3 streaming tests that failed against libhdf5 >= 2.0, which now requires aws_region for ROS3. Updated tests/unit/test_io_hdf5_streaming.py to always pass aws_region and bumped environment-ros3.yml to install libhdf5 >= 2.0 so CI exercises the new behavior. @rly #1471

6.0.0

04 May 22:26
0970bc1

Choose a tag to compare

HDMF 6.0.0 (May 4, 2026)

Breaking changes

  • HDF5IO expandable argument is now a list of data type names instead of a boolean. The default is ("VectorData", "ElementIdentifiers"), so only DynamicTable columns and id are expandable out of the box — previously every dataset with a matching spec shape was expanded. Datasets of types outside this list that previously were expandable by default will now default to fixed-shape on-disk layout; add the relevant type to expandable to restore prior behavior. Replace expandable=True with an explicit list (e.g. ["VectorData", "ElementIdentifiers", "MyType"]) and expandable=False with []; passing True/False now raises a TypeError. @bendichter @rly #1439
  • Renamed the spec_ext kwarg to matched_spec on BuildManager.build, TypeMap.build, and ObjectMapper.build to reflect that it now records the matched subspec on the resulting builder via the new Builder.matched_spec slot. Removed the now-unused spec_dtype kwarg from ObjectMapper.convert_dtype. Callers passing these kwargs will get a TypeError. @rly #1458

Enhancements

  • Set sensible default chunk sizes (~4 MB, in the recommended 2-16 MB range for cloud-hosted files) when chunks=True, replacing h5py's much smaller defaults. Added public HDF5IO.compute_default_chunk_shape() so users can inspect or override the chunk shape that would be used. @bendichter #1440
  • Added end-to-end support for isodatetime/datetime dtype on datasets and attributes, including extension specs that refine an inherited type. Reading now parses stored ISO 8601 values back into Python datetime/date objects, and get_class-generated classes accept datetime/date values (scalar and array) for the data arg, which is now derived from the spec's dtype and shape. Introduced a new write-once Builder.matched_spec slot that records the subspec each builder was matched to, populated by both the read-path matcher and the write-path build sites in ObjectMapper. @rly #1458

Fixed

  • Added missing validation for dataset reference target types to ensure correct RefSpec.target_type matching. @sejalpunwatkar #1429
  • Fixed reading a DynamicTable that contains a named link to a VectorData (e.g., MeaningsTable.target). The link target was being picked up as an extra column, causing a "Columns must be the same length" error when the target column's row count differed from the table's own row count. @rly #1445
  • Fixed building typed datasets whose inc-site spec declares dtype: isodatetime or dtype: datetime (e.g., a VectorData column refined as a date column), which previously raised Expected unicode or ascii string, got <class 'datetime.date'>. @rly #1458

5.1.0

24 Mar 04:55
1656a31

Choose a tag to compare

hdmf 5.1.0

5.0.1

17 Mar 04:14
935f58d

Choose a tag to compare

hdmf 5.0.1

5.0.0

03 Mar 00:53
ef5b390

Choose a tag to compare

HDMF 5.0.0 (March 2, 2026)

Changed

  • Refactored TypeMap.load_namespaces to register TypeSource placeholders for both source types and dependent types, enabling lazy class generation. Added NamespaceCatalog.get_source_types to get source types loaded for a namespace. Removed TypeMap.container_types property. Converted TypeSource to a frozen dataclass. @rly #1372
  • New spec resolution system: Instead of resolving includes during spec loading, resolution now happens after all specs are loaded via NamespaceCatalog.resolve_all_specs(). @rly #1312, #1392
    • New methods: BaseStorageSpec.resolve_inc_spec() replaces the old BaseStorageSpec.resolve_spec() method
    • Resolution tracking: New properties BaseStorageSpec.resolved and BaseStorageSpec.inc_spec_resolved track resolution state
    • Cross-namespace resolution: The system can now resolve specs that include types from different namespaces
    • dtype, shape, dims, value, and default_value in DatasetSpec and AttributeSpec are now inherited and validated from the parent data type spec
  • If dims are not provided in a DatasetSpec or AttributeSpec, but shape is provided, dims will be set to a list of dummy dimension names, e.g., "dim_0", "dim_1", etc. @rly #1312
  • Deprecated BaseStorageSpec.add_attribute, GroupSpec.add_group, GroupSpec.add_dataset, and GroupSpec.add_link. Use set_attribute, set_group, set_dataset, and set_link instead. @rly #1333
  • Deprecated unused BaseStorageSpec.get_data_type_spec and BaseStorageSpec.get_namespace_spec. @rly #1333
  • Moved test, docs, and min-reqs from [project.optional-dependencies] to [dependency-groups] (PEP 735). min-reqs was renamed to test-min-deps. @rly #1395
  • Removed test-min-deps dependency group and replaced it with uv pip install --resolution lowest-direct in tox, making the project compatible with uv. @h-mayorquin #1408
  • Changed get_data_shape to check shape before maxshape, so that objects with both attributes (e.g., h5py datasets) return their actual shape rather than their maximum shape. @rly #1180

Removed

  • Dropped support for Python 3.9. The minimum supported version is now Python 3.10. @rly #xxx
  • Replaced typing library calls with Python 3.10+ built-in type syntax (X | Y, X | None, type[X], tuple[X], etc.). @rly #xxx
  • Removed unused and undocumented hdmf.monitor module. @rly #1327
  • Removed deprecated Data.set_data_io usage and HERDManager methods. @rly #1328
  • Removed deprecated HDF5IO.copy_file method. Use the HDF5IO.export or the h5py.File.copy method instead. @stephprince #1332
  • Removed deprecated extensions kwarg for get_type_map function. @stephprince #1332
  • Removed unused and unnecessary NamespaceToBuilderHelper.get_source_path method. @rly #1392
  • Deprecated TypeMap.copy_mappers method. Use TypeMap.merge instead with the argument ns_catalog=False to copy only mappers without namespaces. @rly #1372

Added

  • Added expandable parameter to HDF5IO.write (default True) that makes all non-scalar datasets expandable by setting maxshape based on the matching shape defined in the spec. Pass expandable=False to disable this behavior. @rly #1180
  • Added support for HDMF Common Schema 1.9.0.
    • Introduced a new data type MeaningsTable and changes to DynamicTable to support included MeaningsTable objects. @rly #1376
    • Promoted HERD from the hdmf-experimental namespace to the HDMF Common namespace. @rly #1387
  • Added a check when setting or adding data to a DynamicTableRegion or setting the table attribute of a DynamicTableRegion
    that the data values are in bounds of the linked table. This can be turned off for
    DynamicTableRegion.__init__ using the keyword argument validate_data=False. @rly #1168
  • Added warning when data_type_def and data_type_inc are the same in a spec. @rly #1312
  • Added abstract methods HDMFIO.load_namespaces and HDMFIO.load_namespaces_io. @rly #1299

Enhancements

  • Reduced memory allocations in DynamicTable.add_column(..., index=True) ragged column flattening by using np.concatenate instead of list(itertools.chain.from_iterable(...)) when all entries are compatible numpy arrays. @h-mayorquin #1403

Fixed

  • Fixed register_container_type overwriting the reverse class-to-namespace map when an extension calls include_namespace("core"), which caused core types to be stamped with the extension's namespace. @h-mayorquin, @rly #1407
  • Fixed VectorData.extend() silently corrupting 1D numpy arrays by reshaping them into 2D matrices. Replaced np.vstack with np.concatenate in extend_data. @h-mayorquin #1405
  • Fixed validation of Python native float and int values against float64 and int64 specs. Python float is 64-bit but was mapped to float32, and Python int is 64-bit (or larger) but was mapped to int32. @rly #1410
  • Fixed a broken test and refactored VectorIndex.get. @rly, @mavaylon1 #1293
  • Fixed missing timezone validation for isodatetime values in AttributeSpec and DatasetSpec. @sejalpunwatkar #1399

Latest (updated on 2026-03-03 00:03 UTC)

03 Mar 00:46
ef5b390

Choose a tag to compare

latest

Prepare 5.0.0 release (#1402)

4.3.1

28 Jan 17:32
d812ff8

Choose a tag to compare

HDMF 4.3.1 (January 28, 2026)

Added

  • Added _repr_html_ method to LabelledDict for interactive HTML display in notebooks. @h-mayorquin #1381

Changed

  • Restricted pandas version to <3 until support for pandas v3 is added. @rly #1385

Fixed

  • Fixed issue with with testing and deployment of releases. @rly #1383

HDMF 4.3.0 (January 22, 2026)

Added

Changed

  • Added a collapsible "columns" section to the DynamicTable HTML representation that displays column descriptions, making it easier to inspect column metadata in notebooks. @h-mayorquin #1369
  • Added ability to create specs with circular dependencies, e.g., Type A contains Type B, and Type B extends Type A, or Type A contains a reference to Type A (self-reference). @rly #1374

Fixed

  • Fixed issue where a container was assigned to an incorrect namespace. @rly #1373

4.2.0

18 Dec 18:49
af41ee8

Choose a tag to compare

Added

  • Added an argument copy to get_type_map to control whether a copy of the type map is returned or not.
    If copy=False, the returned type map will be a direct reference to the global type map. @rly
    #1352

Changed

  • Changed HTML representation to display the data_type for nested containers, showing the type in parentheses next to the name (e.g., MyTimeSeries (TimeSeries)). @h-mayorquin #1355
  • Changed how to call BuildManager.build, TypeMap.build, and ObjectMapper.build when exporting. The export argument is no longer accepted by TypeMap.build and ObjectMapper.build; BuildManager.build still accepts the export argument but now uses it to set an internal flag instead of passing it through the call chain. @rly #1358
  • Changed HTML representation of MultiContainerInterface to flatten the grouping attribute when only
    one grouping is defined (len(__clsconf__) == 1), removing the redundant nesting level since users
    can access children directly via container["name"]. @h-mayorquin #1354

Fixed

  • Fixed bug when validating string datasets in NWB Zarr files. @stephprince #1348
  • Fixed a performance regression that affected calling setters of HDMF Common data types. @rly #1352
  • Updated GitHub Actions runners to not use the deprecated macos-13 runner. @rly #1363

4.1.2

12 Nov 17:56
4.1.2
b288957

Choose a tag to compare

Fixed

  • Fixed bug when converting string datasets that are Zarr arrays. @oruebel @rly #1171
  • Fixed unclear shape validation error message. @bendichter @rly #787
  • Fixed testing of sphinx gallery examples with optional dependencies. @rly #1343

4.1.1

23 Oct 02:20
4.1.1
68ab20f

Choose a tag to compare

Fixed

  • Fixed copying of TypeMap and TypeConfigurator. Previously, the same global TypeConfigurator instance was used in all copies of a TypeMap. @rly #1302
  • Fixed get_data_shape to use Data.data.shape instead of Data.shape, which may be overridden by subclasses. @rly #1311
  • Fixed HTML representation of datasets when reading from LINDI. @bendichter #1335
  • Fixed bug where compound datatypes were disregarding custom data I/O options with the zarr backend. @pauladkisson #1297

Added

  • Added a check for a compound datatype that is not defined in the schema or spec. This is currently not supported. @mavaylon1 #1276
  • Added checks when loading a namespace for link specification conflicts between extension and core schemas. @stephprince #1309
  • Added GitHub Actions workflow that tests compatibility with NWB extensions from the NWB extensions catalog. @rly #1319
  • Added unit tests for hdmf.common module to improve code coverage. @stephprince #1330

Changed

  • Changed error for attempting to overwrite an existing specification into a warning that any specification redefinitions will be ignored. @stephprince #1309
  • Deprecated the experimental HERDManager.link_resources and HERDManager.link_external_resources and added the property HERDManager.external_resources to support downstream API function overloading. @mavaylon1, @rly #1292