Mise - Tool Management
Managing development tool versions across projects with Mise as a unified version manager.
Basic Tool Installation
Installing Tools
Install specific version
mise install node@20.10.0 mise install python@3.12.0 mise install rust@1.75.0
Install latest version
mise install node@latest mise install python@latest
Install from .tool-versions or mise.toml
mise install
Setting Tool Versions
Set global version
mise use --global node@20
Set project version
mise use node@20.10.0 mise use python@3.12 rust@1.75
Use latest
mise use node@latest
Tool Configuration in mise.toml
Basic Tool Definitions
mise.toml
[tools] node = "20.10.0" python = "3.12.0" rust = "1.75.0" terraform = "1.6.0"
Version Prefixes
[tools]
Latest patch version
node = "20.10"
Latest minor version
node = "20"
Latest version
node = "latest"
Prefix notation
terraform = "1.6" # Latest 1.6.x
Multiple Versions
[tools]
Use multiple versions
node = ["20.10.0", "18.19.0"] python = ["3.12", "3.11", "3.10"]
Switch between versions
mise shell node@18.19.0
Tool-Specific Configuration
Node.js Configuration
[tools] node = { version = "20.10.0", postinstall = "corepack enable" }
Python with Virtual Environments
[tools] python = "3.12"
[env] _.python.venv = { path = ".venv", create = true }
Custom Tool Sources
[tools]
From specific registry
"cargo:eza" = "latest" "npm:typescript" = "5.3"
From git repository
my-tool = "git:https://github.com/org/tool.git"
Supported Languages & Tools
Core Tools
[tools]
Languages
bun = "1.0" deno = "1.38" elixir = "1.15" erlang = "26.1" go = "1.21" java = "21" node = "20.10" python = "3.12" ruby = "3.3" rust = "1.75" zig = "0.11"
Infrastructure
terraform = "1.6" kubectl = "1.28" awscli = "2.13"
Package Managers
[tools] "npm:pnpm" = "8.10" "npm:yarn" = "4.0" "cargo:cargo-binstall" = "latest" "go:github.com/golangci/golangci-lint/cmd/golangci-lint" = "latest"
Tool Version Strategies
Lock to Specific Versions
Production: Pin exact versions
[tools] node = "20.10.0" terraform = "1.6.4"
Use Ranges for Flexibility
Development: Use minor version ranges
[tools] node = "20" # Any 20.x python = "3.12" # Any 3.12.x
Latest for Experimentation
Experimental projects
[tools] rust = "latest" bun = "latest"
Managing Tool Aliases
Creating Aliases
Set alias for current directory
mise alias set node lts 20.10.0
Set global alias
mise alias set --global python3 python@3.12
Using Aliases in Configuration
[tools] node = "lts" python = "3.12"
Tool Verification
Check Installed Tools
List installed tools
mise list
Check current versions
mise current
Verify tool installation
mise doctor
Tool Information
Show tool details
mise ls-remote node
List available versions
mise ls-remote python
Check latest version
mise latest node
Migration from Other Version Managers
From asdf
Mise reads .tool-versions files
cat .tool-versions
nodejs 20.10.0
python 3.12.0
Migrate to mise.toml
mise use node@20.10.0 python@3.12.0
From nvm
Read from .nvmrc
cat .nvmrc
20.10.0
mise use node@$(cat .nvmrc)
From pyenv
Read from .python-version
mise use python@$(cat .python-version)
Best Practices
Pin Production Dependencies
Good: Explicit production versions
[tools] node = "20.10.0" terraform = "1.6.4" postgres = "16.1"
Document Required Tools
mise.toml - All project dependencies in one place
[tools] node = "20.10.0" python = "3.12.0" terraform = "1.6.4" kubectl = "1.28.0"
[env] PROJECT_NAME = "my-app"
Use Tool-Specific Settings
[tools]
Enable corepack for package managers
node = { version = "20.10.0", postinstall = "corepack enable" }
Create Python virtual environment
python = { version = "3.12", venv = ".venv" }
Verify Tool Installation
In CI/CD pipelines
mise install --check mise doctor
Verify specific tools
mise current node mise current python
Common Patterns
Monorepo Tool Management
Root mise.toml - shared tools
[tools] node = "20.10.0" terraform = "1.6.4"
packages/api/mise.toml - additional tools
[tools] "npm:typescript" = "5.3" "npm:prisma" = "5.7"
packages/web/mise.toml
[tools] "npm:next" = "14.0"
Development vs Production
mise.toml - production tools
[tools] node = "20.10.0" postgres = "16.1"
mise.local.toml - development tools (gitignored)
[tools] "npm:nodemon" = "latest" "cargo:cargo-watch" = "latest"
Tool Updates Strategy
Check for updates
mise outdated
Update to latest patch version
mise upgrade node
Update all tools
mise upgrade
Update with constraints
mise use node@20 # Updates to latest 20.x
Anti-Patterns
Don't Mix Version Managers
Bad: Using multiple version managers
nvm use 20 mise use node@20 # Conflicts
Good: Use only Mise
mise use node@20
Don't Hardcode Tool Paths
Bad: Hardcoded paths
/Users/me/.local/share/mise/installs/node/20.10.0/bin/node
Good: Use mise shims or mise exec
mise exec -- node mise x -- node
Don't Skip Version Constraints
Bad: No version specified
[tools] node = "latest" # Can break on updates
Good: Specify constraints
[tools] node = "20.10.0" # Explicit
OR
node = "20" # Controlled range
Don't Ignore Tool Dependencies
Bad: Missing required tools
[tools] terraform = "1.6"
Missing: kubectl, helm for deployment
Good: Include all dependencies
[tools] terraform = "1.6.4" kubectl = "1.28.0" helm = "3.13.0"
Advanced Patterns
Conditional Tool Installation
[tools]
Install based on platform
node = "20.10.0" python = "3.12"
Platform-specific tools
[tools."cargo:watchexec-cli"] platforms = ["linux", "darwin"] version = "latest"
Tool Installation Hooks
[tools] node = { version = "20.10.0", postinstall = ''' corepack enable npm install -g npm@latest ''' }
Backend Selection
Use specific backend for tools
[tools]
Use core backend (faster)
node = "core:20.10.0"
Use asdf plugin
ruby = "asdf:3.3.0"
Related Skills
-
task-configuration: Defining tasks that use managed tools
-
environment-management: Managing environment variables with tools