NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1416 most downloaded on PyPI
Modern, extensible Python project management
Last release 18 days ago
16 Sep 2026
Release timing varies
gaps range from 9 days to 6 months
Nearly every release is documented
notes for 45 of 46 stable releases
Nothing withdrawn
no release was ever pulled
5 years old
63 releases · first in 2021
One column per quarter.
Apply context formatting to the lock-filename environment option so fields such as {env_name} and {matrix:...} are resolved when computing the lock fi
Added:
lock-filename environment option so fields such as {env_name} and {matrix:...} are resolved when computing the lock file path.Fixed:
Consolidate extras and feature resolution into a single code path, fixing regressions where environment and project extras could be dropped or resolved inconsistently, and always validate undefined features.
Normalize hyphens in the plugin name when building environment option environment variable names in get_env_var(), so options for hyphenated plugins resolve to the correct variable.
Upgrade default CPython distributions to 20260807
Changed:
Added:
Add the sources environment option, which redirects dependencies to a local path, Git repository, URL, alternate index, or workspace member at install time without altering published metadata. The top-level [tool.hatch.sources] table is an alias for the default environment, environments inherit sources entry by entry, the HATCH_NO_SOURCES environment variable disables them, and hatch dep show sources reports what each source redirects
Add the --all/-a flag to the build command to build the workspace root and every workspace member defined by the selected environment, consolidating artifacts in the workspace root's dist directory by default. A root that does not define a project table is skipped so that a top-level pyproject.toml may only contain workspace configuration
Add the tool.hatch.requires-hatch field, a version specifier set that commands reading the project's metadata enforce against the running version of Hatch
Add first-class support for free-threaded distribution names such as 3.13t and 3.14t to the python commands and environment python option, rather than requiring the HATCH_PYTHON_VARIANT_GIL environment variable
The version command can now bump versions that are statically defined by the project.version field, updating pyproject.toml in place. Pass --force to allow an explicit downgrade
Support managing Python 3.15 distributions, currently 3.15.0rc1
Fixed:
Erase stale coverage data before running hatch test --cover.
Fix environment creation crashing when a metadata hook exists that doesn’t happen to be installed in the hatch CLI’s environment.
Fix commands run by hatch run no longer being interruptible with Ctrl-C, which happened because the ignored SIGINT of the parent process was inherited by the child process.
Fix the generated Pyrefly config being invalid on Windows, since backslashes in the absolute paths were interpreted as TOML escape sequences.
Fix the hardcoded reliance on pip when installing dependencies internally by using uv instead.
Fix environment creation silently installing a GIL-enabled Python distribution when Hatch itself runs on a free-threaded build. The distribution matching the running interpreter, such as 3.14t, is now selected.
Fix free-threaded selectors such as 3.14t being rejected by an environment's python option, even though hatch python install 3.14t already accepted them.
Never automatically select a prerelease Python distribution, such as 3.15.0rc1, when falling back to the latest compatible version. A prerelease is still installed when requested explicitly.
Use TemporaryDirectory and pylock*.toml for temporary lock files.
Fixed
TemporaryDirectory and pylock*.toml for temporary lock files.ruff extend if a key already exists in ruff.toml.--no-header to uv pip compile in the uv locker so that generated lockfiles are deterministic.The hatch fmt command is now deprecated in favor of the new hatch check command group
Changed:
hatch fmt command is now deprecated in favor of the new hatch check command grouphttpx to httpx2Added:
hatch check command group with subcommands for check code (linting), check fmt (formatting), and check types (type checking)hatch check types command for type checking using Pyrefly, with --summarize and --cover flagshatch env lock command to generate PEP 751 compliant lockfiles (pylock.toml) for environmentshatch dep lock and hatch lock commands as shortcuts for locking the active environmenthatch dep sync command for syncing dependencies from a lockfile--cover-xml and --cover-xml-output flags to the hatch test command for generating XML coverage reportsFixed:
run commandHandle a breaking change in virtualenv by only supporting the latest version and adding python-discovery as a dependency.
Fixed:
virtualenv by only supporting the latest version and adding python-discovery as a dependency.Fixes hatch shell type error for keep_env.
Fixed:
sdistEnv var for keep-env when an exception occurs during environment creation to enable debugging.
Added:
Fixed:
Properly send informational output to stderr instead of stdout
Fixed:
stderr instead of stdoutsbom-files as build data for the wheel build targetproject.optional-dependencies fieldHandle special characters correctly in path for editable installs.
Fixed:
sync_dependencies to become a single call.{root:parent:uri} in the [project] section.dependency-groups field to properly support matrix and conditional configurations.Environment type plugins are now no longer expected to support a pseudo-build environment as any environment now may be used for building. The followi
Changed:
build_environment, build_environment_exists, run_builder, construct_build_commandAdded:
version and project metadata commands now support projects that do not use Hatchling as the build backendversion command accepts a --force option, allowing for downgrades when an explicit version number is given.hatch-buildproject_root, sep, pathsep, fs_contextpackaging to 24.2Fixed:
User-Agent header.run commandFix compatibility with cached default CPython distributions that were sourced from GitHub releases of the old owner
Fixed:
Upgrade default CPython distributions to 20251014
Changed:
Added:
Fix compatibility with recent versions of Click
Fixed:
Remove uses of the deprecated --no-python-version-warning flag when using pip
Fixed:
--no-python-version-warning flag when using pipUpgrade default CPython distributions to 20241206
Added:
virtualenv dependencySupport managing Python 3.13 distributions
Added:
The run/env run and test commands now treat inclusion variable options as an intersection rather than a union to allow for specific targeting of envir
Changed:
run/env run and test commands now treat inclusion variable options as an intersection rather than a union to allow for specific targeting of environmentsAdded:
Fixed:
fmt command no longer hides the commands that are being executedconfig show commandAdd official GitHub Action for installing Hatch
Added:
Fixed:
terminal.styles.spinner configurationUpgrade PyApp to 0.21.1 for binary builds
Added:
Fixed:
The run/env run, fmt and shell commands now only change the current working directory to the project root if not already inside the project
Changed:
run/env run, fmt and shell commands now only change the current working directory to the project root if not already inside the projectshell command now accepts a single argument to specify the environment to enter which overrides the standard choice mechanisms. The arguments determining shell options have been converted to flags.Added:
test commandrun command can now execute scripts that define inline metadata for dependencies and Python version constraintsvirtual environment type now supports the ability to use UV in place of pip & virtualenvself report command for submitting pre-populated bug reports to GitHubenvironment interface for complete control over output during life cycle management: app_status_creation, app_status_pre_installation, app_status_post_installation, app_status_project_installation, app_status_dependency_state_check, app_status_dependency_installation_check, app_status_dependency_synchronization~/.pypirc file for the index publisherHATCH_DEBUG environment variable that when enabled will show local variables in the case of unhandled tracebacksenv show command now outputs data about all internal environments when using the --json flagFixed:
pyproject.toml file but no project table e.g. applicationsfmt command when automatically installing plugin dependenciestypes environment for new projectsE501 for the fmt command by default since it conflicts with the formatterpackaging dependency version as >=23.2 to avoid its URL validation which can conflict with context formattingREADME.md file template for new projects to avoid Markdown linting issuesLimit the maximum version of virtualenv due to a backward incompatible change
Fixed:
Limit the maximum version of Hatchling in anticipation of backward incompatible changes
Fixed:
Fix loading of local plugins to account for newly released versions of a dependency
Fixed:
Fix the default token variable name for publishing to PyPI
Fixed:
Ensure that the dependency_hash method of the environment interface is called after sync_dependencies for cases where the hash is only known at that p
Fixed:
dependency_hash method of the environment interface is called after sync_dependencies for cases where the hash is only known at that point, such as for dependency lockersHATCH_PYTHON_VARIANT_* environment variables for Python resolution for supported platforms and architecturesEnvironments prefixed by hatch- are now considered internal and used for special purposes such as configuration for static analysis
Changed:
hatch- are now considered internal and used for special purposes such as configuration for static analysisAdded:
find and check_compatibilityFixed:
path option for the virtual environment typeFix regression in calling subprocesses with updated PATH
Fixed:
The get_build_process method of the environment interface has been removed; plugins should use the new run_builder method instead
Changed:
get_build_process method of the environment interface has been removed; plugins should use the new run_builder method insteadpyperclip dependency and the --copy flag of the config find commandbuild command all output from builders is now displayed as-is in real time without the stripping of ANSI codesAdded:
fmt commandvirtual environment type can now automatically download requested versions of Python that are not installeddependency_hash method to the environment interfacebuild command now supports backends other than Hatchlingfeatures for environments when skip-install is enabled__TOKEN__ when prompting for a username for the publish commandrun_builder method to the environment interfaceclick to 8.0.6Fixed:
virtual environment typeversion command outside of a project rather than erroringproject metadata command by only capturing stdout from the backendThe src-layout project template option is now enabled by default
Changed:
src-layout project template option is now enabled by defaultAdded:
tool.hatch.env.requires configuration to automatically install dependencies for environment and environment collector pluginscustom environment collectorisolated_data_directory attribute to the environment interfaceindex publisherFixed:
version command when the version is static and build dependencies are unmetvirtual environment type when storing within a relative pathsetup.py if setup.cfg is presentconfig set commandFix version command when the version is dynamic and build dependencies are unmet
Fixed:
version command when the version is dynamic and build dependencies are unmetFix getting dynamic metadata from hooks for environments when dependencies are not dynamic
Fixed:
Computing the path to the user's home directory now gracefully falls back to ~ when it cannot be determined
Fixed:
~ when it cannot be determinedThe run_shell_command environment interface method now accepts arbitrary subprocess.Popen keyword arguments. This is not strictly breaking, but will b
Changed:
run_shell_command environment interface method now accepts arbitrary subprocess.Popen keyword arguments. This is not strictly breaking, but will be utilized in upcoming features.virtual environments is now more nested. This is not breaking, but any local environments will be created anew.Added:
project command group to view details about the project like PEP 621 metadatavirtual environments will be flat if Hatch's configured virtual environment directory resides somewhere within the project root or if it is set to a .virtualenvs directory within the user's home directoryvirtual environment type are now cached for improved performancebuild_environment_exists method to the environment interface for implementations that cache the build environmentpath option to the virtual environment type--initialize-auth flag to the index publisher to allow for the saving of authentication information before publishingshell commandsetuptools migration script no longer modifies the formatting of existing pyproject.toml configurationFixed:
dep hash and all dep show commands now respect dynamically defined project dependenciesenv show, dep hash, and all dep show commands now honor context formattingrun and env run commands when there are multiple possible variablessetuptools migration scriptextra-dependencies in environment overridespackaging explicitly rather than relying on it being a transitive dependency of HatchlingThe index publisher now recognizes repository-specific options
Added:
index publisher now recognizes repository-specific options--ignore-compat flag to the env run commandHATCH_PYTHON environment variable to self will now force the use of the Python executable Hatch is running on for virtual environment creationFixed:
--force-continue flag of the env run commandsetuptools migration scriptFix check for updating static versions with the version command when metadata hooks are in use
Fixed:
version command when metadata hooks are in useFix non-detached inheritance disabling for environments
Fixed:
The default Python for virtual environments now checks PATH before using the one Hatch is running on
Added:
virtual environments now checks PATH before using the one Hatch is running onenv-vars now support context formattingname override for environments to allow for regular expression matchingindex publisher now better supports non-PyPI indicesindex publishershell command is executedash) shellshyperlink as a dependency for better handling of package index URLsvirtualenv to 20.16.2tomlkit to 0.11.1Fixed:
extra-dependencies for the env show commandshell commandSupport -h/--help flag for the run command
Fixed:
-h/--help flag for the run commandRename the default publishing plugin from pypi to the more generic index
Changed:
pypi to the more generic indexAdded:
pyproject.toml files, as is the case for apps and non-Python projectsenv show command by default--force-continue flag to the env run commandpwsh is now an alias for powershellatomicwrites dependencyuserpath dependencyFixed:
utf-8 for all files generated for new projectssetuptools migration scriptFix handling of top level data_files in setuptools migration script
Fixed:
data_files in setuptools migration scriptThe enter_shell environment plugin method now accepts an additional args parameter
Changed:
enter_shell environment plugin method now accepts an additional args parameterAdded:
env_name, env_type, matrix, verbosity, and argsFixed:
setuptools migration scriptBump the minimum supported version of Hatchling to 1.2.0
Fixed:
Fix setuptools migration script for non-Windows systems
Fixed:
setuptools migration script for non-Windows systemsIn order to simplify the implementation of command execution for environment plugins, the run_shell_commands method has been replaced by the singular
Changed:
run_shell_commands method has been replaced by the singular run_shell_command. A new command_context method has been added to more easily satisfy complex use cases.finalize_command environment plugin method has been removed in favor of the newly introduced context formatting functionality.Added:
make, ignore the exit code of executed commands that start with - (a hyphen)--init flag of the new command to automatically migrate setuptools configurationThis is the first stable release of Hatch v1, a complete rewrite. Enjoy!
This is the first stable release of Hatch v1, a complete rewrite. Enjoy!
This is the first stable release of Hatch v1, a complete rewrite. Enjoy! September 20, 2026 GitHub
Moved the version scheme plugin interface to Hatchling for the ability to use version management without requiring a heavy CLI installation
Changed:
Added:
dep show requirements commandversion commands in a build environment if dependencies are unavailabletomllib on Python 3.11+Rename environment collector API method get_environment_config to get_initial_config and do not make it required
Changed:
get_environment_config to get_initial_config and do not make it requiredAdded:
env run command as a more advanced form of the run command--json flag to the env show commandenv show commandenv show commandfinalize_config and finalize_environmentsvirtual environmentsdetached option to environmentstomlkit for better formattingAdd ability to select specific environments for command execution of matrices based on variables
Added:
HATCH_PYTHON environment variable that, for example, environments may use before defaulting to the Python executable Hatch is running onSHELL environment variable fallback on Windows systemsBump the minimum supported version of Hatchling
Added:
When building with no targets defined in config, default to -t sdist -t wheel rather than raising an error
Added:
-t sdist -t wheel rather than raising an errorenv show commanddescription option to environmentsextra-dependencies option to environmentsactions/setup-python action of the CI option for new projects to v3Remove the forced use of embedded seed packages for virtual environments since distributions like Debian and Fedora do not use those
Added:
Fixed:
virtual environments since distributions like Debian and Fedora do not use thoseSwitch project to a src-layout structure
Added:
src-layout structureChange environment storage configuration to allow for exact paths per type of environment
Changed:
find to the environment interfaceAdded:
run commandHandle edge case for displaying text while showing a status message
Fixed:
Add ability to set the non-preview variant of versions
Added:
Fixed:
build-system.requiresversion command now properly handles statically defined versionspython along PATH*Added:* - Support Python 3.7
Added:
Bump the minimum supported version of Hatchling
Added:
Bump the minimum supported version of Hatchling
Added:
Reduce default verbosity of config file creation for new users
Fixed:
Bump the minimum supported version of Hatchling
Added:
Fixed:
Your coding agent can read these notes before it upgrades. Set up the MCP server →