Change8

0.9.0

Breaking Changes
📦 uvView on GitHub →
6 breaking7 features🐛 5 fixes🔧 6 symbols

Summary

uv 0.9.0 switches the default Python version to 3.14, updates Docker images, and adds free‑threaded interpreter support, while fixing several build and upgrade bugs.

⚠️ Breaking Changes

  • Default Python version changed from 3.13 to 3.14; if no version is pinned uv will now download and use Python 3.14, which may break scripts that assume 3.13. Pin the desired version via a .python-version file or explicit version argument to avoid the change.
  • Free‑threaded Python 3.14+ interpreters are now accepted without the previous "3.14t" opt‑in flag; the GIL‑enabled build is still preferred. Adjust any tooling that relied on the explicit opt‑in flag.
  • Docker image tags for Python 3.14 no longer include the "-rc" suffix (e.g., python:3.14-alpine instead of python:3.14-rc-alpine). Update CI/CD pipelines that reference the old tags.
  • The uv:alpine Docker image now uses Alpine 3.22 instead of 3.21. Pull the new image tag or use uv:alpine3.21 to retain the previous base.
  • The uv:debian and uv:debian-slim Docker images now use Debian 13 "Trixie" instead of Debian 12 "Bookworm". Use uv:bookworm or uv:bookworm-slim to keep the older base.
  • When a trailing '/' is supplied to `uv build` in a workspace, the output path is now correctly resolved to <workspace root>/dist/ instead of a nested child directory.

Migration Steps

  1. If you rely on a specific Python version, pin it in a .python-version file or pass the version explicitly to uv commands.
  2. Update any CI/CD scripts that reference Python 3.14 Docker images with the "-rc" suffix to the new stable tags.
  3. If you need the previous Alpine 3.21 base, switch to the image tag `uv:alpine3.21`.
  4. If you need the previous Debian 12 base, switch to the image tags `uv:bookworm` or `uv:bookworm-slim`.
  5. Review build scripts that invoke `uv build` with a trailing slash; the output location has changed but the command now works as intended.

✨ New Features

  • Added support for CPython 3.14.0.
  • Added support for CPython 3.13.8.
  • Free‑threaded Python 3.14+ can be used without explicit opt‑in.
  • Docker images now reference stable Python 3.14 tags (no "-rc" suffix).
  • Alpine Docker image upgraded to Alpine 3.22.
  • Debian Docker images upgraded to Debian 13 "Trixie".
  • Enhanced dependency resolver: no longer warns when a dependency is constrained by another dependency.

🐛 Bug Fixes

  • Fixed `uv python upgrade / install` output when a request results in a no‑op.
  • Added a pinned‑version hint when `uv tool upgrade` cannot move the tool.
  • Blocked pre‑release versions from being selected in `uv python upgrade` requests.
  • Corrected replacement of installed binaries when upgrading from a pre‑release to a stable Python version.
  • Fixed incorrect output path for `uv build` when the input path ends with a trailing '/'.

🔧 Affected Symbols

uv.python.installuv.venvuvxuv.builduv.tool.upgradeDocker image tags (uv:alpine, uv:debian, uv:debian-slim)