diff --git a/CHANGELOG.md b/CHANGELOG.md
index f16293b25..28dd29f80 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,42 @@
+## 0.9.9
+
+Released on 2025-11-12.
+
+### Deprecations
+
+- Deprecate use of `--project` in `uv init` ([#16674](https://github.com/astral-sh/uv/pull/16674))
+
+### Enhancements
+
+- Add iOS support to Python interpreter discovery ([#16686](https://github.com/astral-sh/uv/pull/16686))
+- Reject ambiguously parsed URLs ([#16622](https://github.com/astral-sh/uv/pull/16622))
+- Allow explicit values in `uv version --bump` ([#16555](https://github.com/astral-sh/uv/pull/16555))
+- Warn on use of managed pre-release Python versions when a stable version is available ([#16619](https://github.com/astral-sh/uv/pull/16619))
+- Allow signing trampolines on Windows by using `.rcdata` to store metadata ([#15068](https://github.com/astral-sh/uv/pull/15068))
+- Add `--only-emit-workspace` and similar variants to `uv export` ([#16681](https://github.com/astral-sh/uv/pull/16681))
+
+### Preview features
+
+- Add `uv workspace dir` command ([#16678](https://github.com/astral-sh/uv/pull/16678))
+- Add `uv workspace metadata` command ([#16516](https://github.com/astral-sh/uv/pull/16516))
+
+### Configuration
+
+- Add `UV_NO_DEFAULT_GROUPS` environment variable ([#16645](https://github.com/astral-sh/uv/pull/16645))
+
+### Bug fixes
+
+- Remove `torch-model-archiver` and `torch-tb-profiler` from PyTorch backend ([#16655](https://github.com/astral-sh/uv/pull/16655))
+- Fix Pixi environment detection ([#16585](https://github.com/astral-sh/uv/pull/16585))
+
+### Documentation
+
+- Fix `CMD` path in FastAPI Dockerfile ([#16701](https://github.com/astral-sh/uv/pull/16701))
+
+
## 0.9.8
Released on 2025-11-07.
diff --git a/Cargo.lock b/Cargo.lock
index 20f1a93d8..eedce50a8 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -5256,7 +5256,7 @@ dependencies = [
[[package]]
name = "uv"
-version = "0.9.8"
+version = "0.9.9"
dependencies = [
"anstream",
"anyhow",
@@ -5468,7 +5468,7 @@ dependencies = [
[[package]]
name = "uv-build"
-version = "0.9.8"
+version = "0.9.9"
dependencies = [
"anstream",
"anyhow",
@@ -6762,7 +6762,7 @@ dependencies = [
[[package]]
name = "uv-version"
-version = "0.9.8"
+version = "0.9.9"
[[package]]
name = "uv-virtualenv"
diff --git a/crates/uv-build/Cargo.toml b/crates/uv-build/Cargo.toml
index 27dd26478..8262ee6dd 100644
--- a/crates/uv-build/Cargo.toml
+++ b/crates/uv-build/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "uv-build"
-version = "0.9.8"
+version = "0.9.9"
edition = { workspace = true }
rust-version = { workspace = true }
homepage = { workspace = true }
diff --git a/crates/uv-build/pyproject.toml b/crates/uv-build/pyproject.toml
index 007a4dd2a..adacbde82 100644
--- a/crates/uv-build/pyproject.toml
+++ b/crates/uv-build/pyproject.toml
@@ -1,6 +1,6 @@
[project]
name = "uv-build"
-version = "0.9.8"
+version = "0.9.9"
description = "The uv build backend"
authors = [{ name = "Astral Software Inc.", email = "hey@astral.sh" }]
requires-python = ">=3.8"
diff --git a/crates/uv-static/src/env_vars.rs b/crates/uv-static/src/env_vars.rs
index fa2640c22..60c27579c 100644
--- a/crates/uv-static/src/env_vars.rs
+++ b/crates/uv-static/src/env_vars.rs
@@ -244,7 +244,7 @@ impl EnvVars {
/// Equivalent to the `--no-default-groups` command-line argument. If set, uv will
/// not select the default dependency groups defined in `tool.uv.default-groups`.
- #[attr_added_in("next release")]
+ #[attr_added_in("0.9.9")]
pub const UV_NO_DEFAULT_GROUPS: &'static str = "UV_NO_DEFAULT_GROUPS";
/// Equivalent to the `--no-binary` command-line argument. If set, uv will install
diff --git a/crates/uv-version/Cargo.toml b/crates/uv-version/Cargo.toml
index 457c8cd6e..4e41fc464 100644
--- a/crates/uv-version/Cargo.toml
+++ b/crates/uv-version/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "uv-version"
-version = "0.9.8"
+version = "0.9.9"
edition = { workspace = true }
rust-version = { workspace = true }
homepage = { workspace = true }
diff --git a/crates/uv/Cargo.toml b/crates/uv/Cargo.toml
index d8a6b591a..3be7b8b51 100644
--- a/crates/uv/Cargo.toml
+++ b/crates/uv/Cargo.toml
@@ -1,6 +1,6 @@
[package]
name = "uv"
-version = "0.9.8"
+version = "0.9.9"
edition = { workspace = true }
rust-version = { workspace = true }
homepage = { workspace = true }
diff --git a/docs/concepts/build-backend.md b/docs/concepts/build-backend.md
index 908cb9763..101c2a3ff 100644
--- a/docs/concepts/build-backend.md
+++ b/docs/concepts/build-backend.md
@@ -31,7 +31,7 @@ To use uv as a build backend in an existing project, add `uv_build` to the
```toml title="pyproject.toml"
[build-system]
-requires = ["uv_build>=0.9.8,<0.10.0"]
+requires = ["uv_build>=0.9.9,<0.10.0"]
build-backend = "uv_build"
```
diff --git a/docs/concepts/projects/init.md b/docs/concepts/projects/init.md
index cc836f975..c8ee1bb3b 100644
--- a/docs/concepts/projects/init.md
+++ b/docs/concepts/projects/init.md
@@ -113,7 +113,7 @@ dependencies = []
example-pkg = "example_pkg:main"
[build-system]
-requires = ["uv_build>=0.9.8,<0.10.0"]
+requires = ["uv_build>=0.9.9,<0.10.0"]
build-backend = "uv_build"
```
@@ -136,7 +136,7 @@ dependencies = []
example-pkg = "example_pkg:main"
[build-system]
-requires = ["uv_build>=0.9.8,<0.10.0"]
+requires = ["uv_build>=0.9.9,<0.10.0"]
build-backend = "uv_build"
```
@@ -197,7 +197,7 @@ requires-python = ">=3.11"
dependencies = []
[build-system]
-requires = ["uv_build>=0.9.8,<0.10.0"]
+requires = ["uv_build>=0.9.9,<0.10.0"]
build-backend = "uv_build"
```
diff --git a/docs/concepts/projects/workspaces.md b/docs/concepts/projects/workspaces.md
index 7263c58bf..47ac7d183 100644
--- a/docs/concepts/projects/workspaces.md
+++ b/docs/concepts/projects/workspaces.md
@@ -75,7 +75,7 @@ bird-feeder = { workspace = true }
members = ["packages/*"]
[build-system]
-requires = ["uv_build>=0.9.8,<0.10.0"]
+requires = ["uv_build>=0.9.9,<0.10.0"]
build-backend = "uv_build"
```
@@ -106,7 +106,7 @@ tqdm = { git = "https://github.com/tqdm/tqdm" }
members = ["packages/*"]
[build-system]
-requires = ["uv_build>=0.9.8,<0.10.0"]
+requires = ["uv_build>=0.9.9,<0.10.0"]
build-backend = "uv_build"
```
@@ -188,7 +188,7 @@ dependencies = ["bird-feeder", "tqdm>=4,<5"]
bird-feeder = { path = "packages/bird-feeder" }
[build-system]
-requires = ["uv_build>=0.9.8,<0.10.0"]
+requires = ["uv_build>=0.9.9,<0.10.0"]
build-backend = "uv_build"
```
diff --git a/docs/getting-started/installation.md b/docs/getting-started/installation.md
index 23d86a528..010e553a3 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.9.8/install.sh | sh
+ $ curl -LsSf https://astral.sh/uv/0.9.9/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:
```pwsh-session
- PS> powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/0.9.8/install.ps1 | iex"
+ PS> powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/0.9.9/install.ps1 | iex"
```
!!! tip
diff --git a/docs/guides/integration/aws-lambda.md b/docs/guides/integration/aws-lambda.md
index c089d0ad9..a6d410cf0 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.9.8 AS uv
+FROM ghcr.io/astral-sh/uv:0.9.9 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.9.8 AS uv
+FROM ghcr.io/astral-sh/uv:0.9.9 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 c29131dad..e76e0fcd9 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.9.8`
+- `ghcr.io/astral-sh/uv:{major}.{minor}.{patch}`, e.g., `ghcr.io/astral-sh/uv:0.9.9`
- `ghcr.io/astral-sh/uv:{major}.{minor}`, e.g., `ghcr.io/astral-sh/uv:0.8` (the latest patch
version)
@@ -95,7 +95,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.9.8-alpine`.
+`ghcr.io/astral-sh/uv:{major}.{minor}-{base}`, e.g., `ghcr.io/astral-sh/uv:0.9.9-alpine`.
In addition, starting with `0.8` each derived image also sets `UV_TOOL_BIN_DIR` to `/usr/local/bin`
to allow `uv tool install` to work as expected with the default user.
@@ -136,7 +136,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.9.8 /uv /uvx /bin/
+COPY --from=ghcr.io/astral-sh/uv:0.9.9 /uv /uvx /bin/
```
!!! tip
@@ -154,7 +154,7 @@ COPY --from=ghcr.io/astral-sh/uv:0.9.8 /uv /uvx /bin/
Or, with the installer:
```dockerfile
-ADD https://astral.sh/uv/0.9.8/install.sh /uv-installer.sh
+ADD https://astral.sh/uv/0.9.9/install.sh /uv-installer.sh
```
### Installing a project
@@ -590,5 +590,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.9.8`, or (even better) the specific image digest,
+ version tag, e.g., `ghcr.io/astral-sh/uv:0.9.9`, 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 94474123c..a6d5aaa34 100644
--- a/docs/guides/integration/github.md
+++ b/docs/guides/integration/github.md
@@ -47,7 +47,7 @@ jobs:
uses: astral-sh/setup-uv@v6
with:
# Install a specific version of uv.
- version: "0.9.8"
+ version: "0.9.9"
```
## Setting up Python
diff --git a/docs/guides/integration/pre-commit.md b/docs/guides/integration/pre-commit.md
index 84e77fe55..24ed3c55d 100644
--- a/docs/guides/integration/pre-commit.md
+++ b/docs/guides/integration/pre-commit.md
@@ -19,7 +19,7 @@ To make sure your `uv.lock` file is up to date even if your `pyproject.toml` fil
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.9.8
+ rev: 0.9.9
hooks:
- id: uv-lock
```
@@ -30,7 +30,7 @@ To keep a `requirements.txt` file in sync with your `uv.lock` file:
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.9.8
+ rev: 0.9.9
hooks:
- id: uv-export
```
@@ -41,7 +41,7 @@ To compile requirements files:
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.9.8
+ rev: 0.9.9
hooks:
# Compile requirements
- id: pip-compile
@@ -54,7 +54,7 @@ To compile alternative requirements files, modify `args` and `files`:
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.9.8
+ rev: 0.9.9
hooks:
# Compile requirements
- id: pip-compile
@@ -68,7 +68,7 @@ To run the hook over multiple files at the same time, add additional entries:
repos:
- repo: https://github.com/astral-sh/uv-pre-commit
# uv version.
- rev: 0.9.8
+ rev: 0.9.9
hooks:
# Compile requirements
- id: pip-compile
diff --git a/docs/reference/environment.md b/docs/reference/environment.md
index a25c50266..6b7f678bc 100644
--- a/docs/reference/environment.md
+++ b/docs/reference/environment.md
@@ -330,7 +330,7 @@ any configuration files from the current directory, parent directories, or user
directories.
### `UV_NO_DEFAULT_GROUPS`
-added in `next release`
+added in `0.9.9`
Equivalent to the `--no-default-groups` command-line argument. If set, uv will
not select the default dependency groups defined in `tool.uv.default-groups`.
diff --git a/pyproject.toml b/pyproject.toml
index cb56191fd..1e0dde167 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "maturin"
[project]
name = "uv"
-version = "0.9.8"
+version = "0.9.9"
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"