41 KiB
Changelog 0.7.x
0.7.0
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.
Breaking changes
-
Update
uv versionto display and update project versions (#12349)Previously,
uv versiondisplayed uv's version. Now,uv versionwill 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.0If 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,
--previewcan be used to error instead:$ uv version --preview error: No `pyproject.toml` found in current directory or any parent directoryThe previous functionality of
uv versionwas moved touv self version. -
Avoid fallback to subsequent indexes on authentication failure (#12805)
When using the
first-indexstrategy (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. Theindex.ignore-error-codesoption 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.orgdomain to ignore that error code by default. -
Require the command in
uvx <name>to be available in the Python environment (#11603)Previously,
uvxwould attempt to execute a command even if it was not provided by a Python package. For example, if we presumefoois an empty Python package which provides no command,uvx foowould invoke thefoocommand on thePATH(if present). Now, uv will error early if thefooexecutable is not provided by the requested Python package. This check is not enforced when--fromis used, so patterns likeuvx --from foo bash -c "..."are still valid. uv also still allowsuvx foowhere thefooexecutable is provided by a dependency offooinstead offooitself, 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
keyringcommand. 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 matchespip. -
Remove
--versionfrom subcommands (#13108)Previously, uv allowed the
--versionflag on arbitrary subcommands, e.g.,uv run --version. However, the--versionflag is useful for other operations since uv is a package manager. Consequently, we've removed the--versionflag from subcommands — it is only available asuv --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
.tomlfiles passed to commands (e.g.,uv pip install -r foo.tomloruv pip compile -o foo.toml) asrequirements.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-versionfiles is non-standard and conflicts withpyenv-virtualenvwhich writes environment names to.python-versionfiles. In this release, uv will now ignore requests that are arbitrary strings when found in.python-versionfiles. -
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
--frozenand--no-sourcesconflicting options (#12671)Using
--no-sourcesalways requires a new resolution and--frozenwill always fail when used with it. Now, this conflict is encoded in the CLI options for clarity. -
Treat empty
UV_PYTHON_INSTALL_DIRandUV_TOOL_DIRas 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.
Enhancements
- Disallow mixing requirements across PyTorch indexes (#13179)
- Add optional managed Python archive download cache (#12175)
- Add
poetry-coreas auv initbuild backend option (#12781) - Show tag hints when failing to find a compatible wheel in
pylock.toml(#13136) - Report Python versions in
pyvenv.cfgversion mismatch (#13027)
Bug fixes
- Avoid erroring on omitted wheel-only packages in
pylock.toml(#13132) - Fix display name for
uvx --version(#13109) - Restore handling of authentication when encountering redirects (#13050)
- Respect build options (
--no-binaryet al) inpylock.toml(#13134) - Use
upload-timerather thanupload_timeinuv.lock(#13176)
Documentation
- Changed
fishcompletions append>>to overwrite>(#13130) - Add
pylock.tomlmentions where relevant (#13115) - Add ROCm example to the PyTorch guide (#13200)
- Upgrade PyTorch guide to CUDA 12.8 and PyTorch 2.7 (#13199)
0.7.1
Enhancement
- Add support for BLAKE2b-256 (#13204)
Bugfix
- Revert fix handling of authentication when encountering redirects (#13215)
0.7.2
Enhancements
- Improve trace log for retryable errors (#13228)
- Use "error" instead of "warning" for self-update message (#13229)
- Error when
uv versionis used with project-specific flags but no project is found (#13203)
Bug fixes
- Fix incorrect virtual environment invalidation for pre-release Python versions (#13234)
- Fix patching of
clangin managed Python sysconfig (#13237) - Respect
--projectinuv version(#13230)
0.7.3
Enhancements
- Add
--dry-runsupport touv self update(#9829) - Add
--show-withtouv tool listto list packages included by--with(#13264) - De-duplicate fetched index URLs (#13205)
- Support more zip compression formats: bzip2, lzma, xz, zstd (#13285)
- Add support for downloading GraalPy (#13172)
- Improve error message when a virtual environment Python symlink is broken (#12168)
- Use
fs_errfor paths in symlinking errors (#13303) - Minify and embed managed Python JSON at compile time (#12967)
Preview features
- Build backend: Make preview default and add configuration docs (#12804)
- Build backend: Allow escaping in globs (#13313)
- Build backend: Make builds reproducible across operating systems (#13171)
Configuration
- Add
python-downloads-json-urloption foruv.tomlto configure custom Python installations via JSON URL (#12974)
Bug fixes
- Check nested IO errors for retries (#13260)
- Accept
musllinux_1_0as a valid platform tag (#13289) - Fix discovery of pre-release managed Python versions in range requests (#13330)
- Respect locked script preferences in
uv run --with(#13283) - Retry streaming downloads on broken pipe errors (#13281)
- Treat already-installed base environment packages as preferences in
uv run --with(#13284) - Avoid enumerating sources in errors for path Python requests (#13335)
- Avoid re-creating virtual environment with
--no-sync(#13287)
Documentation
0.7.4
Enhancements
- Add more context to external errors (#13351)
- Align indentation of long arguments (#13394)
- Preserve order of dependencies which are sorted naively (#13334)
- Align progress bars by largest name length (#13266)
- Reinstall local packages in
uv add(#13462) - Rename
--raw-sourcesto--raw(#13348) - Show 'Downgraded' when
self updateis used to install an older version (#13340) - Suggest
uv self updateif required uv version is newer (#13305) - Add 3.14 beta images to uv Docker images (#13390)
- Add comma after "i.e." in Conda environment error (#13423)
- Be more precise in unpinned packages warning (#13426)
- Fix detection of sorted dependencies when include-group is used (#13354)
- Fix display of HTTP responses in trace logs for retry of errors (#13339)
- Log skip reasons during Python installation key interpreter match checks (#13472)
- Redact credentials when displaying URLs (#13333)
Bug fixes
- Avoid erroring on
pylock.tomldependency entries (#13384) - Avoid panics for cannot-be-a-base URLs (#13406)
- Ensure cached realm credentials are applied if no password is found for index URL (#13463)
- Fix
.tgzparsing to respect true extension (#13382) - Fix double self-dependency (#13366)
- Reject
pylock.tomlinuv add -r(#13421) - Retain dot-separated wheel tags during cache prune (#13379)
- Retain trailing comments after PEP 723 metadata block (#13460)
Documentation
Preview features
- Build backend: Normalize glob paths (#13465)
0.7.5
Bug fixes
- Support case-sensitive module discovery in the build backend (#13468)
- Bump Simple cache bucket to v16 (#13498)
- Don't error when the script is too short for the buffer (#13488)
- Add missing word in "script not supported" error (#13483)
0.7.6
Python
- Add Python 3.14 on musl
- Add free-threaded Python on musl
- Add Python 3.14.0a7
- Statically link
libpythoninto the interpreter on Linux for a significant performance boost
See the
python-build-standalone release notes
for more details.
Enhancements
- Improve compatibility of
VIRTUAL_ENV_PROMPTvalue (#13501) - Bump MSRV to 1.85 and Edition 2024 (#13516)
Bug fixes
- Respect default extras in uv remove (#13380)
Documentation
- Fix PowerShell code blocks (#13511)
0.7.7
Python
- Work around third-party packages that (incorrectly) assume the interpreter is dynamically linking libpython
- Allow the experimental JIT to be enabled at runtime on Python 3.13 and 3.14 on macOS on aarch64 aka Apple Silicon
See the
python-build-standalone release notes
for more details.
Bug fixes
- Make
uv versionlock and sync (#13317) - Fix references to
lddin diagnostics to correctly refer told.so(#13552)
Documentation
- Clarify adding SSH Git dependencies (#13534)
0.7.8
Python
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:
- Add Python 3.14 on musl
- free-threaded Python on musl
- Add Python 3.14.0a7
- Statically link
libpythoninto the interpreter on Linux for a significant performance boost
Documentation
- Remove misleading line in pin documentation (#13611)
0.7.9
Python
The changes reverted in 0.7.8 have been restored.
See the
python-build-standalone release notes
for more details.
Enhancements
- Improve obfuscation of credentials in URLs (#13560)
- Allow running non-default Python implementations via
uvx(#13583) - Add
uvwas alias foruvwithout console window on Windows (#11786) - Allow discovery of x86-64 managed Python builds on macOS (#13722)
- Differentiate between implicit vs explicit architecture requests (#13723)
- Implement ordering for Python architectures to prefer native installations (#13709)
- Only show the first match per platform (and architecture) by default in
uv python list(#13721) - Write the path of the parent environment to an
extends-environmentkey in thepyvenv.cfgfile of an ephemeral environment (#13598) - Improve the error message when libc cannot be found, e.g., when using the distroless containers (#13549)
Performance
- Avoid rendering info log level (#13642)
- Improve performance of
uv-pythoncrate's manylinux submodule (#11131) - Optimize
Versiondisplay (#13643) - Reduce number of reference-checks for
uv cache clean(#13669)
Bug fixes
- Avoid reinstalling dependency group members with
--all-packages(#13678) - Don't fail direct URL hash checking with dependency metadata (#13736)
- Exit early on
self updateif global--offlineis set (#13663) - Fix cases where the uv lock is incorrectly marked as out of date (#13635)
- Include pre-release versions in
uv python install --reinstall(#13645) - Set
LC_ALL=Cfor git when checking git worktree (#13637) - Avoid rejecting Windows paths for remote Python download JSON targets (#13625)
Preview
- Add
uv add --boundsto configure version constraints (#12946)
Documentation
- Add documentation about Python versions to Tools concept page (#7673)
- Add example of enabling Dependabot (#13692)
- Fix
exclude-newerdate format for persistent configuration files (#13706) - Quote versions variables in GitLab documentation (#13679)
- Update Dependabot support status (#13690)
- Explicitly specify to add a new repo entry to the repos list item in the
.pre-commit-config.yaml(#10243) - Add integration with marimo guide (#13691)
- Add pronunciation to README (#5336)
0.7.10
Enhancements
- Add
--show-extrastouv tool list(#13783) - Add dynamically generated sysconfig replacement mappings (#13441)
- Add data locations to install wheel logs (#13797)
Bug fixes
- Avoid redaction of placeholder
gitusername when using SSH authentication (#13799) - Propagate credentials to files on devpi indexes ending in
/+simple(#13743) - Restore retention of credentials for direct URLs in
uv export(#13809)
0.7.11
Python
- Add Python 3.14.0b1
- Add Python 3.13.4
- Add Python 3.12.11
- Add Python 3.11.13
- Add Python 3.10.18
- Add Python 3.9.23
Enhancements
- Add Pyodide support (#12731)
- Better error message for version specifier with missing operator (#13803)
Bug fixes
- Downgrade
reqwestandhyper-utilto resolve connection reset errors over IPv6 (#13835) - Prefer
uv's binary's version when checking if it's up to date (#13840)
Documentation
- Use "terminal driver" instead of "shell" in
SIGINTdocs (#13787)
0.7.12
Enhancements
- Add
uv python pin --rmto remove.python-versionpins (#13860) - Don't hint at versions removed by
excluded-newer(#13884) - Add hint to use
tool.uv.environmentson resolution error (#13455) - Add hint to use
tool.uv.required-environmentson resolution error (#13575) - Improve
python pinerror messages (#13862)
Bug fixes
- Lock environments during
uv sync,uv addanduv removeto prevent race conditions (#13869) - Add
--no-editabletouv exportforpylock.toml(#13852)
Documentation
- List
.gitignorein project init files (#13855) - Move the pip interface documentation into the concepts section (#13841)
- Remove the configuration section in favor of concepts / reference (#13842)
- Update Git and GitHub Actions docs to mention
gh auth login(#13850)
Preview
- Fix directory glob traversal fallback preventing exclusion of all files (#13882)
0.7.13
Python
- Add Python 3.14.0b2
- Add Python 3.13.5
- Fix stability of
uuid.getnodeon 3.13
See the
python-build-standalone release notes
for more details.
Enhancements
- Download versions in
uv python pinif not found (#13946) - Use TTY detection to determine if SIGINT forwarding is enabled (#13925)
- Avoid fetching an exact, cached Git commit, even if it isn't locked (#13748)
- Add
zstdanddeflatetoAccept-Encoding(#13982) - Build binaries for riscv64 (#12688)
Bug fixes
- Check if relative URL is valid directory before treating as index (#13917)
- Ignore Python discovery errors during
uv python pin(#13944) - Do not allow
uv add --group ... --script(#13997)
Preview changes
- Build backend: Support namespace packages (#13833)
Documentation
- Add 3.14 to the supported platform reference (#13990)
- Add an
llms.txtto uv (#13929) - Add supported macOS version to the platform reference (#13993)
- Update platform support reference to include Python implementation list (#13991)
- Update pytorch.md (#13899)
- Update the CLI help and reference to include references to the Python bin directory (#13978)
0.7.14
Enhancements
- Add XPU to
--torch-backend(#14172) - Add ROCm backends to
--torch-backend(#14120) - Remove preview label from
--torch-backend(#14119) - Add
[tool.uv.dependency-groups].mygroup.requires-python(#13735) - Add auto-detection for AMD GPUs (#14176)
- Show retries for HTTP status code errors (#13897)
- Support transparent Python patch version upgrades (#13954)
- Warn on empty index directory (#13940)
- Publish to DockerHub (#14088)
Performance
- Make cold resolves about 10% faster (#14035)
Bug fixes
- Don't use walrus operator in interpreter query script (#14108)
- Fix handling of changes to
requires-python(#14076) - Fix implied
platform_machinemarker forwin_amd64platform tag (#14041) - Only update existing symlink directories on preview uninstall (#14179)
- Serialize Python requests for tools as canonicalized strings (#14109)
- Support netrc and same-origin credential propagation on index redirects (#14126)
- Support reading
dependency-groupsfrom pyproject.tomls with no[project](#13742) - Handle an existing shebang in
uv init --script(#14141) - Prevent concurrent updates of the environment in
uv run(#14153) - Filter managed Python distributions by platform before querying when included in request (#13936)
Documentation
- Replace cuda124 with cuda128 (#14168)
- Document the way member sources shadow workspace sources (#14136)
- Sync documented PyTorch integration index for CUDA and ROCm versions from PyTorch website (#14100)
0.7.15
Enhancements
- Consistently use
Ordering::Relaxedfor standalone atomic use cases (#14190) - Warn on ambiguous relative paths for
--index(#14152) - Skip GitHub fast path when rate-limited (#13033)
- Preserve newlines in
schema.jsondescriptions (#13693)
Bug fixes
- Add check for using minor version link when creating a venv on Windows (#14252)
- Strip query parameters when parsing source URL (#14224)
Documentation
- Add a link to PyPI FAQ to clarify what per-project token is (#14242)
Preview features
- Allow symlinks in the build backend (#14212)
0.7.16
Python
- Add Python 3.14.0b3
See the
python-build-standalone release notes
for more details.
Enhancements
- Include path or URL when failing to convert in lockfile (#14292)
- Warn when
~=is used as a Python version specifier without a patch version (#14008)
Preview features
- Ensure preview default Python installs are upgradeable (#14261)
Performance
- Share workspace cache between lock and sync operations (#14321)
Bug fixes
- Allow local indexes to reference remote files (#14294)
- Avoid rendering desugared prefix matches in error messages (#14195)
- Avoid using path URL for workspace Git dependencies in
requirements.txt(#14288) - Normalize index URLs to remove trailing slash (#14245)
- Respect URL-encoded credentials in redirect location (#14315)
- Lock the source tree when running setuptools, to protect concurrent builds (#14174)
Documentation
- Note that GCP Artifact Registry download URLs must have
/simplecomponent (#14251)
0.7.17
Bug fixes
- Apply build constraints when resolving
--withdependencies (#14340) - Drop trailing slashes when converting index URL from URL (#14346)
- Ignore
UV_PYTHON_CACHE_DIRwhen empty (#14336) - Fix error message ordering for
pyvenv.cfgversion conflict (#14329)
0.7.18
Python
- 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.
See the python-build-standalone release for more details.
Enhancements
- Keep track of retries in
ManagedPythonDownload::fetch_with_retry(#14378) - Reuse build (virtual) environments across resolution and installation (#14338)
- Improve trace message for cached Python interpreter query (#14328)
- Use parsed URLs for conflicting URL error message (#14380)
Preview features
- Ignore invalid build backend settings when not building (#14372)
Bug fixes
- Fix equals-star and tilde-equals with
python_versionandpython_full_version(#14271) - Include the canonical path in the interpreter query cache key (#14331)
- Only drop build directories on program exit (#14304)
- Error instead of panic on conflict between global and subcommand flags (#14368)
- Consistently normalize trailing slashes on URLs with no path segments (#14349)
Documentation
- Add instructions for publishing to JFrog's Artifactory (#14253)
- Edits to the build backend documentation (#14376)
0.7.19
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.
Python
- Add PGO distributions of Python for aarch64 Linux, which are more optimized for better performance
See the python-build-standalone release for more details.
Enhancements
- Ignore Python patch version for
--universalpip compile (#14405) - Update the tilde version specifier warning to include more context (#14335)
- Clarify behavior and hint on tool install when no executables are available (#14423)
Bug fixes
- Make project and interpreter lock acquisition non-fatal (#14404)
- Includes
sys.prefixin cached environment keys to avoid--withcollisions across projects (#14403)
Documentation
- Add a migration guide from pip to uv projects (#12382)
0.7.20
Python
- Add Python 3.14.0b4
- Add zstd support to Python 3.14 on Unix (it already was available on Windows)
- Add PyPy 7.3.20 (for Python 3.11.13)
See the PyPy and
python-build-standalone
release notes for more details.
Enhancements
- Add
--workspaceflag touv add(#14496) - Add auto-detection for Intel GPUs (#14386)
- Drop trailing arguments when writing shebangs (#14519)
- Add debug message when skipping Python downloads (#14509)
- Add support for declaring multiple modules in namespace packages (#14460)
Bug fixes
- Revert normalization of trailing slashes on index URLs (#14511)
- Fix forced resolution with all extras in
uv version(#14434) - Fix handling of pre-releases in preferences (#14498)
- Remove transparent variants in
uv-extractto enable retries (#14450)
Rust API
- Add method to get packages involved in a
NoSolutionError(#14457) - Make
ErrorTreeforNoSolutionErrorpublic (#14444)
Documentation
- Finish incomplete sentence in pip migration guide (#14432)
- Remove
cache-dependency-globexamples forsetup-uv(#14493) - Remove
uv pip syncsuggestion withpyproject.toml(#14510) - Update documentation for GitHub to use
setup-uv@v6(#14490)
0.7.21
Python
- Restore the SQLite
fts4,fts5,rtree, andgeopolyextensions on macOS and Linux
See the
python-build-standalone release notes
for more details.
Enhancements
- Add
--python-platformtouv sync(#14320) - Support pre-releases in
uv version --bump(#13578) - Add
-wshorthand for--with(#14530) - Add an exception handler on Windows to display information on crash (#14582)
- Add hint when Python downloads are disabled (#14522)
- Add
UV_HTTP_RETRIESto customize retry counts (#14544) - Follow leaf symlinks matched by globs in
cache-key(#13438) - Support parent path components (
..) in globs incache-key(#13469) - Improve
cache-keyperformance (#13469)
Preview features
- Add
uv sync --output-format json(#13689)
Bug fixes
- Do not re-resolve with a new Python version in
uv toolif it is incompatible with--python(#14606)
Documentation
- Document how to nest dependency groups with
include-group(#14539) - Fix repeated word in Pyodide doc (#14554)
- Update CONTRIBUTING.md with instructions to format Markdown files via Docker (#14246)
- Fix version number for
setup-python(#14533)
0.7.22
Python
- Upgrade GraalPy to 24.2.2
See the GraalPy release notes for more details.
Configuration
- Add
UV_COMPILE_BYTECODE_TIMEOUTenvironment variable (#14369) - Allow users to override index
cache-controlheaders (#14620) - Add
UV_LIBCto override libc selection in multi-libc environment (#14646)
Bug fixes
- Fix
--all-archeswhen paired with--only-downloads(#14629) - Skip Windows Python interpreters that return a broken MSIX package code (#14636)
- Warn on invalid
uv.tomlwhen provided via direct path (#14653) - Improve async signal safety in Windows exception handler (#14619)
Documentation
- Mention the
revisionin the lockfile versioning doc (#14634) - Move "Conflicting dependencies" to the "Resolution" page (#14633)
- Rename "Dependency specifiers" section to exclude PEP 508 reference (#14631)
- Suggest
uv cache cleanprior to--reinstall(#14659)