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#
🐛 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 tofloat64. Integer inputs are still returned asfloat64. ( #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.Constraintraise aTypeErrorwhen used in a boolean context (e.g. with theand/or/notkeywords) 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#
#7102: @bjlittle deprecated the
iris.analysis.calculusmodule containing the following public functions:spatial_vectors_with_phenom_name()
Native
Cubecalculus functionality will not be replaced and is scheduled for removal inIris4.0.0. ( #6262)
🔗 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.txtandllms-full.txt.
📚 Documentation#
#7053: @trexfeathers and @tkknight made the docs compatible with the latest versions of PyData Sphinx Theme (>=0.16). ( #6885)
#7060: @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.
#7072: @trexfeathers switched to using the official URL of the cf-checker, after our previous URL of choice was taken down.
#7079: @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.
#7096: @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.
#7100: @tkknight updated the documentation to generate a sitemap.xml files for the stable version.
#7105: @tkknight updated the documentation to generate summaries that LLMs can understand,
llms.txtandllms-full.txt.#7118: @trexfeathers and @hdyson clarified that
iris.analysis.cartography.area_weights()requires 1-dimensional lat and lon coordinates on the inputCube.#7131: @bjlittle Added an explanation section for Temporal Coordinates.
#7150, #7157: @bjlittle and @trexfeathers Added the custom
sphinxreadingtimedirective to automatically estimate the audiance reading time of a page and render a branded banner in-situ.#7159: @bjlittle Updated the Temporal Coordinates section.
#7166: @bjlittle migrated to towncrier for changelog management.
#7175: @tkknight Added
AGENTS.mdfor AI-assisted development guidelines across the project root,docs/,changelog/andtests/directories.
💼 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-checkinfor the initial prompt, andnot-resourcedif the issue/PR ends up closed. ( #6993)#7046: @trexfeathers fixed the benchmarking
asv_delegated.pyto work with Nox release2026.04.10(which adds more files to the environment parent directory, breaking previous assumptions).#7087: @SgtVarmint migrated codebase from
os.pathtopathlib.Pathwhere 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.