diff --git a/CHANGELOG.md b/CHANGELOG.md
index fe9469dc4..142e92cca 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,39 @@
# Changelog
+## 0.5.31
+
+### Enhancements
+
+- Add `uv sync --script` ([#11361](https://github.com/astral-sh/uv/pull/11361))
+- Allow PEP 508 requirements in tool requests ([#11337](https://github.com/astral-sh/uv/pull/11337))
+- Allow source distributions to produce wheels with `+local` suffixes ([#11429](https://github.com/astral-sh/uv/pull/11429))
+- Bring parity to `uvx` and `uv tool install` requests ([#11345](https://github.com/astral-sh/uv/pull/11345))
+- Use a stable directory for local, remote, and stdin script virtual environments ([#11347](https://github.com/astral-sh/uv/pull/11347), [#11364](https://github.com/astral-sh/uv/pull/11364))
+- Detect infinite recursion in `uv run` ([#11386](https://github.com/astral-sh/uv/pull/11386))
+
+### Python
+
+The managed Python distributions have been updated, including:
+
+- CPython 3.14.0a5, which includes a new [tail calling interpreter](https://docs.python.org/3.14/whatsnew/3.14.html#whatsnew314-tail-call) for a significant performance improvement
+- The bundled OpenSSL version was updated from 3.0.15 to 3.0.16 which fixes a [security advisory](https://openssl-library.org/news/secadv/20241016.txt)
+
+See the [`python-build-standalone` release notes](https://github.com/astral-sh/python-build-standalone/releases/tag/20250212) for more details.
+
+### Bug fixes
+
+- Fix cross-drive script installation ([#11167](https://github.com/astral-sh/uv/pull/11167))
+- Add indexes in priority order ([#11451](https://github.com/astral-sh/uv/pull/11451))
+- Allow `--python
` requests to match existing environments if `sys.executable` is the same file ([#11290](https://github.com/astral-sh/uv/pull/11290))
+- Avoid comparing to system site packages in `--dry-run` mode ([#11427](https://github.com/astral-sh/uv/pull/11427))
+- Prefer running executables in the environment with `` over `/__main__.py` ([#11431](https://github.com/astral-sh/uv/pull/11431))
+- Retry local clones without hardlinks if they fail ([#11421](https://github.com/astral-sh/uv/pull/11421))
+
+### Documentation
+
+- Update alternative-indexes.md to use `UV_INDEX` instead of `UV_EXTRA_INDEX_URL` ([#11381](https://github.com/astral-sh/uv/pull/11381))
+- Update scripts guide to include using package indexes ([#11443](https://github.com/astral-sh/uv/pull/11443))
+
## 0.5.30
### Python
diff --git a/Cargo.lock b/Cargo.lock
index 4dfe0c28a..c1865924a 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -4512,7 +4512,7 @@ checksum = "b3758f5e68192bb96cc8f9b7e2c2cfdabb435499a28499a42f8f984092adad4b"
[[package]]
name = "uv"
-version = "0.5.30"
+version = "0.5.31"
dependencies = [
"anstream",
"anyhow",
@@ -5747,7 +5747,7 @@ dependencies = [
[[package]]
name = "uv-version"
-version = "0.5.30"
+version = "0.5.31"
[[package]]
name = "uv-virtualenv"
diff --git a/crates/uv-version/Cargo.toml b/crates/uv-version/Cargo.toml
index d4887572b..093dc3f4a 100644
--- a/crates/uv-version/Cargo.toml
+++ b/crates/uv-version/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "uv-version"
-version = "0.5.30"
+version = "0.5.31"
edition = { workspace = true }
rust-version = { workspace = true }
homepage = { workspace = true }
diff --git a/crates/uv/Cargo.toml b/crates/uv/Cargo.toml
index 0e00cbcb1..16bfcfbe6 100644
--- a/crates/uv/Cargo.toml
+++ b/crates/uv/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "uv"
-version = "0.5.30"
+version = "0.5.31"
edition = { workspace = true }
rust-version = { workspace = true }
homepage = { workspace = true }
diff --git a/docs/getting-started/installation.md b/docs/getting-started/installation.md
index ef8214c0f..e0853dd79 100644
--- a/docs/getting-started/installation.md
+++ b/docs/getting-started/installation.md
@@ -25,7 +25,7 @@ uv provides a standalone installer to download and install uv:
Request a specific version by including it in the URL:
```console
- $ curl -LsSf https://astral.sh/uv/0.5.30/install.sh | sh
+ $ curl -LsSf https://astral.sh/uv/0.5.31/install.sh | sh
```
=== "Windows"
@@ -41,7 +41,7 @@ uv provides a standalone installer to download and install uv:
Request a specific version by including it in the URL:
```console
- $ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/0.5.30/install.ps1 | iex"
+ $ powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/0.5.31/install.ps1 | iex"
```
!!! tip
diff --git a/docs/guides/integration/aws-lambda.md b/docs/guides/integration/aws-lambda.md
index 751e1bf59..67631836d 100644
--- a/docs/guides/integration/aws-lambda.md
+++ b/docs/guides/integration/aws-lambda.md
@@ -92,7 +92,7 @@ the second stage, we'll copy this directory over to the final image, omitting th
other unnecessary files.
```dockerfile title="Dockerfile"
-FROM ghcr.io/astral-sh/uv:0.5.30 AS uv
+FROM ghcr.io/astral-sh/uv:0.5.31 AS uv
# First, bundle the dependencies into the task root.
FROM public.ecr.aws/lambda/python:3.13 AS builder
@@ -334,7 +334,7 @@ And confirm that opening http://127.0.0.1:8000/ in a web browser displays, "Hell
Finally, we'll update the Dockerfile to include the local library in the deployment package:
```dockerfile title="Dockerfile"
-FROM ghcr.io/astral-sh/uv:0.5.30 AS uv
+FROM ghcr.io/astral-sh/uv:0.5.31 AS uv
# First, bundle the dependencies into the task root.
FROM public.ecr.aws/lambda/python:3.13 AS builder
diff --git a/docs/guides/integration/docker.md b/docs/guides/integration/docker.md
index 791c409b4..eea89bd34 100644
--- a/docs/guides/integration/docker.md
+++ b/docs/guides/integration/docker.md
@@ -31,7 +31,7 @@ $ docker run --rm -it ghcr.io/astral-sh/uv:debian uv --help
The following distroless images are available:
- `ghcr.io/astral-sh/uv:latest`
-- `ghcr.io/astral-sh/uv:{major}.{minor}.{patch}`, e.g., `ghcr.io/astral-sh/uv:0.5.30`
+- `ghcr.io/astral-sh/uv:{major}.{minor}.{patch}`, e.g., `ghcr.io/astral-sh/uv:0.5.31`
- `ghcr.io/astral-sh/uv:{major}.{minor}`, e.g., `ghcr.io/astral-sh/uv:0.5` (the latest patch
version)
@@ -72,7 +72,7 @@ And the following derived images are available:
As with the distroless image, each derived image is published with uv version tags as
`ghcr.io/astral-sh/uv:{major}.{minor}.{patch}-{base}` and
-`ghcr.io/astral-sh/uv:{major}.{minor}-{base}`, e.g., `ghcr.io/astral-sh/uv:0.5.30-alpine`.
+`ghcr.io/astral-sh/uv:{major}.{minor}-{base}`, e.g., `ghcr.io/astral-sh/uv:0.5.31-alpine`.
For more details, see the [GitHub Container](https://github.com/astral-sh/uv/pkgs/container/uv)
page.
@@ -110,7 +110,7 @@ Note this requires `curl` to be available.
In either case, it is best practice to pin to a specific uv version, e.g., with:
```dockerfile
-COPY --from=ghcr.io/astral-sh/uv:0.5.30 /uv /uvx /bin/
+COPY --from=ghcr.io/astral-sh/uv:0.5.31 /uv /uvx /bin/
```
!!! tip
@@ -128,7 +128,7 @@ COPY --from=ghcr.io/astral-sh/uv:0.5.30 /uv /uvx /bin/
Or, with the installer:
```dockerfile
-ADD https://astral.sh/uv/0.5.30/install.sh /uv-installer.sh
+ADD https://astral.sh/uv/0.5.31/install.sh /uv-installer.sh
```
### Installing a project
@@ -554,5 +554,5 @@ Verified OK
!!! tip
These examples use `latest`, but best practice is to verify the attestation for a specific
- version tag, e.g., `ghcr.io/astral-sh/uv:0.5.30`, or (even better) the specific image digest,
+ version tag, e.g., `ghcr.io/astral-sh/uv:0.5.31`, or (even better) the specific image digest,
such as `ghcr.io/astral-sh/uv:0.5.27@sha256:5adf09a5a526f380237408032a9308000d14d5947eafa687ad6c6a2476787b4f`.
diff --git a/docs/guides/integration/github.md b/docs/guides/integration/github.md
index 56fd8192f..f5c046a8b 100644
--- a/docs/guides/integration/github.md
+++ b/docs/guides/integration/github.md
@@ -47,7 +47,7 @@ jobs:
uses: astral-sh/setup-uv@v5
with:
# Install a specific version of uv.
- version: "0.5.30"
+ version: "0.5.31"
```
## Setting up Python
diff --git a/docs/guides/integration/pre-commit.md b/docs/guides/integration/pre-commit.md
index 02f7e14ec..3dc5f2780 100644
--- a/docs/guides/integration/pre-commit.md
+++ b/docs/guides/integration/pre-commit.md
@@ -17,7 +17,7 @@ pre-commit, add the following to the `.pre-commit-config.yaml`:
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.5.30
+ rev: 0.5.31
hooks:
- id: uv-lock
```
@@ -28,7 +28,7 @@ To keep your `requirements.txt` file updated using pre-commit:
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.5.30
+ rev: 0.5.31
hooks:
- id: uv-export
```
@@ -39,7 +39,7 @@ To compile requirements via pre-commit, add the following to the `.pre-commit-co
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.5.30
+ rev: 0.5.31
hooks:
# Compile requirements
- id: pip-compile
@@ -52,7 +52,7 @@ To compile alternative files, modify `args` and `files`:
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.5.30
+ rev: 0.5.31
hooks:
# Compile requirements
- id: pip-compile
@@ -66,7 +66,7 @@ To run the hook over multiple files at the same time:
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.5.30
+ rev: 0.5.31
hooks:
# Compile requirements
- id: pip-compile
diff --git a/pyproject.toml b/pyproject.toml
index 46d5039cb..58a5407f1 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "maturin"
[project]
name = "uv"
-version = "0.5.30"
+version = "0.5.31"
description = "An extremely fast Python package and project manager, written in Rust."
authors = [{ name = "Astral Software Inc.", email = "hey@astral.sh" }]
requires-python = ">=3.8"