What’s New in Iris#

v3.16.0.dev61 (25 Jun 2026) [unreleased]#

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

v3.16.0.dev61 Release Highlights

The highlights for this major/minor release of Iris include:

  • N/A

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

✨ Features#

  • #7146: @bjlittle extended the cell() and cells() methods to allow users to specify that they want datetime compatible objects returned within each generated Cell from a temporal coordinate. This is achieved by passing the keyword argument pydate=True. ( #7112)

🐛 Bugs Fixed#

  • #7119: @gaoflow fixed iris.analysis.cartography.wrap_lons() so that it preserves the floating-point dtype of its input (e.g. float32) instead of always promoting the result to float64. Integer inputs are still returned as float64. ( #4119)

  • #7120: @gaoflow fixed iris.coords.Coord.cell() so that a masked bound is preserved as masked, instead of revealing the value stored underneath the mask. This also corrects the cube/coordinate printout for such bounds. ( #5158)

  • #7121: @gaoflow made iris.Constraint raise a TypeError when used in a boolean context (e.g. with the and/or/not keywords) instead of silently discarding one of the constraints. Use the & operator to combine constraints. ( #4337)

  • #7126: @gaoflow fixed an error when computing (e.g. saving) a scalar lazy cube whose units had been converted with convert_units(). The unit conversion could yield a plain Python scalar for the 0-dimensional block, which Dask was then unable to store. ( #6965)

🚀 Performance Enhancements#

  • #7089: @trexfeathers improved the speed of field iteration when reading PP files. Up to 3x speed up has been seen, dependending on the circumstances.

🔥 Deprecations#

🔗 Dependencies#

  • #7053: @trexfeathers and @tkknight removed the maximum pin for the PyData Sphinx Theme (used in the docs). ( #6885)

  • #7060: @tkknight added a minimum pin for the PyData Sphinx Theme as we use the collapse sidebar feature introduced in 0.17.0.

  • #7084: @tkknight updated a dependency in the Read The Docs configuration file to use the latest python.

  • #7100: @tkknight added a dependency named sphinx-sitemap to generate sitemap.xml for the documentation.

  • #7105: @tkknight added a dependency named sphinx-llm to generate summaries that LLMs can understand, llms.txt and llms-full.txt.

📚 Documentation#

💼 Internal#

  • #6976: @ESadek-MO and @pp-mo removed unit test reliance on all optional dependencies except for mo_pack. ( #6832)

  • #7036: @trexfeathers altered the messaging for ‘stale’ issues and pull requests, to reduce the negative connotations. We now use needs-checkin for the initial prompt, and not-resourced if the issue/PR ends up closed. ( #6993)

  • #7046: @trexfeathers fixed the benchmarking asv_delegated.py to work with Nox release 2026.04.10 (which adds more files to the environment parent directory, breaking previous assumptions).

  • #7087: @SgtVarmint migrated codebase from os.path to pathlib.Path where possible. ( #4523)

  • #7134: @HGWright changed the default of the private switch _LAZY_DERIVED_LOADING (formerly .CONCRETE_DERIVED_LOADING) for controlling laziness of coordinates from pp loading, now the switch must be set to True for lazy loading to be enabled. Note: this object is temporary and is likely to be replaced by a permanent solution or else be renamed. ( #7094)

  • #7138: @bjlittle and @trexfeathers added the Zizmor pre-commit hook to monitor for security vulnerabilities in Iris’ GitHub Actions workflows, and then actioned Zizmor’s recommendations to harden the workflows.

  • #7148, #7165: @trexfeathers set the link checking workflow to accept redirect HTTP codes, as the reports were getting too noisy.

  • #7163: @rcomer fixed the capitalisation of a pytest marker.