Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .agent-os/instructions/mise-product-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion .agent-os/standards/mise-tech-stack.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion docs/architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
4 changes: 2 additions & 2 deletions docs/asdf-legacy-plugins.md
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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

Expand Down
2 changes: 1 addition & 1 deletion docs/cli/backends/ls.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ dotnet
gem
go
npm
pipx
uv
spm
ubi
vfox
Expand Down
6 changes: 3 additions & 3 deletions docs/contributing.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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

Expand All @@ -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
Expand Down
30 changes: 15 additions & 15 deletions docs/dev-tools/backend_architecture.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`)
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions docs/dev-tools/backends/index.md
Original file line number Diff line number Diff line change
@@ -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.

Expand All @@ -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) <Badge type="warning" text="experimental" />
- [spm](/dev-tools/backends/spm) <Badge type="warning" text="experimental" />
- [ubi](/dev-tools/backends/ubi)
Expand Down
137 changes: 4 additions & 133 deletions docs/dev-tools/backends/pipx.md
Original file line number Diff line number Diff line change
@@ -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.

<script setup>
import Settings from '/components/settings.vue';
</script>
<Settings child="pipx" :level="3" />

## 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).
Loading
Loading