78 KiB
Changelog 0.5.x
0.5.0
Since the launch of Python version, project, and tool management capabilities back in August, we've seen extraordinary adoption of uv. We've been iterating rapidly: adding new features, fixing bugs, and improving the user experience. Despite moving quickly, stability and compatibility have been a major focus — we've made thirty releases since our last breaking change. Consequently, 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.
Breaking
-
Use base executable to set virtualenv Python path (#8481)
Previously, uv canonicalized the path to the Python executable when setting the Python path in created virtual environments. This behavior had several undesirable effects: it would bypass stabilized version directories (as constructed by Homebrew) and it was not consistent with the Python standard library's behavior. Now, uv uses the
sys._base_executablepath. -
Use XDG (i.e.
~/.local/bin) instead of the Cargo home directory in the installer (#8420)Previously, uv's installer used
$CARGO_HOMEor~/.cargo/binfor its target install directory. It's been a longstanding complaint that uv uses this directory, as there's no relationship to Cargo. Now, uv will be installed into$XDG_BIN_HOME,$XDG_DATA_HOME/../bin, or~/.local/bin(in that order). Note that$UV_INSTALL_DIRcan always be used to override the target directory. -
Discover and respect
.python-versionfiles in parent directories (#6370)Previously, uv only read
.python-versionfiles from the working directory. Now, uv will check parent directories for.python-versionfiles; however uv will not search for.python-versionfiles beyond project boundaries. The new behavior is better aligned with that ofpyenvand Rye. -
Error when disallowed settings are defined in
uv.toml(#8550)Some settings can only be defined in the
pyproject.toml. Previously, uv would ignore these settings when present in theuv.toml. Now, uv will error to avoid confusion about why the settings are not respected. -
Implement PEP 440-compliant local version semantics (#8797)
Previously, uv's implementation of local versions (e.g.,
2.0+cpu) was not compliant with the specification due to the technical complexity of implementing the local version semantics in the PubGrub algorithm. Thanks to the work of @ericmarkmartin, uv now has a spec-compliant implementation. Namely, uv will now allow a request fortorch==2.1.0to installtorch@2.1.0+cpuregardless of whethertorch@2.1.0(without a local tag) actually exists. -
Treat the base Conda environment as a system environment (#7691)
Previously, uv would not distinguish between the base and other Conda environments. Now, uv uses
CONDA_DEFAULT_ENVand the namesbaseanddefaultto determine if an environment active viaCONDA_PREFIXis the base environment. If the base environment is active, the--systemflag must be used to mutate it. -
Do not allow pre-releases when the
!=operator is used (#7974)Previously, uv would use the presence of a pre-release specifier in a version specifier as an opt-in to allow pre-release versions during resolution. The new behavior does not allow pre-releases when an inequals operator is used, e.g.,
!= 2.0a1. -
Prefer
USERPROFILEoverFOLDERID_Profilewhen selecting a home directory on Windows (#8048)This change is a side-effect of switching from the
directoriescrate toetceterafor determining canonical system paths. IfUSERPROFILEis not set, the behavior will be unchanged. -
Improve interactions between color environment variables and CLI options (#8215)
Previously, uv would respect the
FORCE_COLORandNO_COLORenvironment variables over the--colorflag. Now, when the--colorflag is explicitly provided, uv will respect it over the environment variables. -
Make
allow-insecure-hosta global option (#8476)Previously, this option was only available in some parts of uv. Now,
--allow-insecure-hostcan be provided to any command. For consistency, theallow-insecure-hostsetting has been removed from the[tool.uv.pip]configuration in favor of[tool.uv]. -
Only write
.python-versionfiles duringuv initfor workspace members if the version differs (#8897)Previously, uv would create a
.python-versionfile for workspace members duringuv init. Now, uv will only do so if the version differs from the.python-versionfile in the workspace root since uv will respect.python-versionfiles in parent directories.
Enhancements
- Add
uv tree --outdated(#8893) - Add armv8l alias for armv7l to support arm 32-bit compatibility mode (#8881)
- Add support for
pip list --outdated(#8872) - Allow semicolons directly after direct URLs (#8836)
- Enable support for arbitrary git transports (#8769)
- Improve Python discovery source messages (#8890)
- Show dedicated error for trailing
;on URL and path requirements (#8835) - Add progress bar for
uv cache clean(#8857) - Warn on failure to query system configuration file (#8829)
Preview features
- Add support for building basic source distributions with the experimental uv build backend (#8886)
Bug fixes
- Respect dynamic version updates in
uv lock(#8867) - Respect fork markers in
--resolution-mode=lowest-direct(#8839)
Documentation
- Add further examples of git+https support (#8841)
- Add installer variables to environment reference (#8874)
- Add note on private classifier (#8783)
- Update pip-and-uv strictness example (#8822)
- Fix
uv python installdocs to use an existing PyPy version (#8845) - Document how to mimic
--verbosewithRUST_LOG(#8858)
0.5.1
Enhancements
- Allow installation of manylinux wheels on
riscv64(#8934)
Bug fixes
- Build source distributions at top-level of cache (#8905)
- Allow non-registry dependencies in
uv pip list --outdated(#8939) - Compute superset of existing and required hashes when healing cache (#8955)
- Enable uv to replace and delete itself on Windows (#8914)
- Remove source distribution filename from cache (#8907)
- Respect
--index-urlinuv pip list(#8942) - Respect comma-separated extras in
--with(#8946)
Documentation
- Add uninstall note for previous versions (#8937)
- Remove some missed references to
~/.cargo/bin(#8936) - Split README's install code block into 3 (#8853)
0.5.2
Enhancements
- Hide
--no-systemfromuv pip treeCLI (#9040) - Allow configuration of Python and PyPy install mirrors in
uv.toml(#8695) - Allow passing Python download mirrors to
uv python install(#8695) - Add support for specifying conflicting extras and dependency groups (#8976, #9096)
- Consistent colon usage in build failure errors (#8994)
- Show full derivation chain when encountering build failures (#9108)
- Show link we failed on parsing index pages (#9118)
- Remove duplicate log when searching for interpreters (#9092)
- Update uv development status classifier to "Stable" on PyPI (#8943)
- Use rich diagnostic formatting for early build failures (#9041)
- Use rich diagnostic formatting for install failures (#9043)
Performance
- Avoid retraversing filesystem when testing exact glob matches (#9022)
Bug fixes
- Allow
--no-buildto validate lock (#9024) - Allow default indexes to be marked as explicit (#8990)
- Avoid creating
.venvinuv add --frozenanduv add --no-sync(#8980) - Avoid duplicating first-entry comments in
uv add(#9109) - Defer reporting of build failures in resolver (#9098)
- Fix references to
--resolution-strategyin error message output (#8971) - Ignore virtual environments in parent directories when choosing Python version for new projects (#9075)
- Forward SIGTERM to child processes in
uv run(#8933) - Prefer Python executable names that match the request over default names (#9066)
- Prefer compatible to incompatible distributions when packages exist on multiple indexes (#8961)
- Publish: Ignore non-matching files (#8986)
- Revert
uv.lockchanges whenuv addfails (#9030) - Show file extensions on available commands when not
.exe(#9099) - Sort by name, then specifiers in
uv add(#9097) - Split after specifiers in
--withrequirements (#9089) - Support multiple extras in universal pip compile output (#8960)
Preview features
- Build backend: Add tests for source tree -> source dist -> wheel conversions (#9091)
- Build backend: Switch to custom
glob-walkdirimplementation (#9013) - Build backend: Add minimal wheel settings (#9085)
Documentation
- Add wget instructions for systems without curl (#8630)
- Fix
.envfile example in docs (#9064) - Fix reference to
--resolutionin docs (#8968) - Fix typo in GitLab integration docs (#9047)
- Update format of environment variable reference (#9018)
- Use Python syntax for
value_typeconsistently (#9017) - Use
[[index]]API in configuration example (#9065) - Mention how to use extras (#8972)
- Add some words about specifying conflicting extras/groups (#9120)
0.5.3
This release includes support for conflicting optional dependencies and dependency groups in the uv resolver, including the ability to specify dependency sources (like index assignment) on a per-extra or per-group basis.
For example, you can now select CPU-only vs. GPU-enabled PyTorch builds at runtime by defining
conflicting extras in a pyproject.toml, and assigning different extras to different PyTorch
indexes:
[project]
name = "project"
version = "0.1.0"
requires-python = ">=3.12.0"
[project.optional-dependencies]
# Include `torch` whenever `--extra cpu` or `--extra gpu` is provided.
cpu = ["torch>=2.5.1"]
gpu = ["torch>=2.5.1"]
[tool.uv]
# But allow `cpu` and `gpu` to choose conflicting versions of `torch`.
conflicts = [[{ extra = "cpu" }, { extra = "gpu" }]]
[tool.uv.sources]
torch = [
# With `--extra cpu`, pull PyTorch from the CPU-only index.
{ index = "pytorch-cpu", extra = "cpu", marker = "platform_system != 'Darwin'" },
# With `--extra gpu`, pull PyTorch from the GPU-enabled index.
{ index = "pytorch-gpu", extra = "gpu" },
]
[[tool.uv.index]]
name = "pytorch-cpu"
url = "https://download.pytorch.org/whl/cpu"
explicit = true
[[tool.uv.index]]
name = "pytorch-gpu"
url = "https://download.pytorch.org/whl/cu124"
explicit = true
See the PyTorch documentation for more.
Enhancements
- Allow conflicting extras in explicit index assignments (#9160)
- Support overrides and constraints in PEP 723 scripts (#9162)
- Update
uv tool install --forceto imply--reinstall-package <name>(#9074) - Turn
--verify-hasheson by default (#9170)
Performance
- Enable
zlib-rson all platforms (#9202)
Bug fixes
- Allow apostrophe in virtual environment name (#8984)
- Automatically retry body errors when processing response (#9213)
- Detect nested workspace inside the current workspace and members with identical names (#9094)
- Only install the specified project with
--frozen --packagein legacy non-[project]workspaces (#9215) - Respect
[[tool.uv.index]]in PEP 723 scripts (#9208) - Show derivation markers for resolutions with project name (#9136)
- Sort distributions when computing hash (#9185)
- Include trampolines in source distributions on Windows (#9172)
Documentation
- Add
--index <name>=<url>syntax to index documentation (#9139) - Add documentation for using uv with PyTorch (#9210)
Error messages
- Add a dedicated error for
include = "dev"withtool.uv.dev-dependencies(#9173) - Avoid showing disjoint marker error with
true(#9169) - Improve error message when
gitis not found (#9206) - Include extras and dependency groups in derivation chains (#9113)
- Include version constraints in derivation chains (#9112)
0.5.4
Enhancements
- Accept either singular or plural values for CLI requirements (#9196)
- Add
--all-groupstouv sync,uv run,uv export, anduv tree(#8892) - Add a progress bar to
uv tree --outdatedanduv pip list --outdated(#9284) - Add retries for Python downloads (#9274)
- Use exponential backoff for publish retries (#9276)
- Add manylinux target triples up to glibc 2.40 (#9234)
Performance
Bug fixes
- Avoid validating extra and group sources in
build-system.requires(#9273) - Catch retries with wrapped
reqwesterrors (#9253) - Sort hashes in
uv exportoutput (#9237) - Strip
--indexand--default-indexfrom command header (#9288)
Documentation
- Add breadcrumbs to the documentation (#9242)
- Add minimum version to PyTorch guide (#9247)
- Add support for anchor redirects with client-side js (#9212)
- Improve content on project configuration (#9235)
- Improve the project creation documentation (#9236)
- Move the integration guides into the "Guides" section as a collapsed group (#9245)
- Reorganize the project concept documentation (#9121)
- Use the full screen height for the main content to stabilize the nav (#9153)
Error messages
- Add dedicated warning for empty stdin (#9256)
0.5.5
Enhancements
- Add aliases for build backend requests (#9294)
- Avoid displaying empty paths (#9312)
- Allow constraints in
uv tool upgrade(#9375) - Remove conflict between
--no-syncand--frozeninuv run(#9400) - Respect dependency sources in overrides and constraints (#9455)
- Show an interpreter-focused message for
--targetand--prefix(#9373) - Add
--no-extraflag and setting (#9387) - Add
uv export --prune(#9389) - Add dedicated error message for musl install attempts (#9430)
- Add various grammar changes to conflict error messages (#9369)
- Annotate default groups in conflict error messages (#9368)
- Report marker diagnostics during parsing, rather than evaluation (#9338)
- Use consistent formatting for build system errors (#9340)
- Use rich diagnostics for build failures (#9335)
Preview features
- Improve build backend excludes (#9281)
- Include PEP 639
license-filesmetadata duringuv publish(#9442)
Performance
Bug fixes
- Allow dependency groups to include the containing package (#9385)
- Allow syncing to empty virtual environment directories (#9427)
- Allow system Python discovery with
--targetand--prefix(#9371) - Don't warn when
--output-fileis empty (#9417) - Fix Python interpreter discovery on non-glibc hosts (#9005)
- Fix
tool.uv.dependency-metadata.[].versionschema (#9468) - Only respect preferences across the same indexes (#9302)
- Re-compile when
--compileis passed to an install operation (#9378) - Remove
--upgrade,--no-upgrade, and--upgrade-packagefromuv tool upgrade(#9318) - Remove dev dependencies in
--all-groups --no-dev(#9300) - Surface extras and group conflicts in
uv export(#9365) - Treat deprecated aliases as equivalent in marker algebra (#9342)
- Treat less compatible tags as lower priority in resolver (#9339)
Documentation
- Avoid referencing
scikit-build(instead ofscikit-build-core) (#9320) - Expand entry points documentation (#9329)
- Fix example
pyproject.tomlin project concept documentation (#9298) - Fix header level of "Conflicting dependencies" page (#9330)
- Touch-up the extension module guide (#9293)
- Update the dependencies documentation (#9359)
- Reference
--no-progressoption in related environment variable (#9357)
0.5.6
Enhancements
- Add
--dry-runtouv pip uninstall(#9557) - Allow
--constraintsand--overridesinuv tool install(#9547) - Display removed Python executables on uninstall (#9459)
- Warn when keyring has no password for
uv publish(#8827) - Add suggested action when
.python-versionpin is incompatible with the project (#9590) - Improve error messages for mismatches in
tool.uv.sources(#9482) - Use constraints in trace rather than irrelevant
requires-python(#9529)
Preview features
- Add
uv python install --default(#8650) - Fix Python executable installation when multiple patch versions are requested (#9607)
- Build backend: Revamp
include/exclude(#9525) - Build backend: Add fast path (#9556)
- Build backend: Add functions to collect file list (#9602)
- Build backend: Default excludes (#9552)
- Build backend: Refactoring before list (#9558)
- Build backend: Warn when visiting over 10k files (#9523)
Configuration
- Make
check-urlavailable in configuration files (#9032)
Performance
- Avoid adding non-extra package with extra dependencies (#9540)
- Avoid cloning
Stringin marker evaluation (#9598)
Rust API
uv-pep508: Add more methods for simplifyingextra-related expressions (#9469)
Bug fixes
- Allow
file:URLs to include package names (#9493) - Avoid using IDs across PubGrub states (#9538)
- Consistently enforce requested-vs.-built metadata when retrieving wheels (#9484)
- Do not show empty version specifier in
uv tool list(#9605) - Include Git member information when getting metadata from cache (#9388)
- Include base installation directory in uv run PATH (#9585)
- Insert backslash when appending to system drive (#9488)
- Normalize paths when lowering Git dependencies (#9595)
- Omit origin when comparing requirements (#9570)
- Override
manylinux_compatiblewith--python-platform(#9526) - Pass extra when evaluating lockfile markers (#9539)
- Propagate markers for recursive extras in resolver (#9509)
- Respect path dependencies within Git dependencies (#9594)
- Support recursive extras with marker in
pip compile -r pyproject.toml(#9535) - Don't emit unpinned warning for proxy packages (#9497)
- Fix
--refresh-packageflag mentioned as--refresh-dependency(#9486) - Handle Windows AV/EDR file locks during script installations (#9543)
- Re-enable conflicting extra/group tests and fix regression from #9540 (#9582)
Documentation
- Add missing word to docs for
run.md(#9527) - Add policies reference section and license document (#9367)
- Fix typo in entry point docs (#9491)
- Fix up version in prior uninstall instructions (#9485)
- Mention
uv pipbehavior in build system note (#9586) - Update build failures document (#9584)
- Correct wording for multiple sources section (#9504)
0.5.7
Enhancements
- Ignore dynamic version in source dist (#9549)
- Improve build frontend error handling (#9611)
- Un-hide
uv build --no-build-logsoption (#9642) - Flag version mismatch between sdist and wheel during
uv build(#9633) - Improve message when updater receipt is for a different uv executable (#9487)
- Add environment variable to disable writing installer metadata files (#8877)
- Add managed downloads for the latest CPython releases:
3.9.21,3.10.16,3.11.11,3.12.8, and3.13.1(#9696)
Preview features
- Build backend: Add hint on import with preview disabled (#9691)
- Build backend: Add direct builds to the resolver and installer (#9621)
- Build backend: Add integration test for scripts (#9635)
- Build backend: Add template to
uv init(#9661) - Build backend: Add
--listoption (#9610)
Bug fixes
- Create missing parent directories for output file of
uv export/uv pip compile(#9648) - Fix missing display of non-freethreaded Python 3.13 in
python list(#9669) - Implement
OrdandPartialOrdwithout origin forRequirement(#9624) - Include more sources to avoid lowest bound warning (#9644)
- Respect build tag priority in
uv.lock(#9677)
Documentation
- Add
build-essentialsnote to build failures doc (#9641) - Add entry-point for distroless image in GitLab documentation (#9093)
- Add documentation for
uv python pinwithout aREQUESTargument (#9631) - Add a link to
uv python pinreference docs (#9630)
0.5.8
This release does not include the powerpc64le-unknown-linux-musl target due to a build issue.
See #9793 for details. If this change affects you,
please file an issue with your use-case.
Enhancements
- Omit empty resolution markers in lockfile (#9738)
- Add
--install-dirto touv python installanduninstallcommands (#7920) - Add
--show-urlsand--only-downloadstouv python list(#8062) - Add
uv python list --all-arches(#9782) - Add
uv run --gui-scriptflag for running Python scripts withpythonw.exe(#9152) - Allow
--gui-scripton Unix (#9787) - Allow download of Python distribution variants optimized for newer x86_64 microarchitectures (#9781)
- Allow execution of
pywfiles on Unix (#9759) - Allow users to specify URLs in
project.dependenciesandtool.uv.sources(#9718) - Encode mutually-incompatible pairs of markers (#9444)
- Improve the error message when a Python install request is not valid (#9783)
- Preserve directory-level standalone build symlinks (#9723)
- Add support for
uv publish --index <name>(#9694) - Reframe
--lockedand--frozenas--checkoperations foruv lock(#9662) - Rename Python install scratch directory from
.cache->.temp(#9756) - Enable
uv tool uninstall uvon Windows (#8963) - Improve self-dependency hint to make shadowing clear (#9716)
- Refactor unavailable metadata to shrink the resolver (#9769)
- Show 'depends on itself' for proxy packages (#9717)
- Show a dedicated error for missing subdirectories (#9761)
- Show a dedicated hint for missing
git+prefixes (#9789)
Performance
- Eagerly error when parsing
pyproject.tomlrequirements (#9704) - Use copy-on-write when normalizing paths (#9710)
Bug fixes
- Avoid enforcing non-conflicts in
uv export(#9751) - Don't drop comments between items in TOML tables (#9784)
- Don't fail with
--no-buildwhen static metadata is available (#9785) - Don't filter non-patch registry version (#9736)
- Don't read metadata from stale
.egg-infofiles (#9760) - Enforce correctness of self-dependencies (#9705)
- Fix projects's typo in resolver error messages (#9708)
- Ignore
.prefixed directories during managed Python installation discovery (#9786) - Improve handling of invalid virtual environments during interpreter discovery (#8086)
- Normalize relative paths when
--projectis specified (#9709) - Respect self-constraints on recursive extras (#9714)
- Respect user settings for tracing coloring (#9733)
- Retry on tar extraction errors (#9753)
- Add conflict markers to the lock file (#9370)
- De-duplicate resolution markers (#9780)
- Avoid 403 error hint for PyTorch URLs (#9750)
- Avoid treating non-existent
--find-linksas relative URLs (#9720) - Omit Windows Store
python3.13.exeet al (#9679) - Replace executables with broken symlinks during
uv python install(#9706)
Documentation
- Fix build failure links (#9740)
0.5.9
Enhancements
- Fork version selection based on
requires-pythonrequirements (#9827) - Patch
sysconfigdata at install time (#9857) - Remove
-isysrootwhen patching sysconfig (#9860)
Configuration
Bug fixes
- Avoid
panic!()when current directory does not exist (#9876) - Avoid reusing interpreter metadata when running under Rosetta (#9846)
- Avoid trailing slash when deserializing from lockfile (#9848)
- Fix bug in terms when collapsing unavailable versions in resolver errors (#9877)
- Fix suggestion to use
uv help pythonon invalid install requests (#9820) - Skip root when assessing prefix viability (#9823)
- Avoid spurious 'Upgraded tool environment' in
uv tool upgrade(#9870)
Rust API
- Upgrade minimum Rust version to 1.83 (#9815)
Documentation
- Document the
--fork-strategysetting (#9887)
Preview features
- Build backend: Allow underscores in entrypoints (#9825)
0.5.10
Enhancements
- Improve backtracking behavior when packages conflict repeatedly (#9843)
- Patch Python
sysconfigvalues such asARatarinstall time (#9905) - Patch Python
sysconfigvalues such asclangtoccat install time (#9916) - Skip
--native-tlsinpip compileheader (#9913) - Add resolver error hint for no-binary and no-build failures (#9948)
- Improve build error messages (#9660)
- Reduce redundant Python version incompatibilities in resolver error message (#9957)
- Reduce redundant enumeration of all package versions in some resolver errors (#9885)
- Improve display of ranges when pre-releases are not allowed (#9944)
- Improve error messages for
uv remove(#9959) - Improve phrasing for single term incompatibilities (#9953)
- Improve styling of
uv removedependency hints (#9960) - Omit trailing zeros on Python requirements inferred from versions (#9952)
- Show a concise error message for missing
versionfield (#9912) - Use the build options value to improve hints for no wheel / source distribution errors (#9950)
Bug fixes
- Allow multiple disjoint URLs in overrides (#9893)
- Include explicit indexes in publish index choice (#9932)
- Fix Python interpreter detection for 32-bit operating systems on 64-bit hosts (#9970)
Documentation
- Fix typo "operation system" (#9971)
- Clarify uninstallation docs (#9938)
- Add a note to say that dependencies between workspace members are editable (#9363)
- Correctly document default value of
fork-strategysetting (#9931) - Use double quotes for Windows support in examples (#9946)
- Remove
pypyfrom top-level pin example (#9896) - Update references to
python-build-standaloneto reflect the transferred project (#9977) - Use a different Ruff version in documentation (#9943)
- Change example so it works as-is on
powershellandcmd.exe(#9903) - Clarify best practice for Python matrix strategy in GitHub Actions (#9454)
- Add documentation for
uv-lockanduv-exportpre-commit hooks (#9872)
Preview features
- Build backend: Fix pre-PEP 639 license files (#9965)
0.5.11
Enhancements
- Normalize
platform_systemtosys_platform(#9949) - Improve retry mechanisms on Windows for
copy_atomicandwrite_atomic(#10026) - Add nuance to prefetch logging (#9984)
- Update to
python-build-standalone 20241219
Preview features
- Build backend: Preserve executable bits for scripts in distributions (#10027)
- Build backend: Handle case where
metadata_directoryalready containsdist-infodirectory (#10005)
Performance
- Batch resolver pre-fetches per fork (#10029)
Bug fixes
- Allow
--scriptto be provided withuv run -(#10035) - Allow
uv runarguments when reading fromstdin(#10034) - Prefer higher Python lower-bounds when forking (#10007)
- Remove references to deprecated
first-match(#10036)
Documentation
- Add
uv python install --previewto the documentation (#10010) - Fix
uv python install --defaultnote about multiple requests (#10011) - Fix typo in Caching docs (#10032)
- Remove remaining references to deprecated
first-match(#10038) - Supplement missing separators for
UV_INSTALL_DIRdirections on Windows (#9507)
0.5.12
Enhancements
- Support
uv exportfor non-project workspaces (#10144) - Set glibc versions for standalone installers (#10142)
- Allow environment variables to be included in cache keys (#10170)
Preview features
- Include extras in
uv-buildRequires-Distmetadata (#10110) - Use
shutil.whichfor the build backend (#10028)
Bug fixes
- Always write slash paths to RECORD file (#10164)
- Add support for subdirectories in direct URLs in
uv.lock(#10068) - Avoid duplicating backslashes in sysconfig parser (#10063)
- Avoid erroring when subdirectories are provided in
uv add(#10095) - Backtrack to non-local versions when wheels are missing platform support (#10046)
- Fix mirror script to handle newer metadata format (#10050)
- Preserve sort when deciding on requirement placement (#10078)
- Remove redundant alias in
uv initCLI (#10124) - Respect sources credentials in non-project workspaces (#10125)
- Show non-project dependencies in
uv tree(#10149) - Strip fragment when storing direct URL (#10093)
- Include hashes for local source archives (#10080)
Documentation
- Fix invalid syntax in some sources examples (#10127)
0.5.13
Bug fixes
- Avoid enforcing URL check on initial publish (#10182)
- Fix incorrect mismatched constraints reference (#10184)
- Revert "Update
reqwest(#10178)" (#10187)
0.5.14
Enhancements
- Add
--exactflag touv run(#10198) - Add
--outdatedsupport touv pip tree(#10199) - Add a required version setting to uv (#10248)
- Add loongarch64 to supported Python platform tags (#10223)
- Add manylinux2014 aliases for
--python-platform(#10217) - Add support for Python interpreters on ARMv5TE platforms (#10234)
- Add support for optional
--descriptioninuv init(#10209) - Ignore empty or missing hrefs in Simple HTML (#10276)
- Patch pkgconfig files after Python install (#10189)
Performance
- Actually use jemalloc as alternative allocator (#10269)
- Parse URLs lazily in resolver (#10259)
- Use
BTreeMap::rangeto avoid iterating over unnecessary versions (#10266)
Bug fixes
- Accept directories with space names in
uv init(#10246) - Avoid forking on version in non-universal resolutions (#10274)
- Avoid stripping query parameters from URLs (#10253)
- Consider workspace dependencies to be 'direct' (#10197)
- Detect cyclic dependencies during builds (#10258)
- Guard against self-deletion in
uv venvanduv tool(#10206) - Respect static metadata for already-installed distributions (#10242)
0.5.15
Python
The managed Python distributions have been updated, including:
- Python 3.14.0a3 support on macOS and Linux
- Performance improvements
- Fixes to SQLite feature detection
See the
python-build-standalone release notes
for more details.
Enhancements
- Respect
FORCE_COLORenvironment variable (#10315)
Performance
- Avoid generating unused hashes during
uv lock(#10307) - Visit source distributions before wheels (#10291)
Bug fixes
- Avoid downgrading packages when
--upgradeis provided (#10097) - Extract supported architectures from wheel tags (#10179)
- Redact new index credentials in
uv add(#10329)
Documentation
- Clarify
exclude-neweronly allows full timestamps in settings documentation (#9135) - Tweak script
--no-projectcomment (#10331) - Update copyright year (#10297)
- Add instructions for installing with Scoop (#10332)
0.5.16
Enhancements
- Accept full requirements in
uv remove(#10338)
Performance
- Avoid over-counting versions in batch prefetcher (#10350)
- Deactivate tracing for version-choosing (#10351)
- Force a niche into
VersionSmall(#10385) - Optimize
requirements_for_extra(#10348) - Re-enable
zlib-ngon x86 platforms (#10365) - Re-enable zlib-ng on all platforms (except s390x, PowerPC, and FreeBSD) (#10370)
- Remove
[u64; 4]from small version to moveArcto full version (#10345) - Shrink
Distfrom 352 to 288 bytes (#10389) - Speed up file pins by removing nested hash map (#10346)
- Buffer file reads in
serde_json::from_reader(#10341)
Bug fixes
- Avoid enforcing project-level required version for
uv self(#10374) - Fix Ruff linting warnings from generated template files for extension modules (#10371)
Documentation
- Add AWS Lambda integration guide (#10278)
0.5.17
This release includes support for generating lockfiles from scripts based on inline metadata, as defined in PEP 723.
By default, scripts remain unlocked, and must be locked explicitly with
uv lock --script /path/to/script.py, which will generate a lockfile adjacent to the script (e.g.,
script.py.lock). Once generated, the lockfile will be respected (and updated, if necessary) across
uv run --script, uv add --script, and uv remove --script invocations.
This release also includes support for uv export --script and uv tree --script. Both commands
support PEP 723 scripts with and without accompanying lockfiles.
Enhancements
- Add support for locking PEP 723 scripts (#10135)
- Respect PEP 723 script lockfiles in
uv run(#10136) - Update PEP 723 lockfile in
uv add --script(#10145) - Update PEP 723 lockfile in
uv remove --script(#10162) - Add
--scriptsupport touv exportfor PEP 723 scripts (#10160) - Add
--scriptsupport touv treefor PEP 723 scripts (#10159) - Add
lsalias touv {tool, python, pip} list(#10240) - Allow reading
--with-requirementsfrom stdin inuv addanduv run(#10447) - Warn-and-ignore for unsupported
requirements.txtoptions (#10420)
Preview features
- Add remaining Python type annotations to build backend (#10434)
Performance
- Avoid allocating for names in the PEP 508 parser (#10476)
- Fetch concurrently for non-first-match index strategies (#10432)
- Remove unnecessary
.to_string()call (#10419) - Respect sentinels in package prioritization (#10443)
- Use
ArcStrfor marker values (#10453) - Use
ArcStrfor package, extra, and group names (#10475) - Use
matches!rather thancontainsinrequirements.txtparsing (#10423) - Use faster disjointness check for markers (#10439)
- Pre-compute PEP 508 markers from universal markers (#10472)
Bug fixes
- Fix
UV_FIND_LINKSdelimiter to split on commas (#10477) - Improve
uv tool listoutput when tool environment is broken (#10409) - Only track markers for compatible versions (#10457)
- Respect
requires-pythonwhen installing tools (#10401) - Visit proxy packages eagerly (#10441)
- Improve shell compatibility of
venvactivate scripts (#10397) - Read publish username from URL (#10469)
Documentation
- Add Lambda layer instructions to AWS Lambda guide (#10411)
- Add
uv lock --scriptto the docs (#10414) - Use Windows-specific instructions in Jupyter guide (#10446)
0.5.18
Bug fixes
- Avoid forking for identical markers (#10490)
- Avoid panic in
uv removewhen only comments exist (#10484) - Revert "improve shell compatibility of venv activate scripts (#10397)" (#10497)
0.5.19
Enhancements
- Filter wheels from lockfile based on architecture (#10584)
- Omit dynamic versions from the lockfile (#10622)
- Add support for
pip freeze --path(#10488) - Reduce verbosity of inline-metadata message when using
uv run <script.py>(#10588) - Add opt-in Git LFS support (#10335)
- Recommend
--native-tlson SSL errors (#10605) - Show expected and available ABI tags in resolver errors (#10527)
- Show target Python version in error messages (#10582)
- Add
--output-format=jsonsupport touv python list(#10596)
Python
The managed Python distributions have been updated, including:
- Python 3.14 support on Windows
- Python 3.14.0a4 support
- 64-bit RISC-V Linux support
- Bundled
libeditupdated from 20210910-3.1 -> 20240808-3.1 - Bundled
tcl/tkupdated from 8.6.12 -> 8.6.14 (for all Python versions on Unix, only for Python 3.14 on Windows)
See the
python-build-standalone release notes
for more details.
Performance
- Avoid allocating when stripping source distribution extension (#10625)
- Reduce
WheelFilenameto 48 bytes (#10583) - Reduce distribution size to 200 bytes (#10601)
- Remove
import refrom entrypoint wrapper scripts (#10627) - Shrink size of platform tag enum (#10546)
- Use
ArcStrin verbatim URL (#10600) - Use
memchrfor wheel parsing (#10620)
Bug fixes
- Avoid reading symlinks during
uv python installon Windows (#10639) - Correct Pyston tag format (#10580)
- Provide
pyproject.tomlpath for parse errors inuv venv(#10553) - Don't treat
setuptoolsandwheelas seed packages in uv sync on Python 3.12 (#10572) - Fix git-tag cache-key reader in case of slashes (#10467) (#10500)
- Include build tag in rendered wheel filenames (#10599)
- Patch embedded install path for Python dylib on macOS during
python install(#10629) - Read cached registry distributions when
--config-settingsare present (#10578) - Show resolver hints for packages with markers (#10607)
Documentation
- Add meta titles to documents in guides, excluding integration documents (#10539)
- Remove
build-systemfrom example workspace rot (#10636)
Preview features
- Make build backend type annotations more generic (#10549)
0.5.20
Bug fixes
- Avoid failing when deserializing unknown tags (#10655)
0.5.21
Enhancements
- Avoid building dynamic versions when validating lockfile (#10703)
Configuration
- Add
UV_VENV_SEEDenvironment variable (#10715)
Performance
- Store unsupported tags in wheel filename (#10665)
Bug fixes
- Avoid attempting to patch macOS dylib for non-macOS installs (#10721)
- Avoid narrowing
requires-pythonmarker with disjunctions (#10704) - Respect environment variable credentials for indexes outside root (#10688)
- Respect preferences for explicit index dependencies from
requirements.txt(#10690) - Sort preferences by environment, then index (#10700)
- Ignore permission errors when looking for user-level configuration file (#10697)
Documentation
- Add
SyntaxWarningcompatibility note to bytecode compilation docs (#10701) - Add
MACOSX_DEPLOYMENT_TARGETto the--python-platformdocumentation (#10698)
0.5.22
Enhancements
- Include version and contact information in GitHub User Agent (#10785)
Performance
- Add fast-path for recursive extras in dynamic validation (#10823)
- Fetch
pyproject.tomlfrom GitHub API (#10765) - Remove allocation in Git SHA truncation (#10801)
- Skip GitHub fast path when full commit is already known (#10800)
Bug fixes
- Add fallback to build backend when
Requires-Distmismatches (#10797) - Avoid deserialization error for paths above the root (#10789)
- Avoid respecting preferences from other indexes (#10782)
- Disable the distutils setuptools shim during interpreter query (#10819)
- Omit variant when detecting compatible Python installs (#10722)
- Remove TOCTOU errors in Git clone (#10758)
- Validate metadata under GitHub fast path (#10796)
- Include conflict markers in fork markers (#10818)
Error messages
- Add tag incompatibility hints to sync failures (#10739)
- Improve log when distutils is missing (#10713)
- Show non-critical Python discovery errors if no other interpreter is found (#10716)
- Use colors for lock errors (#10736)
Documentation
- Add testing instructions to the AWS Lambda guide (#10805)
0.5.23
Enhancements
Bug fixes
- Sort extras and groups when comparing lockfile requirements (#10856)
- Include
commit_idandrequested_revisionindirect_url.json(#10862) - Invalidate lockfile when static versions change (#10858)
- Make GitHub fast path errors non-fatal (#10859)
- Remove warnings for
--frozenand--lockedinuv run --script(#10840) - Resolve
find-linkspaths relative to the configuration file (#10827) - Respect visitation order for proxy packages (#10833)
- Treat version mismatch errors as non-fatal in fast paths (#10860)
- Mark
--lockedand--upgradeare conflicting (#10836) - Relax error checking around unconditional enabling of conflicting extras (#10875)
Documentation
Error messages
- Error when workspace contains conflicting Python requirements (#10841)
- Improve uvx error message when uv is missing (#9745)
0.5.24
Enhancements
- Improve determinism of resolution by always setting package priorities (#10853)
- Upgrade to
cargo-dist0.28.0; improves several installer behaviors (#10884)
Performance
- Remove dependencies clone in resolver (#10880)
- Use Hashbrown's raw entry API to reduce hashes and clone in resolver priority determination (#10881)
Bug fixes
- Allow fallback to Python download on non-critical discovery errors (#10908)
Preview features
- Register managed Python version with the Windows Registry (PEP 514) (#10634)
Documentation
0.5.25
Enhancements
- Allow installation of manylinux wheels on loongarch64 (#10927)
- Allow optional
=for editables inrequirements.txt(#10954) - Add Windows aarch64 to the release binaries (#10885)
Bug fixes
- Use spec-compliant (
128+n) exit codes foruv runanduv tool runon Unix (#10781) - Fix best-interpreter lookups when there is an invalid interpreter in the
PATH(#11030) - Guard against concurrent cache writes on Windows (#11007)
- Prioritize package preferences with greater package versions (#10963)
- Reject
--editableflag on non-directory requirements (#10994) - Respect
--no-sourcesforuv pip installworkspace discovery (#11003) - Set
JEMALLOC_SYS_WITH_LG_PAGE=16in ARM Docker builds (#10943) - Update
riscv64Python downloads to allow install onriscv64gc(#10937) - Fix file persist retries on Windows (#11008)
- Fix incorrect error message when specifying
tool.uv.sources.(package).workspacewith other options (#11013) - Improve SIGINT handling in
uv run(#11009)
Documentation
- Add
SECURITYpolicy (#11035) - Add
Requires-Pythonupper bound behavior to the docs (#10964) - Add a troubleshooting section and reproducible example guide (#10947)
- Add documentation for
uv add -r(#10926) - Amend
requires-pythonrules in resolver documentation (#10993) - Reference workspaces in
--no-sourcesdocumentation (#10995) - Update documentation for activating virtual environments in different shell (#11000)
- Add Docker SHA pinning tip (#10955)
0.5.26
Enhancements
- Add support for
uvx python(#11076) - Allow
--no-dev --invertinuv tree(#11068) - Update
uv python install --reinstallto reinstall all previous versions (#11072) - Consistently write log messages with capitalized first word (#11111)
- Suggest
--build-backendwhen--backendis passed touv init(#10958) - Improve retry trace message (#11108)
Performance
- Remove unnecessary UTF-8 conversion in hash parsing (#11110)
Bug fixes
- Ignore non-hash fragments in HTML API responses (#11107)
- Avoid resolving symbolic links when querying Python interpreters (#11083)
- Avoid sharing state between universal and non-universal resolves (#11051)
- Error when
--scriptis passing a non-PEP 723 script (#11118) - Make metadata deserialization failures non-fatal in the cache (#11105)
- Mark metadata as dynamic when reading from built wheel cache (#11046)
- Propagate credentials for
<index>/simpleto<index>/...endpoints (#11074) - Fix conflicting extra bug during
uv sync(#11075)
Documentation
- Add PyTorch XPU instructions to the PyTorch guide (#11109)
- Add docs for signal handling (#11041)
- Explain build frontend vs. build backend (#11094)
- Fix formatting of
RUST_LOGdocumentation (#10053) - Fix typo in
--no-depsdescription (#11073) - Reflow CLI documentation comments (#11040)
- Shorten "Using existing Python versions" nav item so it fits on one line (#11077)
- Some minor touch-ups to the Python install guide (#11116)
- Update Dependabot tracking issue link (#11054)
- Update documentation for running in a container (#11052)
- Upgrade PyTorch version in documentation (#11114)
- Use
sys_platformin lieu ofplatform_systemin PyTorch docs (#11113) - Use positive (rather than negative) markers in PyTorch examples (#11112)
- Fix unnecessary backslashes in brackets (#11059)
- Suggest setting copy link mode in GitLab integration guide (#11067)
0.5.27
Enhancements
- Avoid setting permissions during tar extraction (#11191)
- Remove warnings for missing lower bounds (#11195)
- Update PubGrub to set-based outdated priority tracking (#11169)
- Improve error messages for
uv pip installwith--extraor--all-extrasand invalid sources (#11193) - Sign Docker images using GitHub attestations (#8685)
Preview features
- Don't expand self-referential extras in the build backend (#11142)
Performance
- Filter discovered Python executables by source before querying (#11143)
- Optimize exclusion computation for markers (#11158)
- Use Astral-maintained
tokio-tarfork (#11174) - Remove unneeded
.clone()(#11127)
Bug fixes
- Fix relative paths in bytecode compilation (#11177)
- Percent-decode URLs in canonical comparisons (#11088)
- Respect concurrency limits in parallel index fetch (#11182)
- Use wire JSON schema for conflict items (#11196)
- Use explicit
_GLibCVersiontuple in uv-python crate (#11122)
Documentation
- Add Git SHA locking behavior to docs (#11125)
- Add best-practice flags to
pip installexample in troubleshooting guide (#11194) - Set
VIRTUAL_ENVin Jupyter kernels (#11155) - Add instructions for deactivating an environment (#11200)
0.5.28
Bug fixes
- Allow discovering virtual environments from the first interpreter found on the
PATH(#11218) - Clear ephemeral overlays when running tools (#11141)
- Disable SSL in Git commands for
--allow-insecure-host(#11210) - Fix hardlinks in tar unpacking (#11221)
- Set base executable when returning virtual environment (#11209)
- Use base Python for cached environments (#11208)
Documentation
- Add documentation on verifying Docker image attestations (#11140)
- Add
last updatedto documentation (#11164)
0.5.29
Enhancements
- Add
--bareoption touv init(#11192) - Add support for respecting
VIRTUAL_ENVin project commands via--active(#11189) - Allow the project
VIRTUAL_ENVwarning to be silenced with--no-active(#11251)
Python
The managed Python distributions have been updated, including:
- CPython 3.12.9
- CPython 3.13.2
- pkg-config files are now relocatable
See the
python-build-standalone release notes
for more details.
Bug fixes
- Always use base Python discovery logic for cached environments (#11254)
- Use a flock to avoid concurrent initialization of project environments (#11259)
- Fix handling of
--all-groupsand--no-default-groupsflags (#11224)
Documentation
- Minor touchups to the Docker provenance docs (#11252)
- Move content from the
mkdocs.public.ymlinto the template (#11246)
0.5.30
Python
The managed PyPy distributions have been updated for PyPy v7.3.18, which includes:
- PyPy3.10, which updates the standard library from Python 3.10.14 to 3.10.19
- PyPy3.11, which adds beta support for Python 3.11.11
See the PyPy release for more details.
Enhancements
Configuration
- Add
NO_BINARYandNO_BINARY_PACKAGEenvironment variables (#11399)
Performance
- Avoid re-cloning name when populating ambiguous set (#11401)
- Optimize flattening in large workspaces (#11313)
Bug fixes
- Allow dynamic packages to be overloaded (#11400)
- Fix credential caching for index roots when URL ends in
simple/(#11336) - Fix marker merging for requirements.txt for psycopg (#11298)
- Set 777 permissions on locked files (#11328)
- Support extras in
@requests for tools (#11335) - Upgrade
astral-tokio-tarto v0.5.1 (#11359) - Avoid missing logging for no-op upgrade events (#11301)
- Use refined specifiers when logging narrowed Python range (#11334)
- Don't use popup-generating
eprintlnin trampoline warnings (#11295) - Patch pkg-config files to be relocatable (#11291)
- Fix a case of duplicate
torchpackages when using conflicting extras (#11323)
Documentation
- Add docs for
uv tool install --editable(#11280) - Fix broken anchors in README and docs index (#11338)
0.5.31
Enhancements
- Add
uv sync --script(#11361) - Allow PEP 508 requirements in tool requests (#11337)
- Allow source distributions to produce wheels with
+localsuffixes (#11429) - Bring parity to
uvxanduv tool installrequests (#11345) - Use a stable directory for local, remote, and stdin script virtual environments (#11347, #11364)
- Detect infinite recursion in
uv run(#11386)
Python
The managed Python distributions have been updated, including:
- CPython 3.14.0a5, which includes a new tail calling interpreter for a significant performance improvement
- The bundled OpenSSL version was updated from 3.0.15 to 3.0.16 which fixes a security advisory
See the
python-build-standalone release notes
for more details.
Bug fixes
- Fix cross-drive script installation (#11167)
- Add indexes in priority order (#11451)
- Allow
--python <dir>requests to match existing environments ifsys.executableis the same file (#11290) - Avoid comparing to system site packages in
--dry-runmode (#11427) - Prefer running executables in the environment with
<name>over<name>/__main__.py(#11431) - Retry local clones without hardlinks if they fail (#11421)