# What changed in nox

> 34 changes in nox 2026 from its official release notes, upgrade guides and advisories: 8 breaking, 3 new APIs and options. Each one cited. Sources checked 2026-10-19. HTML: https://unstale.sh/pypi/nox/

To see which of these apply to a repository, run `npx @unstale/cli init` in it.

## nox 2026

### Breaking changes

- Unrecognized global options now produce an error. (2026.08.10) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.08.10)
- Script mode is isolated from an inherited PYTHONPATH. (2026.08.10) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.08.10)
- Provisioning with uv no longer writes ~/.local/bin shims. (2026.08.10) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.08.10)
- Python 3.15 requires virtualenv 21 or later. (2026.08.10) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.08.10)
- The option is enforced even when log=False. (2026.07.11) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.07.11)
- load_toml returns an empty dict when the script file is missing. (2026.07.11) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.07.11)
- Python 3.9 support was dropped. (2026.07.11) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.07.11)
- Fully non-ASCII session names are hashed instead of returning the envdir. (2026.07.11) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.07.11)

### New APIs and options

- Sessions can run in parallel experimentally; sessions must opt in, or use --allow-parallel. (2026.08.10) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.08.10)
- Python ranges with only an upper bound can be downloaded. (2026.08.10) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.08.10)
- The CommandFailed exception now exposes a return_code property. (2026.07.11) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.07.11)

### Performance

- Interpreter discovery results are cached. (2026.07.11) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.07.11)
- Metadata reads are cached. (2026.07.11) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.07.11)
- Session-name normalization is cached. (2026.07.11) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.07.11)
- uv detection results are cached. (2026.07.11) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.07.11)

### Behavior and default changes

- Explicit command-line options take precedence over noxfile and alias values. (2026.08.10) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.08.10)
- Interpreter discovery now uses python-discovery, which should find Python better and supports version specifier sets. (2026.08.10) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.08.10)
- PEP 440 range interpreters are translated to conda version specs. (2026.08.10) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.08.10)
- Script mode reads requires-python to determine Python requirements. (2026.08.10) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.08.10)
- Modules are imported lazily on Python 3.15. (2026.07.11) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.07.11)

### Tooling

- Environment variables are shown in CLI help. (2026.07.11) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.07.11)

### Fixes and other changes

- The parallel reporter now supports legacy encodings, improving parallel-mode support on legacy Windows. (2026.08.17) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.08.17)
- Python versions derived from classifiers are sorted. (2026.08.10) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.08.10)
- Conda version constraints on Windows are corrected. (2026.08.10) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.08.10)
- An empty inner @parametrize is retained when decorators are stacked. (2026.08.10) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.08.10)
- Building the manifest no longer crashes when a python-matrix session has an empty parametrize. (2026.08.10) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.08.10)
- The minimum version is corrected for major-only and multiple lower bounds. (2026.08.10) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.08.10)
- python_versions() no longer crashes when max_version is major-only. (2026.08.10) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.08.10)
- The fallback for --download-python is fixed. (2026.07.11) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.07.11)
- Interpreter-resolution edge cases are fixed. (2026.07.11) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.07.11)
- Nox no longer crashes when a parametrized session has an empty parameter list. (2026.07.11) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.07.11)
- Script-mode pip resolution on Windows is fixed. (2026.07.11) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.07.11)
- Missing parent directories for the session cache directory are created. (2026.07.11) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.07.11)
- The converter now handles `=` in set_env values and out-of-tree change_dir. (2026.07.11) — [release notes](https://github.com/wntrblm/nox/releases/tag/2026.07.11)
