Releases: wntrblm/nox
2025.10.16 ⏲️
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:
- Make pbs-installer an optional dependency by @henryiii in #1017
 - Include time on longer runs (adds 
humanizedependency) by @henryiii in #1014 
Internal:
2025.10.14 🥧
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:
- @agriyakhetarpal (first contribution)
 - @henryiii
 - @IvanIsCoding (first contribution)
 - @jbdyn (first contribution)
 - @johnthagen
 - @saucoide
 - @shenxianpeng (first contribution)
 - @Spacetown (first contribution)
 - @zzzeek (first contribution)
 
Features:
- Add 
--download-pythonpython option by @saucoide in #989 - Add 
session.env_dirto get the Path to the environment by @jbdyn in #974 
Changes:
- GitHub Action 3.10-3.14 default by @henryiii in #1003
 - Percolate the 
verboseglobal option to thesilentargument for session installation commands, and document it by @agriyakhetarpal in #983 - Disallow abbreviated options by @henryiii in #973
 - Log output of failed process by @jbdyn in #974
 - Use a separate logging level (
SESSION_INFO) for session info instead of warning by @Spacetown in #990 
Bugfixes:
- Support scripts with custom names by @henryiii in #1007
 - Correctly match free-threaded python versions by @zzzeek in #999
 - Let uv replace the directory instead of deleting it ourselves by @henryiii in #981
 - Tighten type for 
venv_backendby @henryiii in #967 - GitHub Actions Windows ARM support by @henryiii in #1002
 - Show a warning (eventually error) if a duplicate session is encountered by @henryiii in #1013
 - Fix validation error for 
nox.options.keywordsby @henryiii in #1011 
Documentation:
- Add 
--scripttouv runinline metadata for nox-uv example by @johnthagen in #984 - Document 
nox-uvthird party package by @johnthagen in #978 - Recommend 
--lockedover--frozenforuv syncby @johnthagen in #972 - Tweak the grammar in a comment in tasks.py by @brettcannon in #987
 - Add rustworkx as an example user by @IvanIsCoding in #975
 - Update badge from black to ruff by @shenxianpeng in #971
 
Internal changes:
- Hide new coverage warning on 3.14 by @henryiii in #980
 - Correct minimum versions and test by @henryiii in #962
 - CI ensure there are no duplicate log handlers by @saucoide in #991
 - Add 3.14 beta 1 support by @henryiii in #970
 - Add better reprs for some internal classes by @henryiii in #966
 - Drop Windows 2019 by @henryiii in #985
 - Modernize and remove rc conda channel by @henryiii in #964
 - Restore minimums test by @henryiii in #982
 - Use dict instead of OrderedDict by @henryiii in #963
 - Add conda marker to tests by @henryiii in #969
 - Clear the registry in tests by @henryiii in #968
 
2025.05.01 🌸
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:
- @chirizxc
 - @gschaffner
 - @henryiii
 - @living180
 - @Spectre5 (first contribution)
 
Bugfixes:
uv versionis nowuv self version, respectUVby @henryiii and @Spectre5 in #955- Add 
UV_PYTHONto disallowed vars by @henryiii in #959 - Never ignore URL dependencies in PEP 723 noxfiles by @gschaffner in #935
 - Support forcing Python on parametrized session by @henryiii in #958
 - Fix 
conda_installissue with newer conda (only Unix) by @henryiii in #957 - Show skip reason by default by @chirizxc in #941
 - Support 
Pathfor envdir by @henryiii in #932 - Use Python 3.12 for action, allow 3.13, drop 3.8 from auto versions by @henryiii in #946
 
Documentation:
- Fix a typo in the changelog by @gschaffner in #936
 - Update uv recipe by @henryiii in #933
 - Fix parametrized session tagging example by @living180 in #942
 - uv now supports 
pip install .reinstallation by @henryiii in #947 
Internal changes:
2025.02.09 💝
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:
- @btemplep (first contribution)
 - @chirizxc (first contribution)
 - @davidhewitt (first contribution)
 - @gschaffner (first contribution)
 - @henryiii
 - @oliversen (first contribution)
 
New features:
- Support PEP 723 noxfiles by @henryiii in #881
 - Expose main as 
nox.mainby @henryiii in #878 (followup fix: #884) - Support session dependencies (
requires) by @gschaffner in #631 - Helper to get dependency-groups by @henryiii in #876
 - Helper to get the Python listing by @henryiii in #877
 - Add a 
"pyproject.toml"default forload_tomlby @henryiii in #917 
Bugfixes:
- Correct virtualenv bin dir under mingw python by @davidhewitt in #901
 - Allow 
pypy-*to be used as well forpypy*(matching GHA) by @henryiii in #913 - Don't trigger a background update process for virtualenv by @henryiii in #918
 - Include encoding for consistent behavior (default in Python 3.15+) by @henryiii in #891
 - Outer env issues fixed by @henryiii in #874
 - Support noxfile being a symlink by @henryiii in #829
 - Drop PyPy from the default list for the GitHub Action by @henryiii in #916
 
Bugfixes related to uv support:
- Catch 
PermissionErrorfrom popen when UV is not installed by @btemplep in #908 - Use 
uv python installonly with uv backend by @oliversen in #900 - Handle 
"uvx"like"uv"by @henryiii in #920 - Support broken uv (via pyenv) by @henryiii in #922
 
Tox-to-nox script:
- Drop support for tox 3 by @henryiii in #910
 - Switch pkgutil for importlib-resources by @henryiii in #887
 - Correctly separate command-line arguments by @chirizxc in #906
 
Improved noxfile validation:
- Error if invalid 
reuse_venvset by @henryiii in #872 - Error with helpful message if invalid option is set via 
nox.optionsby @henryiii in #871 (followup fix: #921) - Validate entries in 
nox.config, too, using attrs by @henryiii in #880 
Internal changes:
- Add more Ruff checks and fixes by @henryiii in #893
 - Cleanup symlink noxfile code by @henryiii in #865
 - Drop some type ignores for colorlog by @henryiii in #888
 - Limit the visible items for tab completion by @henryiii in #889
 - More typing and test improvements by @henryiii in #890
 - Some extra simplifications from Ruff by @henryiii in #870
 - Use dependency-groups by @henryiii in #873
 - Pull out env creation into helper method by @henryiii in #912
 - Pulled out 
get_virtualenv& better typing by @henryiii in #882 - Fix broken mock on CPython 3.12.8+ in tests by @henryiii in #903
 - Statically type tests by @henryiii in #894
 - Use 
tmp_pathinstead oftmpdirin tests by @henryiii in #895 
2024.10.09 🎃
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 conributed to this release:
- @edgarrmondragon
 - @ember91
 - @henryiii
 - @hmd101
 - @KasperZutterman
 - @living180
 - @mayeut
 - @saucoide
 - @wurstnase
 
New features:
- Allow setting tags on parametrized sessions by @living180 in #832
 - Added support for 
uv-installed pythons by @saucoide in #842 - Added 
session.install_and_run_scriptby @henryiii in #847 
Bugfixes:
- Updated type annotation of 
stderrparameter to make it optional by @edgarrmondragon in #835 - Removed 
add_timestampfromnoxfile.optionsby @wurstnase in #856 
Documentation:
- Added warning about uv and local packages by @henryiii in #830
 - Fixed contribution guidelines by @wurstnase in #850
 - Fixed typos by @ember91 in #839
 - Fixed typoss in cookbook by @hmd101 in #837
 - Added missing cookbook recipe snippet imports by @KasperZutterman in #853
 - Cleaned up 
devrecipe by @henryiii in #862 - Added note about 
uv reinstallby @henryiii in #863 - Added 
uv syncexample by @henryiii in #864 
Internal changes:
- Use default action tests for macos-14 by @mayeut in #824
 - Added 3.13 to the action defaults by @henryiii in #846
 - Dropped Python 3.7 by @henryiii in #822
 - Included 3.13 in classifiers by @henryiii in #851
 - Use 
uvif available in action by @henryiii in #831 - Run tests with Python 3.13 by @edgarrmondragon in #834
 - Updated 
macos-latesttomacos-14by @henryiii in #821 - Use 
miniforgeby @henryiii in #854 - Use 
astral-sh/setup-uvby @henryiii in #859 - Dropped PyPy 3.9 from test matrix by @henryiii in #858
 
2024.04.15 🪼
We'd like to thank the following folks who contributed to this release:
New features:
- Added support for PEP 723 (inline script metadata) with 
nox.project.load_tomlby @henryiii in #811 - Added support for 
micromambaby @henryiii in #807 - Added 
venv_backendproperty to sessions by @henryiii in #798 - Added the ability to use 
Noneto remove environment variables by @henryiii in #812 - Added support for skipping sessions by default using 
default=Falseby @henryiii in #810 
Bugfixes:
- Use static arguments instead of 
**kwargsby @henryiii in #815 - Do not depend on 
pipxin Nox GitHub action by @mayeut in #768 - Disallow 
UV_SYSTEM_PYTHONby @henryiii in #817 - Ensure 'uv' always works in a uv venv by @henryiii in #818
 - Look for 
uvnext topythonif it's not onPATHby @cjolowicz in #795 - Fixed missing f-string in 
--helpmessage by @cjolowicz in #790 - Don't error if not installing to passthrough by @henryiii in #809
 - Avoid mixing 
venvandcondafrom environment by @henryiii in #804 - Skip test for conda env when 
condaisn't installed by @cjolowicz in #794 
2024.03.02
We'd like to thank the following folks who contributed to this release:
- @DiddiLeija
 - @MicaelJarniac
 - @chrysle
 - @edgarrmondragon
 - @fazledyn-or
 - @franekmagiera
 - @frenzymadness
 - @henryiii
 - @johnthagen
 - @mayeut
 - @patrick91
 - @q0w
 - @samypr100
 - @scop
 - @stasfilin
 - @stefanv
 
New Features:
- Add 
uvbackend by @henryiii in #762 - Add venv backend fallback by @henryiii in #787
 - Add option 
--reuse-venv {yes,no,never,always}by @samypr100 in #730 - Add environment variable 
NOX_DEFAULT_VENV_BACKENDfor default backend by @edgarrmondragon in #780 - Rename 
session.run_alwaystosession.run_installby @henryiii in #770 - Add more option argument completions by @scop in #707
 - Implement 
tox-to-noxfor tox 4 by @frenzymadness in #687 - Allow 
--force-pythonon unparametrized sessions by @chrysle in #756 - Add 
include_outer_envparameter tosession.runand friends by @franekmagiera in #652 - GitHub Action: Add support for the 
~version specifier by @mayeut in #712 
Bugfixes:
- Rebuild environment when changing to an incompatible backend type by @henryiii in #781
 - Warn user when first argument to 
session.runis a list by @stefanv in #786 - Allow overriding 
nox.options.sessionswith--tagsby @q0w in #684 - Allow overriding 
NO_COLORwith--force-colorby @stasfilin in #723 - Fix 
nox.options.error_on_missing_interpreterswhen running in CI by @samypr100 in #725 
Documentation Improvements:
- Create an official Nox badge by @johnthagen in #714 and #715
 - Add recipe for generating a matrix with GitHub Actions by @henryiii in #696
 - Update some links by @henryiii in #774
 
Internal Changes:
- fix: always pull versions from metadata by @henryiii in #782
 - chore: ruff moved to astral-sh by @henryiii in #722
 - Use double quotes instead of single in github actions examples by @patrick91 in #724
 - tests: fixes when running locally by @henryiii in #721
 - chore: modernize Ruff config, bump pre-commit by @henryiii in #744
 - chore(deps): bump actions/checkout from 3 to 4 by @dependabot in #738
 - chore: ruff-format by @henryiii in #745
 - chore(action): update default python-versions by @mayeut in #767
 - chore(ci): allow manual runs on branches without a PR by @mayeut in #766
 - chore(ci): bump actions/setup-python & conda-incubator/setup-miniconda by @mayeut in #765
 - ci: group dependabot updates by @henryiii in #755
 - fix(types): improve typing by @henryiii in #720
 - ci: fix coverage combine for different OS's by @henryiii in #778
 - ci: update to artifacts v2 by @henryiii in #772
 - ci: remove skipped job & combine (faster) by @henryiii in #771
 - chore: cleanup Ruff a bit by @henryiii in #783
 - chore(deps): bump the actions group with 2 updates by @dependabot in #784
 - style: add type hints, update few functions by @stasfilin in #728
 - Include Python 3.12 in GHA by @DiddiLeija in #743
 - Allow tests to pass in environments where NO_COLOR=1 is set by @edgarrmondragon in #777
 - tests: support running when the Python launcher for UNIX is present by @henryiii in #775
 - chore: drop unneeded config option by @henryiii in #773
 - Bump minimum virtualenv to 20.14.1 by @johnthagen in #747
 - chore: save session name in 
Funcby @MicaelJarniac in #718 - Removed the problematic Python 2.7.18 version by @stasfilin in #726
 - Fixed Improper Method Call: Replaced 
NotImplementedErrorby @fazledyn-or in #749 
2023.04.22
We'd like to thank the following folks who contributed to this release:
New Features:
- Add support for 
NOXPYTHON,NOXEXTRAPYTHONandNOXFORCEPYTHONby @edgarrmondragon in #688 - feat: --json --list-sessions by @henryiii in #665
 
Documentation Improvements:
- style: spelling and grammar fixes by @scop in #682
 - Add invite link to the discord server to CONTRIBUTING.md by @dcermak in #679
 
Internal Changes:
- chore: update pre-commit hooks by @edgarrmondragon in #690
 - chore: move to using Ruff by @henryiii in #691
 - Fix assertion in GHA tests by @FollowTheProcess in #670
 - ci: some minor fixes by @henryiii in #675
 - Constrain tox to <4.0.0 and minor fixes by @FollowTheProcess in #677
 - chore: long term fix for bugbear opinionated checks by @henryiii in #678
 - chore: switch to hatchling by @henryiii in #659
 - Don't run python 2.7 virtualenv tests for newer versions of virtualenv by @crwilcox in #702
 - allow the use of argcomplete 3 by @reaperhulk in #700
 - fix: enable 
list_sessionsfor session completion by @scop in #699 - chore: remove 3.6 tests, min version is 3.7 by @crwilcox in #703
 
Full Changelog: 2022.11.21...2023.04.22
2022.11.21 🦃
We'd like to thank the following folks who contributed to this release:
New features:
- Include Python 3.11 classifier & testing (#655)
 
Improvements:
- Fixed a few typos (#661, #660)
 - Drop dependency on 
py(#647) nox.session.runnow accepts apathlib.Pathfor the command (#649)- Document 
nox.session.run'sstdoutandstderrarguments and add example of capturing output (#651) 
Bugfixes:
- GitHub Action: replace deprecated set-output command (#668)
 - GitHub Action: point docs to 2022.8.7 not latest (#664)
 - Docs: fix argument passing in 
session.posargsexample (#653) - Include GitHub action helper in 
MANIFEST.in(#645) 
Internal changes:
2022.8.7 🧚
We'd like to thank the following folks who contributed to this release:
- @CN-M
 - @crwilcox
 - @DiddiLeija
 - @edgarrmondragon
 - @FollowTheProcess
 - @hauntsaninja
 - @henryiii
 - @johnthagen
 - @jwodder
 - @ktbarrett
 - @mayeut
 - @meowmeowmeowcat
 - @NickleDave
 - @raddessi
 - @zhanpon
 
Removals:
New features:
- Official Nox GitHub Action (#594, #606, #609, #620, #629, #637, #632, #633)
 - Missing interpreters now error the session on CI by default (#567)
 - Allow configurable child shutdown timeouts (#565)
 - Add session tags (#627)
 - Add short 
-Nalias for--no-reuse-existing-virtualenvs(#639) - Export session name in 
NOX_CURRENT_SESSIONenvironment variable (#641) 
Improvements:
- Add 
VENV_DIRtodevsession in cookbook (#591) - Fix typo in 
tutorial.rst(#586) - Use consistent spelling for Nox in documentation (#581)
 - Support descriptions in 
tox-to-nox(#575) - Document that 
silent=Truereturns the command output (#578) - Support argcomplete v2 (#564)
 
Bugfixes:
- Fix incorrect 
FileNotFoundErrorinload_nox_module(#571) 
Internal changes:
- Update the classifiers, documentation, and more to point to the new Winterbloom location (#587)
 - Support PEP 621 (
pyproject.toml) (#616, #619) - Configure language code to avoid warning on sphinx build (#626)
 - Use latest GitHub action runners and include macOS (#613)
 - Jazz up the README with some badges/logo etc. (#605, #614)
 - Prefer type checking against Jinja2 (#610)
 - Introduce GitHub issue forms (#600, #603, #608)
 - Full strictness checking on mypy (#595, #596)
 - Drop 99% coverage threshold flag for 3.10 in noxfile (#593)
 - Create a 
requirements-dev.txt(#582) - Use 
myst-parserfor Markdown docs (#561)