This release introduces the uv project, tool, script, and python interfaces. If you've been following uv's development, you've probably seen these new commands behind a preview flag. Now, the interfaces are stable and ready for production-use.
These features are all documented in new, comprehensive documentation.
This release also stabilizes preview functionality in uv venv
:
uv venv --python <version>
will automatically download the Python version if requireduv venv
will read the required Python version from the.python-version
file orpyproject.toml
The uv pip
interface should not be affected by any breaking changes.
Note the following changelog entries does not include all the new features since they were added incrementally as preview features. See the feature page in the documentation for a comprehensive listing, or read the blog post for more context on the new features.
- Migrate to XDG and Linux strategy for macOS directories (#5806)
- Move concurrency settings to top-level (#4257)
- Apply system Python filtering to executable name requests (#4309)
- Remove
--legacy-setup-py
command-line argument (#4255) - Stabilize preview features (#6166)
- Add 32-bit Windows target (#6252)
- Add support for
python_version in ...
markers (#6172) - Allow user to constrain supported lock environments (#6210)
- Lift requirement that .egg-info filenames must include version (#6179)
- Change "any of" to "all of" in error messages (#6222)
- Collapse redundant dependency clauses enumerating available versions (#6160)
- Collapse unavailable packages in resolver errors (#6154)
- Fix messages for unavailable packages when range is plural (#6221)
- Improve resolver error messages when
--offline
is used (#6156) - Avoid overwriting dependencies with different markers in
uv add
(#6010) - Simplify available package version ranges when the name includes markers or extras (#6162)
- Simplify version ranges reported for unavailable packages (#6155)
- Rename
environment-markers
toresolution-markers
(#6240) - Support
uv add -r requirements.txt
(#6005)
- Hide global options in
uv generate-shell-completion
(#6170) - Show generate-shell-completion command in
uv help
(#6180) - Special-case reinstalls in environment update summaries (#6243)
- Add output when
uv add
anduv remove
update scripts (#6231) - Add support for
package@latest
intool run
(#6138) - Show
python find
output with-q
(#6256) - Warn when
--upgrade
is passed totool run
(#6140)
- Allow customizing the tool install directory with
UV_TOOL_BIN_DIR
(#6207)
- Use
FxHash
inuv-auth
(#6149)
- Avoid panicking when the resolver thread encounters a closed channel (#6182)
- Respect release-only semantics of
python_full_version
when constructing markers (#6171) - Tolerate missing
[project]
table inuv venv
(#6178) - Avoid using workspace
lock_path
as relative root (#6157)
- Preview changes are now included in the standard changelog (#6259)
- Document dynamic metadata behavior for cache (#5993)
- Document the effect of ordering on package priority (#6211)
- Make some edits to the workspace concept documentation (#6223)
- Update environment variables doc (#5994)
- Disable collapsible navigation in the documentation (#5674)
- Document
uv add
anduv remove
behavior with markers (#6163) - Document the Python installation directory (#6227)
- Document the
uv.pip
section semantics (#6225) - Document the cache directory (#6229)
- Document the tools directory (#6228)
- Document yanked packages caveat during sync (#6219)
- Link to persistent configuration options in Python versions document (#6226)
- Link to the projects concept from the dependencies concept (#6224)
- Improvements to the Docker installation guide (#6216)
- Increase the size of navigation entries (#6233)
- Install
ca-certificates
in docker and use pipefail (#6208) - Add script support to feature highlights in index (#6251)
- Show
uv generate-shell-completion
in CLI documentation reference (#6146) - Update Docker guide for projects (#6217)
- Use
uv add --script
in guide (#6215) - Show pinned version example on in GitHub Actions integration guide (#6234)
- Add
--with-editable
support touv run
(#6262) - Respect
.python-version
files andpyproject.toml
inuv python find
(#6369) - Allow manylinux compatibility override via
_manylinux
module (#6039)
- Avoid treating
uv add -r
as--raw-sources
(#6287)
- Always invoke found interpreter when
uv run python
is used (#6363) - Avoid adding extra newline for script with non-empty prelude (#6366)
- Fix metadata cache instability for lockfile (#6332)
- Handle Ctrl-C properly in
uvx
invocations (#6346) - Ignore workspace discovery errors with
--no-workspace
(#6328) - Invalidate
uv.lock
when virtualdev-dependencies
change (#6291) - Make cache robust to removed archives (#6284)
- Preserve Git username for SSH dependencies (#6335)
- Respect
--no-build-isolation
inuv add
(#6368) - Respect
.python-version
files inuv run
outside projects (#6361) - Use
sys_executable
foruv run
invocations (#6354) - Use atomic write for
pip compile
output (#6274) - Use consistent logic for deserializing short revisions (#6341)
- Remove the preview default value of
python-preference
(#6301) - Update env vars doc about
XDG_*
variables on macOS (#6337)
- Add support for configuring
python-downloads
withUV_PYTHON_DOWNLOADS
(#6436) - Add support for configuring the
python-preference
withUV_PYTHON_PREFERENCE
(#6432) - Deny invalid members in workspace schema (#6450)
- Stop streaming wheels when
METADATA
is discovered (if range requests aren't supported) (#6470)
- Remove URI type from JSON Schema (#6449)
- Fix retrieval of credentials for URLs from cache (#6452)
- Restore
cache
suffix on Windows cache path (#6482) - Treat
.pyw
files as scripts inuv run
on Windows (#6453) - Treat invalid extras as
false
in marker evaluation (#6395) - Avoid overwriting symlinks in
pip compile
output (#6487)
- Add
uv run
hint to theuvx
guide (#6454) - Add a guide for using uv with FastAPI (#6401)
- Add tip for using
managed = false
to disable project management (#6465) - Clarify the
uv tool run
,uvx
, anduv run
relationships (#6455) - Fix references to
--python-downloads
(it is--no-python-downloads
) (#6439) - Further clarifications to the tools documentation (#6474)
- Update docs dockerfile (bullseye -> bookworm) (#6441)
- Update the installation documentation page (#6468)
- Update pip compatibility pages to mention configuration files support (#6410)
- Add
uv run
docs for gui scripts (#6478)
- Add
uv sync --no-install-project
to skip installation of the project (#6538) - Add
uv sync --no-install-workspace
to skip installation of all workspace members (#6539) - Add
uv sync --no-install-package
to skip installation of specific packages (#6540) - Show previous version in self update message (#6473)
- Add
--no-project
alias foruv python pin --no-workspace
(#6514) - Ignore
.python-version
files inuv venv
with--no-config
(#6513) - Include virtual environment interpreters in
uv python find
(#6521) - Respect
-
as stdin channel foruv run
(#6481) - Revert changes to pyproject.toml when sync fails during
uv add
(#6526)
- Add
UV_COMPILE_BYTECODE
environment variable (#6530)
- Set
VIRTUAL_ENV
foruv run
invocations (#6543) - Ignore errors in workspace discovery with
--no-project
(#6554)
- Add documentation for
uv python find
(#6527) - Add uv tool install example in Docker (#6547)
- Document why we do lower bounds (#6516)
- Fix to miss string termination in PowerShell commands for shell autocompletion documentation (#6491)
- Fix incorrect workspace members keyword (#6502)
- Use proper environment variables for Windows (#6433)
- Improve caveat in
uvx
note (#6546)
- Show
--editable
on theuv add
CLI (#6608) - Add
--refresh
totool run
warning for--with
dependencies (#6609)
- Allow per dependency build isolation for
setup.py
-based projects (#6517) - Avoid un-strict syncing by-default for build isolation (#6606)
- Respect
--no-build-isolation-package
inuv sync
(#6605) - Respect extras and markers on virtual dev dependencies (#6620)
- Support PEP 723 scripts in GUI files (#6611)
- Update lockfile after setting minimum bounds in
uv add
(#6618) - Use relative paths for
--find-links
and local registries (#6566) - Use separate types to represent raw vs. resolver markers (#6646)
- Parse wheels
WHEEL
andMETADATA
files as email messages (#6616) - Support unquoted hrefs in
--find-links
and other HTML sources (#6622) - Don't canonicalize paths to user requirements (#6560)
- Add FastAPI guide to overview (#6603)
- Add docs for disabling build isolation with
uv sync
(#6607) - Add example of reading script from stdin using echo (#6567)
- Add tip to use intermediate layers in Docker builds (#6650)
- Clarify need to include
pyproject.toml
with--no-install-project
(#6581) - Move
WORKDIR
directive in Docker examples (#6652) - Remove duplicate
WORKDIR
directive in Docker example (#6651)
- Add support for
--allow-insecure-host
(aliased to--trusted-host
) (#6591) - Read requirements from
requires.txt
when available (#6655) - Respect
tool.uv.environments
inpip compile --universal
(#6663) - Use relative paths by default in
uv add
(#6686) - Improve messages for empty solves and installs (#6588)
- Avoid reusing state across tool upgrades (#6660)
- Detect musl and error for musl Python builds (#6643)
- Ignore
send
errors in installer (#6667)
- Add development section to Docker guide and reference new example project (#6666)
- Add docs for
constraint-dependencies
andoverride-dependencies
(#6596) - Clarify package priority order in pip compatibility guide (#6619)
- Fix docs for disabling build isolation with
uv sync
(#6674) - Improve consistency of directory lookup instructions in Docker (#6665)
- Improve lockfile concept documentation, add coverage for upgrades (#6698)
- Shift the order of some of the Docker guide content (#6664)
- Use
python
to highlight requirements and use more content tabs (#6549)