What’s New in Iris#
v3.17 (30 Oct 2026)#
This document explains the changes made to Iris for this release (View all changes.)
v3.17 Release Highlights
The highlights for this major/minor release of Iris include:
Added native Zarr support. Iris can now read Zarr versions 2 and 3, and write version 3.
Iris’s AGENTS.md files have been rewritten from a month’s experience of AI-assisted development: a new source-code style guide, an architecture map, a shared writing guide, and testing rules that record what the suite does not cover.
We also want to thank @syahra712, @mo-AndrewCreswick, @rcomer and @01luyicheng for their contributions that have gone into this release.
And finally, get in touch with us on GitHub if you have any issues or feature requests for improving Iris. Enjoy!
✨ Features#
#7236: @mo-AndrewCreswick added the option to set the step between rolling windows in
iris.cube.Cube.rolling_window(). ( #7217)#7309: @claude, @trexfeathers, @stephenworsley, @pp-mo, @bjlittle, and OpenAI’s Codex added native Zarr support. Iris reads Zarr version 2 and version 3 stores and writes version 3, through the same
iris.load()andiris.save()calls as any other format, withzarran optional dependency.iris.fileformats.zarr.load_cubes()andiris.fileformats.zarr.save()take agroupkeyword for a store that holds more than one dataset. ( #6977, #6979, #6980)#7361: @ESadek-MO updated the CF standard names table to version 95.
🐛 Bugs Fixed#
#7253: @stephenworsley fixed a bug which caused indexing to fail when
start_indexwas 1. ( #7246)#7257: @stephenworsley fixed the default value for
TEST_DATA_DIR.#7309: @claude, @trexfeathers, @stephenworsley, @pp-mo, @bjlittle, and OpenAI’s Codex fixed the handling of attributes whose name collides with a member of the netCDF4 Python API –
shape,size,dtype,name,dimensionsandmask. They were silently dropped when saving and silently shadowed when loading; they now round-trip.@claude, @trexfeathers, @stephenworsley, @pp-mo, @bjlittle, and OpenAI’s Codex fixed saving
int64data toNETCDF3_64BIT, which failed inside the netCDF C library rather than narrowing the data toint32as the other netCDF 3 formats do. ( #7337)#7348: @syahra712 fixed the error raised when adding a non-cube to a
CubeList, which showed a literal{obj}placeholder instead of the rejected object. ( #7348)
🔥 Deprecations#
#7309: @claude, @trexfeathers, @stephenworsley, @pp-mo, @bjlittle, and OpenAI’s Codex deprecated reading a CF attribute as an attribute of a
CFVariable–cf_var.unitsrather thancf_var.attributes["units"]– and reaching a netCDF4 variable member through one. Both warn on use and will be removed in a future release.@claude, @trexfeathers, @stephenworsley, @pp-mo, @bjlittle, and OpenAI’s Codex relocated six public names out of
iris.fileformats.netcdfintoiris.fileformats.cf, the package that now holds the shared CF loading and saving code. The old names still work, and warn with their new location.
🔗 Dependencies#
#7270: @trexfeathers modernised the Iris gallery tests, and set several to skip if using the incompatible combination of PROJ>=9.8 and Cartopy<0.26.
#7309: @claude, @trexfeathers, @stephenworsley, @pp-mo, @bjlittle, and OpenAI’s Codex added
zarr(>=3.1.0) as an optional dependency, needed only to read or write a Zarr store, andxarrayas a test dependency, used to check that stores Iris writes are readable by another Zarr reader.
💼 Internal#
#7198: @01luyicheng added unit tests for
coord_dims(). ( #4552)#7254: @trexfeathers made CI compatible with PROJ 9.8, including known incompatibilities with Cartopy <0.26 when plotting coastlines.
#7267: @rcomer moved the developers’ conda yaml file. It is now
environment.ymlin the repository root directory. ( #7205)#7269: @rcomer updated the scipy intersphinx mapping to make documentation builds more reliable.
#7278: @claude fixed a race between the release-tooling tests, which under
pytest-xdistcould share anothingprogress file and so read one that another worker was part way through writing. Each test now runs in its own working directory, which also stops the test suite writing.nothing/into the working copy. ( #7278)#7299: Fix 1d-plot adjustment for line directions, for cartopy >= 0.26.
#7299: Fix shape-masking test for more stable results.
#7303: @trexfeathers removed
iris.fileformats.netcdf.saver.VariableEmulator.#7309: @claude, @trexfeathers, @stephenworsley, @pp-mo, @bjlittle, and OpenAI’s Codex split the CF loading and saving code out of
iris.fileformats.netcdfintoiris.fileformats.cf, so that it is shared by the netCDF and Zarr backends rather than owned by one of them. Both backends reach their storage through one abstraction,iris.fileformats.cf.dataset.CFDataset. The public netCDF names are unchanged.#7312: @trexfeathers tightened the
AGENTS.mdagent instructions: comment and docstring rules are regrouped, lazy data has its own section, citations that decay silently - line numbers in other files, counts of call sites - are banned, and a new section covers a review comment that contradicts a written rule.