contribution/compass
astral-sh/uv

uv

64 signals · 74 observation events

Open repository ↗

An extremely fast Python package and project manager, written in Rust.

88.7K stars3.5K forksRustApache-2.0packagingpythonresolveruvkeyword: Astral uvkeyword: uv Python
PROJECT NEWS

Release, roadmap, and discussion

All news →
astral-sh/uv

uv

Developer Infrastructure
Latest stable

0.12.3

0.12.3
  • Release Notes
  • Python
  • Add CPython 3.13.15 (#20997)
  • Preview features
  • Add --output-format to select automatic, human-readable, or raw-byte output for uv cache size (#20992)
Original release notes ↗

Publicly indicated next

  • milestone
    v0.13.0Publicly indicated0% complete · 2 open

Prereleases and milestones indicate public plans; they are not delivery commitments.

Observation trail

  1. discoveredinitial snapshot
  2. discoveredinitial snapshot
  3. discoveredinitial snapshot
  4. discoveredinitial snapshot
  5. discoveredinitial snapshot
  6. changedtext, updatedAt
  7. changedtext, updatedAt
  8. changedupdatedAt, state
  9. changedupdatedAt, state
  10. discoveredinitial snapshot
  11. discoveredinitial snapshot
  12. discoveredinitial snapshot
  13. discoveredinitial snapshot
  14. changedupdatedAt, metrics
  15. discoveredinitial snapshot
  16. changedupdatedAt, metrics, state
  17. discoveredinitial snapshot
  18. discoveredinitial snapshot
  19. changedtitle, text, updatedAt
  20. changedtext, updatedAt, metrics
  21. changedupdatedAt, metrics
  22. discoveredinitial snapshot
  23. changedupdatedAt, state
  24. discoveredinitial snapshot
  25. discoveredinitial snapshot
  26. changedupdatedAt
  27. discoveredinitial snapshot
  28. changedupdatedAt, state
  29. changedtext, updatedAt
  30. discoveredinitial snapshot
50 shown
issue

Add environment variable to always use `--active` flag

### Summary The new `--active` flag (#11189) is a great addition and I think it goes some way to allow `uv` and `pyenv` to work better together (see #6204). Would it be possible to add a new environment variable to make that flag the default? For example, the PR suggested something like `UV_PROJECT_ENVIRONMENT=ACTIVE` but could also be `UV_ACTIVE=1`. Or mayb

importance 52@albireoxopenenhancementconfigurationOriginal evidence ↗
issue

Have `uv sync` default to `--locked`

### Summary I was a little surprised/confused when migrating to `uv` that the default `uv sync` did not enforce that the project was synced exactly to `uv.lock` or else error if not. When reading through the docs, I found some references to `--frozen` - https://docs.astral.sh/uv/guides/integration/docker/#installing-a-project And then other references that u

importance 32@johnthagenopenenhancementOriginal evidence ↗
issue

Allow additional data to be incuded in the user-agent similar to PIP_USER_AGENT_USER_DATA

### Summary My team would like to leverage uv in a similar way to pip, one of the important pieces for us is to append additional information in our user agent for internal tracking. uv does not yet support this, like `pip` does. I would like to see uv have this functionality to maintain parity with pip. per https://pip.pypa.io/en/stable/user_guide/#using-a-

importance 16@sfc-gh-jmarylanderopenenhancementOriginal evidence ↗
pull request

Content-address wheel archives with directory hashes

## Summary Prior to this change, extracted wheels were persisted in `archive-v0` under randomly generated IDs. As a result, we might store the same wheel multiple times when reached through different cache entries. We now compute a deterministic directory hash while extracting ZIP wheels and use a 24-character, lowercase base-36 encoding as the archive ID. T

importance 15@charliermarshopenenhancementperformancepreviewOriginal evidence ↗
issue

--find-links with a relative path in a requirements file fails with "relative URL without a base" (regression since 0.12.x)

### Summary A `--find-links` line with a relative path inside a requirements.in/requirements.txt file fails to resolve, regardless of whether the path has a `./` prefix, no prefix, or is passed to `uv pip compile` or `uv pip install -r`: ``` error: Invalid URL in `requirements.in` at position N: `./private_wheels/` Caused by: relative URL without a base ```

importance 11@archatasopenbugOriginal evidence ↗
issue

PEP 723 inline metadata tag not found when there's trailing whitespace

### Summary i have an issue with PEP 723, when you have a blank space at the end of the `# ///` `uv` doesn't properly parse the closing tag. it tells you that there is an error: ``` error: An opening tag (`# /// script`) was found without a closing tag (`# ///`). Ensure that every line between the opening and closing tags (including empty lines) starts with

importance 8@snat-sclosederror messagesOriginal evidence ↗
issue

No migration path for native-tls -> system-certs with pinned environments

### Summary I'm reporting this as a bug because I see this as an unexpected behavior. The introduction of `--system-certs` introduces an impossible to solve migration dilemma for our use cases. We have: - uv latest version globally installed - uv in pinned virtual environments for reproducibility with different versions - one global uv.toml for both cases So

importance 8@schlamaropenquestionOriginal evidence ↗
issue

pip-style extra index url retry limit

### Summary My company has a private package index that I can only access when on the network. To accommodate scenarios where I am offsite and not on VPN, I have the following entry in my user pip.ini. ``` [install] extra-index-url = <https://pipindex.company.com> retries = 0 ``` Could something equivalent be implemented for uv? It's pretty handy for seamles

importance 8@nbittner-htriopenenhancementOriginal evidence ↗
issue

uv tree --group specific_group | not showing only specific_group

### Summary uv tree do not respect the `--group` arg ```toml [dependency-groups] dev = [ "ruff==0.16.2", ] airflow = [ "a2wsgi==1.10.10", "aiofiles==25.1.0", "aiohappyeyeballs==2.7.1", ... ] ``` running ```shell uv tree --group airflow --depth 1 ``` it show all dependencies of the groups airflow and dev ### Platform Linux 7.0.0-28-generic x86_64 GNU/Linux ##

importance 8@raphaelauvclosedquestionneeds-mreOriginal evidence ↗
issue

Relative `tool.uv.sources` paths written as absolute in uv.lock since 0.10.10

### Summary Since uv 0.10.10 (PR #18176), relative path dependencies declared in `[tool.uv.sources]` are written as absolute paths in `uv.lock`. This makes lockfiles non-portable across machines and unsuitable for version control. I'm using this in a monorepo-style repository where I do not want a shared workspace or workspace-level lockfile because our CI/C

importance 7@eddie-on-ghclosedbugOriginal evidence ↗
issue

uv run resolves a console-script to a different, already-deleted project's stale cached venv

### Summary `uv run --project <dir> <console-script>` can execute the console-script file physically sitting in a **different, unrelated, already-deleted** project checkout's `.venv/bin/` instead of the requested project's own — because a stale `Interpreter` query result for that other checkout got cached (apparently keyed correctly, since the cache key is `

importance 7@nancy-insightfirstopenOriginal evidence ↗
issue

UV recreates the venv on every run.

### Summary ``` uv run -v executor-runner DEBUG Found workspace root: `/mnt/hdd/Toolkits/Tools/AutotestServices` DEBUG Adding root workspace member: `/mnt/hdd/Toolkits/Tools/AutotestServices` DEBUG Found workspace configuration at `/mnt/hdd/Toolkits/Tools/AutotestServices/pyproject.toml` DEBUG Searching for user configuration in: `/home/tester/.config/uv/uv.

importance 7@WintreistopenbugOriginal evidence ↗
issue

uv-build: suppress "missing upper bound" warning via env var

### Summary I frequently work with Python projects where uv is locked by [mise](https://mise.jdx.dev/). A dummy project with mise + uv + configuration scaffolding is [here](https://github.com/manselmi/yospos). Given that 1. [mise locks the uv version](https://github.com/manselmi/yospos/blob/019a251385da23e3ad74254141e156d627ae4074/mise.lock#L22-L42), and 2.

importance 7@manselmiopenenhancementOriginal evidence ↗
issue

`uv run` uses wrong python interpreter inside virtualenv with copied python

### Summary I tried using uv with an old project that creates its own venv using a python version that isn't the system deafult python. The system default /usr/bin/python3, used by default by uv, is python3.9 ```sh % uv run python --version Python 3.9.25 ``` `uv run --with some_dependency` breaks inside venvs that use a different python. Minimal reproduction

importance 7@ximopenbugexternalOriginal evidence ↗
issue

`uv lock` errors if `.venv` is not valid

### Summary When `.venv` folder exists, not empty, and not considered a virtual environment by `uv`, `uv lock` will fail to find a suitable python executable to use and raise an error. I have the following folder structure for managing multiple virtual environments of different python versions for a specific project. They are all created from `uv venv -p <ve

importance 6@tylerh111closedbugOriginal evidence ↗
pull request

Use mimalloc v3

Same as https://github.com/astral-sh/ruff/pull/27586 Close https://github.com/astral-sh/uv/issues/19189

importance 6@chirizxcOriginal evidence ↗
issue

author field in pyproject.toml is being interpret as TOML 1.1 by uv build

### Summary I have a `pyproject.toml` file that has an author field that looks like this: ```toml [project] # ... author = [{name = "rzuckerm"}] # ... ``` The above is allowed in TOML 1.0 since I can load my `pyproject.toml` file using the old [toml](https://pypi.org/project/toml) package, and that package only supports TOML 1.0. However, when I do `uv build

importance 5@rzuckermquestionOriginal evidence ↗
issue

uv check --no-install-project

### Summary My project has extension modules that are heavy to build and require external non-Python dependencies. I do have *.pyi files for these extensions. I've setup `ty` such that I can install Python dependencies in .venv with `uv sync --no-install-project` and run `ty check` afterwards. I would like to use `astral-sh/ty-pre-commit` hook, however I can

importance 5@dalcinlclosedenhancementuv checkOriginal evidence ↗
pull request

Support referencing indexes by name via `--index` and `--default-index`

## Summary Implement #13974. This PR makes `uv ... --index name` attempt to look up the index by name in filesystem configuration (workspace `pyproject.toml` or adjacent `uv.toml` (for project commands), then user config, then system config). The only difference is that the index will be passed with `explicit` and `default` set to `false` for that invocation

importance 5@EliteTKopenenhancementpreviewOriginal evidence ↗
issue

Unformatted error messages on `uv version --bump`

### Summary When running the command `uv version --bump foo` with an invalid argument to the `--bump` option an error occurs. Unfortunately the error does not seem to be formatted or printed the same way as most other errors. As of `v0.12.3` of `uv` the error messages lack color and a newline character at the end, resulting in a misformatted terminal prompt.

importance 4@npikallclosedbugOriginal evidence ↗
issue

Avoid orphaned caret when formatting PEP 508 errors for empty input

### Summary Script with inline metadata: ```py # /// script # requires-python = ">=3.11" # dependencies = ["httpx", ""] # /// from typing import reveal_type import httpx import attrs client = httpx.Client() reveal_type(client) ``` Note the invalid `""` dependency Running uv: ```shell ❯ uv run --script script.py error: TOML parse error at line 2, column 26 |

importance 4@MichaReiserclosedbugOriginal evidence ↗
issue

Relative indexes in PEP 723 scripts are resolved against the current working directory

## Summary Relative local indexes declared in a PEP 723 script are resolved against the directory where `uv run` is invoked, rather than the directory containing the script. So the same script can work when ran from its own directory but fail when ran by path from somewhere else ## Reproduction ```console $ tmpdir="$(mktemp -d)" $ mkdir -p "$tmpdir/scripts/l

importance 4@kowanietzopenbugOriginal evidence ↗
issue

Dependency Dashboard

> ℹ️ **Note** > > This PR body was truncated due to platform limits. This issue lists Renovate updates and detected dependencies. Read the [Dependency Dashboard](https://docs.renovatebot.com/key-concepts/dashboard/) docs to learn more.<br>[View this repository on the Mend.io Web Portal](https://developer.mend.io/github/astral-sh/uv). ## Abandoned Dependencie

importance 4@renovate[bot]openinternalOriginal evidence ↗
pull request

Remove lib64-lib symlink in virtualenv

## Summary That behavior is actually problematic. Neither pypa `virtualenv` nor cpython `venv` does it anymore. `platlibdir` directory will be created if necessary based on sysconfig. ## Test Plan Added to `crates/uv/tests/python/venv.rs`.

importance 3@CycloctaneopenOriginal evidence ↗
pull request

Add code coverage + HTML report machinery

## Summary This adds a new `cargo dev coverage` subcommand, which invokes nextest under our new coverage pesudo-profile. This profile in turn enables `-C instrument-coverage`. `cargo dev coverage` also takes care of merging raw profiling samples into profdata and LCOV reports for us, which our new `coverage-html-report.py` script can turn into a readable (bu

importance 2@woodruffwopeninternalcoverageOriginal evidence ↗
pull request

Give a specific error when a PEP 723 closing tag has trailing whitespace

## Summary Closes #10918. When a PEP 723 block is closed with `# ///` that has trailing whitespace (e.g. `# /// `), uv can't find the closing tag and returns the generic "opening tag without a closing tag" error, which doesn't point at the real cause. Per the discussion on the issue, we still want to reject trailing whitespace to stay consistent with the PEP

importance 2@yashs33244closederror messagesOriginal evidence ↗
pull request

Stabilize publish index readiness checks

Publishing smoke tests can fail when TestPyPI briefly serves inconsistent simple-index responses after an upload. `wait_for_index` previously accepted the first response containing both artifacts, while concurrent runs could also make its unpinned lookup select a newer release. Resolve the exact uploaded version, require consecutive refreshed index responses

importance 2@zaniebopenOriginal evidence ↗
pull request

Allow locking with an invalid project environment

`uv lock` fails when `.venv` is a non-empty directory without a Python executable, even though locking only needs an interpreter. Ignore unusable project environments during interpreter discovery while preserving validation before creating an environment, so `uv sync` still refuses to replace unrelated directories. Fixes astral-sh/uv#19832; stacked on astral

importance 2@astral-automations-bot[bot]closedbugOriginal evidence ↗
pull request

Skip stale rebases after pull request base changes

Stacked pull request bases can advance while a conflicted pull request is being rebased, causing the isolated publisher to reject its artifact even though the ancestry guard is behaving correctly. Record the exact base commit used for the rebase and skip artifacts when that base changes before import, preserving the existing ancestry check and avoiding token

importance 2@astral-automations-bot[bot]closedautomationsOriginal evidence ↗
pull request

Add regression test for uv#21062

`PYTHONEXECUTABLE` changes the interpreter metadata reported for a requested Python executable, but the interpreter cache currently ignores that override. Reproduce the resulting cache pollution directly with `uv python find`: after the override is removed, looking up the same executable still returns the overridden interpreter. The relationship to astral-sh

importance 2@astral-automations-bot[bot]closedinternaltestingOriginal evidence ↗
pull request

Add test coverage for uv#15224

`uv sync --no-editable` leaves local projects and workspace members stale after source-only changes because their cached wheels are keyed only by build metadata. Capture the existing behavior for both reused and fresh environments in a regression test for astral-sh/uv#15224.

importance 2@astral-automations-bot[bot]closedinternaltestingOriginal evidence ↗
pull request

Fix interpreter cache invalidation test

The existing interpreter-cache invalidation test reports a `sys.executable` that does not match its mock executable, so interpreter metadata is never cached and the test passes without exercising cache reuse or invalidation. Point the fixture at the actual mock executable and assert that interpreter metadata is cached, reused without another interpreter quer

importance 2@astral-automations-bot[bot]closedinternaltestingOriginal evidence ↗
pull request

Deduplicate binary payloads with archive manifests

## Summary Prior to this change, content-addressed wheel archives could only deduplicate complete extracted trees. Different wheels containing the same native library still stored separate copies of that `.so`, `.pyd`, `.dll`, or `.dylib` payload in each archive. This PR moves native library payloads into a separate content-addressed `archive-files-v0` bucke

importance 1@charliermarshopenOriginal evidence ↗
pull request

Fix lookahead for transitive extras on path dependencies

## Summary Fixes #20672. Lookahead previously skipped registry-form requirements such as `target[feature]`, even when the same package was already associated with a path source. As a result, dependencies exposed only by the transitive extra were not visited and were later rejected as undeclared URL dependencies. The fix tracks known non-registry sources by p

importance 1@shlederclosedOriginal evidence ↗
pull request

Reject conflicts between packages and their own extras

## Summary - Reject conflicts between a package and one of its own extras, since selecting the extra always selects the package too. - Check this during conflict validation, before resolution starts or a lockfile is written. - Remove `lock_conflicting_workspace_members_depends_direct_extra`. It used this exact conflict as a resolver workaround, so its lock a

importance 1@kowanietzopenOriginal evidence ↗
pull request

Only warn about unbounded build backends for source distributions

An unbounded `uv_build` requirement currently triggers a warning while building wheels, editable wheels, and metadata even though those artifacts do not distribute build-system requirements. Restrict the missing-upper-bound warning to source-distribution build. I think our warning here is a bit overzealous for people who do not intend to distribute a source

importance 1@astral-automations-bot[bot]openenhancementOriginal evidence ↗
pull request

Update Rust crate async-trait to v0.1.91

This PR contains the following updates: | Package | Type | Update | Change | Pending | |---|---|---|---|---| | [async-trait](https://redirect.github.com/dtolnay/async-trait) | workspace.dependencies | patch | `0.1.89` → `0.1.91` | `0.1.92` | --- ### Release Notes <details> <summary>dtolnay/async-trait (async-trait)</summary> ### [`v0.1.91`](https://redirect.

importance 0@renovate[bot]closedinternalbuild:skip-releasebuild:skip-dockerOriginal evidence ↗
pull request

Update actions/setup-python action to v7

This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [actions/setup-python](https://redirect.github.com/actions/setup-python) | action | major | `v6.3.0` → `v7.0.0` | --- ### Release Notes <details> <summary>actions/setup-python (actions/setup-python)</summary> ### [`v7.0.0`](https://redirect.github.com/actions/set

importance 0@renovate[bot]closedinternalbuild:skip-releasebuild:skip-dockerOriginal evidence ↗
pull request

Enable PGO for Linux x86-64 uv releases

## Summary This PR enables PGO for uv releases, starting with Linux x86-64. ### Design The release pipeline is modified as follows: - We build instrumented `uv` and `uvx` release binaries inside the existing manylinux container. - We train directly on eleven shared `test/ecosystem` fixtures: cibuildwheel, Cookiecutter, Flask, HTTPX, LLM, the OpenAI Python SD

importance 0@charliermarshopenreleasesOriginal evidence ↗
pull request

Enable PGO for Windows x86-64 uv releases

## Summary This PR enables PGO for uv's Windows x86-64 releases, following the approach outlined in https://github.com/astral-sh/uv/pull/21001. The existing static-CRT configuration is preserved.

importance 0@charliermarshopenreleasesOriginal evidence ↗
pull request

Enable PGO for Linux ARM64 uv releases

## Summary This PR enables PGO for uv's Linux ARM64 releases, following the approach outlined in https://github.com/astral-sh/uv/pull/21001. (To enable PGO, we also move to a native ARM64 runner.)

importance 0@charliermarshopenreleasesOriginal evidence ↗
pull request

Update taiki-e/install-action action to v2.85.9

This PR contains the following updates: | Package | Type | Update | Change | Pending | |---|---|---|---|---| | [taiki-e/install-action](https://redirect.github.com/taiki-e/install-action) | action | patch | `v2.85.6` → `v2.85.9` | `v2.85.13` (+3) | --- ### Release Notes <details> <summary>taiki-e/install-action (taiki-e/install-action)</summary> ### [`v2.85.

importance 0@renovate[bot]openinternalbuild:skip-releasebuild:skip-dockerOriginal evidence ↗
pull request

Add test coverage for find-links URL and local path classification

Changing requirements-file `--find-links` URL parsing to improve missing-directory errors can break two uncommon but currently supported inputs: uppercase URL schemes such as `FILE://` and `HTTP://`, and existing local directories whose names resemble URL schemes, such as `https:links`. Cover both classifications before changing the diagnostic. See astral-sh

importance 0@astral-automations-bot[bot]internaltestingOriginal evidence ↗
pull request

Heal interpreter metadata cache entries when creating a virtual environment indicates corruption

Interpreter metadata can remain stale when a Python launcher loads a different `libpython` without its executable timestamp changing. For a project without an existing environment, the first `uv run` can select the stale cached base interpreter, create `.venv` with incorrect `pyvenv.cfg` metadata, and evaluate `requires-python` against the wrong Python versi

importance 0@astral-automations-bot[bot]openbugOriginal evidence ↗
pull request

Account for launcher overrides in interpreter cache keys

`PYTHONEXECUTABLE` and `__PYVENV_LAUNCHER__` can change the executable and virtual environment reported by a Python interpreter, but interpreter metadata was cached using only the absolute and canonical paths of the requested executable. Include both launcher overrides in the interpreter cache key so metadata from one launcher context cannot be reused in ano

importance 0@astral-automations-bot[bot]closedbugcacheOriginal evidence ↗
pull request

Fix formatting of invalid version bump errors

Invalid `uv version --bump` values currently produce unstyled errors without a trailing newline. The custom parser introduced in astral-sh/uv#16555 returned raw, unformatted `clap` errors; construct command-aware errors instead so malformed bump values use the standard styling, usage guidance, and line termination. Fixes astral-sh/uv#21063.

importance 0@astral-automations-bot[bot]closedOriginal evidence ↗
pull request

Automate fixes for reproduced bugs with retained context

This extends our automations for issue triage to take reproducible bugs with a regression-test and attempt to generate a PR fixing the issue. - Context from the issue triage and reproduction are carried over into the job to attempt to fix the bug - The issue branch is updated with details on the fix attempt and result - If a fix is proposed, a draft PR is op

importance 0@astral-automations-bot[bot]closedautomationsOriginal evidence ↗
pull request

Track Git commit changes in linked worktrees

## Summary Previously, uv tracked Git metadata incorrectly in several cases: - Linked worktrees watched their entire worktree metadata directory, so staging an unrelated file invalidated the build even when the commit had not changed. - Branch references updated outside the worktree were not watched, potentially leaving embedded commit hashes, dates, tags, a

importance 0@charliermarshclosedinternalOriginal evidence ↗