Skip to content

Mise

Tools

Install a tool globally and pin it

sh
mise use --global <tool>@<version>
mise use --global node@22
mise use --global kubectl@latest

Install a tool for the current directory only

sh
mise use <tool>@<version>

Install everything declared in the config

sh
mise install

Remove a tool

sh
mise uninstall <tool>        # removes the install, leaves the config entry
mise unuse --global <tool>   # removes both

Run a command with a tool without installing it globally

sh
mise exec <tool>@<version> -- <command>
mise exec node@20 -- node --version

Upgrades

With pin = true, mise use records an exact version. A plain mise upgrade only upgrades within that constraint, which an exact version already satisfies - so it reports "All tools are up to date" and changes nothing. --bump is what rewrites the pin.

See what is actually behind

sh
mise outdated --bump

Upgrade everything and rewrite the pins

sh
mise upgrade --bump

Upgrade a single tool

sh
mise upgrade --bump <tool>

Upgrade mise itself

sh
brew upgrade mise    # macOS
mise self-update     # installed via mise.run

Backends

Tools missing from the registry are addressed by backend. Prefer aqua: its packages are checksum-verified. asdf plugins are arbitrary shell scripts.

Install from a specific backend

sh
mise use --global aqua:<owner>/<repo>@latest
mise use --global github:<owner>/<repo>@latest
mise use --global pipx:<package>@latest
mise use --global npm:<package>@latest
mise use --global cargo:<crate>@latest
mise use --global go:<module>@latest

Find which backend a registry name resolves to

sh
mise registry | grep <tool>

Inspection

List installed tools and where each is declared

sh
mise ls

List every version available upstream

sh
mise ls-remote <tool>

Show the version that resolves here

sh
mise current
mise which <binary>

Search the registry

sh
mise registry
mise registry | grep <tool>

Configuration

Config file locations, highest precedence first

sh
# ~/.config/mise/config.toml       <- `mise use --global` writes here
# ~/.config/mise/conf.d/*.toml     <- merged in, survives the above
# ./mise.toml                      <- per project

Read or change a setting

sh
mise settings
mise settings get <key>
mise settings set <key> <value>

Regenerate shims after installing globals via npm/go

sh
mise reshim

Activate in a shell

sh
eval "$(mise activate zsh)"                          # interactive shells
export PATH="$HOME/.local/share/mise/shims:$PATH"    # scripts, CI, containers

Troubleshooting

Diagnose a broken install

sh
mise doctor

HTTP 403 while resolving a version

The aqua and github backends resolve through the GitHub API, which rate-limits unauthenticated requests. mise retries 429 and 5xx but treats 403 as permanent.

sh
export GITHUB_TOKEN=<token>

Verbose output for a failing install

sh
MISE_VERBOSE=1 mise install <tool>
mise install <tool> --verbose

Useful environment variables

sh
MISE_YES=1                      # never prompt (CI, container builds)
MISE_PIN=1                      # record exact versions
MISE_DISABLE_BACKENDS=asdf      # keep installs on verifying backends
MISE_DATA_DIR=<path>            # where tools and shims live
MISE_OFFLINE=1                  # use only locally cached data