Released on 2026-10-26.
- Accept an empty
UV_RUN_RECURSION_DEPTHas zero and report invalid values consistently (#22814) - Explain how to add project metadata when
uv initfinds apyproject.tomlwithout a[project]table (#22916)
- Add CPython 3.11.18, 3.12.16, 3.13.18, 3.14.10, and 3.15.2 (#22938)
- Detect NVIDIA GPU capabilities when selecting compatible wheel variants with
wheel-variants(#22690) - Nest each module's owners in an object in
uv workspace metadataoutput (#22638) - Report the unsupported properties required by an incompatible wheel variant (#22719)
- Reduce peak memory use when resolving large workspaces (#22860, #22863, #22864, #22866, #22870)
- Reduce peak memory use when locking or upgrading large projects (#22833, #22834)
- Speed up redirected output from
uv exportanduv pip compile(#22840) - Reuse cached or active environments when running PEP 723 scripts without dependencies (#21458)
- Reduce parsing overhead for build dependency and build backend settings (#22848, #22871, #22879, #22884)
- Reduce parsing overhead for project sources and workspace references (#22880, #22883)
- Reduce parsing overhead for cache, exclusion, cutoff, and preview settings (#22876, #22877, #22878, #22887)
- Reduce PyPI metadata parsing overhead (#22874, #22875)
- Speed up parsing tool receipt requirements (#22885)
- Prevent
uv run --active --scriptanduv sync --active --scriptfrom deleting non-virtual-environment directories (#21464) - Use
AMD64forplatform_machinewhen resolving for x86-64 Windows (#22935) - Preserve free-threaded and other non-default variants in
uv python upgrade(#22836) - Allow
uv init --no-packageanduv init --scriptwhenUV_INIT_BUILD_BACKENDis set (#22907) - Prevent panics when rendering containment markers with local versions (#22815)
- Update the Docker guide and reproduction examples to use uv 0.13.5 (#22867)
Released on 2026-10-21.
Following uv 0.13.4, which removed the affected eMudhra/emSign root from uv's own certificate store, this release updates the latest managed CPython builds for 3.11 and newer to python-build-standalone 20261021, including the CPython 3.15.1, 3.14.9, and 3.13.17 security patch releases. These builds include pip 26.2.2 both preinstalled in the managed interpreter and bundled with ensurepip, which installs pip by default when you run python -m venv. Both copies use certifi 2026.10.19, which removes the same affected root. After upgrading uv, run uv python upgrade to install the updated builds. Virtual environments pinned to an older Python patch version do not switch to the updated interpreter automatically. Upgrade pip separately in existing virtual environments.
Please note upstream CPython 3.9 and 3.10 still bundle pip releases whose certificate bundles trust the affected eMudhra/emSign root. We recommend migrating off of those versions and will no longer be releasing Docker images with uv installed for EOL Python versions.
- Report incompatible self-dependencies directly in resolution errors (#21845)
- Add CPython 3.15.1, 3.14.9, and 3.13.17 (#22802)
- Select and rank wheel variants with no required properties or properties from PEP 850 static providers in platform-specific resolutions with
wheel-variants(#22535, #22536, #22687, #22688)
- Reduce peak memory use when resolving dependencies across multiple environments (#22769, #22770, #22784)
- Speed up exports with complex transitive extras by resolving activation across the dependency graph (#22751)
- Reduce uv's binary size by keeping additional error formatters out of line (#22775)
- Reduce overhead when parsing custom build cache keys (#22749)
- Lock packages distributed only as Android wheels without a source distribution (#22806)
- Export optional dependencies correctly when transitive extras are activated through different or incompatible environment paths (#22751)
- Reject invalid custom build cache keys instead of silently falling back to the defaults (#22749)
- Reject certificate chains containing compromised eMudhra intermediate keys via
rustls-webpki0.103.16 (#22777) - Stop publishing uv Docker images based on Python 3.9 and 3.10 images that no longer receive upstream updates (#22773)
Released on 2026-10-20.
- Validate PEP 825 variant metadata and treat package versions with invalid metadata as unavailable under
wheel-variants(#22512)
- Update the bundled Mozilla root certificates via
webpki-root-certs1.0.10 (#22760)
Released on 2026-10-20.
- Avoid severe
uv exportslowdowns in dependency graphs with extras (#22750)
Released on 2026-10-19.
- Report all installed packages in
uv workspace metadata, including packages outside the selected resolution (#22395) - Include supported environment restrictions when exporting
pylock.toml(#22596) - Retry dropped GET and HEAD requests when fetching package and index data (#22672)
- Preserve encoding declarations in wheel data scripts that require shell launchers (#22526)
- Show causes and hints when
uv python find --scriptcannot discover an interpreter, including with-q(#22549) - Print valid ksh activation instructions and support non-relocatable environments under OpenBSD-derived ksh (#22538, #22572)
- Allow PEP 508 direct URLs, including Mercurial and extensionless archive URLs, in uv-build's
[build-system].requiresvalidation (#22577)
- Add PyPy 3.11.17 and 3.12.15 (#22578)
- Avoid exponential work when simplifying, traversing, and exporting complex dependency markers (#22608, #22615, #22651, #22674)
- Reduce the time and memory used to parse and store complex dependency markers (#22675, #22676, #22681)
- Reduce resolver memory use for large dependency graphs, forks, extras, and dependency groups (#22565, #22625)
- Speed up project discovery in large workspaces by caching member names (#22635)
- Reduce uv's binary size and speed up CycloneDX exports (#22431)
- Reduce
uv-buildbinary size, including Linux x86_64 wheels (#22539, #22573) - Reduce allocations when parsing TOML (#22679)
- Respect
--exclude-newerwhen a newer wheel for the selected source distribution is already cached (#22685) - Prevent URL credentials from leaking through diagnostics or persisted metadata (#22600, #22601, #22617, #22622, #22646)
- Keep separate cache entries for signed
--find-linksURLs that differ only in sensitive query values (#22630) - Honor PEP 751 environment restrictions when installing or syncing from
pylock.toml(#22594) - Use configured credentials before prompting during
uv publish, and avoid prompting when no upload occurs (#22593) - Match recursive build globs against complete file paths and ignore invalid license symlinks (#22581, #22583)
- Return an error for invalid
uv pip compile --python-versionvalues instead of panicking (#22727) - Reject invalid
pylock.tomloutput filenames before resolution instead of panicking (#22725) - Avoid panicking during repeated resolution conflicts involving fixed-priority packages (#22589)
- Create version aliases correctly when installing managed Python into a relative directory (#22547)
- Show incompatibilities from failing
uv pip checkinvocations with-q(#22544) - Treat logically equivalent dependency markers as equal regardless of construction order (#22680)
- Require the opt-in
unsafe-urlfeature to use rawurl::UrlAPIs inuv-pep508(#22623)
- Clarify credential lookup, environment synchronization, managed Python, and integration guidance (#22542)
- Use stable
sh.astral.*signing identifiers for macOS binaries (#22648)
Released on 2026-10-14.
- Ignore
Requires-Pythonupper bounds inuv pip checkanduv pip install --strict, consistent with resolution (#22500) - Support Linux SPARC by falling back when filesystem cloning and detailed cache accounting are unavailable (#22463)
- Report missing trusted hashes in resolution errors (#22241)
- Add CPython 3.16.0a1 (#22527)
- Allow
uv tool upgradeto upgrade installed tools whentool-install-locksis enabled (#22498) - Add preliminary support for parsing PEP 825 variant labels in wheel filenames with
wheel-variants(#22039)
- Reduce uv's binary size (#22429, #22430, #22432)
- Speed up Simple API parsing (#22429)
- Reduce package metadata parsing overhead (#22239)
- Prevent tool and managed Python uninstalls from deleting unrelated files beside their storage directories (#22495)
- Restore support for source distributions containing hard links or full-length tar user or group names (#22516, #22522)
- Preserve device files and FIFOs used as
uv pip compileoruv exportoutput destinations (#22496) - Fix
sys._base_executabledetection for environments created from symlinked interpreters (#22520) - Prevent concurrent readers from observing partially written lockfiles, Python version files, or managed Python sysconfig files (#22399, #22402, #22403)
- Serialize concurrent project commands that reach the same environment through real and symlinked paths (#22390)
- Prevent installs, syncs, and environment creation from failing when they race with
uv cache clean(#22387) - Prevent concurrent tool installations from corrupting an environment when the last tool is uninstalled (#22391)
- Persist changed upgrade settings even when
uv tool upgradeleaves the tool version unchanged (#22499) - Reuse environments with installed Git dependencies pinned to full commit hashes without resolving again (#22464)
- Explain how to select an emulated Python interpreter on Windows ARM64 when native wheels are unavailable (#22424)
- Fix the
.netrcformat documentation link (#22514)
- Publish Python 3.15-based uv Docker images under stable tags (#22503)
Released on 2026-10-09.
uv 0.13.0 makes Python 3.15 the default stable Python version. We've also included several breaking changes to improve correctness, performance, and compatibility, described below.
We expect most users to be able to upgrade without making changes.
While not a breaking change, this release also updates the format of many of uv's cache entries to improve performance. uv may download or rebuild dependencies after upgrading, because some cached entries from earlier versions cannot be reused. Multiple versions of uv can still safely share the same cache directory.
There are no breaking changes to the configuration of the uv build backend. If your [build-system] table includes an upper bound on uv_build, update it to allow uv_build 0.13, e.g., uv_build>=0.13.0,<0.14.
-
Use Python 3.15 as the default stable version
The default stable Python version has changed from 3.14 to 3.15. This affects Python downloads when no version is requested or pinned, e.g., when running
uv python install.uv continues to use compatible Python installations that are already present. For example,
uv venvcan still use an installed Python 3.14. If no suitable interpreter is installed and automatic downloads are enabled, commands such asuv venvanduvx pythoncan now download Python 3.15.You can opt out of this behavior by requesting Python 3.14 explicitly, e.g.,
uv venv --python 3.14. For projects, useuv python pin 3.14to record the version in.python-version. -
Honor
--require-hashesin included constraints files (#22275)Previously, uv ignored
--require-hashesin constraints files included with-cfrom a requirements file. Now, uv honors the directive and requires hashes for all requirements in the installation. Installs that previously succeeded can now fail if a requirement is missing a hash.You cannot opt out while the directive is present. Add the missing hashes to your requirements, or remove the
--require-hashesdirective from the included constraints file if hash checking is not intended. -
Prefer native Python on Windows ARM64 (#22100)
Previously, ARM64 builds of uv preferred emulated
x86_64Python installations because native wheel support was limited. Now, uv prefers native ARM64 (aarch64) interpreters across Python versions.This follows similar changes in CPython, the official Windows Python install manager, and GitHub's actions/setup-python.
When a native interpreter is unavailable, uv continues to fall back to
x86_64, then 32-bitx86.You can opt out of this behavior by setting
UV_PYTHON_ARCH=x86_64or requesting an explicit architecture, e.g.,cpython-3.14-windows-x86_64. If you are usingsetup-uv, you can setpython-arch: x86_64instead. -
Reject editable requirements in included constraints files (#22282)
Previously, uv silently ignored editable (
-e) requirements in constraints files included with-cfrom a requirements file. Now, uv rejects these requirements with an error, matching pip's behavior.You cannot opt out of this behavior. Move editable requirements to a requirements file passed with
-r, or pass them directly with--editable, instead of including them in a constraints file. -
Omit the distutils startup patch on Python 3.10 and later (#22096)
Previously, uv installed
_virtualenv.pyand_virtualenv.pthinto every new virtual environment to prevent distutils configuration from changing installation paths. Now, likevirtualenv21.6.0, uv omits these files on Python 3.10 and later, which already ignore the affected configuration keys. This reduces Python startup overhead. Python 3.9 and earlier retain the patch.You cannot opt out of this behavior. Existing virtual environments are not modified automatically. Recreate an environment with Python 3.10 or later to remove the patch.
This stabilizes the
no-distutils-patchpreview feature. -
Treat requirement-file option values as single paths (#22290)
Previously, uv split values passed to
--constraint,--override,--exclude, and--build-constrainton spaces, even when quoted. Now, each value is treated as a single path, allowing file paths containing spaces.You cannot opt out of this behavior. Repeat the option to provide multiple files. For example, replace
-c "a.txt b.txt"with-c a.txt -c b.txt.Space-separated lists in
UV_CONSTRAINT,UV_OVERRIDE,UV_EXCLUDE, andUV_BUILD_CONSTRAINTremain supported. -
Use
tar-codecfor tar archives by default (#22094)Previously, uv used
astral-tokio-tarto extract tar archives, build source distributions withuv_build, and read their metadata foruv publish. Now, uv usestar-codec, which applies stricter validation when reading archives.uv may now reject archives containing hard links or unsupported tar extensions that previous versions accepted. Source distributions created by
uv_buildcan also have different archive bytes and hashes.You can opt out of this behavior by setting
UV_LEGACY_TAR_BACKEND=1.This stabilizes the
tar-codecpreview feature. -
Reject
uv build --clearoutput directories that contain a build source (#22276)Previously,
uv build --clearcould delete a project or input source distribution when the output directory contained the source. Now, uv rejects these output directories, including equivalent paths reached through symlinks, before clearing any build output.Select an output directory that does not contain any build sources, or omit
--clear.
- Add CPython 3.15.0 (#22400)
- Require hashes for build dependencies, including transitive dependencies, with
--require-build-hashes(#21411)
- Speed up revalidation of cached HTTP responses by avoiding rewrites of unchanged payloads (#22130)
- Reduce allocations when reading cached HTTP responses (#22136)
- Reduce cache storage for HTTP policies and package records (#22135, #22133)
- Reduce allocations for cached source distribution revisions (#22131)
- Fix incorrect dependency resolution when reusing source metadata with different build settings (#22404)
- Avoid overlong wheel cache lock filenames on Windows (#22134)
See changelogs/0.9.x
See changelogs/0.8.x
See changelogs/0.7.x
See changelogs/0.6.x
See changelogs/0.5.x
See changelogs/0.4.x
See changelogs/0.3.x
See changelogs/0.2.x
See changelogs/0.1.x