What’s New in Iris#

v3.15 (02 Apr 2026)#

This document explains the changes made to Iris for this release (View all changes.)

v3.15 Release Highlights

The highlights for this minor release of Iris include:

  • Overhauling the user documentation structure to maximise discoverability and engagement with user needs going forward.

  • NIMROD loader improvements to expand the types of NIMROD files Iris can load.

  • Documentation page explaining how to access files in S3 buckets.

  • Compatibility with Pandas version 3.

  • Several large pieces of work behind the scenes to put Iris in the best possible place for the future. To be continued!

    • Investigating how Iris can provide native Zarr loading and saving (beyond what is already possible via ncdata).

    • Completed a 2-year project converting all tests from unittest to pytest, including compliance with the Ruff PT standard.

    • In-progress work to fully support arrays of characters/strings.

    • Investigating how Iris can integrate with the Pint units library, to increase interoperability with the wider scientific Python ecosystem.

    • Layout groundwork for making Iris fully Pip-installable, reducing the dependency footprint and improving handling of optional dependencies.

And finally, get in touch with us on GitHub if you have any issues or feature requests for improving Iris. Enjoy!

📢 Announcements#

  1. We’ve had a makeover! ✨ All user documentation pages have been reorganised into a new structure: User Manual. This restructure is to maximise discoverability of the available pages, as well as embracing the Diataxis framework for better engagement with user needs going forward.

✨ Features#

  1. @ukmo-ccbunney added new cube component convenience methods that allow for manipulation of any named dimensional component that can be attached to a cube (i.e. coordinates, cell measures and ancillary variables) via a common interface. The following methods are provided:

    (Issue #5819, PR #6854)

  2. @ESadek-MO added functionality to allow concatenate(), rolling_window() and intersection() to work with dataless cubes. (PR #6860, PR #6757)

  3. @HGWright added to the Nimrod loader to expand the types of Nimrod files it can load. This includes selecting which Nimrod table to use the data entry headers from. (Issue #4505, PR #6763)

  4. @stephenworsley added the coordinate method as_string_arrays() and the class PointBoundStrings to help represent points and bounds data on coordinates. This adapts code suggestions by @rcomer and @vsherratt. (Issue #4508, PR #6978)

🐛 Bugs Fixed#

  1. @ukmo-ccbunney changed formatting of numpy scalars attributes when generating a Cube/Coord summary to use str representation instead of repr. (PR #6966, Issue #6692)

💣 Incompatible Changes#

  1. @hsteptoe and @ESadek-MO (reviewer) disabled the copy behaviour across iris.pandas, as it is incompatible with Pandas v3 (see New pandas v3 copy behaviour). The parameter is still present, to help mitigate disruption, but now marked for deprecation. (PR #6948, Issue #6761)

🚀 Performance Enhancements#

  1. Note that libnetcdf version 4.10.0 (released 25th Feb 2026) improves NetCDF loading and saving performance, measured between 20-40% in Iris’ benchmarks (Issue #6984).

🔥 Deprecations#

  1. @ESadek-MO has deprecated the IrisTest class, and other unittest-based testing conveniences in favour of the conveniences found in iris/tests/_shared_utils.py. (PR #6950)

  2. @hsteptoe has deprecated the use of the copy kwarg across iris.pandas to reflect changes to the default behaviour of pandas v3 New pandas v3 copy behaviour. (PR #6948)

🔗 Dependencies#

  1. @hsteptoe and @ESadek-MO (reviewer) made iris.pandas interoperability compatible with pandas v3. (PR #6948, Issue #6761)

📚 Documentation#

  1. @tkknight reduced the space used on the documentation homepage by the quick link cards to allow for easier reading. (PR #6886)

  2. @tkknight added a gallery carousel to the documentation homepage. (PR #6884)

  3. @bjlittle added the :user: extlinks github user convenience. (PR #6931)

  4. @pp-mo added a page on how to access datafiles in S3 buckets: Loading From and Saving To S3 Buckets. (Issue #6374, PR #6951)

  5. @trexfeathers, @stephenworsley, @ESadek-MO and @tkknight reorganised all user documentation pages into a new structure: User Manual. This restructure is to maximise discoverability of the available pages, as well as embracing the Diataxis framework for better engagement with user needs going forward. (Issue #6511, PR #6868)

💼 Internal#

  1. @trexfeathers and @hdyson updated _ff_replacement.py to clarify that Iris supports Ancillaries. (PR #6792)

  2. @trexfeathers adapted test_OceanSigmaZFactory for NumPy 2.4 - only 0-dimensional arrays can now be converted to scalars. (PR #6876)

  3. @trexfeathers updated benchmarking to source Mule from its new home: MetOffice/mule . (PR #6879)

  4. @tkknight removed flake8, we have ruff now instead. (PR #6889)

  5. @trexfeathers and @ukmo-ccbunney updated CI to support Python 3.14 inline with SPEC0 Minimum Supported Dependencies. Note: pyvista (and hence geovista) is not yet compatible with Python 3.14, so iris.experimental.geovista is currently only available for Python <3.14. (PR #6816, Issue #6775)

  6. @ESadek-MO, @trexfeathers, @bjlittle, @HGWright, @pp-mo, @stephenworsley and @ukmo-ccbunney converted the entirity of the tests from unittest to pytest. Iris is now also ruff-PT compliant, save for PT019. (Issue #6212, PR #6939)

  7. @hsteptoe and @ESadek-MO (reviewer) updated chained assignment useage within the tests associated with iris.pandas to reflect changes in pandas v3 New pandas v3 copy behaviour. (PR #6948, Issue #6761)

  8. @hsteptoe and @ESadek-MO (reviewer) added static type hinting to iris.pandas. (PR #6948)