# What’s new in h5py 2.9

## New features

- A convenient high-level API for creating virtual datasets, HDF5 objects which act as a view over one or more real datasets (GH1060, GH1126). See Virtual Datasets (VDS) for details.

- `File` can now be constructed with a Python file-like object, making it easy to create an HDF5 file in memory using `io.BytesIO` (GH1061, GH1105, GH1116). See Python file-like objects for details.

- `File` now accepts parameters to control the chunk cache (GH1008). See Chunk cache for details.

- New options to record the order of insertion for attributes and group entries. Iterating over these collections now follows insertion order if it was recorded, or name order if not (GH1098).

- A new method `Group.create_dataset_like()` to create a new dataset with similar properties to an existing one (GH1085).

- Datasets can now be created with storage backed by external non-HDF5 files (GH1000).

- Lists or tuples of unicode strings can now be stored as HDF5 attributes (GH1032).

- Inspecting the view returned by `.keys()` now shows the key names, for convenient interactive use (GH1049).

## Exposing HDF5 functions

- `H5LTopen_file_image` as `h5py.h5f.open_file_image()` (GH1075).

- External dataset storage functions `H5Pset_external`, `H5Pget_external` and `H5Pget_external_count` as methods on `h5py.h5p.PropDCID` (GH1000).

## Bugfixes

- Fix reading/writing of float128 data (GH1114).

- Converting data to float16 when creating a dataset (GH1115).

## Support for old Python

Support for Python 3.3 has been dropped.

Support for Python 2.6 has been dropped.