diff --git a/.agent-os/instructions/mise-product-guide.md b/.agent-os/instructions/mise-product-guide.md
index 121d4749af..b711c95b5a 100644
--- a/.agent-os/instructions/mise-product-guide.md
+++ b/.agent-os/instructions/mise-product-guide.md
@@ -117,7 +117,7 @@ Fast, native implementations for major languages:
- **Vfox Plugins**: Modern Lua-based plugin system
- **Aqua Registry**: 1000+ tools with security verification
- **GitHub Releases**: Direct installation from GitHub
-- **Package Managers**: npm, cargo, gem, pipx, go install
+- **Package Managers**: npm, cargo, gem, uv tool, go install
### Backend Prioritization
diff --git a/.agent-os/standards/mise-tech-stack.md b/.agent-os/standards/mise-tech-stack.md
index a1ea845f58..8be711b15e 100644
--- a/.agent-os/standards/mise-tech-stack.md
+++ b/.agent-os/standards/mise-tech-stack.md
@@ -180,7 +180,7 @@
- **cargo**: Rust package installation
- **npm**: Node.js package installation
- **gem**: Ruby gem installation
-- **pipx**: Python application installation
+- **uv tool**: Python application installation
- **go install**: Go binary installation
### Tool Registries
diff --git a/docs/architecture.md b/docs/architecture.md
index 819914129f..b688c8400d 100644
--- a/docs/architecture.md
+++ b/docs/architecture.md
@@ -53,7 +53,7 @@ pub trait Backend: Debug + Send + Sync {
**Backend Categories:**
- **Core Backends**: Native Rust implementations for maximum performance
-- **Language Package Managers**: npm, pipx, cargo, gem, go modules
+- **Language Package Managers**: npm, uv, cargo, gem, go modules
- **Universal Installers**: github (GitHub releases), aqua (comprehensive package management)
- **Plugin Systems**: [backend plugins](backend-plugin-development.md) (enhanced methods), [tool plugins](tool-plugin-development.md) (hook-based), [asdf plugins](asdf-legacy-plugins.md) (legacy)
diff --git a/docs/asdf-legacy-plugins.md b/docs/asdf-legacy-plugins.md
index 1c9376d44d..2caff83056 100644
--- a/docs/asdf-legacy-plugins.md
+++ b/docs/asdf-legacy-plugins.md
@@ -32,7 +32,7 @@ Only use asdf plugins when:
1. [aqua backend](dev-tools/backends/aqua.md) - Preferred for GitHub releases
2. [github backend](dev-tools/backends/github.md) - Simple GitHub releases
-3. [Language package managers](dev-tools/backends/) - npm, pipx, cargo, gem, etc.
+3. [Language package managers](dev-tools/backends/) - npm, uv, cargo, gem, etc.
4. [backend plugins](backend-plugin-development.md) - Enhanced plugins with backend methods
5. [tool plugins](tool-plugin-development.md) - Hook-based cross-platform plugins
@@ -329,7 +329,7 @@ Consider migrating from asdf plugins to modern alternatives:
1. **Check if tool is available in [aqua registry](https://aquaproj.github.io/aqua-registry/)**
2. **Use [github backend](dev-tools/backends/github.md) for simple GitHub releases**
3. **Create a [mise plugin](tool-plugin-development.md) for complex tools** - use the [mise-tool-plugin-template](https://github.com/jdx/mise-tool-plugin-template) for a quick start
-4. **Use language-specific package managers** (npm, pipx, cargo, gem)
+4. **Use language-specific package managers** (npm, uv, cargo, gem)
## Community Resources
diff --git a/docs/cli/backends/ls.md b/docs/cli/backends/ls.md
index debc0a98e1..69cf48d5a1 100644
--- a/docs/cli/backends/ls.md
+++ b/docs/cli/backends/ls.md
@@ -19,7 +19,7 @@ dotnet
gem
go
npm
-pipx
+uv
spm
ubi
vfox
diff --git a/docs/contributing.md b/docs/contributing.md
index bdcccf80db..ac6950da4b 100644
--- a/docs/contributing.md
+++ b/docs/contributing.md
@@ -646,7 +646,7 @@ of the full backend specification.
features
- **[github](dev-tools/backends/github.md)** - Simple GitHub releases following
standard conventions
- - **Language package managers** - `npm`, `pipx`, `cargo`, `gem`, etc. for
+ - **Language package managers** - `npm`, `uv`, `cargo`, `gem`, etc. for
ecosystem-specific tools
- **[Core tools](core-tools.md)** - Built-in support for major languages
(not user-contributed)
@@ -754,7 +754,7 @@ If you need a custom backend:
1. **Discuss with jdx first** in [Discord](https://discord.gg/UBa7pJUN7Z) or by
creating a [discussion](https://github.com/jdx/mise/discussions)
-2. **Consider if existing backends** (github, aqua, npm, pipx, etc.) can meet your
+2. **Consider if existing backends** (github, aqua, npm, uv, etc.) can meet your
needs
3. **Create a plugin** - use the [plugin system](tool-plugin-development.md) to create plugins for private/custom tools without core changes. Start with the [mise-tool-plugin-template](https://github.com/jdx/mise-tool-plugin-template) for a quick setup
@@ -771,7 +771,7 @@ across different installation systems.
- **Core Backends** (`src/backend/core/`) - Built-in language runtimes like
Node.js, Python, Ruby
-- **Package Manager Backends** (`src/backend/`) - npm, pipx, cargo, gem, go
+- **Package Manager Backends** (`src/backend/`) - npm, uv, cargo, gem, go
modules
- **Universal Installers** (`src/backend/`) - github, aqua for GitHub releases and
package management
diff --git a/docs/dev-tools/backend_architecture.md b/docs/dev-tools/backend_architecture.md
index deb1f5a034..815eaa82a2 100644
--- a/docs/dev-tools/backend_architecture.md
+++ b/docs/dev-tools/backend_architecture.md
@@ -47,7 +47,7 @@ Core tools like Node.js and Java are implemented as backends even though they re
Leverage existing language ecosystems:
- **npm** - npm packages (`npm:prettier`, `npm:typescript`)
-- **pipx** - Python packages (`pipx:black`, `pipx:poetry`)
+- **uv** - Python packages (`uv:black`, `uv:poetry`)
- **cargo** - Rust crates (`cargo:ripgrep`, `cargo:fd-find`)
- **gem** - Ruby gems (`gem:bundler`, `gem:rails`)
- **go** - Go modules (`go:github.com/golangci/golangci-lint/cmd/golangci-lint`)
@@ -119,17 +119,17 @@ terraform = "aqua:hashicorp/terraform" # Use aqua backend
## Backend Capabilities Comparison
-| Feature | Core | npm/pipx/cargo | aqua | ubi | Backend Plugins | Tool Plugins (vfox) | asdf Plugins (legacy) |
-| ------------------------- | ---- | -------------- | ---- | --- | --------------- | ------------------- | --------------------- |
-| **Speed** | ✅ | ⚠️ | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ |
-| **Security** | ✅ | ⚠️ | ✅ | ⚠️ | ⚠️ | ⚠️ | ⚠️ |
-| **Windows Support** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
-| **Env Var Support** | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ |
-| **Custom Scripts** | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ |
-| **Built-in Modules** | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ |
-| **Security Attestations** | ❌ | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ |
-| **Multi-tool Plugins** | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
-| **Progress/Logging** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
+| Feature | Core | npm/uv/cargo | aqua | ubi | Backend Plugins | Tool Plugins (vfox) | asdf Plugins (legacy) |
+| ------------------------- | ---- | ------------ | ---- | --- | --------------- | ------------------- | --------------------- |
+| **Speed** | ✅ | ⚠️ | ✅ | ✅ | ⚠️ | ⚠️ | ⚠️ |
+| **Security** | ✅ | ⚠️ | ✅ | ⚠️ | ⚠️ | ⚠️ | ⚠️ |
+| **Windows Support** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
+| **Env Var Support** | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ |
+| **Custom Scripts** | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ |
+| **Built-in Modules** | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ❌ |
+| **Security Attestations** | ❌ | ❌ | ✅ | ❌ | ✅ | ✅ | ❌ |
+| **Multi-tool Plugins** | ❌ | ❌ | ❌ | ❌ | ✅ | ❌ | ❌ |
+| **Progress/Logging** | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
## When to Use Each Backend
@@ -200,12 +200,12 @@ Some backends have dependencies on others:
```mermaid
graph TD
A[npm backend] --> B[Node.js]
- C[pipx backend] --> D[pipx]
+ C[uv backend] --> D[uv]
E[cargo backend] --> F[Rust]
G[gem backend] --> H[Ruby]
```
-mise automatically handles these dependencies, installing Node.js before npm tools, pipx before pipx tools, etc.
+mise automatically handles these dependencies, installing Node.js before npm tools, uv before uv tools, etc.
## Configuration and Overrides
@@ -234,7 +234,7 @@ Some backends support additional configuration:
# mise.toml
[tools]
python = { version = "3.12", virtualenv = ".venv" } # Core backend options
-black = { version = "latest", python = "3.12" } # pipx backend options
+black = { version = "latest", python = "3.12" } # uv backend options
```
## Troubleshooting Backend Issues
diff --git a/docs/dev-tools/backends/index.md b/docs/dev-tools/backends/index.md
index e6506c1382..9f83af8035 100644
--- a/docs/dev-tools/backends/index.md
+++ b/docs/dev-tools/backends/index.md
@@ -1,6 +1,6 @@
# Backends
-Backends are package managers or ecosystems that mise uses to install [tools](/dev-tools/index.html) and [plugins](/plugins.html). Each backend can install and manage multiple tools from its ecosystem. For example, the `npm` backend can install many different tools like `npm:prettier`, or the `pipx` backend can install tools like `pipx:black`. This allows mise to support a wide variety of tools and languages by leveraging different package managers and their ecosystems.
+Backends are package managers or ecosystems that mise uses to install [tools](/dev-tools/index.html) and [plugins](/plugins.html). Each backend can install and manage multiple tools from its ecosystem. For example, the `npm` backend can install many different tools like `npm:prettier`, or the `uv` backend (formerly `pipx`) can install tools like `uv:black`. This allows mise to support a wide variety of tools and languages by leveraging different package managers and their ecosystems.
When you run the [`mise use`](/cli/use.html) command, mise will determine the appropriate backend to use based on the tool you are trying to manage. The backend will then handle the installation, configuration, and any other necessary steps to ensure the tool is ready to use.
@@ -20,7 +20,7 @@ Below is a list of the available backends in mise:
- [go](/dev-tools/backends/go)
- [http](/dev-tools/backends/http)
- [npm](/dev-tools/backends/npm)
-- [pipx](/dev-tools/backends/pipx)
+- [uv](/dev-tools/backends/uv)
- [s3](/dev-tools/backends/s3)
- [spm](/dev-tools/backends/spm)
- [ubi](/dev-tools/backends/ubi)
diff --git a/docs/dev-tools/backends/pipx.md b/docs/dev-tools/backends/pipx.md
index a06d767043..e4d107a932 100644
--- a/docs/dev-tools/backends/pipx.md
+++ b/docs/dev-tools/backends/pipx.md
@@ -1,137 +1,8 @@
# pipx Backend
-pipx is a tool for running Python CLIs in isolated virtualenvs. This is necessary for Python CLIs
-because it prevents conflicting dependencies between CLIs or between a CLI and Python projects. In essence,
-this backend lets you add Python CLIs to mise.
+The backend formerly called **pipx** is now named **uv**.
-To be clear, pipx is not pip and it's not used to manage Python dependencies generally.
-mise is a tool manager, not a dependency manager like pip, uv, or poetry. You can, however, use mise to install said package
-managers. You'd want to use the pipx backend to install a CLI like "black", not a library like "NumPy" or "requests".
+- Use `uv:` as the backend prefix (recommended).
+- `pipx:` still works but emits a deprecation warning.
-Somewhat confusingly, the pipx backend will actually default to using [`uvx`](https://docs.astral.sh/uv/guides/tools/) (the equivalent of pipx for uv)
-if uv is installed. This should just mean that it installs much faster, but see below to disable or configure
-since occasionally tools don't work with uvx.
-
-The pipx backend supports the following sources:
-
-- PyPI
-- Git
-- GitHub
-- Http
-
-The code for this is inside of the mise repository at [`./src/backend/pipx.rs`](https://github.com/jdx/mise/blob/main/src/backend/pipx.rs).
-
-## Dependencies
-
-This relies on having `uv` (recommended) or `pipx` installed.
-
-If you have `uv` installed, mise will use `uv tool install` under the hood and you don't need to install `pipx` to run the commands containing "pipx:".
-
-In case you need `pipx` for other reasons, you can install it with or without mise.
-Here is how to install `pipx` with mise:
-
-```sh
-mise use -g python
-pip install --user pipx
-```
-
-[Other installation instructions](https://pipx.pypa.io/latest/installation/)
-
-## Usage
-
-The following installs the latest version of [black](https://github.com/psf/black)
-and sets it as the active version on PATH:
-
-```sh
-$ mise use -g pipx:psf/black
-$ black --version
-black, 24.3.0
-```
-
-The version will be set in `~/.config/mise/config.toml` with the following format:
-
-```toml
-[tools]
-"pipx:psf/black" = "latest"
-```
-
-## Python upgrades
-
-If the python version used by a pipx package changes, (by mise or system python), you may need to
-reinstall the package. This can be done with:
-
-```sh
-mise install -f pipx:psf/black
-```
-
-Or you can reinstall all pipx packages with:
-
-```sh
-mise install -f "pipx:*"
-```
-
-mise _should_ do this automatically when using `mise up python`.
-
-### Supported Pipx Syntax
-
-| Description | Usage |
-| ------------------------------------- | ------------------------------------------------------ |
-| PyPI shorthand latest version | `pipx:black` |
-| PyPI shorthand for specific version | `pipx:black@24.3.0` |
-| GitHub shorthand for latest version | `pipx:psf/black` |
-| GitHub shorthand for specific version | `pipx:psf/black@24.3.0` |
-| Git syntax for latest version | `pipx:git+https://github.com/psf/black.git` |
-| Git syntax for a branch | `pipx:git+https://github.com/psf/black.git@main` |
-| Https with zipfile | `pipx:https://github.com/psf/black/archive/18.9b0.zip` |
-
-Other syntax may work but is unsupported and untested.
-
-## Settings
-
-Set these with `mise settings set [VARIABLE] [VALUE]` or by setting the environment variable listed.
-
-
-
-
-## Tool Options
-
-The following [tool-options](/dev-tools/#tool-options) are available for the `pipx` backend—these
-go in `[tools]` in `mise.toml`.
-
-### `extras`
-
-Install additional components.
-
-```toml
-[tools]
-"pipx:harlequin" = { version = "latest", extras = "postgres,s3" }
-```
-
-### `pipx_args`
-
-Additional arguments to pass to `pipx` when installing the package.
-
-```toml
-[tools]
-"pipx:black" = { version = "latest", pipx_args = "--preinstall" }
-```
-
-### `uvx`
-
-Set to `false` to always disable uv for this tool.
-
-```toml
-[tools]
-"pipx:ansible" = { version = "latest", uvx = "false", pipx_args = "--include-deps" }
-```
-
-### `uvx_args`
-
-Additional arguments to pass to `uvx` when installing the package.
-
-```toml
-[tools]
-"pipx:ansible-core" = { version = "latest", uvx_args = "--with ansible" }
-```
+See the [uv backend docs](/dev-tools/backends/uv).
diff --git a/docs/dev-tools/backends/uv.md b/docs/dev-tools/backends/uv.md
new file mode 100644
index 0000000000..3194e9c434
--- /dev/null
+++ b/docs/dev-tools/backends/uv.md
@@ -0,0 +1,148 @@
+# uv Backend
+
+> Formerly called the **pipx** backend. The `pipx:` prefix still works but is deprecated; use `uv:` instead.
+
+`uv` is a tool for running Python CLIs in isolated virtualenvs via `uv tool`. This is necessary for Python CLIs
+because it prevents conflicting dependencies between CLIs or between a CLI and Python projects. In essence,
+this backend lets you add Python CLIs to mise.
+
+To be clear, this backend is **not** for managing Python dependencies generally. mise is a tool manager, not a
+dependency manager like pip, uv, or poetry. You can, however, use mise to install those package managers. You'd
+use the `uv` backend to install a CLI like "black", not a library like "NumPy" or "requests".
+
+The uv backend supports the following sources:
+
+- PyPI
+- Git
+- GitHub
+- Http
+
+The code for this is inside of the mise repository at
+[`./src/backend/uv_tool.rs`](https://github.com/jdx/mise/blob/main/src/backend/uv_tool.rs).
+
+## Dependencies
+
+This backend prefers `uv` (recommended) and can fall back to `pipx` if configured.
+
+Install `uv` with mise:
+
+```sh
+mise use -g uv
+```
+
+If you need to force pipx for a specific tool (e.g., compatibility issues), first install `pipx`.
+You can install it with or without mise. Here is how to install `pipx` with mise:
+
+```sh
+mise use -g python
+pip install --user pipx
+```
+
+[Other pipx installation instructions](https://pipx.pypa.io/latest/installation/)
+
+Then set `pipx = true` for the tool:
+
+```sh
+mise use "uv:psf/black[pipx=true]"
+```
+
+## Usage
+
+The following installs the latest version of [black](https://github.com/psf/black)
+from GitHub and sets it as the active version on PATH:
+
+```sh
+$ mise use -g uv:psf/black
+$ black --version
+black, 24.3.0
+```
+
+The version will be set in `~/.config/mise/config.toml` with the following format:
+
+```toml
+[tools]
+"uv:psf/black" = "latest"
+```
+
+## Python upgrades
+
+If the Python version used by a uv tool changes (by mise or system Python), you may need to reinstall the
+package. This can be done with:
+
+```sh
+mise install -f uv:psf/black
+```
+
+Or you can reinstall all uv tools with:
+
+```sh
+mise install -f "uv:*"
+```
+
+mise _should_ do this automatically when using `mise up python`.
+
+### Supported uv Syntax
+
+| Description | Usage |
+| ------------------------------------- | ---------------------------------------------------- |
+| PyPI shorthand latest version | `uv:black` |
+| PyPI shorthand for specific version | `uv:black@24.3.0` |
+| GitHub shorthand for latest version | `uv:psf/black` |
+| GitHub shorthand for specific version | `uv:psf/black@24.3.0` |
+| Git syntax for latest version | `uv:git+https://github.com/psf/black.git` |
+| Git syntax for a branch | `uv:git+https://github.com/psf/black.git@main` |
+| Https with zipfile | `uv:https://github.com/psf/black/archive/18.9b0.zip` |
+
+Other syntax may work but is unsupported and untested.
+
+## Settings
+
+Set these with `mise settings set [VARIABLE] [VALUE]` or by setting the environment variable listed.
+
+
+
+
+## Tool Options
+
+The following [tool-options](/dev-tools/#tool-options) are available for the `uv` backend--these
+go in `[tools]` in `mise.toml`.
+
+### `extras`
+
+Install additional components.
+
+```toml
+[tools]
+"uv:harlequin" = { version = "latest", extras = "postgres,s3" }
+```
+
+### `pipx`
+
+Set to `true` to always disable `uv tool` for this tool and use pipx instead.
+
+```toml
+[tools]
+"uv:ansible" = { version = "latest", pipx = "true" }
+```
+
+### `pipx_args`
+
+Additional arguments to pass to `pipx` when installing the package (only used when `pipx = true`).
+
+```toml
+[tools]
+"uv:black" = { version = "latest", pipx = "true" , pipx_args = "--preinstall" }
+```
+
+### `uv_tool_args`
+
+Additional arguments to pass to `uv tool` when installing the package.
+
+```toml
+[tools]
+"uv:ansible-core" = { version = "latest", uv_tool_args = "--with ansible" }
+```
+
+> Legacy options `uvx` and `uvx_args` are still supported but deprecated.
diff --git a/docs/dev-tools/mise-lock.md b/docs/dev-tools/mise-lock.md
index db160252c6..0633845a32 100644
--- a/docs/dev-tools/mise-lock.md
+++ b/docs/dev-tools/mise-lock.md
@@ -201,7 +201,7 @@ Backend support for lockfile features varies:
- ✅ **Full support** (version + checksum + size + URL): `aqua`, `http`, `github`, `gitlab`
- ⚠️ **Partial support** (version + checksum + size): `ubi`
- 📝 **Basic support** (version + checksum): `core` (some tools)
-- 📝 **Version only**: `asdf`, `npm`, `cargo`, `pipx`
+- 📝 **Version only**: `asdf`, `npm`, `cargo`, `uv`
- 📝 **Planned**: More backends will add full asset tracking support over time
## Best Practices
diff --git a/docs/getting-started.md b/docs/getting-started.md
index 7a6af863ee..6d9949bdbd 100644
--- a/docs/getting-started.md
+++ b/docs/getting-started.md
@@ -219,7 +219,7 @@ Note that when you ran `mise use --global node@24`, `mise` updated the global `m
node = "24"
```
-## 4. Use tools from backends (npm, pipx, core, aqua, github) {#tool-backends}
+## 4. Use tools from backends (npm, uv, core, aqua, github) {#tool-backends}
```mermaid
flowchart LR
@@ -228,7 +228,7 @@ flowchart LR
aqua
github
npm
- pipx
+ uv
end
core --> node["core:node"]
@@ -238,8 +238,8 @@ flowchart LR
github -->ruff["github:astral-sh/ruff"]
npm --> prettier["npm:prettier"]
npm --> claude_code["npm:@anthropic-ai/claude-code"]
- pipx -->black["pipx:black"]
- pipx -->pycowsay["pipx:pycowsay"]
+ uv -->black["uv:black"]
+ uv -->pycowsay["uv:pycowsay"]
aqua -->terraform["aqua:hashicorp/terraform"]
subgraph Tools
@@ -269,14 +269,14 @@ mise use --global npm:@anthropic-ai/claude-code
claude --version
```
-Install [black](https://github.com/psf/black) with the pipx backend:
+Install [black](https://github.com/psf/black) with the uv backend:
```sh
# run black via mise x|exec
-mise exec pipx:black -- black --version
+mise exec uv:black -- black --version
# or if mise is activated in your shell
-mise use --global pipx:black
+mise use --global uv:black
black --version
```
diff --git a/docs/glossary.md b/docs/glossary.md
index c7d64e2e34..a44e57985a 100644
--- a/docs/glossary.md
+++ b/docs/glossary.md
@@ -74,8 +74,8 @@ mise supports multiple backends for installing tools from different sources:
**npm**
: Installs Node.js packages and CLI tools from the npm registry. See [npm backend](/dev-tools/backends/npm).
-**pipx**
-: Installs Python CLI tools in isolated environments using pipx. See [pipx backend](/dev-tools/backends/pipx).
+**uv**
+: Installs Python CLI tools in isolated environments using `uv tool` (formerly pipx). See [uv backend](/dev-tools/backends/uv).
**spm**
: Installs tools via Swift Package Manager. See [spm backend](/dev-tools/backends/spm).
diff --git a/docs/mise.usage.kdl b/docs/mise.usage.kdl
index f4d9fa2a81..a3173505dc 100644
--- a/docs/mise.usage.kdl
+++ b/docs/mise.usage.kdl
@@ -133,7 +133,7 @@ cmd "backends" help="Manage backends" {
cargo
go
npm
- pipx
+ uv
spm
ubi
"
diff --git a/docs/registry.data.ts b/docs/registry.data.ts
index f29e21f2af..10cb61ed60 100644
--- a/docs/registry.data.ts
+++ b/docs/registry.data.ts
@@ -65,6 +65,7 @@ export default {
gitlab: (slug) => `https://gitlab.com/${slug}`,
go: (slug) => `https://pkg.go.dev/${slug}`,
npm: (slug) => `https://www.npmjs.com/package/${slug}`,
+ uv: (slug) => `https://pypi.org/project/${slug}`,
pipx: (slug) => `https://pypi.org/project/${slug}`,
spm: (slug, options) =>
slug.startsWith("http")
diff --git a/docs/registry.md b/docs/registry.md
index fa1015912d..a87f1f9f3e 100644
--- a/docs/registry.md
+++ b/docs/registry.md
@@ -33,7 +33,7 @@ In general, the preferred [backend](/dev-tools/backends/) to use for new tools i
- [aqua](./dev-tools/backends/aqua.html) - offers the most features and security while not requiring plugins
- [github](./dev-tools/backends/github.html) - for tools that are not available in the aqua registry, but are available on GitHub
- [gitlab](./dev-tools/backends/gitlab.html) - for tools that are not available in the aqua registry, but are available on GitLab
-- [pipx](./dev-tools/backends/pipx.html) - only for python tools, requires python to be installed but this generally would always be the case for python tools
+- [uv](./dev-tools/backends/uv.html) - only for python tools, requires uv/python to be installed but this generally would always be the case for python tools
- [npm](./dev-tools/backends/npm.html) - only for node tools, requires node to be installed but this generally would always be the case for node tools
- [go](./dev-tools/backends/go.html) - only for go tools, requires go to be installed to compile. Because go tools can be distributed as a single binary, aqua/github are definitely preferred.
- [cargo](./dev-tools/backends/cargo.html) - only for rust tools, requires rust to be installed to compile. Because rust tools can be distributed as a single binary, aqua/github are definitely preferred.
diff --git a/e2e/cli/test_settings_ls b/e2e/cli/test_settings_ls
index 0081018b01..e812c4849e 100644
--- a/e2e/cli/test_settings_ls
+++ b/e2e/cli/test_settings_ls
@@ -30,7 +30,7 @@ assert_contains "mise settings --json-extended" "{
\"java\"
],
\"type\": \"array\",
- \"description\": \"Backends to disable such as \`asdf\` or \`pipx\`\",
+ \"description\": \"Backends to disable such as \`asdf\` or \`uv\`\",
\"source\": \"$HOME/workdir/mise.toml\"
}
}"
diff --git a/llms.txt b/llms.txt
index a46486e5d8..865e86fee0 100644
--- a/llms.txt
+++ b/llms.txt
@@ -252,7 +252,7 @@ mise is written in Rust and uses itself for development tasks. To contribute to
#### Prerequisites
- Rust (latest stable)
- Node.js
-- `pipx` or `uv`
+- `uv` (preferred) or `pipx` for legacy workflows
- Bash (newer than macOS default)
#### Getting Started
@@ -898,7 +898,7 @@ pub trait Backend: Debug + Send + Sync {
- **Core Backends**: Built-in support (Node.js, Python, etc.)
- **ASDF Backends**: External plugin system compatibility
- **Aqua Backends**: Package manager integration
-- **Language-specific**: npm, cargo, pipx, gem, go, etc.
+- **Language-specific**: npm, cargo, uv, gem, go, etc.
- **Universal**: ubi (GitHub releases)
#### 4. **Configuration System** (`src/config/`)
@@ -1032,4 +1032,4 @@ pub trait Backend: Debug + Send + Sync {
This architecture provides a flexible, extensible foundation for managing development environments while maintaining compatibility with existing tools and workflows.
-This covers the essential information about mise for LLMs to help users effectively use the tool for development environment management and contribute to its development.
\ No newline at end of file
+This covers the essential information about mise for LLMs to help users effectively use the tool for development environment management and contribute to its development.
diff --git a/mise.usage.kdl b/mise.usage.kdl
index 2c0401c8c1..3745318826 100644
--- a/mise.usage.kdl
+++ b/mise.usage.kdl
@@ -128,7 +128,7 @@ cmd backends help="Manage backends" {
alias backend backend-list hide=#true
cmd ls help="List built-in backends" {
alias list
- after_long_help "Examples:\n\n $ mise backends ls\n aqua\n asdf\n cargo\n core\n dotnet\n gem\n go\n npm\n pipx\n spm\n ubi\n vfox\n"
+ after_long_help "Examples:\n\n $ mise backends ls\n aqua\n asdf\n cargo\n core\n dotnet\n gem\n go\n npm\n uv\n spm\n ubi\n vfox\n"
}
}
cmd bin-paths help="List all the active runtime bin paths" {
diff --git a/registry/ansible-core.toml b/registry/ansible-core.toml
index c3f17c77b4..abc5176dff 100644
--- a/registry/ansible-core.toml
+++ b/registry/ansible-core.toml
@@ -1,4 +1,4 @@
aliases = ["ansible-base"]
-backends = ["pipx:ansible-core"]
+backends = ["uv:ansible-core"]
description = "ansible-core python package contains the core runtime and CLI tools, such as ansible and ansible-playbook"
test = { cmd = "ansible --version", expected = "ansible [core {{version}}]" }
diff --git a/registry/ansible.toml b/registry/ansible.toml
index 943beef411..e2c0bf1013 100644
--- a/registry/ansible.toml
+++ b/registry/ansible.toml
@@ -2,8 +2,7 @@ description = "ansible python package contains the core runtime and CLI tools, s
test = { cmd = "ansible --version", expected = "ansible" }
[[backends]]
-full = "pipx:ansible"
+full = "uv:ansible"
[backends.options]
-pipx_args = "--include-deps"
-uvx = false
+uv_tool_args = "--with-executables-from ansible-core,ansible-lint"
diff --git a/registry/ast-grep.toml b/registry/ast-grep.toml
index 6338a96093..73e2d96ddb 100644
--- a/registry/ast-grep.toml
+++ b/registry/ast-grep.toml
@@ -2,7 +2,7 @@ backends = [
"aqua:ast-grep/ast-grep",
"cargo:ast-grep",
"npm:@ast-grep/cli",
- "pipx:ast-grep-cli",
+ "uv:ast-grep-cli",
]
description = "A CLI tool for code structural search, lint and rewriting. Written in Rust"
test = { cmd = "sg --version", expected = "ast-grep {{version}}" }
diff --git a/registry/aws-sam.toml b/registry/aws-sam.toml
index b464256eb1..fc9804d2f8 100644
--- a/registry/aws-sam.toml
+++ b/registry/aws-sam.toml
@@ -4,7 +4,7 @@ backends = [
"linux",
"macos",
], options = { symlink_bins = "true" } },
- "pipx:aws-sam-cli",
+ "uv:aws-sam-cli",
"asdf:mise-plugins/mise-pyapp",
]
description = "CLI tool to build, test, debug, and deploy Serverless applications using AWS SAM"
diff --git a/registry/awscli-local.toml b/registry/awscli-local.toml
index ecb32e6d1b..4bfa1b788b 100644
--- a/registry/awscli-local.toml
+++ b/registry/awscli-local.toml
@@ -1,3 +1,3 @@
-backends = ["pipx:awscli-local"]
+backends = ["uv:awscli-local"]
description = "This package provides the awslocal command, which is a thin wrapper around the aws command line interface for use with LocalStack"
test = { cmd = "awslocal --version", expected = "aws-cli/" }
diff --git a/registry/awsebcli.toml b/registry/awsebcli.toml
index 529443688f..5f31e54c4d 100644
--- a/registry/awsebcli.toml
+++ b/registry/awsebcli.toml
@@ -1,3 +1,3 @@
-backends = ["pipx:awsebcli", "asdf:mise-plugins/mise-pyapp"]
+backends = ["uv:awsebcli", "asdf:mise-plugins/mise-pyapp"]
description = "The AWS Elastic Beanstalk Command Line Interface (EB CLI) is a tool that helps you deploy and manage your Elastic Beanstalk applications and environments. It also provides integration with Git"
test = { cmd = "eb --version", expected = "EB CLI {{version}}" }
diff --git a/registry/azure.toml b/registry/azure.toml
index e953745b6c..95342fa9a2 100644
--- a/registry/azure.toml
+++ b/registry/azure.toml
@@ -3,7 +3,7 @@ description = "azure-cli (az)"
test = { cmd = "az --version", expected = "azure-cli {{version}}" }
[[backends]]
-full = "pipx:azure-cli"
+full = "uv:azure-cli"
[backends.options]
-uvx_args = "--prerelease=allow"
+uv_tool_args = "--prerelease=allow"
diff --git a/registry/cfn-lint.toml b/registry/cfn-lint.toml
index d2d76ace56..961b0e95bf 100644
--- a/registry/cfn-lint.toml
+++ b/registry/cfn-lint.toml
@@ -1,3 +1,3 @@
-backends = ["pipx:cfn-lint"]
+backends = ["uv:cfn-lint"]
description = "Checks CloudFormation templates for practices and behaviour that could potentially be improved"
# test = ["cfn-lint --version", "cfn-lint {{version}}"] # disabled: failing in CI
diff --git a/registry/conan.toml b/registry/conan.toml
index fe71419112..2f80be624a 100644
--- a/registry/conan.toml
+++ b/registry/conan.toml
@@ -1,3 +1,3 @@
-backends = ["pipx:conan", "asdf:mise-plugins/mise-pyapp"]
+backends = ["uv:conan", "asdf:mise-plugins/mise-pyapp"]
description = "Decentralized, open-source (MIT), C/C++ package manager"
test = { cmd = "conan --version", expected = "Conan version {{version}}" }
diff --git a/registry/cookiecutter.toml b/registry/cookiecutter.toml
index 7df8f28fc6..2da6be3fed 100644
--- a/registry/cookiecutter.toml
+++ b/registry/cookiecutter.toml
@@ -1,2 +1,2 @@
-backends = ["pipx:cookiecutter", "asdf:shawon-crosen/asdf-cookiecutter"]
+backends = ["uv:cookiecutter", "asdf:shawon-crosen/asdf-cookiecutter"]
description = "Create projects swiftly from cookiecutters (project templates) with this command-line utility. Ideal for generating Python package projects and more"
diff --git a/registry/copier.toml b/registry/copier.toml
index f8e664052e..b1d9ed8674 100644
--- a/registry/copier.toml
+++ b/registry/copier.toml
@@ -1,3 +1,3 @@
-backends = ["pipx:copier", "asdf:looztra/asdf-copier"]
+backends = ["uv:copier", "asdf:looztra/asdf-copier"]
description = "A library and CLI app for rendering project templates"
test = { cmd = "copier --version", expected = "copier {{version}}" }
diff --git a/registry/dvc.toml b/registry/dvc.toml
index 738e2e9f65..6765992a8a 100644
--- a/registry/dvc.toml
+++ b/registry/dvc.toml
@@ -1,3 +1,3 @@
-backends = ["pipx:dvc"]
+backends = ["uv:dvc"]
description = "Data Versioning and ML Experiments"
test = { cmd = "dvc version", expected = "{{version}}" }
diff --git a/registry/gallery-dl.toml b/registry/gallery-dl.toml
index d3cfe2df82..2b9e4cf8cb 100644
--- a/registry/gallery-dl.toml
+++ b/registry/gallery-dl.toml
@@ -1,2 +1,2 @@
-backends = ["pipx:gallery-dl"]
+backends = ["uv:gallery-dl"]
description = "Command-line program to download image galleries and collections from several image hosting sites"
diff --git a/registry/ggshield.toml b/registry/ggshield.toml
index 13abdb7038..64f097752d 100644
--- a/registry/ggshield.toml
+++ b/registry/ggshield.toml
@@ -1,3 +1,3 @@
-backends = ["aqua:GitGuardian/ggshield", "pipx:ggshield"]
+backends = ["aqua:GitGuardian/ggshield", "uv:ggshield"]
description = "Detect and validate 500+ types of hardcoded secrets with advanced checks. Use it as a pre-commit hook, GitHub Action, or CLI for proactive secret detection and security."
test = { cmd = "ggshield --version", expected = "ggshield, version {{version}}" }
diff --git a/registry/hatch.toml b/registry/hatch.toml
index 1d5ae5c56a..e7de5c41cd 100644
--- a/registry/hatch.toml
+++ b/registry/hatch.toml
@@ -1,3 +1,3 @@
-backends = ["pipx:hatch"]
+backends = ["uv:hatch"]
description = "Modern, extensible Python project management."
test = { cmd = "hatch --version", expected = "{{version}}" }
diff --git a/registry/jc.toml b/registry/jc.toml
index 8636fdbefc..2ec0986130 100644
--- a/registry/jc.toml
+++ b/registry/jc.toml
@@ -1,3 +1,3 @@
-backends = ["aqua:kellyjonbrazil/jc", "pipx:jc"]
+backends = ["aqua:kellyjonbrazil/jc", "uv:jc"]
description = "CLI tool and python library that converts the output of popular command-line tools, file-types, and common strings to JSON, YAML, or Dictionaries. This allows piping of output to tools like jq and simplifying automation scripts"
test = { cmd = "jc --version", expected = "jc version: {{version}}" }
diff --git a/registry/meson.toml b/registry/meson.toml
index 7599416b60..035cc3730c 100644
--- a/registry/meson.toml
+++ b/registry/meson.toml
@@ -1,2 +1,2 @@
-backends = ["pipx:meson", "asdf:mise-plugins/mise-meson"]
+backends = ["uv:meson", "asdf:mise-plugins/mise-meson"]
description = "Meson is an open source build system meant to be both extremely fast, and, even more importantly, as user friendly as possible"
diff --git a/registry/mitmproxy.toml b/registry/mitmproxy.toml
index 9f5d01a03b..2e34fff144 100644
--- a/registry/mitmproxy.toml
+++ b/registry/mitmproxy.toml
@@ -1,2 +1,2 @@
-backends = ["pipx:mitmproxy", "asdf:mise-plugins/mise-mitmproxy"]
+backends = ["uv:mitmproxy", "asdf:mise-plugins/mise-mitmproxy"]
description = "mitmproxy is a free and open source interactive HTTPS proxy"
diff --git a/registry/pdm.toml b/registry/pdm.toml
index f74e9f3019..72389e04fb 100644
--- a/registry/pdm.toml
+++ b/registry/pdm.toml
@@ -1,3 +1,3 @@
-backends = ["pipx:pdm", "asdf:1oglop1/asdf-pdm"]
+backends = ["uv:pdm", "asdf:1oglop1/asdf-pdm"]
description = "A modern Python package and dependency manager supporting the latest PEP standards"
test = { cmd = "pdm --version", expected = "PDM, version {{version}}" }
diff --git a/registry/pipenv.toml b/registry/pipenv.toml
index 79ac839b1c..5119b66302 100644
--- a/registry/pipenv.toml
+++ b/registry/pipenv.toml
@@ -1,4 +1,4 @@
-backends = ["vfox:mise-plugins/vfox-pipenv", "pipx:pipenv"]
+backends = ["vfox:mise-plugins/vfox-pipenv", "uv:pipenv"]
depends = ["python"]
description = "Python Development Workflow for Humans"
test = { cmd = "pipenv --version", expected = "pipenv, version {{version}}" }
diff --git a/registry/poetry.toml b/registry/poetry.toml
index 40f40bf4e2..ec095878cf 100644
--- a/registry/poetry.toml
+++ b/registry/poetry.toml
@@ -1,4 +1,4 @@
-backends = ["vfox:mise-plugins/vfox-poetry", "pipx:poetry"]
+backends = ["vfox:mise-plugins/vfox-poetry", "uv:poetry"]
description = "Python packaging and dependency management made easy"
detect = ["poetry.lock"]
test = { cmd = "poetry --version", expected = "Poetry (version {{version}})" }
diff --git a/registry/pre-commit.toml b/registry/pre-commit.toml
index b5fc1e6c4d..d30cb6e173 100644
--- a/registry/pre-commit.toml
+++ b/registry/pre-commit.toml
@@ -1,7 +1,7 @@
backends = [
"aqua:pre-commit/pre-commit",
"asdf:jonathanmorley/asdf-pre-commit",
- "pipx:pre-commit",
+ "uv:pre-commit",
]
description = "A framework for managing and maintaining multi-language pre-commit hooks"
test = { cmd = "pre-commit --version", expected = "pre-commit {{version}}" }
diff --git a/registry/semgrep.toml b/registry/semgrep.toml
index 5c20569c24..eb09bc6ac3 100644
--- a/registry/semgrep.toml
+++ b/registry/semgrep.toml
@@ -1,3 +1,3 @@
-backends = ["pipx:semgrep", "asdf:mise-plugins/mise-semgrep"]
+backends = ["uv:semgrep", "asdf:mise-plugins/mise-semgrep"]
description = "Lightweight static analysis for many languages. Find bug variants with patterns that look like source code."
test = { cmd = "semgrep --version", expected = "{{version}}" }
diff --git a/registry/sshuttle.toml b/registry/sshuttle.toml
index b33d7aa8ed..eb7d936ca6 100644
--- a/registry/sshuttle.toml
+++ b/registry/sshuttle.toml
@@ -1,2 +1,2 @@
-backends = ["pipx:sshuttle", "asdf:mise-plugins/mise-sshuttle"]
+backends = ["uv:sshuttle", "asdf:mise-plugins/mise-sshuttle"]
description = "sshuttle: where transparent proxy meets VPN meets ssh"
diff --git a/registry/uv.toml b/registry/uv.toml
index e8b5c52439..fcb97d7753 100644
--- a/registry/uv.toml
+++ b/registry/uv.toml
@@ -1,4 +1,4 @@
-backends = ["aqua:astral-sh/uv", "asdf:asdf-community/asdf-uv", "pipx:uv"]
+backends = ["aqua:astral-sh/uv", "asdf:asdf-community/asdf-uv", "uv:uv"]
description = "An extremely fast Python package installer and resolver, written in Rust"
detect = ["uv.lock"]
test = { cmd = "uv --version", expected = "uv {{version}}" }
diff --git a/registry/xxh.toml b/registry/xxh.toml
index 153b2ea1e8..e974275e6d 100644
--- a/registry/xxh.toml
+++ b/registry/xxh.toml
@@ -1,3 +1,3 @@
-backends = ["pipx:xxh-xxh"]
+backends = ["uv:xxh-xxh"]
description = "🚀 Bring your favorite shell wherever you go through the ssh. Xonsh shell, fish, zsh, osquery and so on."
test = { cmd = "xxh --version", expected = "xxh/{{version}}" }
diff --git a/registry/yamllint.toml b/registry/yamllint.toml
index da6f25768b..8e523f302f 100644
--- a/registry/yamllint.toml
+++ b/registry/yamllint.toml
@@ -1,3 +1,3 @@
-backends = ["pipx:yamllint", "asdf:ericcornelissen/asdf-yamllint"]
+backends = ["uv:yamllint", "asdf:ericcornelissen/asdf-yamllint"]
description = "A linter for YAML files"
test = { cmd = "yamllint --version", expected = "yamllint {{version}}" }
diff --git a/schema/mise-registry-tool.json b/schema/mise-registry-tool.json
index 3a8d763aa1..797939f55a 100644
--- a/schema/mise-registry-tool.json
+++ b/schema/mise-registry-tool.json
@@ -19,7 +19,7 @@
"oneOf": [
{
"type": "string",
- "pattern": "^(aqua|asdf|cargo|conda|core|dotnet|gem|github|gitlab|go|http|npm|pipx|spm|ubi|vfox):.+$",
+ "pattern": "^(aqua|asdf|cargo|conda|core|dotnet|gem|github|gitlab|go|http|npm|uv|pipx|spm|ubi|vfox):.+$",
"description": "Backend specification as a string (e.g., 'aqua:owner/repo')"
},
{
@@ -27,7 +27,7 @@
"properties": {
"full": {
"type": "string",
- "pattern": "^(aqua|asdf|cargo|conda|core|dotnet|gem|github|gitlab|go|http|npm|pipx|spm|ubi|vfox):.+$",
+ "pattern": "^(aqua|asdf|cargo|conda|core|dotnet|gem|github|gitlab|go|http|npm|uv|pipx|spm|ubi|vfox):.+$",
"description": "Full backend specification"
},
"platforms": {
diff --git a/schema/mise.json b/schema/mise.json
index cc32f12f2a..dbccc058fb 100644
--- a/schema/mise.json
+++ b/schema/mise.json
@@ -572,7 +572,7 @@
},
"disable_backends": {
"default": [],
- "description": "Backends to disable such as `asdf` or `pipx`",
+ "description": "Backends to disable such as `asdf` or `uv`",
"type": "array",
"items": {
"type": "string"
@@ -1019,17 +1019,20 @@
"registry_url": {
"default": "https://pypi.org/pypi/{}/json",
"description": "URL to use for pipx registry.",
- "type": "string"
+ "type": "string",
+ "deprecated": true
},
"uvx": {
- "description": "Use uvx instead of pipx if uv is installed and on PATH.",
- "type": "boolean"
+ "description": "Use `uv tool` instead of `pipx` when installing Python CLIs.",
+ "type": "boolean",
+ "deprecated": true
}
}
},
"pipx_uvx": {
- "description": "Use uvx instead of pipx if uv is installed and on PATH.",
- "type": "boolean"
+ "description": "Use `uv tool` instead of `pipx` when installing Python CLIs.",
+ "type": "boolean",
+ "deprecated": true
},
"plugin_autoupdate_last_check_duration": {
"default": "7d",
@@ -1527,6 +1530,21 @@
"description": "Send anonymous download statistics when installing tools.",
"type": "boolean"
},
+ "uv": {
+ "type": "object",
+ "additionalProperties": false,
+ "properties": {
+ "pipx": {
+ "description": "Use `pipx` instead of `uv tool` when installing Python CLIs.",
+ "type": "boolean"
+ },
+ "registry_url": {
+ "default": "https://pypi.org/pypi/{}/json",
+ "description": "URL to use for the uv tool registry.",
+ "type": "string"
+ }
+ }
+ },
"verbose": {
"description": "Shows more verbose output such as installation logs when installing tools.",
"type": "boolean"
diff --git a/settings.toml b/settings.toml
index 70008e2b01..4fe1059475 100644
--- a/settings.toml
+++ b/settings.toml
@@ -339,7 +339,7 @@ type = "String"
[disable_backends]
default = []
-description = "Backends to disable such as `asdf` or `pipx`"
+description = "Backends to disable such as `asdf` or `uv`"
env = "MISE_DISABLE_BACKENDS"
parse_env = "list_by_comma"
rust_type = "Vec"
@@ -801,7 +801,7 @@ Filter tool versions by release date. Supports:
This is useful for reproducible builds or security purposes where you want to ensure
you're only installing versions that existed before a certain point in time.
-Only affects backends that provide release timestamps (aqua, cargo, npm, pipx, and some core plugins).
+Only affects backends that provide release timestamps (aqua, cargo, npm, uv, and some core plugins).
Versions without timestamps are included by default.
**Behavior**: This filter only applies when resolving fuzzy version requests like `node@20` or `latest`.
@@ -1208,40 +1208,36 @@ type = "Bool"
[pipx.registry_url]
default = "https://pypi.org/pypi/{}/json"
+deprecated = "Use uv.registry_url instead."
+deprecated_remove_at = "2027.2.0"
+deprecated_warn_at = "2026.8.0"
description = "URL to use for pipx registry."
docs = """
-URL to use for pipx registry.
-
-This is used to fetch the latest version of a package from the pypi registry.
-
-The default is `https://pypi.org/pypi/{}/json` which is the JSON endpoint for the pypi
-registry.
-
-You can also use the HTML endpoint by setting this to `https://pypi.org/simple/{}/`.
+Deprecated. Use `uv.registry_url` instead.
"""
env = "MISE_PIPX_REGISTRY_URL"
+hide = true
type = "String"
[pipx.uvx]
default_docs = "true"
-description = "Use uvx instead of pipx if uv is installed and on PATH."
+deprecated = "Use uv.pipx."
+deprecated_remove_at = "2027.2.0"
+deprecated_warn_at = "2026.8.0"
+description = "Use `uv tool` instead of `pipx` when installing Python CLIs."
docs = """
-If true, mise will use `uvx` instead of `pipx` if
-[`uv`](https://docs.astral.sh/uv/) is installed and on PATH.
-This makes installing CLIs _much_ faster by using `uv` as the package manager.
-
-You can install it with mise:
-
-```sh
-mise use -g uv
-```
+Deprecated. Use `uv.pipx` instead.
"""
env = "MISE_PIPX_UVX"
+hide = true
optional = true
type = "Bool"
[pipx_uvx]
-description = "Use uvx instead of pipx if uv is installed and on PATH."
+deprecated = "Use uv.pipx."
+deprecated_remove_at = "2027.2.0"
+deprecated_warn_at = "2026.8.0"
+description = "Use `uv tool` instead of `pipx` when installing Python CLIs."
hide = true
optional = true
type = "Bool"
@@ -2043,6 +2039,33 @@ Set to false to opt-out of anonymous statistics collection.
env = "MISE_USE_VERSIONS_HOST_TRACK"
type = "Bool"
+[uv.pipx]
+default_docs = "false"
+description = "Use `pipx` instead of `uv tool` when installing Python CLIs."
+docs = """
+If true, mise will use `pipx` instead of `uv tool`.
+This requires Python to be installed.
+"""
+env = "MISE_UV_PIPX"
+optional = true
+type = "Bool"
+
+[uv.registry_url]
+default = "https://pypi.org/pypi/{}/json"
+description = "URL to use for the uv tool registry."
+docs = """
+URL to use for the uv tool registry.
+
+This is used to fetch the latest version of a package from the PyPI registry.
+
+The default is `https://pypi.org/pypi/{}/json` which is the JSON endpoint for the PyPI
+registry.
+
+You can also use the HTML endpoint by setting this to `https://pypi.org/simple/{}/`.
+"""
+env = "MISE_UV_REGISTRY_URL"
+type = "String"
+
[verbose]
description = "Shows more verbose output such as installation logs when installing tools."
env = "MISE_VERBOSE"
diff --git a/src/backend/backend_type.rs b/src/backend/backend_type.rs
index 1171d79585..34147b62f6 100644
--- a/src/backend/backend_type.rs
+++ b/src/backend/backend_type.rs
@@ -26,7 +26,8 @@ pub enum BackendType {
Gitlab,
Go,
Npm,
- Pipx,
+ #[strum(serialize = "uv", serialize = "pipx")]
+ UvTool,
Spm,
Http,
S3,
@@ -39,6 +40,7 @@ pub enum BackendType {
impl Display for BackendType {
fn fmt(&self, formatter: &mut Formatter) -> std::fmt::Result {
match self {
+ BackendType::UvTool => write!(formatter, "uv"),
BackendType::VfoxBackend(plugin_name) => write!(formatter, "{plugin_name}"),
_ => write!(formatter, "{}", format!("{self:?}").to_lowercase()),
}
@@ -62,7 +64,16 @@ impl BackendType {
"gitlab" => BackendType::Gitlab,
"go" => BackendType::Go,
"npm" => BackendType::Npm,
- "pipx" => BackendType::Pipx,
+ "uv" => BackendType::UvTool,
+ "pipx" => {
+ deprecated_at!(
+ "2026.8.0",
+ "2027.8.0",
+ "pipx-backend",
+ "The `pipx:` backend prefix is deprecated. Use `uv:` instead."
+ );
+ BackendType::UvTool
+ }
"spm" => BackendType::Spm,
"http" => BackendType::Http,
"s3" => BackendType::S3,
diff --git a/src/backend/mod.rs b/src/backend/mod.rs
index 8089e5f040..a47065bd6b 100644
--- a/src/backend/mod.rs
+++ b/src/backend/mod.rs
@@ -56,12 +56,12 @@ pub mod go;
pub mod http;
pub mod jq;
pub mod npm;
-pub mod pipx;
pub mod platform_target;
pub mod s3;
pub mod spm;
pub mod static_helpers;
pub mod ubi;
+pub mod uv_tool;
pub mod version_list;
pub mod vfox;
@@ -261,7 +261,7 @@ pub fn arg_to_backend(ba: BackendArg) -> Option {
BackendType::Gitlab => Some(Arc::new(github::UnifiedGitBackend::from_arg(ba))),
BackendType::Go => Some(Arc::new(go::GoBackend::from_arg(ba))),
BackendType::Npm => Some(Arc::new(npm::NPMBackend::from_arg(ba))),
- BackendType::Pipx => Some(Arc::new(pipx::PIPXBackend::from_arg(ba))),
+ BackendType::UvTool => Some(Arc::new(uv_tool::UvToolBackend::from_arg(ba))),
BackendType::Spm => Some(Arc::new(spm::SPMBackend::from_arg(ba))),
BackendType::Http => Some(Arc::new(http::HttpBackend::from_arg(ba))),
BackendType::S3 => Some(Arc::new(s3::S3Backend::from_arg(ba))),
@@ -286,7 +286,7 @@ pub fn install_time_option_keys_for_type(backend_type: &BackendType) -> Vec ubi::install_time_option_keys(),
BackendType::Cargo => cargo::install_time_option_keys(),
BackendType::Go => go::install_time_option_keys(),
- BackendType::Pipx => pipx::install_time_option_keys(),
+ BackendType::UvTool => uv_tool::install_time_option_keys(),
_ => vec![],
}
}
diff --git a/src/backend/pipx.rs b/src/backend/uv_tool.rs
similarity index 79%
rename from src/backend/pipx.rs
rename to src/backend/uv_tool.rs
index 89b488b292..4539d30d2f 100644
--- a/src/backend/pipx.rs
+++ b/src/backend/uv_tool.rs
@@ -27,15 +27,15 @@ use versions::Versioning;
use xx::regex;
#[derive(Debug)]
-pub struct PIPXBackend {
+pub struct UvToolBackend {
ba: Arc,
latest_version_cache: CacheManager