v3.16.0.dev56 (22 Jun 2026) [unreleased]#

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

v3.16.0.dev56 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!

📢 Announcements#

  1. N/A

✨ Features#

  1. @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. (Issue #7112, PR #7146)

🐛 Bugs Fixed#

  1. @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. (Issue #4337)

  2. @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. (Issue #5158)

  3. @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. (Issue #4119)

💣 Incompatible Changes#

  1. N/A

🚀 Performance Enhancements#

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

🔥 Deprecations#

  1. @bjlittle deprecated the iris.analysis.calculus module containing the following public functions:

    Native Cube calculus functionality will not be replaced and is scheduled for removal in Iris 4.0.0. (Issue #6262, PR #7102)

🔗 Dependencies#

  1. @trexfeathers and @tkknight removed the maximum pin for the PyData Sphinx Theme (used in the docs). (Issue #6885, PR #7053)

  2. @tkknight added a minimum pin for the PyData Sphinx Theme as we use the collapse sidebar feature introduced in 0.17.0. (PR #7060)

  3. @tkknight updated a dependency in the Read The Docs configuration file to use the latest python. (PR #7084)

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

  5. @tkknight added a dependency named sphinx-sitemap to generate sitemap.xml for the documentaiton. (PR #7100)

📚 Documentation#

  1. @trexfeathers and @tkknight made the docs compatible with the latest versions of PyData Sphinx Theme (>=0.16). (Issue #6885, PR #7053)

  2. @tkknight enabled the theme option to collapse the sidebar. Note, it only appears once you click on a link away from the landing page. Also moved the search box to the top navigation bar. (PR #7060)

  3. @trexfeathers switched to using the official URL of the cf-checker, after our previous URL of choice was taken down. (PR #7072)

  4. @tkknight updated the voted table that uses datatables to not highlight the sorted column or row as is uses the incorrect theme color (light). Also updated the datatables version from 2.3.2 to 2.3.8. (PR #7079)

  5. @trexfeathers simplified the pull request checklist and moved it directly into the GitHub pull request template (read more here: Pull Request Checklist). Also updated several associated pages of more detailed guidance. (PR #7096)

  6. @tkknight updated the documentation to generate summaries that LLMs can understand, llms.txt and llms-full.txt. (PR #7105)

  7. @tkknight updated the documentation to generate a sitemap.xml files for the stable version. (PR #7100)

  8. @trexfeathers and @hdyson clarified that iris.analysis.cartography.area_weights() requires 1-dimensional lat and lon coordinates on the input Cube. (PR #7118)

  9. @bjlittle Added an explanation section for Temporal Coordinates. (PR #7131)

  10. @bjlittle Added the custom sphinx readingtime directive to automatically estimate the audiance reading time of a page and render a branded banner in-situ. (PR #7150)

  11. @bjlittle Updated the Temporal Coordinates section. (PR #7159)

💼 Internal#

  1. @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. (Issue #6993, PR #7036)

  2. @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). (PR #7046)

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

  4. @SgtVarmint migrated codebase from os.path to pathlib.Path where possible (Issue #4523, PR #7087)

  5. @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. (PR #7138)

  6. @trexfeathers set the link checking workflow to accept redirect HTTP codes, as the reports were getting too noisy. (PR #7148)

  7. @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. (Issue #7094, PR #7134)

  8. @rcomer fixed the capitalisation of a pytest marker. (PR #7163)