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

FeatureMiseasdfnvmpyenv
LanguageRustShellShellShell
SpeedFastestSlowSlowSlow
Multi-language400+ tools400+ pluginsNode onlyPython only
Task runnerBuilt-inNoNoNo
Env varsBuilt-inNoNoNo
Config formatTOML.tool-versions.nvmrc.python-version
ShimsNo (PATH)YesYesYes
Backwards compatasdf 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