NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #2036 most downloaded on PyPI
Flexible test automation.
Last release 1 months ago
18 Aug 2026
Release timing varies
gaps range from 4 weeks to 10 months
Nearly every release is documented
notes for 32 of 32 stable releases
Nothing withdrawn
no release was ever pulled
8 years old
32 releases · first in 2018
This is a small follow-up release to better support running the parallel mode on legacy windows.
This is a small follow-up release to better support running the parallel mode on legacy windows.
We'd like to thank the following folks who contributed to this release:
Fixes:
Internal changes:
One column per quarter.
This release can run sessions in parallel with --parallel / -j (experimental for now, report any bugs!). Requires session opt-in, or use --allow-paral
This release can run sessions in parallel with --parallel/-j (experimental for now, report any bugs!). Requires session opt-in, or use --allow-parallel. Interpreter discovery now uses the python-discovery package, which should be better at finding Python and supports version specifier sets. Using this, script mode reads requires-python. Many bugs were fixed, mostly in Python version handling, conda version specifiers, and option precedence. Unrecognized global options are now an error.
We'd like to thank the following folks who contributed to this release:
Features:
--parallel/-j by @henryiii in #1131python-discovery for interpreter discovery by @henryiii in #1086requires-python in script mode by @henryiii in #1142Fixes:
PYTHONPATH by @yangfan-yf-yf in #1157~/.local/bin shims when provisioning with uv by @henryiii in #1149python_versions() on a major-only max_version by @chuenchen309 in #1140python_versions() minimum for major-only and multiple lower bounds by @Sanjays2402 in #1127@parametrize from being dropped when stacked by @chuenchen309 in #1138Documentation:
Internal changes:
test_download_python_failed_install pass without uv installed by @uttam12331 in #1137This release can run sessions in parallel with --parallel/-j (experimental
for now, report any bugs!). Requires session opt-in, or use --allow-parallel.
Interpreter discovery now uses the python-discovery package, which should be
better at finding Python and supports version specifier sets. Using this,
script mode reads requires-python. Many bugs were fixed, mostly in Python
version handling, conda version specifiers, and option precedence. Unrecognized
global options are now an error.
We'd like to thank the following folks who contributed to this release:
Features:
--parallel/-j by @henryiii in https://github.com/wntrblm/nox/pull/1131python-discovery for interpreter discovery by @henryiii in https://github.com/wntrblm/nox/pull/1086requires-python in script mode by @henryiii in https://github.com/wntrblm/nox/pull/1142Fixes:
PYTHONPATH by @yangfan-yf-yf in https://github.com/wntrblm/nox/pull/1157~/.local/bin shims when provisioning with uv by @henryiii in https://github.com/wntrblm/nox/pull/1149python_versions() on a major-only max_version by @chuenchen309 in https://github.com/wntrblm/nox/pull/1140python_versions() minimum for major-only and multiple lower bounds by @Sanjays2402 in https://github.com/wntrblm/nox/pull/1127@parametrize from being dropped when stacked by @chuenchen309 in https://github.com/wntrblm/nox/pull/1138Documentation:
Internal changes:
test_download_python_failed_install pass without uv installed by @uttam12331 in https://github.com/wntrblm/nox/pull/1137This release drops Python 3.9 and brings a batch of performance improvements, like caching uv detection and interpreter discovery, plus lazy module im
This release drops Python 3.9 and brings a batch of performance improvements, like caching uv detection and interpreter discovery, plus lazy module imports on Python 3.15. Various bugs were fixed as well.
We'd like to thank the following folks who contributed to this release:
Features:
return_code property to CommandFailed exception by @felixfontein in #1129Performance:
Fixes:
--download-python fallback by @henryiii in #1110virtualenv.py by @henryiii in #1111--error-on-external-run even when log=False by @henryiii in #1107= in set_env values and out-of-tree change_dir in tox-to-nox by @henryiii in #1105load_toml when script file is missing by @SAY-5 in #1096Documentation:
--default-venv-backend supported names by @SAY-5 in #1092session.notify target docs by @Himanshuagrawal4 in #1099Internal changes:
run_nox envdir to fix flaky test_main_requires by @henryiii in #1134This release drops Python 3.9 and brings a batch of performance improvements, like caching uv detection and interpreter discovery, plus lazy module imports on Python 3.15. Various bugs were fixed as well.
We'd like to thank the following folks who contributed to this release:
Features:
return_code property to CommandFailed exception by @felixfontein in https://github.com/wntrblm/nox/pull/1129Performance:
Fixes:
--download-python fallback by @henryiii in https://github.com/wntrblm/nox/pull/1110virtualenv.py by @henryiii in https://github.com/wntrblm/nox/pull/1111--error-on-external-run even when log=False by @henryiii in https://github.com/wntrblm/nox/pull/1107= in set_env values and out-of-tree change_dir in tox-to-nox by @henryiii in https://github.com/wntrblm/nox/pull/1105load_toml when script file is missing by @SAY-5 in https://github.com/wntrblm/nox/pull/1096Documentation:
--default-venv-backend supported names by @SAY-5 in https://github.com/wntrblm/nox/pull/1092session.notify target docs by @Himanshuagrawal4 in https://github.com/wntrblm/nox/pull/1099Internal changes:
run_nox envdir to fix flaky test_main_requires by @henryiii in https://github.com/wntrblm/nox/pull/1134This release drops Python 3.8 and adds a --usage command for full docstrings. Our .nox dir is now ignored by default, virtualenvs are recreated if sym
This release drops Python 3.8 and adds a --usage command for full docstrings. Our .nox dir is now ignored by default, virtualenvs are recreated if symlinks are broken (such as after a Python upgrade), and -t now selects from all available sessions.
We'd like to thank the following folks who contributed to this release:
Features:
nox --usage <session> command to print full docstrings for provided sessions by @agriyakhetarpal in #1064.gitignore/CACHEDIR.TAG to .nox dir by @henryiii in #1072Fixes:
Internal changes:
Full Changelog: 2026.02.09...2026.04.10
This release drops Python 3.8 and adds a --usage command for full docstrings.
Our .nox dir is now ignored by default, virtualenvs are recreated if symlinks
are broken (such as after a Python upgrade), and -t now selects from all
available sessions.
We'd like to thank the following folks who contributed to this release:
Features:
nox --usage <session> command to print full docstrings for provided sessions by @agriyakhetarpal in https://github.com/wntrblm/nox/pull/1064.gitignore/CACHEDIR.TAG to .nox dir by @henryiii in https://github.com/wntrblm/nox/pull/1072Fixes:
Internal changes:
This small release supports uv 0.10's new requirement that --clear be passed to clear an environment. Python 3.8 support was temporarily re-added sinc
This small release supports uv 0.10's new requirement that --clear be passed to clear an environment. Python 3.8 support was temporarily re-added since uv 0.10 still supports 3.8, so nox on 3.8 was affected.
We'd like to thank the following folks who contributed to this release:
Bugfixes:
tox-to-nox by @henryiii in #1059.run by @henryiii in #1037Internal changes:
Documentation:
This small release supports uv 0.10's new requirement that --clear be passed
to clear an environment. Python 3.8 support was temporarily re-added since uv
0.10 still supports 3.8, so nox on 3.8 was affected.
We'd like to thank the following folks who contributed to this release:
Bugfixes:
tox-to-nox by @henryiii in https://github.com/wntrblm/nox/pull/1059.run by @henryiii in https://github.com/wntrblm/nox/pull/1037Internal changes:
Documentation:
This is a small release to fix a warning when running in script mode before we drop Python 3.8.
This is a small release to fix a warning when running in script mode before we drop Python 3.8.
We'd like to thank the following folks who contributed to this release:
Bugfixes:
nox --report <file> should support Path by @henryiii in #1026Internal changes:
This is a small release to fix a warning when running in script mode before we drop Python 3.8.
We'd like to thank the following folks who contributed to this release:
Bugfixes:
nox --report <file> should support Path by @henryiii in https://github.com/wntrblm/nox/pull/1026Internal changes:
log_level is better than log_cli_level by @henryiii in https://github.com/wntrblm/nox/pull/1029This is a quick release to make our new dependency, pbs-installer, optional. This is only needed to install Python if you are not using the uv backend
This is a quick release to make our new dependency, pbs-installer, optional. This is only needed to install Python if you are not using the uv backend. We've also added the time taken to the output when it's over a second.
We'd like to thank the following folks who contributed to this release:
Changes:
humanize dependency) by @henryiii in #1014Internal:
This release updates the default for the GitHub Action to target the current range of recommended Pythons (3.10-3.14). There's now a mechanism to cont
This release updates the default for the GitHub Action to target the current range of recommended Pythons (3.10-3.14). There's now a mechanism to control if nox downloads Python (even when not using uv). Several fixes include better free-threading support, custom filenames in script mode, and support for GitHub Actions Windows ARM runners.
We'd like to thank the following folks who contributed to this release:
Features:
--download-python python option by @saucoide in #989session.env_dir to get the Path to the environment by @jbdyn in #974Changes:
verbose global option to the silent argument for session installation commands, and document it by @agriyakhetarpal in #983SESSION_INFO) for session info instead of warning by @Spacetown in #990Bugfixes:
venv_backend by @henryiii in #967nox.options.keywords by @henryiii in #1011Documentation:
--script to uv run inline metadata for nox-uv example by @johnthagen in #984nox-uv third party package by @johnthagen in #978--locked over --frozen for uv sync by @johnthagen in #972Internal changes:
This release updates the default for the GitHub Action to target the current range of recommended Pythons (3.10-3.14). There's now a mechanism to control if nox downloads Python (even when not using uv). Several fixes include better free-threading support, custom filenames in script mode, and support for GitHub Actions Windows ARM runners.
We'd like to thank the following folks who contributed to this release:
Features:
--download-python python option by @saucoide in https://github.com/wntrblm/nox/pull/989session.env_dir to get the Path to the environment by @jbdyn in https://github.com/wntrblm/nox/pull/974Changes:
verbose global option to the silent argument for session installation commands, and document it by @agriyakhetarpal in https://github.com/wntrblm/nox/pull/983SESSION_INFO) for session info instead of warning by @Spacetown in https://github.com/wntrblm/nox/pull/990Bugfixes:
venv_backend by @henryiii in https://github.com/wntrblm/nox/pull/967nox.options.keywords by @henryiii in https://github.com/wntrblm/nox/pull/1011Documentation:
--script to uv run inline metadata for nox-uv example by @johnthagen in https://github.com/wntrblm/nox/pull/984nox-uv third party package by @johnthagen in https://github.com/wntrblm/nox/pull/978--locked over --frozen for uv sync by @johnthagen in https://github.com/wntrblm/nox/pull/972Internal changes:
This is a bugfix release that primarily adds support for uv 0.7+. A few other small fixes were made.
This is a bugfix release that primarily adds support for uv 0.7+. A few other small fixes were made.
We'd like to thank the following folks who contributed to this release:
Bugfixes:
uv version is now uv self version, respect UV by @henryiii and @Spectre5 in #955UV_PYTHON to disallowed vars by @henryiii in #959conda_install issue with newer conda (only Unix) by @henryiii in #957Path for envdir by @henryiii in #932Documentation:
pip install . reinstallation by @henryiii in #947Internal changes:
This is a bugfix release that primarily adds support for uv 0.7+. A few other small fixes were made.
We'd like to thank the following folks who contributed to this release:
Bugfixes:
uv version is now uv self version, respect UV by @henryiii and @Spectre5 in https://github.com/wntrblm/nox/pull/955UV_PYTHON to disallowed vars by @henryiii in https://github.com/wntrblm/nox/pull/959conda_install issue with newer conda (only Unix) by @henryiii in https://github.com/wntrblm/nox/pull/957Path for envdir by @henryiii in https://github.com/wntrblm/nox/pull/932Documentation:
pip install . reinstallation by @henryiii in https://github.com/wntrblm/nox/pull/947Internal changes:
This release improves PEP 723 support, including adding dependencies to the noxfile itself ("plugins"). It adds the long-awaited "requires" option, al
This release improves PEP 723 support, including adding dependencies to the noxfile itself ("plugins"). It adds the long-awaited "requires" option, allowing sessions to require other sessions. And it brings further improvements to the pyproject.toml support, including helpers for dependency-groups and Python version lists.
We'd like to thank the following folks who contributed to this release:
New features:
nox.main by @henryiii in #878 (followup fix: #884)requires) by @gschaffner in #631"pyproject.toml" default for load_toml by @henryiii in #917Bugfixes:
pypy-* to be used as well for pypy* (matching GHA) by @henryiii in #913Bugfixes related to uv support:
PermissionError from popen when UV is not installed by @btemplep in #908uv python install only with uv backend by @oliversen in #900"uvx" like "uv" by @henryiii in #920Tox-to-nox script:
Improved noxfile validation:
reuse_venv set by @henryiii in #872nox.options by @henryiii in #871 (followup fix: #921)nox.config, too, using attrs by @henryiii in #880Internal changes:
get_virtualenv & better typing by @henryiii in #882tmp_path instead of tmpdir in tests by @henryiii in #895This release improves PEP 723 support, including adding dependencies to the noxfile itself ("plugins"). It adds the long-awaited "requires" option, allowing sessions to require other sessions. And it brings further improvements to the pyproject.toml support, including helpers for dependency-groups and Python version lists.
We'd like to thank the following folks who contributed to this release:
New features:
nox.main by @henryiii in https://github.com/wntrblm/nox/pull/878 (followup fix: https://github.com/wntrblm/nox/pull/884)requires) by @gschaffner in https://github.com/wntrblm/nox/pull/631"pyproject.toml" default for load_toml by @henryiii in https://github.com/wntrblm/nox/pull/917Bugfixes:
pypy-* to be used as well for pypy* (matching GHA) by @henryiii in https://github.com/wntrblm/nox/pull/913Bugfixes related to uv support:
PermissionError from popen when UV is not installed by @btemplep in https://github.com/wntrblm/nox/pull/908uv python install only with uv backend by @oliversen in https://github.com/wntrblm/nox/pull/900"uvx" like "uv" by @henryiii in https://github.com/wntrblm/nox/pull/920Tox-to-nox script:
Improved noxfile validation:
reuse_venv set by @henryiii in https://github.com/wntrblm/nox/pull/872nox.options by @henryiii in https://github.com/wntrblm/nox/pull/871 (followup fix: https://github.com/wntrblm/nox/pull/921)nox.config, too, using attrs by @henryiii in https://github.com/wntrblm/nox/pull/880Internal changes:
get_virtualenv & better typing by @henryiii in https://github.com/wntrblm/nox/pull/882tmp_path instead of tmpdir in tests by @henryiii in https://github.com/wntrblm/nox/pull/895This release adds explicit support for Python 3.13 and drops support for running Nox itself under Python 3.7. Note that you can still use 3.7 in your
This release adds explicit support for Python 3.13 and drops support for running Nox itself under Python 3.7. Note that you can still use 3.7 in your Nox sessions, we just dropped support for installing & running nox itself in 3.7.
We'd like to thank the following folks who contributed to this release:
New features:
uv-installed pythons by @saucoide in https://github.com/wntrblm/nox/pull/842session.install_and_run_script by @henryiii in https://github.com/wntrblm/nox/pull/847Bugfixes:
stderr parameter to make it optional by @edgarrmondragon in https://github.com/wntrblm/nox/pull/835add_timestamp from noxfile.options by @Wurstnase in https://github.com/wntrblm/nox/pull/856Documentation:
dev recipe by @henryiii in https://github.com/wntrblm/nox/pull/862uv reinstall by @henryiii in https://github.com/wntrblm/nox/pull/863uv sync example by @henryiii in https://github.com/wntrblm/nox/pull/864Internal changes:
uv if available in action by @henryiii in https://github.com/wntrblm/nox/pull/831macos-latest to macos-14 by @henryiii in https://github.com/wntrblm/nox/pull/821miniforge by @henryiii in https://github.com/wntrblm/nox/pull/854astral-sh/setup-uv by @henryiii in https://github.com/wntrblm/nox/pull/859We'd like to thank the following folks who contributed to this release:
We'd like to thank the following folks who contributed to this release:
New features:
nox.project.load_toml by @henryiii in https://github.com/wntrblm/nox/pull/811micromamba by @henryiii in https://github.com/wntrblm/nox/pull/807venv_backend property to sessions by @henryiii in https://github.com/wntrblm/nox/pull/798None to remove environment variables by @henryiii in https://github.com/wntrblm/nox/pull/812default=False by @henryiii in https://github.com/wntrblm/nox/pull/810Bugfixes:
**kwargs by @henryiii in https://github.com/wntrblm/nox/pull/815pipx in Nox GitHub action by @mayeut in https://github.com/wntrblm/nox/pull/768UV_SYSTEM_PYTHON by @henryiii in https://github.com/wntrblm/nox/pull/817uv next to python if it's not on PATH by @cjolowicz in https://github.com/wntrblm/nox/pull/795--help message by @cjolowicz in https://github.com/wntrblm/nox/pull/790venv and conda from environment by @henryiii in https://github.com/wntrblm/nox/pull/804conda isn't installed by @cjolowicz in https://github.com/wntrblm/nox/pull/794We'd like to thank the following folks who contributed to this release:
We'd like to thank the following folks who contributed to this release:
New Features:
uv backend by @henryiii in https://github.com/wntrblm/nox/pull/762--reuse-venv {yes,no,never,always} by @samypr100 in https://github.com/wntrblm/nox/pull/730NOX_DEFAULT_VENV_BACKEND for default backend by @edgarrmondragon in https://github.com/wntrblm/nox/pull/780session.run_always to session.run_install by @henryiii in https://github.com/wntrblm/nox/pull/770tox-to-nox for tox 4 by @frenzymadness in https://github.com/wntrblm/nox/pull/687--force-python on unparametrized sessions by @chrysle in https://github.com/wntrblm/nox/pull/756include_outer_env parameter to session.run and friends by @franekmagiera in https://github.com/wntrblm/nox/pull/652~ version specifier by @mayeut in https://github.com/wntrblm/nox/pull/712Bugfixes:
session.run is a list by @stefanv in https://github.com/wntrblm/nox/pull/786nox.options.sessions with --tags by @q0w in https://github.com/wntrblm/nox/pull/684NO_COLOR with --force-color by @stasfilin in https://github.com/wntrblm/nox/pull/723nox.options.error_on_missing_interpreters when running in CI by @samypr100 in https://github.com/wntrblm/nox/pull/725Documentation Improvements:
Internal Changes:
Func by @MicaelJarniac in https://github.com/wntrblm/nox/pull/718NotImplementedError by @fazledyn-or in https://github.com/wntrblm/nox/pull/749We'd like to thank the following folks who contributed to this release:
We'd like to thank the following folks who contributed to this release:
New Features:
NOXPYTHON, NOXEXTRAPYTHON and NOXFORCEPYTHON by @edgarrmondragon in https://github.com/wntrblm/nox/pull/688Documentation Improvements:
Internal Changes:
list_sessions for session completion by @scop in https://github.com/wntrblm/nox/pull/699GitHub Action: replace deprecated set-output command
We'd like to thank the following folks who contributed to this release:
New features:
Improvements:
py (#647)nox.session.run now accepts a pathlib.Path for the command (#649)nox.session.run's stdout and stderr arguments and add example of capturing output (#651)Bugfixes:
session.posargs example (#653)MANIFEST.in (#645)Internal changes:
We'd like to thank the following folks who contributed to this release:
We'd like to thank the following folks who contributed to this release:
Removals:
session.install outside a venv (#580)New features:
-N alias for --no-reuse-existing-virtualenvs (#639)NOX_CURRENT_SESSION environment variable (#641)Improvements:
VENV_DIR to dev session in cookbook (#591)tutorial.rst (#586)tox-to-nox (#575)silent=True returns the command output (#578)Bugfixes:
FileNotFoundError in load_nox_module (#571)Internal changes:
pyproject.toml) (#616, #619)requirements-dev.txt (#582)myst-parser for Markdown docs (#561)Deprecate use of session.install() without a valid backend
Claudio Jolowicz, Diego Ramirez, and Tom Fleet have become maintainers of Nox. We'd like to thank the following folks who contributed to this release:
New features:
mamba backend (#444, #448, #546, #551)session.debug to show debug-level messages (#489)FORCE_COLOR environment variable (#524, #548)session.chdir() as a context manager (#543)session.install() without a valid backend (#537)Improvements:
channel option when using the conda backend (#522)--keywords expression contains a syntax error (#493)session.notify() in tutorial page (#500)session.run() fails and how to handle failures (#533)Bugfixes:
session.chdir() (#555, #556)CONDA_PREFIX environment variable (#538)bin directory for the conda backend on Windows (#535)Internal changes:
load_module with exec_module (#498)MANIFEST.in during CI (#552)LICENSE from MANIFEST.in (#505)setuptools use the standard library's distutils to work around virtualenv bug. (#547, #549)shlex.join() when logging a command (#490)shutil.rmtree() over shelling out to rm -rf in noxfile (#519)--error-on-missing-interpreter to CI (#532)conda_tests session by default if user has conda installed (#521)requirements-conda-test.txt (#536)Add session.warn to output warnings
New features:
session.warn to output warnings (#482)session.invoked_from (#472)Improvements:
nox.options.verbose (#466)session.notify example to docs (#467)noxfile.py is found (#463)noxfile.py docstring when using nox -l (#459)Internal changes:
test_session_completer from project level noxfile (#480)setup.py, use setup.cfg (#456, #457, #458)Special thanks to our contributors:
Fix crash on Python 2 when reusing environments.
--help message by function. (#442)Add option --no-install to skip install commands in reused environments.
--no-install to skip install commands in reused environments. (#432)--force-python as shorthand for --python and --extra-python. (#427)@nox.parametrize to select the session Python. (#413)posargs when scheduling another session via session.notify. (#397)nox.needs_version to specify Nox version requirements. (#388)session.name to get the session name. (#386)venv_params is used. (#420)Use conda remove to clean up existing conda environments
NoxColoredFormatter.format (#374)--extra-python (#361)python keyword (#367)py.typed to manifest.in (#360)--python with nox.options from --sessions and --keywords (#359)conda_install and install args are now automatically double-quoted when needed.
conda_install and install args are now automatically double-quoted when needed. (#312)conda_install. This allows users to continue executing Nox sessions on already installed environments. (#314)python.exe found was not the correct one. (#310)--add-timestamp option (#323)Session.run_always(). (#331)Add new options for venv_backend, including the ability to set the backend globally.
venv_backend, including the ability to set the backend globally. (#326)session.create_tmp. (#320)--pythons command-line option to allow specifying which versions of Python to run. (#304)venv_params. (#280)importlib.metadata for metadata loading, removing our dependency on pkg_resources. (#277)stdout.isatty to finalize color instead of stdin.isatty. (#267)Fix example installation call for pip.
appveyor.yml. (#258)_option_set.py. (#249)tasks.py. (#241)VIRTUAL_ENV environment variable to commands executed in a virtualenv. (#245)Add --verbose for showing the output from all commands.
--verbose for showing the output from all commands. (#174)venv as an option for venv_backend. (#231)session(venv_backend='conda') option to use Conda environments. (#217, #221)imp.load_source() with importlib. (#214)stdout and stderr to session.run.noxfile.py to use python3.7. (#204)Add interactive property to session.
Include changelog in documentation.
session.install and change its default behavior to not upgrade. (#172)NO_COLOR is set. (#163)session.install. (#157)Fix bug where empty parametrized sessions would fail.
Hide the python interpreter on sessions with only one.
Skip sessions with missing interpreters. Previously, missing interpreters would cause a failed session. Now they just cause a warning. The previous be
Breaking changes:
--error-on-missing-interpreters. (#140)New features:
Other changes:
Check for NOXSESSION environment variable
NOXSESSION environment variable (#121)Breaking changes and other important notes:
Heads up! This is a very big release for Nox. Please read these release notes thoroughly and reach out to us on GitHub if you run into issues.
Breaking changes and other important notes:
pip install nox instead of nox-automation. Since the new release makes so many breaking changes, we won't be updating the old nox-automation package.noxfile.py instead of nox.py.session.interpreter will break! Please consult the documentation on how to use @nox.session(python=[...]) to configure virtualenvs for sessions.session_tests) has been removed.Other changes:
os.pathsep instead of a hardcoded ':'. (#105)nox.session(python=...).python -m nox.Your coding agent can read these notes before it upgrades. Set up the MCP server →