NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #88 most downloaded on PyPI
Modern, extensible Python build backend
Last release 14 days ago
20 Sep 2026
Release timing varies
gaps range from 1 weeks to 12 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
9 versions withdrawn
withdrawn after publishing
5 years old
85 releases · first in 2022
One column per quarter.
Revert the extra type parameter added to BuildHookInterface in 1.32.3, which broke plugins that subscripted the interface with a single argument (e.g.
Fixed:
BuildHookInterface in 1.32.3, which broke plugins that subscripted the interface with a single argument (e.g. BuildHookInterface[MyConfig]) by raising TypeError at import time. BuilderConfig is likewise no longer generic, restoring the pre-1.32.3 plugin interface.Preserve the version string exactly as written in core metadata, so stylized versions such as CalVer 2026.08.10 are no longer stripped of leading zero
Fixed:
2026.08.10 are no longer stripped of leading zeros. Distribution file names and .dist-info directories continue to use the PEP 440 normalized form.Nothing published for this version
Bump default core metadata version to 2.5
Changed:
Bump default core metadata version to 2.5
Add tomlkit as a runtime dependency, which is required to rewrite pyproject.toml when setting a static version
Added:
version command can now set a version that is statically defined by the project.version field, updating pyproject.toml in place. Pass --force to allow an explicit downgradeFixed:
Allow the ; private annotation on project.import-names and project.import-namespaces entries rather than rejecting them as invalid import names.
Reject project.readme paths that are absolute or resolve outside of the project directory.
Only rewrite the shebang of a shared script when a Python shebang is present on the first line, preserving binary files and other content verbatim ins
Fixed
Default core metadata version kept at 2.4 until more tools support 2.5
Fixed
Fix draft release uploads.
Fix draft release uploads. (#2293)
Added:
Fixed:
Source Date Epoch no longer fails when set to date before 1980.
Fixed:
Add sbom-files option and sbom_files build data to the wheel build target for including Software Bill of Materials files.
Changed:
Added:
sbom-files option and sbom_files build data to the wheel build target for including Software Bill of Materials files.Update the default version of core metadata to 2.4
Added:
Support an old import path that is still used by some consumers like Hatch
Fixed:
Back-populate string license fields (License-Expression) for core metadata versions prior to 2.4
Fixed:
license fields (License-Expression) for core metadata versions prior to 2.4License-Expression and License-Files core metadata from version 2.2 that was missed in the previous minor releaseAdd backward compatibility for the old license-files metadata field
Fixed:
license-files metadata fieldThe license-files metadata field has been updated to the latest spec and is now just an array of glob patterns
Changed:
license-files metadata field has been updated to the latest spec and is now just an array of glob patternsAdded:
wheel and sdist targetsHATCH_METADATA_CLASSIFIERS_NO_VERIFY environment variable to disable trove classifier verification.pixi to the list of directories that cannot be traversedpackaging to 24.2Fixed:
wheel target.gitingore files when the project root matches one of the patternsThe macos-max-compat option for the wheel target is now disabled by default and will be removed in a future release
Changed:
macos-max-compat option for the wheel target is now disabled by default and will be removed in a future releaseAdded:
wheel and sdist targets now have their permission bits normalizedFixed:
manylinux/musllinux tags for the wheel target artifact name when enabling the infer_tag build datawheel target build data infer_tag when enabled now respects the MACOSX_DEPLOYMENT_TARGET environment variableAdd .venv to the list of directories that cannot be traversed
Fixed:
.venv to the list of directories that cannot be traversedMaintain file permissions for shared-scripts option/shared_scripts build data of the wheel target
Fixed:
shared-scripts option/shared_scripts build data of the wheel targetAdd shared_data and shared_scripts build data for the wheel target
Added:
shared_data and shared_scripts build data for the wheel targetAdd shared-scripts option for the wheel target
Added:
shared-scripts option for the wheel targetFixed:
packaging dependency version as >=23.2 to avoid its URL validation which can conflict with context formattingFix reading metadata from source distributions when fields are dynamic but not part of core metadata like entry points
Fixed:
Only read source distribution metadata for fields that are explicitly defined as dynamic
Fixed:
Fix the custom build hook when using dynamic dependencies
Fixed:
custom build hook when using dynamic dependenciesFix regression when loading metadata from source distributions
Fixed:
Update the default version of core metadata to 2.3
Fixed:
The app build target has been renamed to binary to reduce ambiguity with the name of an upcoming feature. The former name will still be usable for sev
Deprecated:
app build target has been renamed to binary to reduce ambiguity with the name of an upcoming feature. The former name will still be usable for several minor releases.Added:
wheel target now defaults to the PKG-INFO metadata within source distributionsdependencies method to the build hook interface so that hooks can themselves dynamically define dependenciesFixed:
editables as a direct dependencysdist build target now gracefully ignores UNIX socket files.DS_Store on macOSFix loading of local plugins to account for newly released versions of a dependency
Fixed:
Add parent context modifier for path fields
Added:
parent context modifier for path fieldsAdd bypass-selection option to the wheel build target to allow for empty (metadata-only) wheels
Added:
bypass-selection option to the wheel build target to allow for empty (metadata-only) wheelsFixed:
exclude to count toward inclusion selection, thus bypassing the default inclusion selection heuristicsAdd better error message when the wheel build target cannot determine what to ship
Fixed:
wheel build target cannot determine what to shipAn error will now be raised if a force-included path does not exist
Changed:
wheel build target if no file selection options are definedAdded:
sources option to add a prefix to distribution pathsFixed:
standard version schemewheel build target for case insensitive file systems when the project metadata name does not match the directory name on diskapp build target no longer has suppressed outputsources option while build hooks overwrite included pathsUpgrade 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.
Changed:
Added:
Fix dev mode when the project has symlinks and file inclusion is defined with the packages or only-include options
Fixed:
packages or only-include optionsFixed
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 app build target now embeds the project version in the name of binaries
Added:
app build target now embeds the project version in the name of binariesChanged:
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 commandFix determining the built executable path for the app build target option when using a local copy of PyApp when there is an explicit target triple set
Fixed:
app build target option when using a local copy of PyApp when there is an explicit target triple setAdd app build target option to build using a local copy of the PyApp repository
Added:
app build target option to build using a local copy of the PyApp repository*Added:* - Add app build target
Added:
app build targetFix internal archive root naming for the sdist target when strict-naming is disabled to match the file name in order to support the expectation of som
Fixed:
sdist target when strict-naming is disabled to match the file name in order to support the expectation of some frontendsAdd trove-classifiers as a dependency
Added:
trove-classifiers as a dependencyFixed:
Update the set of known trove classifiers to version 2023.2.8
Added:
Add macos-max-compat option to the wheel target that is enabled by default to support the latest version 22.0 of the packaging library
Fixed:
macos-max-compat option to the wheel target that is enabled by default to support the latest version 22.0 of the packaging libraryFix minor regression in the PEP 517/660 function signatures that was discovered by Fedora
Fixed:
Improve readability of exceptions
Added:
extra_metadata build data to the wheel targetLicense-Expression core metadata starting at version 2.1pyproject.tomlFixed:
ARCHFLAGS environment variable on macOS for the wheel target when build hooks set the infer_tag build data to truesupport-legacy option for the sdist target when using a src-layout project structureversion build hookFix default file selection behavior of the wheel target when there is a single top-level module
Fixed:
wheel target when there is a single top-level moduleAdd env version source to retrieve the version from an environment variable
Added:
env version source to retrieve the version from an environment variablevalidate-bump option to the standard version schemeFixed:
RECORD metadata file of the wheel target to avoid warnings during installation by pip if, for example, file names contain commasAdd deprecated option to allow ambiguous features
Added:
__pypackages__, .hg, .hatch, .tox, .noxFixed:
project.optional-dependencies that use direct referencesFile pattern matching now more closely resembles Git's behavior
Changed:
Added:
prepare_metadata_for_build_wheel and prepare_metadata_for_build_editable for non-frontend tools that only need to inspect a project's metadatametadata command to view PEP 621 project metadataLicense-File for core metadata starting at version 2.1pathspec to 0.10.1Fixed:
license values LicenseRef-Public-Domain and LicenseRef-ProprietaryFix default file inclusion for wheel build targets when both the project name and package directory name are not normalized
Fixed:
wheel build targets when both the project name and package directory name are not normalizedAdd get_known_classifiers method to metadata hooks
Added:
get_known_classifiers method to metadata hooksFixed:
version command when metadata hooks are in useFix the value the relative_path attribute of included files, that some build plugins may use, when selecting explicit paths
Fixed:
relative_path attribute of included files, that some build plugins may use, when selecting explicit pathsFixed:
Add require-runtime-features option for builders and build hooks
Added:
require-runtime-features option for builders and build hooksFixed:
wheel target dev mode installations that define path rewrites with the sources optionallow-direct-references option in the relevant error messagesWhen no build targets are specified on the command line, now default to sdist and wheel targets rather than what happens to be defined in config
Changed:
sdist and wheel targets rather than what happens to be defined in configcode version source now only supports files with known extensionsAdded:
code version source now supports loading extension modulessearch-paths option for the code version sourceFixed:
sources using an empty string value in the mappingstrict-naming option now also applies to the metadata directory of wheel targetsSupport the final draft of PEP 639
Added:
strict-naming option for sdist and wheel targetsFixed:
sdist and wheel target core metadata exactly as defined in pyproject.toml without normalization to allow control of how PyPI displays themFix forced inclusion of important files like licenses for sdist targets when using the explicit selection options
Fixed:
sdist targets when using the explicit selection optionsThe packages option uses the new only-include option to provide targeted inclusion, since that is desired most of the time. You can retain the old beh
Changed:
packages option uses the new only-include option to provide targeted inclusion, since that is desired most of the time. You can retain the old behavior by using the include and sources options together.Added:
version build hookonly-include optioneditable version of wheel targets now respects the force-include option by defaultforce-include option now supports path rewriting with the sources optionwheel target shared-data and extra-metadata options now respect file selection optionswheel target now auto-detects single module layouts__pycache__ rather than excluding individual files withinFixed:
wheel targets if there are no entry points definedversion in all casesforce-include optionBetter populate global variables for the code version source
Fixed:
code version sourceRemove unused global args context string formatting field
Removed:
args context string formatting fieldAdded:
env context string formatting fieldFixed:
uri context string formatting modifier on WindowsAllow context formatting for project.dependencies and project.optional-dependencies
Added:
project.dependencies and project.optional-dependenciesAdd uri and real context string formatting modifiers for file system paths
Added:
uri and real context string formatting modifiers for file system pathsImprove error messaging for invalid versions
Changed:
Added:
Fix support for Windows on Python 2 by removing its support for symlinks
Fixed:
Your coding agent can read these notes before it upgrades. Set up the MCP server →