NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #281 most downloaded on PyPI
A simple, correct Python build frontend
Last release 24 days ago
10 Sep 2026
Release timing varies
gaps range from 2 weeks to 10 months
Nearly every release is documented
notes for 32 of 33 stable releases
5 versions withdrawn
withdrawn after publishing
6 years old
38 releases · first in 2020
One column per quarter.
chore[v1]: prepare for v1.6.1 by @henryiii in #1181
Avoid trying to detect symlinks on Windows, regression in 1.6.0 - by henryiii (1175) (1175)
Fix doubled backslashes in the Windows pip config path (%APPDATA%\pip\pip.ini) in the docs - by aroh3006 (1149)
1168, 1170, 1178
Avoid trying to detect symlinks on Windows, regression in 1.6.0 - by @henryiii ( #1175 ) ( #1175 )
Fix doubled backslashes in the Windows pip config path ( %APPDATA%\pip\pip.ini ) in the docs - by @aroh3006 ( #1149 )
#1168 , #1170 , #1178
Revert " ⚠️ feat(util): deprecate project_wheel_metadata" by @henryiii in #1158
importlib.metadata for typing by @layday in #1162exc_info parameter from backend exception wrapper by @layday in #1161Full Changelog: 1.5.1...1.6.0
Add --report=PATH to write a machine-readable JSON report of built artifacts; --metadata now also accepts .whl files - by gaborbernat (198)
The srcdir argument now accepts .tar.gz source distributions, extracting and building from them - by gaborbernat (311)
The "Unmet dependencies" error from --no-isolation builds now shows the wanted version, found version, and interpreter - by gaborbernat (504)
Add --sdist-extract-dir to extract the intermediate sdist into a persistent directory, enabling compiler cache reuse across rebuilds - by gaborbernat (614)
Add --env-dir to place the isolated build environment at a fixed path, enabling compiler cache reuse across builds - by gaborbernat (655)
Print a summary of resolved dependency versions (name==version) after installing them in isolated builds - by gaborbernat (959)
On build failure, print a tip pointing to --env-dir and --sdist-extract-dir for debugging and link to the "Debug a failed build" how-to - reported by dimpase, implemented by gaborbernat (966)
Drain verbose subprocess output inline instead of using a ThreadPoolExecutor, which silently swallowed logging errors - by henryiii (1098)
Reject a file passed as --env-dir with a clear error instead of a raw FileExistsError - by henryiii (1100)
Emit CLI warnings to stderr instead of stdout, so they no longer corrupt --metadata JSON output on stdout - by ymyzk (1111)
Fix the Windows symlink support probe always returning False due to a stale object interpolated into the destination path - by henryiii (1118)
Fix metadata_path's build-backend fallback returning a nonexistent dist-info path for wheels with a build tag - by henryiii (1119)
Write pip/uv requirements and constraints files with \n instead of os.linesep, avoiding doubled \r\r\n line endings on Windows - by henryiii (1120)
Batch of small robustness fixes: correct macOS release parsing for the minimum pip version, avoid sharing the mutable default build-system table between builders, keep the original error when isolated-environment setup fails early, and raise BuildException for an invalid wheel - by henryiii (1121)
Decide color support independently for stdout and stderr instead of only checking stdout.isatty(), so redirecting one stream no longer disables or leaks ANSI colors on the other - by henryiii (1123)
Pass --dependency-constraints-txt files through to the installer unmodified instead of re-parsing them into a deduplicated set of lines, fixing a case where a hashed requirement (e.g. from pip-compile --generate-hashes) could have its --hash continuation line separated from its requirement line and silently dropped, depending on the interpreter's hash seed - by manfred-kaiser (1140)
Remove exc_info parameter and attribute from BuildBackendException. - by layday (1161)
Deprecate build.util.project_wheel_metadata; use python -m build --metadata instead - by gaborbernat (557)
Warn on config settings without a value (e.g. -C--my-flag); use -C--my-flag= instead for compatibility with pip - by gaborbernat (640)
1058, 1060, 1062, 1093, 1099, 1107, 1113, 1117, 1122, 1124, 1128, 1132
Bump vulnerable dependency floors (virtualenv, wheel) by @gaborbernat in #1113
Full Changelog: 1.5.0...1.5.1
ci: try to improve release docs by @henryiii in #1051
Drop Python 3.9 support - by henryiii (1036)
Make --ignore-installed opt-in from the API via fresh=True - by henryiii (1056)
1033
Drop Python 3.9 support - by @henryiii ( #1036 )
Make --ignore-installed opt-in from the API via fresh=True - by @henryiii ( #1056 )
#1033
🐛 fix(release): generate consistent CHANGELOG heading levels by @gaborbernat in #1032
Full Changelog: 1.4.3...1.4.4
Fix release pipeline generating CHANGELOG.rst entries with inconsistent heading levels, which broke sphinx -W and pinned Read the Docs stable at 1.4.0 - by gaborbernat. (1031)
Revert 1039 from build 1.4.3, no longer check direct_url (for now) - by henryiii (1039)
Add --ignore-installed to pip install command to prevent issues with packages already present in the isolated build environment - by henryiii (1037) (1040)
Partial revert of 973, keeping log messages in one entry, multiple lines. (1044)
1048, 1049
🐛 fix(api): resolve thread-safety races in build API by @gaborbernat in #1015
Full Changelog: 1.4.2...1.4.3
Add kind parameter to log messages to separate semantic and representation - by abitrolly (973)
Strip PYTHONPATH from the environment during isolated builds to prevent host packages from leaking into the build - by gaborbernat (405)
Pass --no-input to pip to prevent hidden credential prompts that cause hangs, and automatically set PIP_KEYRING_PROVIDER=subprocess (or UV_KEYRING_PROVIDER=subprocess for the uv installer) when the keyring CLI is on PATH -- by gaborbernat (409)
check_dependency now reports URL requirements as unmet instead of silently accepting them when a package with the same name is installed - by gaborbernat (860)
Fix misleading missing dependency error display where transitive dependency chains showed the top-level package on a separate line, making it appear as if the top-level package itself was missing - by gaborbernat (875)
Fix towncrier template to generate changelog categories in definition order - by gaborbernat (1007)
Resolve thread-safety races in the build API - by gaborbernat (1015)
Validate backend-path entries exist on disk with a clear error - by gaborbernat (1016)
1020, 1021
fix(uv): always pass the python to use by @henryiii in #996
Full Changelog: 1.4.1...1.4.2
Ensure the uv installer uses the current version of Python, avoiding an issue if UV_PYTHON is set, for example. (977)
Fix _has_valid_outer_pip returning True when pip is missing, causing build to try using a non-existent pip instead of falling back to virtualenv. (1003)
Fix documentation grammar and typos by @DimitriPapadopoulos in #979
Full Changelog: 1.4.0...1.4.1
Allow setting build constraints - by gaborbernat (963)
Automate releases with pre-release workflow and trusted publishing - by gaborbernat (991)
Fix pip hack workaround - by gaborbernat (980)
Fix documentation grammar and typos (979)
Reorganize documentation using Diataxis framework - by gaborbernat (988)
Document release process and workflow security practices in contributing guide (991)
991
Allow setting build constraints - by @gaborbernat ( #963 )
Automate releases with pre-release workflow and trusted publishing - by @gaborbernat ( #991 )
Fix pip hack workaround - by @gaborbernat ( #980 )
Fix documentation grammar and typos ( #979 )
Reorganize documentation using Diataxis framework - by @gaborbernat ( #988 )
Document release process and workflow security practices in contributing guide ( #991 )
#991
Add option to dump PEP 517 metadata with --metadata (PR #940 , PR #943 )
--quiet flag (PR #947)--metadata (PR #940, PR #943)UV environment variable (PR #971)color defaults to True already (PR #962)log_level is better than log_cli_level (PR #950)types-colorama (PR #945)_has_dependency is a name (PR #970)flit-core is installed (PR #921)Add --config-json (PR #916 , fixes issue #900 )
--config-json (PR #916, fixes issue #900)ModuleNotFoundError when pip is not installed (PR #898)pip install --python for debundled pip (PR #861)This release only makes metadata (Python 3.13 classifier), docs, and test suite changes.
This release only makes metadata (Python 3.13 classifier), docs, and test suite changes.
Full Changelog: 1.2.2...1.2.2.post1
<!-- Release notes generated using configuration in .github/release.yml at 1.2.2 -->
<!-- Release notes generated using configuration in .github/release.yml at 1.2.2 -->
builder.get_requries_for_build's static types
(PR #764, fixes issue #763)pyproject-hooks
(PR #788)network
(PR #808)uv optional for tests
(PR #807 and #813)Full Changelog: https://github.com/pypa/build/compare/1.2.1...1.2.2
builder.get_requries_for_build's static typespyproject-hooksnetworkuv optional for testsFull Changelog: 1.2.1...1.2.2
Avoid error when terminal width is undetectable on Python < 3.11 (PR #761)
Full Changelog: https://github.com/pypa/build/compare/1.2.0...1.2.1
Add --installer option, supporting pip and uv. Added uv extra. (PR #751)
--installer option, supporting pip and uv. Added uv extra.
(PR #751)-v for dependency installation
(PR #749)pip
(PR #752)Full Changelog: https://github.com/pypa/build/compare/1.1.1...1.2.0
Fixed invoking outer pip from user site packages (PR #746, fixes issue #745)
Full Changelog: https://github.com/pypa/build/compare/v1.1.0...1.1.1
Use external pip if available instead of installing, speeds up environment setup with virtualenv slightly and venv significantly. (PR #736)
wheel as a build dependency automatically, in the case of missing pyproject.toml -- by @webknjaz. (PR #716)importlib_metadata on Python <3.10.2 for bugfixes not present in those CPython standard libraries (not required when bootstrapping) -- by @GianlucaFicarelli. (PR #693, fixes issue #692)Full Changelog: https://github.com/pypa/build/compare/1.0.3...v1.1.0
fix: avoid bug in various patch releases of Python by @henryiii in https://github.com/pypa/build/pull/675
Full Changelog: https://github.com/pypa/build/compare/1.0.0...1.0.3
Avoid CPython 3.8.17, 3.9.17, 3.10.12, and 3.11.4 tarfile symlink bug triggered by adding data_filter in 1.0.0. (PR 675, fixes issue 674)
infra: replace flake8 with ruff by @layday in https://github.com/pypa/build/pull/565
IsolatedEnv, take two by @layday in https://github.com/pypa/build/pull/537project_wheel_metadata by @q0w in https://github.com/pypa/build/pull/566Full Changelog: https://github.com/pypa/build/compare/0.10.0...1.0.0
Removed the toml library fallback; toml can no longer be used as a substitute for tomli (PR 567)
Added runner parameter to util.project_wheel_metadata (PR 566, fixes issue 553)
Modified ProjectBuilder constructor signature, added alternative ProjectBuilder.from_env constructor, redefined env.IsolatedEnv interface, and exposed env.DefaultIsolatedEnv, replacing env.IsolatedEnvBuilder. The aim has been to shift responsibility for modifying the environment from the project builder to the IsolatedEnv entirely and to ensure that the builder will be initialised from an IsolatedEnv in a consistent manner. Mutating the project builder is no longer supported. (PR 537)
virtualenv is no longer imported when using -n, for faster builds (PR 636, fixes issue 510)
The SDist now contains the repository contents, including tests. Flit-core 3.8+ required. (PR 657, 661, fixes issue 656)
The minimum version of importlib-metadata has been increased to 4.6 and Python 3.10 due to a bug in the standard library version with URL requirements in extras. This is still not required for 3.8 when bootstrapping (as long as you don't have URL requirements in extras). (PR 631, fixes issue 630)
Docs now built with Sphinx 7 (PR 660)
Tests now contain a network marker (PR 649, fixes issue 648)
Config-settings are now passed to get_requires* hooks, fixing a long standing bug. If this affects your setuptools build, you can use -C--build-option=<cmd> -C--build-option=<option> to workaround an issue with Setuptools not allowing unrecognised build options when running this hook. (PR 627, fixes issue #264)
Test on Python 3.12 betas/RCs (PR 624)
Filter out malicious files when extracting tar archives when Python supports it (PR 609)
Specify encoding, fixing issues when PYTHONWARNDEFAULTENCODING is set. (PR 587, fixes issue 577)
Ruff is now used for linting.
Replace pep517 dependency with pyproject_hooks, into which pep517 has been renamed (PR 539, Fixes 529)
Replace pep517 dependency with pyproject_hooks, into which pep517 has been renamed (PR 539, Fixes 529)
Change build backend from setuptools to flit (PR 470, Fixes 394)
Dropped support for Python 3.6 (PR 532)
Hide a Python 3.11.0 unavoidable warning with venv (PR 527)
Hide a Python 3.11.0 unavoidable warning with venv (PR 527)
Fix infinite recursion error in check_dependency with circular dependencies (PR 512, Fixes 511)
Only import colorama on Windows (PR 494, Fixes 493)
Flush output more often to reduce interleaved output (PR 494)
Small API cleanup, like better __all__ and srcdir being read only. (PR 477)
Only use importlib_metadata when needed (PR 401)
Clarify in printout when build dependencies are being installed (PR 514)
Accept os.PathLike[str] in addition to str for paths in public API (PR 392, Fixes 372)
Accept os.PathLike[str] in addition to str for paths in public API (PR 392, Fixes 372)
Add schema validation for build-system table to check conformity with PEP 517 and PEP 518 (PR 365, Fixes 364)
Better support for Python 3.11 (sysconfig schemes PR 434, PR 463, tomllib PR 443, warnings PR 420)
Improved error printouts (PR 442)
Avoid importing packaging unless needed (PR 395, Fixes 393)
Failure to create a virtual environment in the build.env module now raises build.FailedProcessError (PR 442)
Add build.util module with a high-level utility API (PR 340)
Add build.util module with a high-level utility API (PR 340)
Nothing published for this version
Fix compatibility with Python 3.6 and 3.7 (PR 339, Fixes 338)
Fix compatibility with Python 3.6 and 3.7 (PR 339, Fixes 338)
Improved output (PR 333, Fixes 142)
Improved output (PR 333, Fixes 142)
The CLI now honors NO_COLOR (PR 333)
The CLI can now be forced to colorize the output by setting the FORCE_COLOR environment variable (PR 335)
Added logging to build and build.env (PR 333)
Switch to a TOML v1 compliant parser (PR 336, Fixes 308)
Dropped support for Python 2 and 3.5.
Fix invoking the backend on an inexistent output directory with multiple levels (PR 318, Fixes 316)
Fix invoking the backend on an inexistent output directory with multiple levels (PR 318, Fixes 316)
When building wheels via sdists, use an isolated temporary directory (PR 321, Fixes 320)
Add ProjectBuilder.metadata_path helper (PR 303, Fixes 301)
Add ProjectBuilder.metadata_path helper (PR 303, Fixes 301)
Added a build.__main__.build_package_via_sdist method (PR 304)
Use appropriate installation scheme for Apple Python venvs (PR 314, Fixes 310)
Binary distributions are now built via the sdist by default in the CLI (PR 304, Fixes 257) - python -m build will now build a sdist, extract it, and build a wheel from the source
As a side-effect of PR 304, build.__main__.build_package no longer does CLI error handling (print nice message and exit the program)
Importing build.__main__ no longer has any side-effects, it no longer overrides warnings.showwarning or runs colorama.init on import (PR 312)
Validate that the supplied source directory is valid (PR 260, Fixes 259)
Validate that the supplied source directory is valid (PR 260, Fixes 259)
Set and test minimum versions of build's runtime dependencies (PR 267, Fixes 263)
Use symlinks on creating venv's when available (PR 274, Fixes 271)
Error sooner if pip upgrade is required and fails (PR 288, Fixes 256)
Add a runner argument to ProjectBuilder (PR 290, Fixes 289)
Hide irrelevant pep517 error traceback and improve error messages (PR 296)
Try to use colorama to fix colors on Windows (PR 300)
As a side-effect of PR 260, projects not containing either a pyproject.toml or setup.py will be reported as invalid. This affects projects specifying only a setup.cfg, such projects are recommended to add a pyproject.toml. The new behavior is on par with what pip currently does, so if you are affected by this, your project should not be pip installable.
The --skip-dependencies option has been renamed to --skip-dependency-check (PR 297)
The skip_dependencies argument of build.__main__.build_package has been renamed to skip_dependency_check (PR 297)
build.ConfigSettings has been renamed to build.ConfigSettingsType (PR 298)
build.ProjectBuilder.build_dependencies to build.ProjectBuilder.build_system_requires (PR 284, Fixes 182)
build.ProjectBuilder.get_dependencies to build.ProjectBuilder.get_requires_for_build (PR 284, Fixes 182)
Nothing published for this version
Support direct usage from pipx run in 0.16.1.0+ (PR 247)
Support direct usage from pipx run in 0.16.1.0+ (PR 247)
Use UTF-8 encoding when reading pyproject.toml (PR 251, Fixes 250)
Upgrade pip based on venv pip version, avoids error on Debian Python 3.6.5-3.8 or issues installing wheels on Big Sur (PR 229, PR 230, Fixes 228)
Upgrade pip based on venv pip version, avoids error on Debian Python 3.6.5-3.8 or issues installing wheels on Big Sur (PR 229, PR 230, Fixes 228)
Build dependencies in isolation, instead of in the build environment (PR 232, Fixes 231)
Fallback on venv if virtualenv is too old (PR 241)
Add metadata preparation hook (PR 217, Fixes 130)
Fix error from unrecognised pip flag on Python 3.6.0 to 3.6.5 (PR 227, Fixes 226)
Fix error from unrecognised pip flag on Python 3.6.0 to 3.6.5 (PR 227, Fixes 226)
Check dependencies recursively (PR 183, Fixes 25)
Check dependencies recursively (PR 183, Fixes 25)
Build wheel and sdist distributions in separate environments, as they may have different dependencies (PR 195, Fixes 194)
Add support for pre-releases in check_dependency (PR 204, Fixes 191)
Fixes console scripts not being available during build (PR 221, Fixes 214)
Do not add the default backend requirements to requires when no backend is specified (PR 177, Fixes 107)
Return the sdist name in ProjectBuild.build (PR 197)
Improve documentation (PR 178, PR 203)
Add changelog (PR 219, Fixes 169)
Move config_settings argument to the hook calls (PR 218, Fixes 216)
Fixed building with isolation in a virtual environment
Moved the upstream to PyPA
Fixed building with isolation in a virtual environment
Added env.IsolatedEnv abstract class
Added env.IsolatedEnvBuilder (replaces env.IsolatedEnvironment usages)
Added python_executable argument to the ProjectBuilder constructor
Added --version/-V option to the CLI
Added support for Python 3.9
Added py.typed marker
Various miscellaneous fixes in the virtual environment creation
Many general improvements in the documentation
Documentation moved to the furo theme
Updated the CoC to the PSF CoC, which PyPA has adopted
Renamed the entrypoint script to pyproject-build
Removed default arguments from all paths in ProjectBuilder
Removed ProjectBuilder.hook
Renamed __main__.build to __main__.build_package
Changed the default outdir value to {srcdir}/dest
Removed env.IsolatedEnvironment
Packages are now built in isolation by default
Packages are now built in isolation by default
Added --no-isolation/-n flag to build in the current environment
Add --config-setting/-C option to pass options to the backend
Add IsolatedEnvironment class
Fix creating the output directory if it doesn't exist
Fix building with in-tree backends
Fix broken entrypoint script (python-build)
Add warning about incomplete verification when verifying extras
Automatically detect typos in the build system table
Minor documentation improvements
Fix bug preventing the CLI from being invoked
Fix bug preventing the CLI from being invoked
Improved documentation
Add setuptools as a default fallback backend
Add setuptools as a default fallback backend
Fix extras handling in requirement strings
- Initial release
Initial release
Initial release
On this page
Changelog
1.6.1 (2026-09-10)
Bugfixes
Documentation
Miscellaneous
1.6.0 (2026-08-27)
Features
Bugfixes
Removals
Deprecations
Miscellaneous
1.5.0 (2026-04-30)
Features
Bugfixes
Miscellaneous
1.4.4 (2026-04-22)
Bugfixes
Miscellaneous
1.4.3 (2026-04-10)
Features
Bugfixes
Miscellaneous
1.4.2 (2026-03-25)
Bugfixes
1.4.1 (2026-03-24)
Features
Bugfixes
Documentation
Miscellaneous
1.4.0 (2026-01-08)
1.3.0 (2025-08-01)
1.2.2 (2024-09-06)
1.2.1 (2024-03-28)
1.2.0 (2024-03-27)
1.1.1 (2024-02-29)
1.1.0 (2024-02-29)
1.0.3 (2023-09-06)
1.0.0 (2023-09-01)
0.10.0 (2023-01-11)
0.9.0 (2022-10-27)
0.8.0 (2022-05-22)
Breaking Changes
0.7.0 (2021-09-16)
0.6.0.post1 (2021-08-05)
0.6.0 (2021-08-02)
Breaking Changes
0.5.1 (2021-06-22)
0.5.0 (2021-06-19)
Breaking Changes
0.4.0 (2021-05-23)
Breaking Changes
0.3.1 (2021-03-09)
0.3.0 (2021-02-19)
0.2.1 (2021-02-09)
0.2.0 (2021-02-07)
Breaking changes
0.1.0 (2020-10-29)
Breaking changes
0.0.4 (2020-09-08)
0.0.3.1 (2020-06-10)
0.0.3 (2020-06-09)
0.0.2 (2020-05-29)
0.0.1 (2020-05-17)
Your coding agent can read these notes before it upgrades. Set up the MCP server →