TL;DR — Quick Summary
Mise is a fast polyglot dev tool version manager replacing asdf, nvm, pyenv, and rbenv. Manage Node, Python, Rust, Go, and 400+ tools with one config file.
Mise manages every development tool version from a single binary. Instead of juggling nvm, pyenv, rbenv, and goenv — install mise once and manage Node.js, Python, Ruby, Go, Rust, Java, Terraform, and 400+ tools from one config file.
Installation
# Official installer
curl https://mise.run | sh
# macOS
brew install mise
# Arch Linux
sudo pacman -S mise
# Cargo
cargo install mise
# Verify
mise --version
Shell Activation
# Bash — add to ~/.bashrc
eval "$(mise activate bash)"
# Zsh — add to ~/.zshrc
eval "$(mise activate zsh)"
# Fish — add to config.fish
mise activate fish | source
Basic Usage
# Install and use a tool version
mise use node@20 # Install Node.js 20 for current directory
mise use python@3.12 # Install Python 3.12 for current directory
mise use go@1.22 # Install Go 1.22 for current directory
# Global defaults
mise use --global node@20
mise use --global python@3.12
# Install all tools defined in .mise.toml
mise install
# List installed versions
mise ls
# List available versions
mise ls-remote node
Configuration (.mise.toml)
[tools]
node = "20"
python = "3.12"
go = "1.22"
terraform = "1.7"
rust = "1.77"
[env]
DATABASE_URL = "postgres://localhost/myapp"
NODE_ENV = "development"
[tasks.dev]
run = "npm run dev"
description = "Start development server"
[tasks.test]
run = "npm test"
description = "Run test suite"
[tasks.lint]
run = ["npm run lint", "npm run typecheck"]
description = "Lint and typecheck"
Task Runner
Mise doubles as a task runner (like Just or Make):
# Run tasks defined in .mise.toml
mise run dev
mise run test
mise run lint
# List available tasks
mise tasks ls
Migrating from Other Tools
# From asdf — Mise reads .tool-versions automatically
# Just activate mise and it picks up your existing config
# From nvm — Mise reads .node-version and .nvmrc
mise use node@$(cat .node-version)
# From pyenv — Mise reads .python-version
mise use python@$(cat .python-version)
Comparison
| Feature | Mise | asdf | nvm | pyenv |
|---|---|---|---|---|
| Language | Rust | Shell | Shell | Shell |
| Speed | Fastest | Slow | Slow | Slow |
| Multi-language | 400+ tools | 400+ plugins | Node only | Python only |
| Task runner | Built-in | No | No | No |
| Env vars | Built-in | No | No | No |
| Config format | TOML | .tool-versions | .nvmrc | .python-version |
| Shims | No (PATH) | Yes | Yes | Yes |
| Backwards compat | asdf plugins | — | — | — |
Summary
- Mise is a single binary that replaces nvm, pyenv, rbenv, goenv, and asdf
- 20-200x faster than asdf thanks to Rust implementation
- Manages 400+ tools including Node.js, Python, Ruby, Go, Rust, Java, Terraform
- Built-in task runner and environment variable management
- Backwards-compatible with .tool-versions, .node-version, .python-version files
- Per-project configuration via .mise.toml with team-shareable version pinning