A polyglot dev environment manager that replaces asdf, nvm, pyenv, direnv, and make in a single tool. Manage tool versions, environment variables, and project tasks — all from one config file.
| Platform | Command |
|---|
| macOS/Linux (Recommended) | curl https://mise.run | sh |
| macOS (Homebrew) | brew install mise |
| Arch Linux | sudo pacman -S mise |
| Ubuntu/Debian (apt) | sudo apt install mise |
| Fedora/RHEL | sudo dnf install mise |
| Windows (Scoop) | scoop install mise |
| Cargo (All platforms) | cargo install mise |
| Nix | nix-env -iA nixpkgs.mise |
| Docker | docker run jdx/mise |
| Shell | Config File | Command to Add |
|---|
| Bash | ~/.bashrc | eval "$(mise activate bash)" |
| Zsh | ~/.zshrc | eval "$(mise activate zsh)" |
| Fish | ~/.config/fish/config.fish | mise activate fish | source |
| PowerShell | Profile | mise activate pwsh | Out-String | Invoke-Expression |
| Command | Description |
|---|
mise use node@22 | Install Node.js 22 and set for current directory |
mise use python@3.12 | Install Python 3.12 for current directory |
mise use --global node@22 | Set Node.js 22 as global default |
mise use node@lts | Use the latest LTS version |
mise use node@latest | Use the absolute latest version |
mise install | Install all tools from mise.toml / .tool-versions |
mise install node | Install the configured version of Node.js |
mise install node@20 | Install a specific version |
mise uninstall node@18 | Remove a specific version |
mise upgrade node | Upgrade Node.js to latest matching version |
mise upgrade | Upgrade all tools |
mise ls | List all installed tool versions |
mise ls node | List installed Node.js versions |
mise ls-remote node | Show all available Node.js versions |
mise which node | Show path to active node binary |
mise where node@22 | Show installation directory for Node.js 22 |
mise search python | Search for available tools matching “python” |
mise exec node@20 -- node -v | Run command with a specific tool version |
Node.js, Python, Ruby, Go, Rust, Java, Erlang, Elixir, PHP, Terraform, kubectl, Helm, Deno, Bun, and hundreds more via plugins.
| Command | Description |
|---|
mise set MY_VAR=value | Set env var for current directory |
mise set --global API_KEY=xyz | Set global env var |
mise unset MY_VAR | Remove an env var |
mise env | Show all active environment variables |
mise env --json | Show env vars as JSON |
| Command | Description |
|---|
mise run build | Run the “build” task |
mise run test | Run the “test” task |
mise run lint -- --fix | Run task with extra arguments |
mise tasks ls | List all available tasks |
mise tasks info build | Show details about the “build” task |
mise tasks add build "npm run build" | Create a new task |
mise tasks edit build | Edit a task in your editor |
mise tasks deps | Show task dependency tree |
mise tasks validate | Validate task configuration |
# .mise.toml or mise.toml in project root
[tools]
node = "22" # Exact major version
python = "3.12" # Exact minor version
terraform = "latest" # Always latest
ruby = "3.3.0" # Exact patch version
go = "prefix:1.22" # Latest 1.22.x
[env]
NODE_ENV = "development"
DATABASE_URL = "postgres://localhost/mydb"
# Load from .env file
_.file = ".env"
[tasks.build]
description = "Build the project"
run = "npm run build"
depends = ["install"] # Run 'install' first
[tasks.install]
description = "Install dependencies"
run = "npm install"
[tasks.test]
description = "Run test suite"
run = "npm test"
depends = ["build"]
[tasks.dev]
description = "Start dev server"
run = "npm run dev"
# .tool-versions — compatible with asdf
node 22.0.0
python 3.12.1
ruby 3.3.0
mise.toml in current directory
mise.toml in parent directories (walking up)
~/.config/mise/config.toml (global)
| Command | Description |
|---|
mise doctor | Diagnose configuration issues |
mise version | Show mise version |
mise self-update | Update mise itself |
mise cache clear | Clear download and build caches |
mise reshim | Regenerate shim files |
mise deactivate | Deactivate mise in current shell |
mise lock | Create a lockfile for reproducible installs |
mise config ls | List all active configuration files |
| Command | Description |
|---|
mise plugins ls | List installed plugins |
mise plugins install terraform | Install a plugin |
mise plugins update | Update all plugins |
mise plugins update terraform | Update specific plugin |
mise backends ls | List available tool backends |
# Remove nvm from shell config, then:
mise use --global node@$(node -v | sed 's/v//')
# mise reads .tool-versions files natively
# Just install mise and activate it — existing .tool-versions files work
# Move env vars to mise.toml [env] section
# mise handles directory-scoped env vars natively
# Set up a new project
cd ~/projects/my-app
mise use node@22 python@3.12
mise set NODE_ENV=development
# Clone and bootstrap a project
git clone repo && cd repo
mise install # Installs all tools from mise.toml
# Run project tasks
mise run dev # Start dev server
mise run test # Run tests
mise run build # Build for production
# Check tool versions across projects
mise ls
# Keep tools up to date
mise upgrade # Upgrade all tools to latest
| Feature | asdf | nvm | direnv | mise |
|---|
| Multi-language | Yes | Node only | No | Yes |
| Env variables | No | No | Yes | Yes |
| Task runner | No | No | No | Yes |
| Config file | .tool-versions | .nvmrc | .envrc | mise.toml + .tool-versions |
| Speed | Slow (shell) | Moderate | Fast | Fast (Rust) |
| Shims | Yes | Yes | No | Yes |