NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #905 most downloaded on PyPI
The uv build backend
Last release today
18 Sep 2026
Ships on a steady schedule
a new release about every 9 days
Nearly every release is documented
notes for 60 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
2 years old
158 releases · first in 2025
One column per month.
Add --no-install-* arguments to uv add
--no-install-* arguments to uv add (#15375)uv init (#15377)uv format command (#15017)extra-build-dependencies if match-runtime is explicitly false (#15420)triton to torch-backend manifest (#15405)uv_build wheel hashes (#15400)--upgrade-package on the command-line as overriding upgrade = false in configuration (#15395)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.8.13/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.8.13/uv-installer.ps1 | iex"
Improve performance of zstd in Python 3.14
See the python-build-standalone release notes for details.
aarch64-pc-windows-msvc target for python-platform (#15347)uv tool update-shell (#15356)buildpack-deps:trixie, debian:trixie-slim, alpine:3.22 (#15351)match-runtime = true for dynamic packages (#15292)uv cache clean instead of clear (#15313)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.8.12/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.8.12/uv-installer.ps1 | iex"
Add Debian 13 trixie to published Docker images
extra-build-dependencies hint for any missing module on build failure (#15252)reqwest clients to RegistryClient (#15281)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.8.11/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.8.11/uv-installer.ps1 | iex"
Add support for installing Pyodide versions
aarch64 (#14399)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.8.10/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.8.10/uv-installer.ps1 | iex"
Add --reinstall flag to uv python upgrade
--reinstall flag to uv python upgrade (#15194)uv python upgrade if they don't already exist (#15192)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.8.9/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.8.9/uv-installer.ps1 | iex"
Fix find_uv_bin compatibility with Python <3.10
find_uv_bin compatibility with Python <3.10 (#15177)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.8.8/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.8.8/uv-installer.ps1 | iex"
Tix is no longer provided on Linux. This is a deprecated Tk extension that appears to have been previously broken.
tkagg backend (the default on Linux), Pillow's PIL.ImageTk library, and other extension modules that need to use libtcl/libtk directly.See the python-build-standalone release notes for details.
uv.lock when using --isolated (#15154)--prefix and --with installations in find_uv_bin (#14184)find_uv_bin (#14181)find_uv_bin (#14182)package-level conflicts in workspaces (#14906)UV_DEV and UV_NO_DEV environment variables (for --dev and --no-dev) (#15010)--require-hashes applied to build dependencies in uv pip install (#15153)find_uv_bin (#14191).) to list elements in Features docs page (#15138)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.8.7/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.8.7/uv-installer.ps1 | iex"
This release contains hardening measures to address differentials in behavior between uv and Python's built-in ZIP parsers (CVE-2025-54368).
This release contains hardening measures to address differentials in behavior between uv and Python's built-in ZIP parsers (CVE-2025-54368).
Prior to this release, attackers could construct ZIP files that would be extracted differently by pip, uv, and other tools. As a result, ZIPs could be constructed that would be considered harmless by (e.g.) scanners, but contain a malicious payload when extracted by uv. As of v0.8.6, uv now applies additional checks to reject such ZIPs.
Thanks to a triage effort with the Python Security Response Team and PyPI maintainers, we were able to determine that these differentials were not exploited via PyPI during the time they were present. The PyPI team has also implemented similar checks and now guards against these parsing differentials on upload.
Although the practical risk of exploitation is low, we take the hypothetical risk of parser differentials very seriously. Out of an abundance of caution, we have assigned this advisory a CVE identifier and have given it a "moderate" severity suggestion.
These changes have been validated against the top 15,000 PyPI packages; however, it's plausible that a non-malicious ZIP could be falsely rejected with this additional hardening. As an escape hatch, users who do encounter breaking changes can enable UV_INSECURE_NO_ZIP_VALIDATION to restore the previous behavior. If you encounter such a rejection, please file an issue in uv and to the upstream package.
For additional information, please refer to the following blog posts:
UV_HTTP_RETRIES in uv publish (#15106)UV_NO_EDITABLE where --no-editable is supported (#15107)cargo-dist to add UV_INSTALLER_URL to PowerShell installer (#15114)h2 again to avoid too_many_internal_resets errors (#15111)pythonw when copying entry points in uv run (#15134)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.8.6/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.8.6/uv-installer.ps1 | iex"
Enable uv run with a GitHub Gist
uv run with a GitHub Gist (#15058)uv tool install (#14014)extra-build-dependencies warnings for uv pip (#15088)pylock warning (#15089)python-preference = system when managed interpreters are on the PATH (#15059)--system is used (#15061)h2 upgrade (#15079)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.8.5/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.8.5/uv-installer.ps1 | iex"
Improve styling of warning cause chains
extra-build-dependencies (#14735)exclude-newer dates via exclude-newer-package (#14489)python vs python3 (#14970)environments and required-environments in uv.toml (#14905)uv_build in projects documentation (#14968)UV_ prefix to installer environment variables (#14964)uv from --build-backend options (#14939)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.8.4/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.8.4/uv-installer.ps1 | iex"
See the `python-build-standalone` release notes for more details.
See the python-build-standalone release notes for more details.
--with versions over base environment versions (#14863)uv_build reference documentation (#14853)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.8.3/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.8.3/uv-installer.ps1 | iex"
Add derivation chains for dependency errors
UV_INIT_BUILD_BACKEND (#14821)tls_built_in_root_certs for client (#14816)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.8.2/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.8.2/uv-installer.ps1 | iex"
Allow --config-settings-package to apply configuration settings at the package level
HF_TOKEN (#14797)--config-settings-package to apply configuration settings at the package level (#14573)python3.13t executables in uv venv (#14764)python -m uv in interrupted with Ctrl-C on Windows (#14715)--bounds formatting for uv_build bounds in uv init (#14731)extras and dependency_groups markers in PEP 508 grammar (#14753)extras and dependency_groups markers on uv pip install and uv pip sync (#14755)uv self version when uv version cannot find a project (#14738)[tool.uv] fields more precise (#14325)uv sync with --quiet (#14810)Cache-Control overrides to response, not request headers (#14736)requires-python in pylock.toml (#14787)README variants in build backend (#14762)pyvenv.cfg last (#14808)dependency-metadata (#14801)setup-uv after setup-python in Github Actions integration guide (#14741)requires-python behavior are consistent with pip (#14752)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.8.1/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.8.1/uv-installer.ps1 | iex"
Since we released uv 0.7.0 in April, we've accumulated various changes that improve correctness and user experience, but could break some workflows. T
Since we released uv 0.7.0 in April, we've accumulated various changes that improve correctness and user experience, but could break some workflows. This release contains those changes; many have been marked as breaking out of an abundance of caution. We expect most users to be able to upgrade without making changes.
This release also includes the stabilization of a couple uv python install features, which have been available under preview since late last year.
Install Python executables into a directory on the PATH (#14626)
uv python install now installs a versioned Python executable (e.g., python3.13) into a directory on the PATH (e.g., ~/.local/bin) by default. This behavior has been available under the --preview flag since Oct 2024. This change should not be breaking unless it shadows a Python executable elsewhere on the PATH.
To install unversioned executables, i.e., python3 and python, use the --default flag. The --default flag has also been in preview, but is not stabilized in this release.
Note that these executables point to the base Python installation and only include the standard library. That means they will not include dependencies from your current project (use uv run python instead) and you cannot install packages into their environment (use uvx --with <package> python instead).
As with tool installation, the target directory respects common variables like XDG_BIN_HOME and can be overridden with a UV_PYTHON_BIN_DIR variable.
You can opt out of this behavior with uv python install --no-bin or UV_PYTHON_INSTALL_BIN=0.
See the documentation on installing Python executables for more details.
Register Python versions with the Windows Registry (#14625)
uv python install now registers the installed Python version with the Windows Registry as specified by PEP 514. This allows using uv installed Python versions via the py launcher. This behavior has been available under the --preview flag since Jan 2025. This change should not be breaking, as using the uv Python versions with py requires explicit opt in.
You can opt out of this behavior with uv python install --no-registry or UV_PYTHON_INSTALL_REGISTRY=0.
Prompt before removing an existing directory in uv venv (#14309)
Previously, uv venv would remove an existing virtual environment without confirmation. While this is consistent with the behavior of project commands (e.g., uv sync), it's surprising to users that are using imperative workflows (i.e., uv pip). Now, uv venv will prompt for confirmation before removing an existing virtual environment. If not in an interactive context, uv will still remove the virtual environment for backwards compatibility. However, this behavior is likely to change in a future release.
The behavior for other commands (e.g., uv sync) is unchanged.
You can opt out of this behavior by setting UV_VENV_CLEAR=1 or passing the --clear flag.
Validate that discovered interpreters meet the Python preference (#7934)
uv allows opting out of its managed Python versions with the --no-managed-python and python-preference options.
Previously, uv would not enforce this option for Python interpreters discovered on the PATH. For example, if a symlink to a managed Python interpreter was created, uv would allow it to be used even if --no-managed-python was provided. Now, uv ignores Python interpreters that do not match the Python preference unless they are in an active virtual environment or are explicitly requested, e.g., with --python /path/to/python3.13.
Similarly, uv would previously not invalidate existing project environments if they did not match the Python preference. Now, uv will invalidate and recreate project environments when the Python preference changes.
You can opt out of this behavior by providing the explicit path to the Python interpreter providing --managed-python / --no-managed-python matching the interpreter you want.
Install dependencies without build systems when they are path sources (#14413)
When working on a project, uv uses the presence of a build system to determine if it should be built and installed into the environment. However, when a project is a dependency of another project, it can be surprising for the dependency to be missing from the environment.
Previously, uv would not build and install dependencies with path sources unless they declared a build system or set tool.uv.package = true. Now, dependencies with path sources are built and installed regardless of the presence of a build system. If a build system is not present, the setuptools.build_meta:__legacy__ backend will be used (per PEP 517).
You can opt out of this behavior by setting package = false in the source declaration, e.g.:
[tool.uv.sources]
foo = { path = "./foo", package = false }
Or, by setting tool.uv.package = false in the dependent pyproject.toml.
See the documentation on virtual dependencies for details.
Install dependencies without build systems when they are workspace members (#14663)
As described above for dependencies with path sources, uv previously would not build and install workspace members that did not declare a build system. Now, uv will build and install workspace members that are a dependency of another workspace member regardless of the presence of a build system. The behavior is unchanged for workspace members that are not included in the project.dependencies, project.optional-dependencies, or dependency-groups tables of another workspace member.
You can opt out of this behavior by setting tool.uv.package = false in the workspace member's pyproject.toml.
See the documentation on virtual dependencies for details.
Bump --python-platform linux to manylinux_2_28 (#14300)
uv allows performing platform-specific resolution for explicit targets and provides short aliases, e.g., linux, for common targets.
Previously, the default target for --python-platform linux was manylinux_2_17, which is compatible with most Linux distributions from 2014 or newer. We now default to manylinux_2_28, which is compatible with most Linux distributions from 2019 or newer. This change follows the lead of other tools, such as cibuildwheel, which changed their default to manylinux_2_28 in Mar 2025.
This change only affects users requesting a specific target platform. Otherwise, uv detects the manylinux target from your local glibc version.
You can opt out of this behavior by using --python-platform x86_64-manylinux_2_17 instead.
Remove uv version fallback (#14161)
In Apr 2025, uv changed the uv version command to an interface for viewing and updating the version of the current project. However, when outside a project, uv version would continue to display uv's version for backwards compatibility. Now, when used outside of a project, uv version will fail.
You cannot opt out of this behavior. Use uv self version instead.
Require --global for removal of the global Python pin (#14169)
Previously, uv python pin --rm would allow you to remove the global Python pin without opt in. Now, uv requires the --global flag to remove the global Python pin.
You cannot opt out of this behavior. Use the --global flag instead.
Support conflicting editable settings across groups (#14197)
Previously, uv would always treat a package as editable if any requirement requested it as editable. However, this prevented users from declaring path sources that toggled the editable setting across dependency groups. Now, uv allows declaring different editable values for conflicting groups. However, if a project includes a path dependency twice, once with editable = true and once without any editable annotation, those are now considered conflicting, and uv will exit with an error.
You cannot opt out of this behavior. Use consistent editable settings or mark groups as conflicting.
Make uv_build the default build backend in uv init (#14661)
The uv build backend (uv_build) was stabilized in uv 0.7.19. Now, it is the default build backend for uv init --package and uv init --lib. Previously, hatchling was the default build backend. A build backend is still not used without opt-in in uv init, but we expect to change this in a future release.
You can opt out of this behavior with uv init --build-backend hatchling.
Set default UV_TOOL_BIN_DIR on Docker images (#13391)
Previously, UV_TOOL_BIN_DIR was not set in Docker images which meant that uv tool install did not install tools into a directory on the PATH without additional configuration. Now, UV_TOOL_BIN_DIR is set to /usr/local/bin in all Docker derived images.
When the default image user is overridden (e.g. USER <UID>) with a less privileged user, this may cause uv tool install to fail.
You can opt out of this behavior by setting an alternative UV_TOOL_BIN_DIR.
Update --check to return an exit code of 1 (#14167)
uv uses an exit code of 1 to indicate a "successful failure" and an exit code of 2 to indicate an "error".
Previously, uv lock --check and uv sync --check would exit with a code of 2 when the lockfile or environment were outdated. Now, uv will exit with a code of 1.
You cannot opt out of this behavior.
Use an ephemeral environment for uv run --with invocations (#14447)
When using uv run --with, uv layers the requirements requested using --with into another virtual environment and caches it. Previously, uv would invoke the Python interpreter in this layered environment. However, this allows poisoning the cached environment and introduces race conditions for concurrent invocations. Now, uv will layer another empty virtual environment on top of the cached environment and invoke the Python interpreter there. This should only cause breakage in cases where the environment is being inspected at runtime.
You cannot opt out of this behavior.
Restructure the uv venv command output and exit codes (#14546)
Previously, uv used miette to format the uv venv output. However, this was inconsistent with most of the uv CLI. Now, the output is a little different and the exit code has switched from 1 to 2 for some error cases.
You cannot opt out of this behavior.
Default to --workspace when adding subdirectories (#14529)
When using uv add to add a subdirectory in a workspace, uv now defaults to adding the target as a workspace member.
You can opt out of this behavior by providing --no-workspace.
Add missing validations for disallowed uv.toml fields (#14322)
uv does not allow some settings in the uv.toml. Previously, some settings were silently ignored when present in the uv.toml. Now, uv will error.
You cannot opt out of this behavior. Use --no-config or remove the invalid settings.
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.8.0/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.8.0/uv-installer.ps1 | iex"
See the GraalPy release notes for more details.
See the GraalPy release notes for more details.
UV_COMPILE_BYTECODE_TIMEOUT environment variable (#14369)cache-control headers (#14620)UV_LIBC to override libc selection in multi-libc environment (#14646)--all-arches when paired with --only-downloads (#14629)uv.toml when provided via direct path (#14653)revision in the lockfile versioning doc (#14634)uv cache clean prior to --reinstall (#14659)uv python update-shell (#14627)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.22/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.22/uv-installer.ps1 | iex"
Restore the SQLite fts4, fts5, rtree, and geopoly extensions on macOS and Linux
fts4, fts5, rtree, and geopoly extensions on macOS and LinuxSee the python-build-standalone release notes for more details.
--python-platform to uv sync (#14320)uv version --bump (#13578)-w shorthand for --with (#14530)UV_HTTP_RETRIES to customize retry counts (#14544)cache-key (#13438)..) in globs in cache-key (#13469)cache-key performance (#13469)uv sync --output-format json (#13689)uv tool if it is incompatible with --python (#14606)include-group (#14539)setup-python (#14533)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.21/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.21/uv-installer.ps1 | iex"
Add zstd support to Python 3.14 on Unix (it already was available on Windows)
See the PyPy and python-build-standalone release notes for more details.
--workspace flag to uv add (#14496)uv version (#14434)uv-extract to enable retries (#14450)NoSolutionError (#14457)ErrorTree for NoSolutionError public (#14444)cache-dependency-glob examples for setup-uv (#14493)uv pip sync suggestion with pyproject.toml (#14510)setup-uv@v6 (#14490)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.20/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.20/uv-installer.ps1 | iex"
The [uv build backend](https://docs.astral.sh/uv/concepts/build-backend/) is now stable, and considered ready for production use.
The uv build backend is now stable, and considered ready for production use.
The uv build backend is a great choice for pure Python projects. It has reasonable defaults, with the goal of requiring zero configuration for most users, but provides flexible configuration to accommodate most Python project structures. It integrates tightly with uv, to improve messaging and user experience. It validates project metadata and structures, preventing common mistakes. And, finally, it's very fast — uv sync on a new project (from uv init) is 10-30x faster than with other build backends.
To use uv as a build backend in an existing project, add uv_build to the [build-system] section in your pyproject.toml:
[build-system]
requires = ["uv_build>=0.7.19,<0.8.0"]
build-backend = "uv_build"
In a future release, it will replace hatchling as the default in uv init. As before, uv will remain compatible with all standards-compliant build backends.
See the python-build-standalone release for more details.
--universal pip compile (#14405)sys.prefix in cached environment keys to avoid --with collisions across projects (#14403)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.19/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.19/uv-installer.ps1 | iex"
Added arm64 Windows Python 3.11, 3.12, 3.13, and 3.14
Added arm64 Windows Python 3.11, 3.12, 3.13, and 3.14
These are not downloaded by default, since x86-64 Python has broader ecosystem support on Windows.
However, they can be requested with cpython-<version>-windows-aarch64.
ManagedPythonDownload::fetch_with_retry (#14378)python_version and python_full_version (#14271)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.18/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.18/uv-installer.ps1 | iex"
Apply build constraints when resolving --with dependencies
--with dependencies (#14340)UV_PYTHON_CACHE_DIR when empty (#14336)pyvenv.cfg version conflict (#14329)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.17/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.17/uv-installer.ps1 | iex"
See the `python-build-standalone` release notes for more details.
See the python-build-standalone release notes for more details.
~= is used as a Python version specifier without a patch version (#14008)requirements.txt (#14288)/simple component (#14251)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.16/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.16/uv-installer.ps1 | iex"
Consistently use Ordering::Relaxed for standalone atomic use cases
Ordering::Relaxed for standalone atomic use cases (#14190)--index (#14152)schema.json descriptions (#13693)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.15/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.15/uv-installer.ps1 | iex"
Add ROCm backends to --torch-backend
--torch-backend (#14172)--torch-backend (#14120)--torch-backend (#14119)[tool.uv.dependency-groups].mygroup.requires-python (#13735)requires-python (#14076)platform_machine marker for win_amd64 platform tag (#14041)dependency-groups from pyproject.tomls with no [project] (#13742)uv init --script (#14141)uv run (#14153)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.14/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.14/uv-installer.ps1 | iex"
Fix stability of uuid.getnode on 3.13
uuid.getnode on 3.13See the python-build-standalone release notes for more details.
uv python pin if not found (#13946)zstd and deflate to Accept-Encoding (#13982)uv python pin (#13944)uv add --group ... --script (#13997)llms.txt to uv (#13929)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.13/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.13/uv-installer.ps1 | iex"
Add uv python pin --rm to remove .python-version pins
uv python pin --rm to remove .python-version pins (#13860)excluded-newer (#13884)tool.uv.environments on resolution error (#13455)tool.uv.required-environments on resolution error (#13575)python pin error messages (#13862)uv sync, uv add and uv remove to prevent race conditions (#13869)--no-editable to uv export for pylock.toml (#13852).gitignore in project init files (#13855)gh auth login (#13850)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.12/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.12/uv-installer.ps1 | iex"
Better error message for version specifier with missing operator
reqwest and hyper-util to resolve connection reset errors over IPv6 (#13835)uv's binary's version when checking if it's up to date (#13840)SIGINT docs (#13787)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.11/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.11/uv-installer.ps1 | iex"
Add --show-extras to uv tool list
--show-extras to uv tool list (#13783)git username when using SSH authentication (#13799)/+simple (#13743)uv export (#13809)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.10/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.10/uv-installer.ps1 | iex"
The changes reverted in 0.7.8 have been restored.
The changes reverted in 0.7.8 have been restored.
See the
python-build-standalone release notes
for more details.
uvx (#13583)uvw as alias for uv without console window on Windows (#11786)uv python list (#13721)extends-environment key in the pyvenv.cfg file of an ephemeral environment (#13598)uv-python crate's manylinux submodule (#11131)Version display (#13643)uv cache clean (#13669)--all-packages (#13678)self update if global --offline is set (#13663)uv python install --reinstall (#13645)LC_ALL=C for git when checking git worktree (#13637)uv add --bounds to configure version constraints (#12946)exclude-newer date format for persistent configuration files (#13706).pre-commit-config.yaml (#10243)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.9/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.9/uv-installer.ps1 | iex"
We are reverting most of our Python changes from uv 0.7.6 and uv 0.7.7 due to a miscompilation that makes the Python interpreter behave incorrectly, r
We are reverting most of our Python changes from uv 0.7.6 and uv 0.7.7 due to
a miscompilation that makes the Python interpreter behave incorrectly, resulting
in spurious type-errors involving str. This issue seems to be isolated to
x86_64 Linux, and affected at least Python 3.12, 3.13, and 3.14.
The following changes that were introduced in those versions of uv are temporarily being reverted while we test and deploy a proper fix for the miscompilation:
libpython into the interpreter on Linux for a significant performance boostcurl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.8/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.8/uv-installer.ps1 | iex"
Work around third-party packages that (incorrectly) assume the interpreter is dynamically linking libpython
See the python-build-standalone release notes for more details.
uv version lock and sync (#13317)ldd in diagnostics to correctly refer to ld.so (#13552)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.7/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.7/uv-installer.ps1 | iex"
Add free-threaded Python on musl
libpython into the interpreter on Linux for a significant performance boostSee the
python-build-standalone release notes
for more details.
VIRTUAL_ENV_PROMPT value (#13501)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.6/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.6/uv-installer.ps1 | iex"
Support case-sensitive module discovery in the build backend
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.5/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.5/uv-installer.ps1 | iex"
Add more context to external errors
uv add (#13462)--raw-sources to --raw (#13348)self update is used to install an older version (#13340)uv self update if required uv version is newer (#13305)pylock.toml dependency entries (#13384).tgz parsing to respect true extension (#13382)pylock.toml in uv add -r (#13421)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.4/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.4/uv-installer.ps1 | iex"
Add --dry-run support to uv self update
--dry-run support to uv self update (#9829)--show-with to uv tool list to list packages included by --with (#13264)fs_err for paths in symlinking errors (#13303)python-downloads-json-url option for uv.toml to configure custom Python installations via JSON URL (#12974)musllinux_1_0 as a valid platform tag (#13289)uv run --with (#13283)uv run --with (#13284)--no-sync (#13287)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.3/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.3/uv-installer.ps1 | iex"
Improve trace log for retryable errors
uv version is used with project-specific flags but no project is found (#13203)clang in managed Python sysconfig (#13237)--project in uv version (#13230)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.2/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.2/uv-installer.ps1 | iex"
Revert fix handling of authentication when encountering redirects
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.1/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.1/uv-installer.ps1 | iex"
This release contains various changes that improve correctness and user experience, but could break some workflows; many changes have been marked as b
This release contains various changes that improve correctness and user experience, but could break some workflows; many changes have been marked as breaking out of an abundance of caution. We expect most users to be able to upgrade without making changes.
Update uv version to display and update project versions (#12349)
Previously, uv version displayed uv's version. Now, uv version will display or update the project's version. This interface was heavily requested and, after much consideration, we decided that transitioning the top-level command was the best option.
Here's a brief example:
$ uv init example
Initialized project `example` at `./example`
$ cd example
$ uv version
example 0.1.0
$ uv version --bump major
example 0.1.0 => 1.0.0
$ uv version --short
1.0.0
If used outside of a project, uv will fallback to showing its own version still:
$ uv version
warning: failed to read project: No `pyproject.toml` found in current directory or any parent directory
running `uv self version` for compatibility with old `uv version` command.
this fallback will be removed soon, pass `--preview` to make this an error.
uv 0.7.0 (4433f41c9 2025-04-29)
As described in the warning, --preview can be used to error instead:
$ uv version --preview
error: No `pyproject.toml` found in current directory or any parent directory
The previous functionality of uv version was moved to uv self version.
Avoid fallback to subsequent indexes on authentication failure (#12805)
When using the first-index strategy (the default), uv will stop searching indexes for a package once it is found on a single index. Previously, uv considered a package as "missing" from an index during authentication failures, such as an HTTP 401 or HTTP 403 (normally, missing packages are represented by an HTTP 404). This behavior was motivated by unusual responses from some package indexes, but reduces the safety of uv's index strategy when authentication fails. Now, uv will consider an authentication failure as a stop-point when searching for a package across indexes. The index.ignore-error-codes option can be used to recover the existing behavior, e.g.:
[[tool.uv.index]]
name = "pytorch"
url = "https://download.pytorch.org/whl/cpu"
ignore-error-codes = [401, 403]
Since PyTorch's indexes always return a HTTP 403 for missing packages, uv special-cases indexes on the pytorch.org domain to ignore that error code by default.
Require the command in uvx <name> to be available in the Python environment (#11603)
Previously, uvx would attempt to execute a command even if it was not provided by a Python package. For example, if we presume foo is an empty Python package which provides no command, uvx foo would invoke the foo command on the PATH (if present). Now, uv will error early if the foo executable is not provided by the requested Python package. This check is not enforced when --from is used, so patterns like uvx --from foo bash -c "..." are still valid. uv also still allows uvx foo where the foo executable is provided by a dependency of foo instead of foo itself, as this is fairly common for packages which depend on a dedicated package for their command-line interface.
Use index URL instead of package URL for keyring credential lookups (#12651)
When determining credentials for querying a package URL, uv previously sent the full URL to the keyring command. However, some keyring plugins expect to receive the index URL (which is usually a parent of the package URL). Now, uv requests credentials for the index URL instead. This behavior matches pip.
Remove --version from subcommands (#13108)
Previously, uv allowed the --version flag on arbitrary subcommands, e.g., uv run --version. However, the --version flag is useful for other operations since uv is a package manager. Consequently, we've removed the --version flag from subcommands — it is only available as uv --version.
Omit Python 3.7 downloads from managed versions (#13022)
Python 3.7 is EOL and not formally supported by uv; however, Python 3.7 was previously available for download on a subset of platforms.
Reject non-PEP 751 TOML files in install, compile, and export commands (#13120, #13119)
Previously, uv treated arbitrary .toml files passed to commands (e.g., uv pip install -r foo.toml or uv pip compile -o foo.toml) as requirements.txt-formatted files. Now, uv will error instead. If using PEP 751 lockfiles, use the standardized format for custom names instead, e.g., pylock.foo.toml.
Ignore arbitrary Python requests in version files (#12909)
uv allows arbitrary strings to be used for Python version requests, in which they are treated as an executable name to search for in the PATH. However, using this form of request in .python-version files is non-standard and conflicts with pyenv-virtualenv which writes environment names to .python-version files. In this release, uv will now ignore requests that are arbitrary strings when found in .python-version files.
Error on unknown dependency object specifiers (12811)
The [dependency-groups] entries can include "object specifiers", e.g. set-phasers-to = ... in:
[dependency-groups]
foo = ["pyparsing"]
bar = [{set-phasers-to = "stun"}]
However, the only current spec-compliant object specifier is include-group. Previously, uv would ignore unknown object specifiers. Now, uv will error.
Make --frozen and --no-sources conflicting options (#12671)
Using --no-sources always requires a new resolution and --frozen will always fail when used with it. Now, this conflict is encoded in the CLI options for clarity.
Treat empty UV_PYTHON_INSTALL_DIR and UV_TOOL_DIR as unset (#12907, #12905)
Previously, these variables were treated as set to the current working directory when set to an empty string. Now, uv will ignore these variables when empty. This matches uv's behavior for other environment variables which configure directories.
poetry-core as a uv init build backend option (#12781)pylock.toml (#13136)pyvenv.cfg version mismatch (#13027)pylock.toml (#13132)uvx --version (#13109)--no-binary et al) in pylock.toml (#13134)upload-time rather than upload_time in uv.lock (#13176)fish completions append >> to overwrite > (#13130)pylock.toml mentions where relevant (#13115)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.0/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.0/uv-installer.ps1 | iex"
Add PyTorch v2.7.0 to GPU backend
python (#13051)requires-python even if not listed on the index page (#13086)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.17/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.6.17/uv-installer.ps1 | iex"
Revert "Properly handle authentication for 302 redirect URLs"
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.16/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.6.16/uv-installer.ps1 | iex"
This release includes preliminary support for the pylock.toml file format, as standardized in PEP 751. pylock.toml is an alternative resolution output
This release includes preliminary support for the pylock.toml file format, as standardized in PEP 751. pylock.toml is an alternative resolution output format intended to replace requirements.txt (e.g., in the context of uv pip compile, whereby a "locked" requirements.txt file is generated from a set of input requirements). pylock.toml is standardized and tool-agnostic, such that in the future, pylock.toml files generated by uv could be installed by other tools, and vice versa.
As of this release, pylock.toml is supported in the following commands:
uv.lock to the pylock.toml format, run: uv export -o pylock.tomlpylock.toml file from a set of requirements, run: uv pip compile -o pylock.toml requirements.inpylock.toml file, run: uv pip sync pylock.toml or uv pip install -r pylock.tomluv pip compile (#13019)uv export support for PEP 751 (#12955)requirements.txt (verbatim) as a format on the CLI (#12957)UV_NO_EDITABLE environment variable to set --no-editable on all invocations (#12773)pylock.toml to uv pip install and uv pip sync (#12992)SIGINT to child processes (#13018)uv.lock (#12968)which git in uv init (#12893)--dry-run with --locked / --frozen for uv sync (#12778)uv export (#12958)uv init resilient against broken git (#12895)uv run --with dependencies (#12882)uv tool and PEP723 scripts. (#12842)uvx binary when searching for uv binary (#12923)SourceNotAllowed error message during Python discovery (#13012)config-settings with example in docs (#12947)PythonDownloadRequest parsing for partial keys (#12925)uv-pep440 (#12836)uv run (#13017)CC and CCX entries in sysconfig for cross-compiled aarch64 Python distributions (#12239)UV_STACK_SIZE (#12839)uv python list (#12915)subdirectory to Direct URL for local directories (#12971)uv python install (#12194)uv init (#12870)uv python list --only-downloads and --only-installed (#12916)--locked to uv sync in GitHub Actions guide (#12819)"all" default-groups setting documentation (#12963)--frozen with --locked in Docker integration guide (#12818)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.15/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.6.15/uv-installer.ps1 | iex"
The following Python versions have been added:
The following Python versions have been added:
See the python-build-standalone release notes for more details.
uv-build and uv_build aliases to uv init --build-backend (#12776)environment.yml files (#12669)tool.uv.sources is set in system-level configuration file (#12757)uv init (#12756)uv pip sync (#12683)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.14/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.6.14/uv-installer.ps1 | iex"
Add --show-version to uv python find
--show-version to uv python find (#12376)--no-config warning from uv pip compile and uv pip sync (#12642)PATH when searching for Python interpreters (#12367)SCRIPT_PATH in relocatable activation script (#12672)UV_PYTHON_DOWNLOADS_JSON_URL to set custom managed python sources (#10939)pyproject.toml files in uv pip compile -o (#12673)--offline flag for Git operations (#12619)uv export with conflicts (#12726)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.13/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.6.13/uv-installer.ps1 | iex"
Report the queried executable path in uv python list
uv python list (#12628)authenticate when using explicit = true (#12631)uv add and uv remove (#12586)python-platform in settings files (#12592)uv build to package = false (#12608)authenticate = always documentation (#12498)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.12/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.6.12/uv-installer.ps1 | iex"
Add dependents ("via ..." comments) in uv export command
uv export command (#12350)--find-links-style "flat" indexes in [[tool.uv.index]] (#12407)-q and -qq (#12300)UV_PROJECT environment to set project directory. (#12327)requires-python to script blocks (#12517)uv sync (#12502)uv tree --only-group (#12560)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.11/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.6.11/uv-installer.ps1 | iex"
Add support for Python version requests in uv python list
uv sync --check flag (#12342)uv python list (#12375).env files in uv tool run (#12386)python find --script (#11891)--torch-backend is enabled (#12385)--no-build (#12314)--find-links entries for pinned indexes (#12396)--exclude-newer (#12299)requirements.txt (#12354)pip commands (#12470)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.10/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.6.10/uv-installer.ps1 | iex"
Use keyring --mode creds when authenticate = "always"
keyring --mode creds when authenticate = "always" (#12316)authenticate = "always" (#12313)UV_MANAGED_PYTHON flags (#12345)--torch-backend to the PyTorch guide (#12317)#keyring-provider references in alternative index docs (#12315)--directory path in examples (#12165)--torch-backend=auto (#12070)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.9/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.6.9/uv-installer.ps1 | iex"
Add support for enabling all groups by default with default-groups = "all"
default-groups = "all" (#12289)--managed-python and --no-managed-python flags for toggling Python preferences (#12246)requires-python (#12278)Planner::build (#12281)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.8/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.6.8/uv-installer.ps1 | iex"
_If encountering inconsistent wheel version errors, see https://github.com/astral-sh/uv/issues/12254_.
If encountering inconsistent wheel version errors, see https://github.com/astral-sh/uv/issues/12254.
CXX compiler on LinuxSee the python-build-standalone release notes for more details.
-c constraints in uv add (#12209)--global default version in uv python pin (#12115)uv pip install (#12176)--group flag to uv pip install and uv pip compile (#11686)File struct (#12159)src to default cache keys (#12062)python pin --global creates parent directories if missing (#12180)uv sync --script (#12158)activate.bat output (#12160)BaseClientBuild to accept custom proxies (#12232)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.7/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.6.7/uv-installer.ps1 | iex"
Add support for dynamic musl Python distributions on x86-64 Linux
See the python-build-standalone release notes for more details.
--marker flag to uv add (#12012)[index].authenticate allowing authentication to be required on an index (#11896)uv tool run (#12079)include-group (#12005)uv add failed (#12106)uv-auth (#12077)PATH updated when the export is commented in the shellrc (#12043)uv publish retry on network failures (#12041)uv publish to comply with WSGI PyPI server constraints (#12111)uv python install --reinstall when the version was not previously installed (#12124)uv_build invocation (#12058)python-versions.md (#12112)[index].authenticate docs (#12102)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.6/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.6.6/uv-installer.ps1 | iex"
Allow quotes around command-line options in requirement.txt files
requirement.txt files (#11644)uv lock --script (#11717).env files in UV_ENV_FILE (#11665)SmallString on Hashes (#11756)Box for Yanked on File (#11755)SmallString for the Yanked enum (#11715)uv add (#11716)uv export (#11643)uv build (#11593)cache-keys setting (#11669)curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.3/uv-installer.sh | sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.6.3/uv-installer.ps1 | iex"
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →