# What’s new in h5py 3.3

## New features

- Compatibility with the upcoming HDF5 1.12.1 and possibly 1.14 (PR 1875).

- H5T_BITFIELD types will now be cast to their `numpy.uint` equivalent by default (GH1258). This means that no knowledge of mixed type compound dataset schemas is required to read these types, and can simply be read as follows:

      arr = dset[:]

  Alternatively, 8-bit bitfields can still be cast to booleans explicitly:

      arr = dset.astype(numpy.bool_)[:]

- Key types are validated when accessing groups, to give more helpful errors when a group is indexed like a dataset (PR 1856).

- A new `Group.build_virtual_dataset()` method acting as a context manager to assemble virtual datasets (PR 1905).

- If the source and target of a virtual dataset mapping have different numbers of points, an error should now be thrown when you make the mapping in the `VirtualLayout`, rather than later when writing this into the file. This should make it easier to find the source of such errors.

## Deprecations

- Linux wheels are now manylinux2010 rather than manylinux1

- The `default_file_mode` config option is deprecated, and setting it to values other than ‘r’ (for read-only mode) is no longer allowed. Pass the mode when creating a `File` object instead of setting a global default.

## Bug fixes

- Trying to open a file in append mode (`'a'`) should now give clearer error messages when the file exists but can’t be opened (PR 1902).

- Protect `h5py.h5f.get_obj_ids()` against garbage collection invalidating HDF5 IDs while it is retrieving them (GH1852).

- Make file closing more robust, including when closing files while the interpreter is shutting down, by using lower-level code to close HDF5 IDs of objects inside the file (GH1495).