Skip to content

Conversation

@Gankra
Copy link
Contributor

@Gankra Gankra commented Mar 20, 2025

This is a reimplementation of #7248 with a new CLI interface.

The old uv version is now uv self version (also it has gained a --short flag for parity).
The new uv version is now an interface for getting/setting the project version.

To give a modicum of support for migration, if uv version is run and we fail to find/read a pyproject.toml we will fallback to uv self version. uv version --project . prevents this fallback from being allowed.

The new API of uv version is as follows:

  • pass nothing to read the project version
  • pass a version to set the project version
  • --bump major|minor|patch to semver-bump the project version
  • --dry-run to show the result but not apply it
  • --short to have the final printout contain only the final version
  • --output-format json to get the final printout as json
$ uv version
myfast 0.1.0

$ uv version --bump major --dry-run
myfast 0.1.0 => 1.0.0

$ uv version 1.2.3 --dry-run
myfast 0.1.0 => 1.2.3

$ uv version 1.2.3
myfast 0.1.0 => 1.2.3

$ uv version  --short 
1.2.3

$ uv version  --output-format json 
{
  "package_name": "myfast",
  "version": "1.2.3",
  "commit_info": null
}

Fixes #6298

@zanieb
Copy link
Member

zanieb commented Mar 20, 2025

I didn't explore this in my document because I was focused on uv version vs uv metadata as a decision, but it's sort of an open question if we should use uv project instead of uv metadata. My primary hesitation is that the existing top-level interface is project based, i.e., we have uv add which operates on the project and that uv project may make that more confusing? We also have uv add --script <name> and I don't think we're likely to add a uv script child interface? uv metadata --script <name> sort of makes sense with this and our existing design?

@Gankra
Copy link
Contributor Author

Gankra commented Mar 20, 2025

I think i like metadata over project, yeah.

@Gankra
Copy link
Contributor Author

Gankra commented Mar 21, 2025

Oh worth noting that this does not also support uv metadata project.version. It didn't seem terribly valuable for this minimal version of the metadata command, and we can always add that later?

@zanieb
Copy link
Member

zanieb commented Mar 21, 2025

It didn't seem terribly valuable for this minimal version of the metadata command, and we can always add that later?

Agree

@n4z4m3
Copy link

n4z4m3 commented Mar 21, 2025

One possible reason to use project over metadata is that pixi uses project.
Not that consistency with pixi is a major determining factor, but I thought I would mention it.

@HenriBlacksmith
Copy link

Not sure it fits in this PR, but you could add a show-bump like: https://callowayproject.github.io/bump-my-version/reference/cli/#bump-my-version-show-bump

@HenriBlacksmith
Copy link

Not sure it fits in this PR, but you could add a show-bump like: https://callowayproject.github.io/bump-my-version/reference/cli/#bump-my-version-show-bump

Actually it could just be some side effect of a --dry-run with no target maybe?

@zanieb
Copy link
Member

zanieb commented Mar 21, 2025

Yeah that's --dry-run --short

@zanieb
Copy link
Member

zanieb commented Mar 21, 2025

I'm sort of leaning towards transitioning uv version, given uv self version is a more sensible long-term interface there and we can avoid confusion by displaying the project package name. I'll ponder this some more though.

@samypr100
Copy link
Collaborator

I'm a tad more in favor of uv metadata as it naturally drives me to think about project metadata. uv version or uv self version makes me think of uv --version or uv self --version weirdly enough😆

@samypr100
Copy link
Collaborator

samypr100 commented Mar 22, 2025

Perhaps a future thought, given feature requests like #6794 could this interface evolve towards supporting updating dependency versions in pyproject.toml as well (as it would follow semantics similar to bump) or would you still see that being part of other existing/new top-level interfaces?

@InSyncWithFoo
Copy link
Contributor

I have a use case for this command: In-editor version bumping (currently this feature relies on Rye).

I like the command's design in whole. One minor annoyance is that uv metadata is a bit lengthy; I can't think of a better name though.

@rumpelsepp
Copy link
Contributor

Simply meta instead of metadata perhaps?

@crimoniv
Copy link

Hi there! Just my 2 cents on this:

  • This is the first release with a minimal/preliminary version.
  • There's still an ongoing discussion about the (sub)command interface and naming (e.g., version vs meta vs metadata).
  • Some features might be considered for future iterations (e.g., pre-release versions, calver support, git tags, custom version sources...).

Would it make sense to include a warning indicating that the command is experimental and subject to future changes? Similar to the warning that was shown with uv publish.

Printing the warning to stderr shouldn't interfere with scripted usage, and will allow to 1) defer commitment on the interface and 2) start collecting usage feedback.

@zanieb
Copy link
Member

zanieb commented Mar 22, 2025

could this interface evolve towards supporting updating dependency versions in pyproject.toml as well (as it would follow semantics similar to bump) or would you still see that being part of other existing/new top-level interfaces?

I think we'll probably create a top-level interface for that since other dependency management commands are there, but I'm not sure yet. That design work is planned to happen soon. My thoughts about an expansion of the metadata section are mostly around editing or showing other pyproject.toml fields as well as dumping project metadata for integration with other tooling (i.e., cargo metadata).

@uglybug
Copy link

uglybug commented Mar 31, 2025

I guess I could just clone, build and test this locally, but I thought it might be easier just to ask the question: how does this cope with dynamic = ["version"]? It should gracefully refuse to bump or set the version at least. Even reading the version in this case I guess is impossible without actually building the project. So, again, it should gracefully exit. I just wouldn't want it to trample over a dynamic version if someone accidentally ran it to set a static one, I think. Maybe there is a use case there, though, if migrating from dynamic to static versioning. Just some thoughts anyway.

@Gankra
Copy link
Contributor Author

Gankra commented Mar 31, 2025

The current implementation errors the command on all operations if the version field is not defined (which I believe would be the case if dynamic = ["version"]).

I should do a cleanup pass on the message though.

@Gankra
Copy link
Contributor Author

Gankra commented Mar 31, 2025

Pushed up a version of uv metadata version that:

  • has better error message for missing version field (i.e. if dynamic = ["version"])
  • takes a superset of the flags of uv version (notably --output-format=json)
    • some minor design work here on if we want to change/update the json format (see snapshots)
  • respects --project
  • if search for a pyproject.toml fails, then we:
    • default: warn and run uv --version
    • if --project was passed: error

I left out the actual step of replacing the current uv version with uv metadata version (and I guess deleting uv metadata version?) to make it easier to review the diff, but I'll do that swap in a followup commit.

The existence of --output-format=json also breaks the parity between uv version and uv --version, as the latter does not respect that flag! As such to complete the migration plan I believe we must add uv self version which is just the current uv version (or I guess mess with clap and make --version respect it? but gross to have more random top-level flags...).

@Gankra Gankra added enhancement New feature or improvement to existing functionality breaking A breaking change labels Apr 1, 2025
@Gankra Gankra added this to the v0.7.0 milestone Apr 1, 2025
@Gankra Gankra changed the title add uv metadata version command change uv version to be an interface for project version reads and edits Apr 1, 2025
@Gankra
Copy link
Contributor Author

Gankra commented Apr 1, 2025

Ok, updated the main comment and pushed up the latest changes

@Gankra
Copy link
Contributor Author

Gankra commented Apr 2, 2025

Pushed up tweaks -- only thing not done is the --preview idea.

@Gankra
Copy link
Contributor Author

Gankra commented Apr 2, 2025

Added the --preview change

@T-256
Copy link
Contributor

T-256 commented Apr 6, 2025

This is Great ❤️
There is also an open issue in Rye about bumping to prereleases versions, Do we need to consider that in uv too?

@konstin
Copy link
Member

konstin commented Apr 7, 2025

I agree that we should improve the prerelease handling, usually when bumping a prerelease version is want to get to either jump to the next version of that prerelease (1.2.3a1 -> 1.2.3a2) or to the stable version of that release instead of the next release (1.2.3a2 -> 1.2.3).

pub struct VersionInfo {
/// uv's version, such as "0.5.1"
/// Name of the package (or "uv" if printing uv's own version)
pub package_name: Option<String>,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there a reason to not make this a PackageName?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a write-only format and the version was already being flattened to a String, so I kept it consistent.

{
"package_name": "myproject",
"version": "1.10.31",
"commit_info": null
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we emit a commit info field when we don't query that information for the non-legacy fallback path?

Copy link
Contributor Author

@Gankra Gankra Apr 8, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The current format for what is now uv self version --output-format json includes the field even if it's null, so I figured I wouldn't mess with the schema, and that it would be good to have the same schema for both commands?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I expect this will be confusing when someone expects to get commit_info for their package but even if it is in a git repository, we never give them a value for commit_info


// Bump major but the input version is .dev
#[test]
fn version_major_dev() -> Result<()> {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Edge case test suggestion: 1!1a1.post1.dev1+deadbeef1 (you can drop the epoch fwiw, it's not used in the ecosystem)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

epoch?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the 1! in front, which allows switching versioning schemes

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also incredible nightmare input

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh my god epochs oh my god

}

fn bumped_version(from: &Version, bump: VersionBump, printer: Printer) -> Result<Version> {
if from.is_dev() || from.is_post() {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any_prerelease and is_local catch this more generally. another option is to move bumping into uv_pep440 and using the VersionFull type

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm increasingly dubious that this even needs a warning...

Copy link
Member

@konstin konstin Apr 9, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Intuitively, I'd expect a stable bump that goes from prerelease to stable, and alpha, beta, rc, dev, post bump types that bump inside of pre/post-releases

@Gankra Gankra changed the base branch from main to release/070 April 24, 2025 17:38
@Gankra Gankra merged commit f7f91b5 into release/070 Apr 24, 2025
32 of 33 checks passed
@Gankra Gankra deleted the gankra/version branch April 24, 2025 17:38
zanieb pushed a commit that referenced this pull request Apr 29, 2025
…edits (#12349)

This is a reimplementation of #7248 with a new CLI interface.

The old `uv version` is now `uv self version` (also it has gained a
`--short` flag for parity).
The new `uv version` is now an interface for getting/setting the project
version.

To give a modicum of support for migration, if `uv version` is run and
we fail to find/read a `pyproject.toml` we will fallback to `uv self
version`. `uv version --project .` prevents this fallback from being
allowed.

The new API of `uv version` is as follows:

* pass nothing to read the project version
* pass a version to set the project version
* `--bump major|minor|patch` to semver-bump the project version
* `--dry-run` to show the result but not apply it
* `--short` to have the final printout contain only the final version
* `--output-format json` to get the final printout as json

```
$ uv version
myfast 0.1.0

$ uv version --bump major --dry-run
myfast 0.1.0 => 1.0.0

$ uv version 1.2.3 --dry-run
myfast 0.1.0 => 1.2.3

$ uv version 1.2.3
myfast 0.1.0 => 1.2.3

$ uv version  --short
1.2.3

$ uv version  --output-format json
{
  "package_name": "myfast",
  "version": "1.2.3",
  "commit_info": null
}
```

Fixes #6298
zanieb pushed a commit that referenced this pull request Apr 29, 2025
…edits (#12349)

This is a reimplementation of #7248 with a new CLI interface.

The old `uv version` is now `uv self version` (also it has gained a
`--short` flag for parity).
The new `uv version` is now an interface for getting/setting the project
version.

To give a modicum of support for migration, if `uv version` is run and
we fail to find/read a `pyproject.toml` we will fallback to `uv self
version`. `uv version --project .` prevents this fallback from being
allowed.

The new API of `uv version` is as follows:

* pass nothing to read the project version
* pass a version to set the project version
* `--bump major|minor|patch` to semver-bump the project version
* `--dry-run` to show the result but not apply it
* `--short` to have the final printout contain only the final version
* `--output-format json` to get the final printout as json

```
$ uv version
myfast 0.1.0

$ uv version --bump major --dry-run
myfast 0.1.0 => 1.0.0

$ uv version 1.2.3 --dry-run
myfast 0.1.0 => 1.2.3

$ uv version 1.2.3
myfast 0.1.0 => 1.2.3

$ uv version  --short
1.2.3

$ uv version  --output-format json
{
  "package_name": "myfast",
  "version": "1.2.3",
  "commit_info": null
}
```

Fixes #6298
Gankra pushed a commit that referenced this pull request May 1, 2025
Maxioum added a commit to Maxioum/Peeler that referenced this pull request May 2, 2025
close #51 

This PR:
 - drop the support for uv < 0.7
 - udpate unit test workflow with uv version >= 0.7
- use new uv version interface to check uv own version see
[#12349](astral-sh/uv#12349)
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request May 10, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [astral-sh/uv](https://github.com/astral-sh/uv) | minor | `0.6.16` -> `0.7.3` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>astral-sh/uv (astral-sh/uv)</summary>

### [`v0.7.3`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#073)

[Compare Source](astral-sh/uv@0.7.2...0.7.3)

##### Enhancements

-   Add `--dry-run` support to `uv self update` ([#&#8203;9829](astral-sh/uv#9829))
-   Add `--show-with` to `uv tool list` to list packages included by `--with` ([#&#8203;13264](astral-sh/uv#13264))
-   De-duplicate fetched index URLs ([#&#8203;13205](astral-sh/uv#13205))
-   Support more zip compression formats: bzip2, lzma, xz, zstd ([#&#8203;13285](astral-sh/uv#13285))
-   Add support for downloading GraalPy ([#&#8203;13172](astral-sh/uv#13172))
-   Improve error message when a virtual environment Python symlink is broken ([#&#8203;12168](astral-sh/uv#12168))
-   Use `fs_err` for paths in symlinking errors ([#&#8203;13303](astral-sh/uv#13303))
-   Minify and embed managed Python JSON at compile time ([#&#8203;12967](astral-sh/uv#12967))

##### Preview features

-   Build backend: Make preview default and add configuration docs ([#&#8203;12804](astral-sh/uv#12804))
-   Build backend: Allow escaping in globs ([#&#8203;13313](astral-sh/uv#13313))
-   Build backend: Make builds reproducible across operating systems ([#&#8203;13171](astral-sh/uv#13171))

##### Configuration

-   Add `python-downloads-json-url` option for `uv.toml` to configure custom Python installations via JSON URL ([#&#8203;12974](astral-sh/uv#12974))

##### Bug fixes

-   Check nested IO errors for retries ([#&#8203;13260](astral-sh/uv#13260))
-   Accept `musllinux_1_0` as a valid platform tag ([#&#8203;13289](astral-sh/uv#13289))
-   Fix discovery of pre-release managed Python versions in range requests ([#&#8203;13330](astral-sh/uv#13330))
-   Respect locked script preferences in `uv run --with` ([#&#8203;13283](astral-sh/uv#13283))
-   Retry streaming downloads on broken pipe errors ([#&#8203;13281](astral-sh/uv#13281))
-   Treat already-installed base environment packages as preferences in `uv run --with` ([#&#8203;13284](astral-sh/uv#13284))
-   Avoid enumerating sources in errors for path Python requests ([#&#8203;13335](astral-sh/uv#13335))
-   Avoid re-creating virtual environment with `--no-sync` ([#&#8203;13287](astral-sh/uv#13287))

##### Documentation

-   Remove outdated description of index strategy ([#&#8203;13326](astral-sh/uv#13326))
-   Update "Viewing the version" docs ([#&#8203;13241](astral-sh/uv#13241))

### [`v0.7.2`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#072)

[Compare Source](astral-sh/uv@0.7.1...0.7.2)

##### Enhancements

-   Improve trace log for retryable errors ([#&#8203;13228](astral-sh/uv#13228))
-   Use "error" instead of "warning" for self-update message ([#&#8203;13229](astral-sh/uv#13229))
-   Error when `uv version` is used with project-specific flags but no project is found ([#&#8203;13203](astral-sh/uv#13203))

##### Bug fixes

-   Fix incorrect virtual environment invalidation for pre-release Python versions ([#&#8203;13234](astral-sh/uv#13234))
-   Fix patching of `clang` in managed Python sysconfig ([#&#8203;13237](astral-sh/uv#13237))
-   Respect `--project` in `uv version` ([#&#8203;13230](astral-sh/uv#13230))

### [`v0.7.1`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#071)

[Compare Source](astral-sh/uv@0.7.0...0.7.1)

##### Enhancement

-   Add support for BLAKE2b-256 ([#&#8203;13204](astral-sh/uv#13204))

##### Bugfix

-   Revert fix handling of authentication when encountering redirects ([#&#8203;13215](astral-sh/uv#13215))

### [`v0.7.0`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#070)

[Compare Source](astral-sh/uv@0.6.17...0.7.0)

This release contains various changes that improve correctness and user experience, but could break some workflows; many changes have been marked as breaking out of an abundance of caution. We expect most users to be able to upgrade without making changes.

##### Breaking changes

-   **Update `uv version` to display and update project versions ([#&#8203;12349](astral-sh/uv#12349

    Previously, `uv version` displayed uv's version. Now, `uv version` will display or update the project's version. This interface was [heavily requested](astral-sh/uv#6298) and, after much consideration, we decided that transitioning the top-level command was the best option.

    Here's a brief example:

    ```console
    $ uv init example
    Initialized project `example` at `./example`
    $ cd example
    $ uv version
    example 0.1.0
    $ uv version --bump major
    example 0.1.0 => 1.0.0
    $ uv version --short
    1.0.0
    ```

    If used outside of a project, uv will fallback to showing its own version still:

    ```console
    $ uv version
    warning: failed to read project: No `pyproject.toml` found in current directory or any parent directory
      running `uv self version` for compatibility with old `uv version` command.
      this fallback will be removed soon, pass `--preview` to make this an error.

    uv 0.7.0 (4433f41c9 2025-04-29)
    ```

    As described in the warning, `--preview` can be used to error instead:

    ```console
    $ uv version --preview
    error: No `pyproject.toml` found in current directory or any parent directory
    ```

    The previous functionality of `uv version` was moved to `uv self version`.
-   **Avoid fallback to subsequent indexes on authentication failure ([#&#8203;12805](astral-sh/uv#12805

    When using the `first-index` strategy (the default), uv will stop searching indexes for a package once it is found on a single index. Previously, uv considered a package as "missing" from an index during authentication failures, such as an HTTP 401 or HTTP 403 (normally, missing packages are represented by an HTTP 404). This behavior was motivated by unusual responses from some package indexes, but reduces the safety of uv's index strategy when authentication fails. Now, uv will consider an authentication failure as a stop-point when searching for a package across indexes. The `index.ignore-error-codes` option can be used to recover the existing behavior, e.g.:

    ```toml
    [[tool.uv.index]]
    name = "pytorch"
    url = "https://download.pytorch.org/whl/cpu"
    ignore-error-codes = [401, 403]
    ```

    Since PyTorch's indexes always return a HTTP 403 for missing packages, uv special-cases indexes on the `pytorch.org` domain to ignore that error code by default.
-   **Require the command in `uvx <name>` to be available in the Python environment ([#&#8203;11603](astral-sh/uv#11603

    Previously, `uvx` would attempt to execute a command even if it was not provided by a Python package. For example, if we presume `foo` is an empty Python package which provides no command, `uvx foo` would invoke the `foo` command on the `PATH` (if present). Now, uv will error early if the `foo` executable is not provided by the requested Python package. This check is not enforced when `--from` is used, so patterns like `uvx --from foo bash -c "..."` are still valid. uv also still allows `uvx foo` where the `foo` executable is provided by a dependency of `foo` instead of `foo` itself, as this is fairly common for packages which depend on a dedicated package for their command-line interface.
-   **Use index URL instead of package URL for keyring credential lookups ([#&#8203;12651](astral-sh/uv#12651

    When determining credentials for querying a package URL, uv previously sent the full URL to the `keyring` command. However, some keyring plugins expect to receive the *index URL* (which is usually a parent of the package URL). Now, uv requests credentials for the index URL instead. This behavior matches `pip`.
-   **Remove `--version` from subcommands ([#&#8203;13108](astral-sh/uv#13108

    Previously, uv allowed the `--version` flag on arbitrary subcommands, e.g., `uv run --version`. However, the `--version` flag is useful for other operations since uv is a package manager. Consequently, we've removed the `--version` flag from subcommands — it is only available as `uv --version`.
-   **Omit Python 3.7 downloads from managed versions ([#&#8203;13022](astral-sh/uv#13022

    Python 3.7 is EOL and not formally supported by uv; however, Python 3.7 was previously available for download on a subset of platforms.
-   **Reject non-PEP 751 TOML files in install, compile, and export commands ([#&#8203;13120](astral-sh/uv#13120), [#&#8203;13119](astral-sh/uv#13119

    Previously, uv treated arbitrary `.toml` files passed to commands (e.g., `uv pip install -r foo.toml` or `uv pip compile -o foo.toml`) as `requirements.txt`-formatted files. Now, uv will error instead. If using PEP 751 lockfiles, use the standardized format for custom names instead, e.g., `pylock.foo.toml`.
-   **Ignore arbitrary Python requests in version files ([#&#8203;12909](astral-sh/uv#12909

    uv allows arbitrary strings to be used for Python version requests, in which they are treated as an executable name to search for in the `PATH`. However, using this form of request in `.python-version` files is non-standard and conflicts with `pyenv-virtualenv` which writes environment names to `.python-version` files. In this release, uv will now ignore requests that are arbitrary strings when found in `.python-version` files.
-   **Error on unknown dependency object specifiers ([12811](astral-sh/uv#12811

    The `[dependency-groups]` entries can include "object specifiers", e.g. `set-phasers-to = ...` in:

    ```toml
    [dependency-groups]
    foo = ["pyparsing"]
    bar = [{set-phasers-to = "stun"}]
    ```

    However, the only current spec-compliant object specifier is `include-group`. Previously, uv would ignore unknown object specifiers. Now, uv will error.
-   **Make `--frozen` and `--no-sources` conflicting options ([#&#8203;12671](astral-sh/uv#12671

    Using `--no-sources` always requires a new resolution and `--frozen` will always fail when used with it. Now, this conflict is encoded in the CLI options for clarity.
-   **Treat empty `UV_PYTHON_INSTALL_DIR` and `UV_TOOL_DIR` as unset ([#&#8203;12907](astral-sh/uv#12907), [#&#8203;12905](astral-sh/uv#12905

    Previously, these variables were treated as set to the current working directory when set to an empty string. Now, uv will ignore these variables when empty. This matches uv's behavior for other environment variables which configure directories.

##### Enhancements

-   Disallow mixing requirements across PyTorch indexes ([#&#8203;13179](astral-sh/uv#13179))
-   Add optional managed Python archive download cache ([#&#8203;12175](astral-sh/uv#12175))
-   Add `poetry-core` as a `uv init` build backend option ([#&#8203;12781](astral-sh/uv#12781))
-   Show tag hints when failing to find a compatible wheel in `pylock.toml` ([#&#8203;13136](astral-sh/uv#13136))
-   Report Python versions in `pyvenv.cfg` version mismatch ([#&#8203;13027](astral-sh/uv#13027))

##### Bug fixes

-   Avoid erroring on omitted wheel-only packages in `pylock.toml` ([#&#8203;13132](astral-sh/uv#13132))
-   Fix display name for `uvx --version` ([#&#8203;13109](astral-sh/uv#13109))
-   Restore handling of authentication when encountering redirects ([#&#8203;13050](astral-sh/uv#13050))
-   Respect build options (`--no-binary` et al) in `pylock.toml` ([#&#8203;13134](astral-sh/uv#13134))
-   Use `upload-time` rather than `upload_time` in `uv.lock` ([#&#8203;13176](astral-sh/uv#13176))

##### Documentation

-   Changed `fish` completions append `>>` to overwrite `>` ([#&#8203;13130](astral-sh/uv#13130))
-   Add `pylock.toml` mentions where relevant ([#&#8203;13115](astral-sh/uv#13115))
-   Add ROCm example to the PyTorch guide ([#&#8203;13200](astral-sh/uv#13200))
-   Upgrade PyTorch guide to CUDA 12.8 and PyTorch 2.7 ([#&#8203;13199](astral-sh/uv#13199))

### [`v0.6.17`](https://github.com/astral-sh/uv/releases/tag/0.6.17)

[Compare Source](astral-sh/uv@0.6.16...0.6.17)

#### Release Notes

##### Preview features

-   Add PyTorch v2.7.0 to GPU backend ([#&#8203;13072](astral-sh/uv#13072))

##### Bug fixes

-   Avoid panic for invalid Python versions ([#&#8203;13077](astral-sh/uv#13077))
-   Block scripts from overwriting `python` ([#&#8203;13051](astral-sh/uv#13051))
-   Check distribution names to handle invalid redirects ([#&#8203;12917](astral-sh/uv#12917))
-   Check for mismatched package and distribution names on resolver thread ([#&#8203;13088](astral-sh/uv#13088))
-   Fix panic with invalid last character in PEP 508 name ([#&#8203;13105](astral-sh/uv#13105))
-   Reject `requires-python` even if not listed on the index page ([#&#8203;13086](astral-sh/uv#13086))

#### Install uv 0.6.17

##### Install prebuilt binaries via shell script

```sh
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.6.17/uv-installer.sh | sh
```

##### Install prebuilt binaries via powershell script

```sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.6.17/uv-installer.ps1 | iex"
```

#### Download uv 0.6.17

|  File  | Platform | Checksum |
|--------|----------|----------|
| [uv-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-aarch64-apple-darwin.tar.gz.sha256) |
| [uv-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-x86\_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-x86\_64-apple-darwin.tar.gz.sha256) |
| [uv-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-aarch64-pc-windows-msvc.zip.sha256) |
| [uv-i686-pc-windows-msvc.zip](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-i686-pc-windows-msvc.zip.sha256) |
| [uv-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-x86\_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-x86\_64-pc-windows-msvc.zip.sha256) |
| [uv-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-aarch64-unknown-linux-gnu.tar.gz.sha256) |
| [uv-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-i686-unknown-linux-gnu.tar.gz.sha256) |
| [uv-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-powerpc64-unknown-linux-gnu.tar.gz.sha256) |
| [uv-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-powerpc64le-unknown-linux-gnu.tar.gz.sha256) |
| [uv-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-s390x-unknown-linux-gnu.tar.gz.sha256) |
| [uv-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-x86\_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-x86\_64-unknown-linux-gnu.tar.gz.sha256) |
| [uv-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-armv7-unknown-linux-gnueabihf.tar.gz.sha256) |
| [uv-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-aarch64-unknown-linux-musl.tar.gz.sha256) |
| [uv-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-i686-unknown-linux-musl.tar.gz.sha256) |
| [uv-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-x86\_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-x86\_64-unknown-linux-musl.tar.gz.sha256) |
| [uv-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-arm-unknown-linux-musleabihf.tar.gz.sha256) |
| [uv-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.6.17/uv-armv7-unknown-linux-musleabihf.tar.gz.sha256) |

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4yNTcuOCIsInVwZGF0ZWRJblZlciI6IjM5LjI2NC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJSZW5vdmF0ZSBCb3QiXX0=-->
tmeijn pushed a commit to tmeijn/dotfiles that referenced this pull request Jul 27, 2025
This MR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [astral-sh/uv](https://github.com/astral-sh/uv) | minor | `0.7.19` -> `0.8.3` |

MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot).

**Proposed changes to behavior should be submitted there as MRs.**

---

### Release Notes

<details>
<summary>astral-sh/uv (astral-sh/uv)</summary>

### [`v0.8.3`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#083)

[Compare Source](astral-sh/uv@0.8.2...0.8.3)

##### Python

- Add CPython 3.14.0rc1

See the [`python-build-standalone` release notes](https://github.com/astral-sh/python-build-standalone/releases/tag/20250723) for more details.

##### Enhancements

- Allow non-standard entrypoint names in `uv_build` ([#&#8203;14867](astral-sh/uv#14867))
- Publish riscv64 wheels to PyPI ([#&#8203;14852](astral-sh/uv#14852))

##### Bug fixes

- Avoid writing redacted credentials to tool receipt ([#&#8203;14855](astral-sh/uv#14855))
- Respect `--with` versions over base environment versions ([#&#8203;14863](astral-sh/uv#14863))
- Respect credentials from all defined indexes ([#&#8203;14858](astral-sh/uv#14858))
- Fix missed stabilization of removal of registry entry during Python uninstall ([#&#8203;14859](astral-sh/uv#14859))
- Improve concurrency safety of Python downloads into cache ([#&#8203;14846](astral-sh/uv#14846))

##### Documentation

- Fix typos in `uv_build` reference documentation ([#&#8203;14853](astral-sh/uv#14853))
- Move the "Cargo" install method further down in docs ([#&#8203;14842](astral-sh/uv#14842))

### [`v0.8.2`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#082)

[Compare Source](astral-sh/uv@0.8.1...0.8.2)

##### Enhancements

- Add derivation chains for dependency errors ([#&#8203;14824](astral-sh/uv#14824))

##### Configuration

- Add `UV_INIT_BUILD_BACKEND` ([#&#8203;14821](astral-sh/uv#14821))

##### Bug fixes

- Avoid reading files in the environment bin that are not entrypoints ([#&#8203;14830](astral-sh/uv#14830))
- Avoid removing empty directories when constructing virtual environments ([#&#8203;14822](astral-sh/uv#14822))
- Preserve index URL priority order when writing to pyproject.toml ([#&#8203;14831](astral-sh/uv#14831))

##### Rust API

- Expose `tls_built_in_root_certs` for client ([#&#8203;14816](astral-sh/uv#14816))

##### Documentation

- Archive the 0.7.x changelog ([#&#8203;14819](astral-sh/uv#14819))

### [`v0.8.1`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#081)

[Compare Source](astral-sh/uv@0.8.0...0.8.1)

##### Enhancements

- Add support for `HF_TOKEN` ([#&#8203;14797](astral-sh/uv#14797))
- Allow `--config-settings-package` to apply configuration settings at the package level ([#&#8203;14573](astral-sh/uv#14573))
- Create (e.g.) `python3.13t` executables in `uv venv` ([#&#8203;14764](astral-sh/uv#14764))
- Disallow writing symlinks outside the source distribution target directory ([#&#8203;12259](astral-sh/uv#12259))
- Elide traceback when `python -m uv` in interrupted with Ctrl-C on Windows ([#&#8203;14715](astral-sh/uv#14715))
- Match `--bounds` formatting for `uv_build` bounds in `uv init` ([#&#8203;14731](astral-sh/uv#14731))
- Support `extras` and `dependency_groups` markers in PEP 508 grammar ([#&#8203;14753](astral-sh/uv#14753))
- Support `extras` and `dependency_groups` markers on `uv pip install` and `uv pip sync` ([#&#8203;14755](astral-sh/uv#14755))
- Add hint to use `uv self version` when `uv version` cannot find a project ([#&#8203;14738](astral-sh/uv#14738))
- Improve error reporting when removing Python versions from the Windows registry ([#&#8203;14722](astral-sh/uv#14722))
- Make warnings about masked `[tool.uv]` fields more precise ([#&#8203;14325](astral-sh/uv#14325))

##### Preview features

- Emit JSON output in `uv sync` with `--quiet` ([#&#8203;14810](astral-sh/uv#14810))

##### Bug fixes

- Allow removal of virtual environments with missing interpreters ([#&#8203;14812](astral-sh/uv#14812))
- Apply `Cache-Control` overrides to response, not request headers ([#&#8203;14736](astral-sh/uv#14736))
- Copy entry points into ephemeral environments to ensure layers are respected ([#&#8203;14790](astral-sh/uv#14790))
- Workaround Jupyter Lab application directory discovery in ephemeral environments ([#&#8203;14790](astral-sh/uv#14790))
- Enforce `requires-python` in `pylock.toml` ([#&#8203;14787](astral-sh/uv#14787))
- Fix kebab casing of `README` variants in build backend ([#&#8203;14762](astral-sh/uv#14762))
- Improve concurrency resilience of removing Python versions from the Windows registry ([#&#8203;14717](astral-sh/uv#14717))
- Retry HTTP requests on invalid data errors ([#&#8203;14703](astral-sh/uv#14703))
- Update virtual environment removal to delete `pyvenv.cfg` last ([#&#8203;14808](astral-sh/uv#14808))
- Error on unknown fields in `dependency-metadata` ([#&#8203;14801](astral-sh/uv#14801))

##### Documentation

- Recommend installing `setup-uv` after `setup-python` in Github Actions integration guide ([#&#8203;14741](astral-sh/uv#14741))
- Clarify which portions of `requires-python` behavior are consistent with pip ([#&#8203;14752](astral-sh/uv#14752))

### [`v0.8.0`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#080)

[Compare Source](astral-sh/uv@0.7.22...0.8.0)

Since we released uv [0.7.0](https://github.com/astral-sh/uv/releases/tag/0.7.0) in April, we've accumulated various changes that improve correctness and user experience, but could break some workflows. This release contains those changes; many have been marked as breaking out of an abundance of caution. We expect most users to be able to upgrade without making changes.

This release also includes the stabilization of a couple `uv python install` features, which have been available under preview since late last year.

##### Breaking changes

- **Install Python executables into a directory on the `PATH` ([#&#8203;14626](astral-sh/uv#14626

  `uv python install` now installs a versioned Python executable (e.g., `python3.13`) into a directory on the `PATH` (e.g., `~/.local/bin`) by default. This behavior has been available under the `--preview` flag since [Oct 2024](astral-sh/uv#8458). This change should not be breaking unless it shadows a Python executable elsewhere on the `PATH`.

  To install unversioned executables, i.e., `python3` and `python`, use the `--default` flag. The `--default` flag has also been in preview, but is not stabilized in this release.

  Note that these executables point to the base Python installation and only include the standard library. That means they will not include dependencies from your current project (use `uv run python` instead) and you cannot install packages into their environment (use `uvx --with <package> python` instead).

  As with tool installation, the target directory respects common variables like `XDG_BIN_HOME` and can be overridden with a `UV_PYTHON_BIN_DIR` variable.

  You can opt out of this behavior with `uv python install --no-bin` or `UV_PYTHON_INSTALL_BIN=0`.

  See the [documentation on installing Python executables](https://docs.astral.sh/uv/concepts/python-versions/#installing-python-executables) for more details.
- **Register Python versions with the Windows Registry ([#&#8203;14625](astral-sh/uv#14625

  `uv python install` now registers the installed Python version with the Windows Registry as specified by [PEP 514](https://peps.python.org/pep-0514/). This allows using uv installed Python versions via the `py` launcher. This behavior has been available under the `--preview` flag since [Jan 2025](astral-sh/uv#10634). This change should not be breaking, as using the uv Python versions with `py` requires explicit opt in.

  You can opt out of this behavior with `uv python install --no-registry` or `UV_PYTHON_INSTALL_REGISTRY=0`.
- **Prompt before removing an existing directory in `uv venv` ([#&#8203;14309](astral-sh/uv#14309

  Previously, `uv venv` would remove an existing virtual environment without confirmation. While this is consistent with the behavior of project commands (e.g., `uv sync`), it's surprising to users that are using imperative workflows (i.e., `uv pip`). Now, `uv venv` will prompt for confirmation before removing an existing virtual environment. **If not in an interactive context, uv will still remove the virtual environment for backwards compatibility. However, this behavior is likely to change in a future release.**

  The behavior for other commands (e.g., `uv sync`) is unchanged.

  You can opt out of this behavior by setting `UV_VENV_CLEAR=1` or passing the `--clear` flag.
- **Validate that discovered interpreters meet the Python preference ([#&#8203;7934](astral-sh/uv#7934

  uv allows opting out of its managed Python versions with the `--no-managed-python` and `python-preference` options.

  Previously, uv would not enforce this option for Python interpreters discovered on the `PATH`. For example, if a symlink to a managed Python interpreter was created, uv would allow it to be used even if `--no-managed-python` was provided. Now, uv ignores Python interpreters that do not match the Python preference *unless* they are in an active virtual environment or are explicitly requested, e.g., with `--python /path/to/python3.13`.

  Similarly, uv would previously not invalidate existing project environments if they did not match the Python preference. Now, uv will invalidate and recreate project environments when the Python preference changes.

  You can opt out of this behavior by providing the explicit path to the Python interpreter providing `--managed-python` / `--no-managed-python` matching the interpreter you want.
- **Install dependencies without build systems when they are `path` sources ([#&#8203;14413](astral-sh/uv#14413

  When working on a project, uv uses the [presence of a build system](https://docs.astral.sh/uv/concepts/projects/config/#build-systems) to determine if it should be built and installed into the environment. However, when a project is a dependency of another project, it can be surprising for the dependency to be missing from the environment.

  Previously, uv would not build and install dependencies with [`path` sources](https://docs.astral.sh/uv/concepts/projects/dependencies/#path) unless they declared a build system or set `tool.uv.package = true`. Now, dependencies with `path` sources are built and installed regardless of the presence of a build system. If a build system is not present, the `setuptools.build_meta:__legacy__ ` backend will be used (per [PEP 517](https://peps.python.org/pep-0517/#source-trees)).

  You can opt out of this behavior by setting `package = false` in the source declaration, e.g.:

  ```toml
  [tool.uv.sources]
  foo = { path = "./foo", package = false }
  ```

  Or, by setting `tool.uv.package = false` in the dependent `pyproject.toml`.

  See the documentation on [virtual dependencies](https://docs.astral.sh/uv/concepts/projects/dependencies/#virtual-dependencies) for details.
- **Install dependencies without build systems when they are workspace members ([#&#8203;14663](astral-sh/uv#14663

  As described above for dependencies with `path` sources, uv previously would not build and install workspace members that did not declare a build system. Now, uv will build and install workspace members that are a dependency of *another* workspace member regardless of the presence of a build system. The behavior is unchanged for workspace members that are not included in the `project.dependencies`, `project.optional-dependencies`, or `dependency-groups` tables of another workspace member.

  You can opt out of this behavior by setting `tool.uv.package = false` in the workspace member's `pyproject.toml`.

  See the documentation on [virtual dependencies](https://docs.astral.sh/uv/concepts/projects/dependencies/#virtual-dependencies) for details.
- **Bump `--python-platform linux` to `manylinux_2_28` ([#&#8203;14300](astral-sh/uv#14300

  uv allows performing [platform-specific resolution](https://docs.astral.sh/uv/concepts/resolution/#platform-specific-resolution) for explicit targets and provides short aliases, e.g., `linux`, for common targets.

  Previously, the default target for `--python-platform linux` was `manylinux_2_17`, which is compatible with most Linux distributions from 2014 or newer. We now default to `manylinux_2_28`, which is compatible with most Linux distributions from 2019 or newer.  This change follows the lead of other tools, such as `cibuildwheel`, which changed their default to `manylinux_2_28` in [Mar 2025](pypa/cibuildwheel#2330).

  This change only affects users requesting a specific target platform. Otherwise, uv detects the `manylinux` target from your local glibc version.

  You can opt out of this behavior by using `--python-platform x86_64-manylinux_2_17` instead.
- **Remove `uv version` fallback ([#&#8203;14161](astral-sh/uv#14161

  In [Apr 2025](astral-sh/uv#12349), uv changed the `uv version` command to an interface for viewing and updating the version of the current project. However, when outside a project, `uv version` would continue to display uv's version for backwards compatibility. Now, when used outside of a project, `uv version` will fail.

  You cannot opt out of this behavior. Use `uv self version` instead.
- **Require `--global` for removal of the global Python pin ([#&#8203;14169](astral-sh/uv#14169

  Previously, `uv python pin --rm` would allow you to remove the global Python pin without opt in. Now, uv requires the `--global` flag to remove the global Python pin.

  You cannot opt out of this behavior. Use the `--global` flag instead.
- **Support conflicting editable settings across groups ([#&#8203;14197](astral-sh/uv#14197

  Previously, uv would always treat a package as editable if any requirement requested it as editable. However, this prevented users from declaring `path` sources that toggled the `editable` setting across dependency groups. Now, uv allows declaring different `editable` values for conflicting groups. However, if a project includes a path dependency twice, once with `editable = true` and once without any editable annotation, those are now considered conflicting, and uv will exit with an error.

  You cannot opt out of this behavior. Use consistent `editable` settings or [mark groups as conflicting](https://docs.astral.sh/uv/concepts/projects/config/#conflicting-dependencies).
- **Make `uv_build` the default build backend in `uv init` ([#&#8203;14661](astral-sh/uv#14661

  The uv build backend (`uv_build`) was [stabilized in uv 0.7.19](https://github.com/astral-sh/uv/releases/tag/0.7.19). Now, it is the default build backend for `uv init --package` and `uv init --lib`. Previously, `hatchling` was the default build backend. A build backend is still not used without opt-in in `uv init`, but we expect to change this in a future release.

  You can opt out of this behavior with `uv init --build-backend hatchling`.
- **Set default `UV_TOOL_BIN_DIR` on Docker images ([#&#8203;13391](astral-sh/uv#13391

  Previously, `UV_TOOL_BIN_DIR` was not set in Docker images which meant that `uv tool install` did not install tools into a directory on the `PATH` without additional configuration. Now, `UV_TOOL_BIN_DIR` is set to `/usr/local/bin` in all Docker derived images.

  When the default image user is overridden (e.g. `USER <UID>`) with a less privileged user, this may cause `uv tool install` to fail.

  You can opt out of this behavior by setting an alternative `UV_TOOL_BIN_DIR`.
- **Update `--check` to return an exit code of 1 ([#&#8203;14167](astral-sh/uv#14167

  uv uses an exit code of 1 to indicate a "successful failure" and an exit code of 2 to indicate an "error".

  Previously, `uv lock --check` and `uv sync --check` would exit with a code of 2 when the lockfile or environment were outdated. Now, uv will exit with a code of 1.

  You cannot opt out of this behavior.
- **Use an ephemeral environment for `uv run --with` invocations ([#&#8203;14447](astral-sh/uv#14447

  When using `uv run --with`, uv layers the requirements requested using `--with` into another virtual environment and caches it. Previously, uv would invoke the Python interpreter in this layered environment. However, this allows poisoning the cached environment and introduces race conditions for concurrent invocations. Now, uv will layer *another* empty virtual environment on top of the cached environment and invoke the Python interpreter there. This should only cause breakage in cases where the environment is being inspected at runtime.

  You cannot opt out of this behavior.
- **Restructure the `uv venv` command output and exit codes ([#&#8203;14546](astral-sh/uv#14546

  Previously, uv used `miette` to format the `uv venv` output. However, this was inconsistent with most of the uv CLI. Now, the output is a little different and the exit code has switched from 1 to 2 for some error cases.

  You cannot opt out of this behavior.
- **Default to `--workspace` when adding subdirectories ([#&#8203;14529](astral-sh/uv#14529

  When using `uv add` to add a subdirectory in a workspace, uv now defaults to adding the target as a workspace member.

  You can opt out of this behavior by providing `--no-workspace`.
- **Add missing validations for disallowed `uv.toml` fields ([#&#8203;14322](astral-sh/uv#14322

  uv does not allow some settings in the `uv.toml`. Previously, some settings were silently ignored when present in the `uv.toml`. Now, uv will error.

  You cannot opt out of this behavior. Use `--no-config` or remove the invalid settings.

##### Configuration

- Add support for toggling Python bin and registry install options via env vars ([#&#8203;14662](astral-sh/uv#14662))

### [`v0.7.22`](https://github.com/astral-sh/uv/releases/tag/0.7.22)

[Compare Source](astral-sh/uv@0.7.21...0.7.22)

#### Release Notes

##### Python

- Upgrade GraalPy to 24.2.2

See the [GraalPy release notes](https://github.com/oracle/graalpython/releases/tag/graal-24.2.2) for more details.

##### Configuration

- Add `UV_COMPILE_BYTECODE_TIMEOUT` environment variable ([#&#8203;14369](astral-sh/uv#14369))
- Allow users to override index `cache-control` headers ([#&#8203;14620](astral-sh/uv#14620))
- Add `UV_LIBC` to override libc selection in multi-libc environment ([#&#8203;14646](astral-sh/uv#14646))

##### Bug fixes

- Fix `--all-arches` when paired with `--only-downloads` ([#&#8203;14629](astral-sh/uv#14629))
- Skip Windows Python interpreters that return a broken MSIX package code ([#&#8203;14636](astral-sh/uv#14636))
- Warn on invalid `uv.toml` when provided via direct path ([#&#8203;14653](astral-sh/uv#14653))
- Improve async signal safety in Windows exception handler ([#&#8203;14619](astral-sh/uv#14619))

##### Documentation

- Mention the `revision` in the lockfile versioning doc ([#&#8203;14634](astral-sh/uv#14634))
- Move "Conflicting dependencies" to the "Resolution" page ([#&#8203;14633](astral-sh/uv#14633))
- Rename "Dependency specifiers" section to exclude PEP 508 reference ([#&#8203;14631](astral-sh/uv#14631))
- Suggest `uv cache clean` prior to `--reinstall` ([#&#8203;14659](astral-sh/uv#14659))

##### Preview features

- Make preview Python registration on Windows non-fatal ([#&#8203;14614](astral-sh/uv#14614))
- Update preview installation of Python executables to be non-fatal ([#&#8203;14612](astral-sh/uv#14612))
- Add `uv python update-shell` ([#&#8203;14627](astral-sh/uv#14627))

#### Install uv 0.7.22

##### Install prebuilt binaries via shell script

```sh
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.22/uv-installer.sh | sh
```

##### Install prebuilt binaries via powershell script

```sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.22/uv-installer.ps1 | iex"
```

#### Download uv 0.7.22

|  File  | Platform | Checksum |
|--------|----------|----------|
| [uv-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-aarch64-apple-darwin.tar.gz.sha256) |
| [uv-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-x86_64-apple-darwin.tar.gz.sha256) |
| [uv-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-aarch64-pc-windows-msvc.zip.sha256) |
| [uv-i686-pc-windows-msvc.zip](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-i686-pc-windows-msvc.zip.sha256) |
| [uv-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-x86_64-pc-windows-msvc.zip.sha256) |
| [uv-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-aarch64-unknown-linux-gnu.tar.gz.sha256) |
| [uv-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-i686-unknown-linux-gnu.tar.gz.sha256) |
| [uv-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-powerpc64-unknown-linux-gnu.tar.gz.sha256) |
| [uv-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-powerpc64le-unknown-linux-gnu.tar.gz.sha256) |
| [uv-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-riscv64gc-unknown-linux-gnu.tar.gz.sha256) |
| [uv-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-s390x-unknown-linux-gnu.tar.gz.sha256) |
| [uv-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-x86_64-unknown-linux-gnu.tar.gz.sha256) |
| [uv-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-armv7-unknown-linux-gnueabihf.tar.gz.sha256) |
| [uv-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-aarch64-unknown-linux-musl.tar.gz.sha256) |
| [uv-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-i686-unknown-linux-musl.tar.gz.sha256) |
| [uv-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-x86_64-unknown-linux-musl.tar.gz.sha256) |
| [uv-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-arm-unknown-linux-musleabihf.tar.gz.sha256) |
| [uv-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.22/uv-armv7-unknown-linux-musleabihf.tar.gz.sha256) |

### [`v0.7.21`](https://github.com/astral-sh/uv/releases/tag/0.7.21)

[Compare Source](astral-sh/uv@0.7.20...0.7.21)

#### Release Notes

##### Python

- Restore the SQLite `fts4`, `fts5`, `rtree`, and `geopoly` extensions on macOS and Linux

See the [`python-build-standalone` release notes](https://github.com/astral-sh/python-build-standalone/releases/tag/20250712) for more details.

##### Enhancements

- Add `--python-platform` to `uv sync` ([#&#8203;14320](astral-sh/uv#14320))
- Support pre-releases in `uv version --bump` ([#&#8203;13578](astral-sh/uv#13578))
- Add `-w` shorthand for `--with` ([#&#8203;14530](astral-sh/uv#14530))
- Add an exception handler on Windows to display information on crash ([#&#8203;14582](astral-sh/uv#14582))
- Add hint when Python downloads are disabled ([#&#8203;14522](astral-sh/uv#14522))
- Add `UV_HTTP_RETRIES` to customize retry counts ([#&#8203;14544](astral-sh/uv#14544))
- Follow leaf symlinks matched by globs in `cache-key` ([#&#8203;13438](astral-sh/uv#13438))
- Support parent path components (`..`) in globs in `cache-key` ([#&#8203;13469](astral-sh/uv#13469))
- Improve `cache-key` performance ([#&#8203;13469](astral-sh/uv#13469))

##### Preview features

- Add `uv sync --output-format json` ([#&#8203;13689](astral-sh/uv#13689))

##### Bug fixes

- Do not re-resolve with a new Python version in `uv tool` if it is incompatible with `--python` ([#&#8203;14606](astral-sh/uv#14606))

##### Documentation

- Document how to nest dependency groups with `include-group` ([#&#8203;14539](astral-sh/uv#14539))
- Fix repeated word in Pyodide doc ([#&#8203;14554](astral-sh/uv#14554))
- Update CONTRIBUTING.md with instructions to format Markdown files via Docker ([#&#8203;14246](astral-sh/uv#14246))
- Fix version number for `setup-python` ([#&#8203;14533](astral-sh/uv#14533))

#### Install uv 0.7.21

##### Install prebuilt binaries via shell script

```sh
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.21/uv-installer.sh | sh
```

##### Install prebuilt binaries via powershell script

```sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.21/uv-installer.ps1 | iex"
```

#### Download uv 0.7.21

|  File  | Platform | Checksum |
|--------|----------|----------|
| [uv-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-aarch64-apple-darwin.tar.gz.sha256) |
| [uv-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-x86_64-apple-darwin.tar.gz.sha256) |
| [uv-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-aarch64-pc-windows-msvc.zip.sha256) |
| [uv-i686-pc-windows-msvc.zip](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-i686-pc-windows-msvc.zip.sha256) |
| [uv-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-x86_64-pc-windows-msvc.zip.sha256) |
| [uv-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-aarch64-unknown-linux-gnu.tar.gz.sha256) |
| [uv-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-i686-unknown-linux-gnu.tar.gz.sha256) |
| [uv-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-powerpc64-unknown-linux-gnu.tar.gz.sha256) |
| [uv-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-powerpc64le-unknown-linux-gnu.tar.gz.sha256) |
| [uv-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-riscv64gc-unknown-linux-gnu.tar.gz.sha256) |
| [uv-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-s390x-unknown-linux-gnu.tar.gz.sha256) |
| [uv-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-x86_64-unknown-linux-gnu.tar.gz.sha256) |
| [uv-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-armv7-unknown-linux-gnueabihf.tar.gz.sha256) |
| [uv-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-aarch64-unknown-linux-musl.tar.gz.sha256) |
| [uv-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-i686-unknown-linux-musl.tar.gz.sha256) |
| [uv-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-x86_64-unknown-linux-musl.tar.gz.sha256) |
| [uv-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-arm-unknown-linux-musleabihf.tar.gz.sha256) |
| [uv-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.21/uv-armv7-unknown-linux-musleabihf.tar.gz.sha256) |

### [`v0.7.20`](https://github.com/astral-sh/uv/releases/tag/0.7.20)

[Compare Source](astral-sh/uv@0.7.19...0.7.20)

#### Release Notes

##### Python

- Add Python 3.14.0b4
- Add zstd support to Python 3.14 on Unix (it already was available on Windows)
- Add PyPy 7.3.20 (for Python 3.11.13)

See the [PyPy](https://pypy.org/posts/2025/07/pypy-v7320-release.html) and [`python-build-standalone`](https://github.com/astral-sh/python-build-standalone/releases/tag/20250708) release notes for more details.

##### Enhancements

- Add `--workspace` flag to `uv add` ([#&#8203;14496](astral-sh/uv#14496))
- Add auto-detection for Intel GPUs ([#&#8203;14386](astral-sh/uv#14386))
- Drop trailing arguments when writing shebangs ([#&#8203;14519](astral-sh/uv#14519))
- Add debug message when skipping Python downloads ([#&#8203;14509](astral-sh/uv#14509))
- Add support for declaring multiple modules in namespace packages ([#&#8203;14460](astral-sh/uv#14460))

##### Bug fixes

- Revert normalization of trailing slashes on index URLs ([#&#8203;14511](astral-sh/uv#14511))
- Fix forced resolution with all extras in `uv version` ([#&#8203;14434](astral-sh/uv#14434))
- Fix handling of pre-releases in preferences ([#&#8203;14498](astral-sh/uv#14498))
- Remove transparent variants in `uv-extract` to enable retries ([#&#8203;14450](astral-sh/uv#14450))

##### Rust API

- Add method to get packages involved in a `NoSolutionError` ([#&#8203;14457](astral-sh/uv#14457))
- Make `ErrorTree` for `NoSolutionError` public ([#&#8203;14444](astral-sh/uv#14444))

##### Documentation

- Finish incomplete sentence in pip migration guide ([#&#8203;14432](astral-sh/uv#14432))
- Remove `cache-dependency-glob` examples for `setup-uv` ([#&#8203;14493](astral-sh/uv#14493))
- Remove `uv pip sync` suggestion with `pyproject.toml` ([#&#8203;14510](astral-sh/uv#14510))
- Update documentation for GitHub to use `setup-uv@v6` ([#&#8203;14490](astral-sh/uv#14490))

#### Install uv 0.7.20

##### Install prebuilt binaries via shell script

```sh
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/astral-sh/uv/releases/download/0.7.20/uv-installer.sh | sh
```

##### Install prebuilt binaries via powershell script

```sh
powershell -ExecutionPolicy Bypass -c "irm https://github.com/astral-sh/uv/releases/download/0.7.20/uv-installer.ps1 | iex"
```

#### Download uv 0.7.20

|  File  | Platform | Checksum |
|--------|----------|----------|
| [uv-aarch64-apple-darwin.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-aarch64-apple-darwin.tar.gz) | Apple Silicon macOS | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-aarch64-apple-darwin.tar.gz.sha256) |
| [uv-x86\_64-apple-darwin.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-x86_64-apple-darwin.tar.gz) | Intel macOS | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-x86_64-apple-darwin.tar.gz.sha256) |
| [uv-aarch64-pc-windows-msvc.zip](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-aarch64-pc-windows-msvc.zip) | ARM64 Windows | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-aarch64-pc-windows-msvc.zip.sha256) |
| [uv-i686-pc-windows-msvc.zip](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-i686-pc-windows-msvc.zip) | x86 Windows | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-i686-pc-windows-msvc.zip.sha256) |
| [uv-x86\_64-pc-windows-msvc.zip](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-x86_64-pc-windows-msvc.zip) | x64 Windows | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-x86_64-pc-windows-msvc.zip.sha256) |
| [uv-aarch64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-aarch64-unknown-linux-gnu.tar.gz) | ARM64 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-aarch64-unknown-linux-gnu.tar.gz.sha256) |
| [uv-i686-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-i686-unknown-linux-gnu.tar.gz) | x86 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-i686-unknown-linux-gnu.tar.gz.sha256) |
| [uv-powerpc64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-powerpc64-unknown-linux-gnu.tar.gz) | PPC64 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-powerpc64-unknown-linux-gnu.tar.gz.sha256) |
| [uv-powerpc64le-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-powerpc64le-unknown-linux-gnu.tar.gz) | PPC64LE Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-powerpc64le-unknown-linux-gnu.tar.gz.sha256) |
| [uv-riscv64gc-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-riscv64gc-unknown-linux-gnu.tar.gz) | RISCV Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-riscv64gc-unknown-linux-gnu.tar.gz.sha256) |
| [uv-s390x-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-s390x-unknown-linux-gnu.tar.gz) | S390x Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-s390x-unknown-linux-gnu.tar.gz.sha256) |
| [uv-x86\_64-unknown-linux-gnu.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-x86_64-unknown-linux-gnu.tar.gz) | x64 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-x86_64-unknown-linux-gnu.tar.gz.sha256) |
| [uv-armv7-unknown-linux-gnueabihf.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-armv7-unknown-linux-gnueabihf.tar.gz) | ARMv7 Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-armv7-unknown-linux-gnueabihf.tar.gz.sha256) |
| [uv-aarch64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-aarch64-unknown-linux-musl.tar.gz) | ARM64 MUSL Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-aarch64-unknown-linux-musl.tar.gz.sha256) |
| [uv-i686-unknown-linux-musl.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-i686-unknown-linux-musl.tar.gz) | x86 MUSL Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-i686-unknown-linux-musl.tar.gz.sha256) |
| [uv-x86\_64-unknown-linux-musl.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-x86_64-unknown-linux-musl.tar.gz) | x64 MUSL Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-x86_64-unknown-linux-musl.tar.gz.sha256) |
| [uv-arm-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-arm-unknown-linux-musleabihf.tar.gz) | ARMv6 MUSL Linux (Hardfloat) | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-arm-unknown-linux-musleabihf.tar.gz.sha256) |
| [uv-armv7-unknown-linux-musleabihf.tar.gz](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-armv7-unknown-linux-musleabihf.tar.gz) | ARMv7 MUSL Linux | [checksum](https://github.com/astral-sh/uv/releases/download/0.7.20/uv-armv7-unknown-linux-musleabihf.tar.gz.sha256) |

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this MR and you won't be reminded about this update again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MC42Mi4xIiwidXBkYXRlZEluVmVyIjoiNDAuNjIuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90Il19-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking A breaking change enhancement New feature or improvement to existing functionality

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add a command to read and update (i.e., bump) the project version, e.g., uv version