NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #809 most downloaded on PyPI
tox is a generic virtualenv management and test command line tool
Last release today
01 Oct 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
2 versions withdrawn
withdrawn after publishing
16 years old
317 releases · first in 2010
release 4.0.0rc1 by @gaborbernat in https://github.com/tox-dev/tox/pull/2559
Full Changelog: https://github.com/tox-dev/tox/compare/4.0.0rc1...4.0.0rc2
One column per quarter.
Support for recursive extras in Python package dependencies - by @gaborbernat . ( #2567 )
Support for recursive extras in Python package dependencies - by gaborbernat. (2567)
release 4.0.0b3 by @gaborbernat in https://github.com/tox-dev/tox/pull/2553
Full Changelog: https://github.com/tox-dev/tox/compare/4.0.0b3...4.0.0rc1
Add support for generative section headers - by @gaborbernat . ( #2362 )
release 4.0.0b1 by @gaborbernat in https://github.com/tox-dev/tox/pull/2338
tox mailing list by @jugmac00 in https://github.com/tox-dev/tox/pull/2367cli_only handling logic to _parse_requirements by @masenf in https://github.com/tox-dev/tox/pull/2547Full Changelog: https://github.com/tox-dev/tox/compare/4.0.0b1...4.0.0b3
Improve coloring of logged commands - by @ssbarnea . ( #2356 )
Pass PROGRAMDATA , PROGRAMFILES(x86) , PROGRAMFILES environments on Windows by default as it is needed for discovering the VS C++ compiler and start testing against 3.11 - by @gaborbernat . ( #2492 )
Support PEP-621 static metadata for getting package dependencies - by @gaborbernat . ( #2499 )
Add support for editable wheels, make it the default development mode and rename dev-legacy mode to editable-legacy - by @gaborbernat . ( #2502 )
Improve coloring of logged commands - by ssbarnea. (2356)
Pass PROGRAMDATA, PROGRAMFILES(x86), PROGRAMFILES environments on Windows by default as it is needed for discovering the VS C++ compiler and start testing against 3.11 - by gaborbernat. (2492)
Support PEP-621 static metadata for getting package dependencies - by gaborbernat. (2499)
Add support for editable wheels, make it the default development mode and rename dev-legacy mode to editable-legacy - by gaborbernat. (2502)
- Use tox console entry point name instead of tox4 - by @gaborbernat .
Use tox console entry point name instead of tox4 - by @gaborbernat . ( #2344 )
Use .tox as working directory instead of .tox/4 - by @gaborbernat . ( #2346 )
Switch to hatchling as build backend instead of setuptools - by @gaborbernat . ( #2368 )
Use tox console entry point name instead of tox4 - by gaborbernat. (2344)
Use .tox as working directory instead of .tox/4 - by gaborbernat. (2346)
Switch to hatchling as build backend instead of setuptools - by gaborbernat. (2368)
- Display a hint for unrecognized argument CLI parse failures to use -- separator to pass arguments to commands - by @gaborbernat .
Display a hint for unrecognized argument CLI parse failures to use -- separator to pass arguments to commands - by @gaborbernat . ( #2183 )
Do not allow extending the config set beyond setup to ensures that all configuration values are visible via the config sub-command. - by @gaborbernat . ( #2243 )
Print a message when ignoring outcome of commands - by @gaborbernat . ( #2315 )
Display a hint for unrecognized argument CLI parse failures to use -- separator to pass arguments to commands - by gaborbernat. (2183)
Do not allow extending the config set beyond setup to ensures that all configuration values are visible via the config sub-command. - by gaborbernat. (2243)
Print a message when ignoring outcome of commands - by gaborbernat. (2315)
- Support for grouping environment values together by applying labels to them either at core and environment level, and allow selecting them via the -
Support for grouping environment values together by applying labels to them either at core and environment level, and allow selecting them via the -m flag from the CLI - by @gaborbernat . ( #238 )
Support for environment files within the set_env configuration via the file| prefix - by @gaborbernat . ( #1938 )
Support for --no-provision flag - by @gaborbernat . ( #1951 )
Missing pyproject.toml or setup.py file at the tox root folder without the --install-pkg flag assumes no packaging - by @gaborbernat . ( #1964 )
Add external package type for package (see External package builder ), and extract package dependencies for packages passed in via –installpkg - by @gaborbernat . ( #2204 )
Add support for rewriting script invocations that have valid shebang lines when the TOX_LIMITED_SHEBANG environment variable is set and not empty - by @gaborbernat . ( #2208 )
Support for the --discover CLI flag - by @gaborbernat . ( #2245 )
Moved the python packaging logic into a dedicate package pyproject-api and use it as a dependency - by @gaborbernat . ( #2274 )
Drop python 3.6 support - by @gaborbernat . ( #2275 )
Support for selecting target environments with a given factor via the -f CLI environment flag - by @gaborbernat . ( #2290 )
Support for grouping environment values together by applying labels to them either at core and environment level, and allow selecting them via the -m flag from the CLI - by gaborbernat. (238)
Support for environment files within the set_env configuration via the file| prefix - by gaborbernat. (1938)
Support for --no-provision flag - by gaborbernat. (1951)
Missing pyproject.toml or setup.py file at the tox root folder without the --install-pkg flag assumes no packaging - by gaborbernat. (1964)
Add external package type for package (see external-package-builder), and extract package dependencies for packages passed in via --installpkg - by gaborbernat. (2204)
Add support for rewriting script invocations that have valid shebang lines when the TOX_LIMITED_SHEBANG environment variable is set and not empty - by gaborbernat. (2208)
Support for the --discover CLI flag - by gaborbernat. (2245)
Moved the python packaging logic into a dedicate package pyproject-api and use it as a dependency - by gaborbernat. (2274)
Drop python 3.6 support - by gaborbernat. (2275)
Support for selecting target environments with a given factor via the -f CLI environment flag - by gaborbernat. (2290)
- Expose the parsed CLI arguments on the main configuration object for plugins and allow plugins to define their own configuration section – by @gabor
Expose the parsed CLI arguments on the main configuration object for plugins and allow plugins to define their own configuration section – by @gaborbernat . ( #2191 )
Let tox run fail when all envs are skipped – by @jugmac00 . ( #2195 )
Expose the configuration loading mechanism to plugins to define and load their own sections. Add tox_add_env_config plugin hook called after the configuration environment is created for a tox environment and removed tox_configure . Add the main configuration object as argument to tox_add_core_config . Move the environment list method from the state to the main configuration object to allow its use within plugins – by @gaborbernat . ( #2200 )
Allow running code in plugins before and after commands via tox_before_run_commands and tox_after_run_commands plugin points – by @gaborbernat . ( #2201 )
Allow plugins to update the set_env and change the pass_env configurations – by @gaborbernat . ( #2215 )
Expose the parsed CLI arguments on the main configuration object for plugins and allow plugins to define their own configuration section -- by gaborbernat. (2191)
Let tox run fail when all envs are skipped -- by jugmac00. (2195)
Expose the configuration loading mechanism to plugins to define and load their own sections. Add tox_add_env_config plugin hook called after the configuration environment is created for a tox environment and removed tox_configure. Add the main configuration object as argument to tox_add_core_config. Move the environment list method from the state to the main configuration object to allow its use within plugins -- by gaborbernat. (2200)
Allow running code in plugins before and after commands via tox_before_run_commands and tox_after_run_commands plugin points -- by gaborbernat. (2201)
Allow plugins to update the set_env and change the pass_env configurations -- by gaborbernat. (2215)
- Add support for allowlist_externals , commands not matching error - by @gaborbernat .
Add support for allowlist_externals , commands not matching error - by @gaborbernat . ( #1127 )
Add outcome of environments into the result json ( –result-json ) under the result key containing success boolean, exit_code integer and duration float value - by @gaborbernat . ( #1405 )
Add exec subcommand that allows users to run an arbitrary command within the tox environment (without needing to modify their configuration) - by @gaborbernat . ( #1790 )
Add check to validate the base Python names and the environments name do not conflict Python spec wise, when they do raise error if ignore_base_python_conflict is not set or False - by @gaborbernat . ( #1840 )
Allow any Unix shell-style wildcards expression for pass_env - by @gaborbernat . ( #2121 )
Add support for args_are_paths flag - by @gaborbernat . ( #2122 )
Add support for env_log_dir (compared to tox 3 extend content and keep only last run entries) - by @gaborbernat . ( #2123 )
Add support for {:} substitution in ini files as placeholder for the OS path separator - by @gaborbernat . ( #2125 )
When cleaning directories (for tox environment, env_log_dir , env_tmp_dir and packaging metadata folders) do not delete the directory itself and recreate, but instead just delete its content (this allows the user to cd into it and still be in a valid folder after a new run) - by @gaborbernat . ( #2139 )
Changes to help plugin development: simpler tox env creation argument list, expose python creation directly, allow skipping list dependencies install command for pip and executable is only part of the python cache for virtualenv - by @gaborbernat . ( #2172 )
Add support for allowlist_externals, commands not matching error - by gaborbernat. (1127)
Add outcome of environments into the result json (--result-json) under the result key containing success boolean, exit_code integer and duration float value - by gaborbernat. (1405)
Add exec subcommand that allows users to run an arbitrary command within the tox environment (without needing to modify their configuration) - by gaborbernat. (1790)
Add check to validate the base Python names and the environments name do not conflict Python spec wise, when they do raise error if ignore_base_python_conflict is not set or False - by gaborbernat. (1840)
Allow any Unix shell-style wildcards expression for pass_env - by gaborbernat. (2121)
Add support for args_are_paths flag - by gaborbernat. (2122)
Add support for env_log_dir (compared to tox 3 extend content and keep only last run entries) - by gaborbernat. (2123)
Add support for {:} substitution in ini files as placeholder for the OS path separator - by gaborbernat. (2125)
When cleaning directories (for tox environment, env_log_dir, env_tmp_dir and packaging metadata folders) do not delete the directory itself and recreate, but instead just delete its content (this allows the user to cd into it and still be in a valid folder after a new run) - by gaborbernat. (2139)
Changes to help plugin development: simpler tox env creation argument list, expose python creation directly, allow skipping list dependencies install command for pip and executable is only part of the python cache for virtualenv - by gaborbernat. (2172)
- Add support for configuration taken from the setup.cfg file -by @gaborbernat .
Add support for configuration taken from the setup.cfg file -by @gaborbernat . ( #1836 )
Add support for configuration taken from the pyproject.toml file, tox section legacy_tox_ini key - by @gaborbernat . ( #1837 )
Add configuration documentation - by @gaborbernat . ( #1914 )
Implemented [] substitution (alias for {posargs} ) - by @hexagonrecursion . ( #1928 )
Implement [testenv] ignore_outcome - “a failing result of this testenv will not make tox fail” - by @hexagonrecursion . ( #1947 )
Inline plugin support via tox_.py . This is loaded where the tox config source is discovered. It’s a Python file that can contain arbitrary Python code, such as definition of a plugin. Eventually we’ll add a plugin that allows succinct declaration/generation of new tox environments - by @gaborbernat . ( #1963 )
Introduce the installer concept, and collect pip installation into a pip package, also attach to this the requirements file parsing which got a major rework - by @gaborbernat . ( #1991 )
Support CPython 3.10 -by @gaborbernat . ( #2014 )
Add support for configuration taken from the setup.cfg file -by gaborbernat. (1836)
Add support for configuration taken from the pyproject.toml file, tox section legacy_tox_ini key - by gaborbernat. (1837)
Add configuration documentation - by gaborbernat. (1914)
Implemented [] substitution (alias for {posargs}) - by hexagonrecursion. (1928)
Implement [testenv] ignore_outcome - "a failing result of this testenv will not make tox fail" - by hexagonrecursion. (1947)
Inline plugin support via tox_.py. This is loaded where the tox config source is discovered. It's a Python file that can contain arbitrary Python code, such as definition of a plugin. Eventually we'll add a plugin that allows succinct declaration/generation of new tox environments - by gaborbernat. (1963)
Introduce the installer concept, and collect pip installation into a pip package, also attach to this the requirements file parsing which got a major rework - by gaborbernat. (1991)
Support CPython 3.10 -by gaborbernat. (2014)
- Add basic quickstart implementation (just use pytest with the current Python version) - by @gaborbernat .
Add basic quickstart implementation (just use pytest with the current Python version) - by @gaborbernat . ( #1829 )
Support comments via the # character within the ini configuration (to force a literal # use # ) - by @gaborbernat . ( #1831 )
Add support for the install_command settings in the virtual env test environments - by @gaborbernat . ( #1832 )
Add support for the package_root setupdir ( Python scoped) configuration that sets the root directory used for packaging (the location of the historical setup.py and modern pyproject.toml ). This can be set at root level, or at tox environment level (the later takes precedence over the former) - by @gaborbernat . ( #1838 )
Implement support for the --installpkg CLI flag - by @gaborbernat . ( #1839 )
Add support for the list_dependencies_command settings in the virtual env test environments - by @gaborbernat . ( #1842 )
Add support for the ignore_errors settings in tox test environments - by @gaborbernat . ( #1843 )
Add support for the pip_pre settings for virtual environment based tox environments - by @gaborbernat . ( #1844 )
Add support for the platform settings in tox test environments - by @gaborbernat . ( #1845 )
Add support for the recreate settings in tox test environments - by @gaborbernat . ( #1846 )
Allow Python test and packaging environments with version 2.7 - by @gaborbernat . ( #1900 )
Do not construct a requirements file for deps in virtualenv, instead pass content as CLI argument to pip - by @gaborbernat . ( #1906 )
Do not display status update environment reports when interrupted or for the final environment ran (because at the final report will be soon printed and makes the status update redundant) - by @gaborbernat . ( #1909 )
The _TOX_SHOW_THREAD environment variable can be used to print alive threads when tox exists (useful to debug when tox hangs because of some non-finished thread) and also now prints the pid of the local subprocess when reporting the outcome of an execution - by @gaborbernat . ( #1915 )
Add basic quickstart implementation (just use pytest with the current Python version) - by gaborbernat. (1829)
Support comments via the # character within the ini configuration (to force a literal # use \#) - by gaborbernat. (1831)
Add support for the install_command settings in the virtual env test environments - by gaborbernat. (1832)
Add support for the package_root setupdir ( Python scoped) configuration that sets the root directory used for packaging (the location of the historical setup.py and modern pyproject.toml). This can be set at root level, or at tox environment level (the later takes precedence over the former) - by gaborbernat. (1838)
Implement support for the --installpkg CLI flag - by gaborbernat. (1839)
Add support for the list_dependencies_command settings in the virtual env test environments - by gaborbernat. (1842)
Add support for the ignore_errors settings in tox test environments - by gaborbernat. (1843)
Add support for the pip_pre settings for virtual environment based tox environments - by gaborbernat. (1844)
Add support for the platform settings in tox test environments - by gaborbernat. (1845)
Add support for the recreate settings in tox test environments - by gaborbernat. (1846)
Allow Python test and packaging environments with version 2.7 - by gaborbernat. (1900)
Do not construct a requirements file for deps in virtualenv, instead pass content as CLI argument to pip - by gaborbernat. (1906)
Do not display status update environment reports when interrupted or for the final environment ran (because at the final report will be soon printed and makes the status update redundant) - by gaborbernat. (1909)
The _TOX_SHOW_THREAD environment variable can be used to print alive threads when tox exists (useful to debug when tox hangs because of some non-finished thread) and also now prints the pid of the local subprocess when reporting the outcome of an execution - by gaborbernat. (1915)
- Support the system_site_packages / sitepackages flag for virtual environment based tox environments - by @gaborbernat .
Support the system_site_packages / sitepackages flag for virtual environment based tox environments - by @gaborbernat . ( #1847 )
Support the always_copy / alwayscopy flag for virtual environment based tox environments - by @gaborbernat . ( #1848 )
Support the download flag for virtual environment based tox environments - by @gaborbernat . ( #1849 )
Recreate virtual environment based tox environments when the virtualenv version changes - by @gaborbernat . ( #1865 )
Support the system_site_packages/sitepackages flag for virtual environment based tox environments - by gaborbernat. (1847)
Support the always_copy/alwayscopy flag for virtual environment based tox environments - by gaborbernat. (1848)
Support the download flag for virtual environment based tox environments - by gaborbernat. (1849)
Recreate virtual environment based tox environments when the virtualenv version changes - by gaborbernat. (1865)
- Use .tox/4 instead of .tox4 folder (so ignores for tox 3 works for tox 4 too), reminder we’ll rename this to just .tox before public release, howeve
Use .tox/4 instead of .tox4 folder (so ignores for tox 3 works for tox 4 too), reminder we’ll rename this to just .tox before public release, however to encourage testing tox 4 in parallel with tox 3 this is helpful - by @gaborbernat . ( #1812 )
Colorize the config command: section headers are yellow, keys are green, values remained white, exceptions are light red and comments are cyan - by @gaborbernat . ( #1821 )
- Raise exception when set env enters into a circular reference - by @gaborbernat .
Raise exception when set env enters into a circular reference - by @gaborbernat . ( #1779 )
Raise exception when variable substitution enters into a circle.
Add {/} as substitution for os specific path separator.
Add {env_bin_dir} constant substitution.
Implement support for --discover flag - by @gaborbernat . ( #1784 )
Raise exception when set env enters into a circular reference - by gaborbernat. (1779)
Raise exception when variable substitution enters into a circle.
Add {/} as substitution for os specific path separator.
Add {env_bin_dir} constant substitution.
Implement support for --discover flag - by gaborbernat. (1784)
- Add option to disable colored output, and support NO_COLOR and FORCE_COLOR environment variables - by @gaborbernat .
Add option to disable colored output, and support NO_COLOR and FORCE_COLOR environment variables - by @gaborbernat . ( #1630 )
Add option to disable colored output, and support NO_COLOR and FORCE_COLOR environment variables - by gaborbernat. (1630)
Avoid deprecated pytest.warns(None) by @hroncok in https://github.com/tox-dev/tox/pull/2548
Full Changelog: https://github.com/tox-dev/tox/compare/3.27.1...3.28.0
setup.cfg: Replace deprecated license_file with license_files by @mgorny in https://github.com/tox-dev/tox/pull/2521
Full Changelog: https://github.com/tox-dev/tox/compare/3.27.0...3.27.1
release 3.26.0 by @gaborbernat in https://github.com/tox-dev/tox/pull/2490
install_command only takes one command by @jugmac00 in https://github.com/tox-dev/tox/pull/2509Full Changelog: https://github.com/tox-dev/tox/compare/3.26.0...3.27.0
Fix SetuptoolsDeprecationWarning about using --global-option by @adamchainz in https://github.com/tox-dev/tox/pull/2487
Full Changelog: https://github.com/tox-dev/tox/compare/3.25.1...3.26.0
release 3.25.0 by @gaborbernat in https://github.com/tox-dev/tox/pull/2398
Full Changelog: https://github.com/tox-dev/tox/compare/3.25.0...3.25.1
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →