Every language has its own version manager: nvm for Node.js, pyenv for Python, rbenv for Ruby, tfenv for Terraform. Mise replaces all of them with a single tool.
Why Mise
# Before: install and configure 5 tools
brew install nvm pyenv rbenv tfenv goenv
# Configure each in .bashrc/.zshrc
# Each has different syntax and behavior
# After: one tool
brew install miseMise reads a .mise.toml file in your project and installs the correct versions of every tool:
# .mise.toml
[tools]
node = "20.11"
python = "3.12"
terraform = "1.9"
go = "1.22"
kubectl = "1.30"cd my-project
mise install
# All tools installed at the specified versionsHow It Works
# Install mise
curl https://mise.run | sh
# Add to shell
echo 'eval "$(mise activate zsh)"' >> ~/.zshrc
# Install tools for current directory
mise install
# Check active versions
mise lsMise uses shims or PATH manipulation to ensure the correct version is active when you enter a project directory. Leave the directory and your global versions take over.
Master this topic with hands-on labs
Go beyond reading — build real projects in sandboxed environments with expert video guidance.
Browse Courses →Per-Project Configuration
# project-a/.mise.toml
[tools]
node = "20"
python = "3.12"
[env]
DATABASE_URL = "postgres://localhost/projecta"# project-b/.mise.toml
[tools]
node = "18"
python = "3.11"
[env]
DATABASE_URL = "postgres://localhost/projectb"Switch between projects and tool versions change automatically. No nvm use or pyenv local commands.
Task Runner
Mise also replaces Makefiles for project tasks:
# .mise.toml
[tasks.dev]
run = "npm run dev"
description = "Start development server"
[tasks.test]
run = "npm test"
description = "Run tests"
[tasks.lint]
run = ["eslint .", "prettier --check ."]
description = "Lint and format check"
[tasks.db-migrate]
run = "npx prisma migrate dev"
description = "Run database migrations"
env = { DATABASE_URL = "postgres://localhost/myapp" }mise run dev
mise run test
mise run lintEnvironment Variables
[env]
NODE_ENV = "development"
API_URL = "http://localhost:3000"
# Load from .env file
[env]
_.file = ".env"
# Different values per environment
[env.production]
NODE_ENV = "production"
API_URL = "https://api.myapp.com"Get weekly IT automation tips
Docker, Ansible, Terraform, MLOps — curated insights delivered to your inbox. No spam.
Subscribe Free →Compatibility
Mise reads existing configuration files:
| File | Tool |
|---|---|
.node-version | nvm, fnm |
.python-version | pyenv |
.ruby-version | rbenv |
.tool-versions | asdf |
.nvmrc | nvm |
Drop mise into an existing project and it respects the version files already there.
asdf Plugin Ecosystem
Mise uses asdf's plugin ecosystem — over 700 tools available:
# Any asdf plugin works with mise
mise use erlang@26
mise use elixir@1.16
mise use java@21
mise use rust@1.76
mise use helm@3.14
mise use awscli@2Team Setup
Add .mise.toml to your repo. New team members:
# One-time: install mise
curl https://mise.run | sh
# Per project: install all tools
cd project
mise install
# Done. Every tool at the right version.Compare to the typical README:
1. Install nvm:curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash2. Runnvm install3. Install pyenv:brew install pyenv4. Runpyenv install 3.12.15. Install tfenv:brew install tfenv6. Runtfenv install 1.9.0
Six steps become two.
---
Ready to go deeper? Streamline your development workflow with hands-on courses at CopyPasteLearn.
Ready to learn by doing?
Stop reading tutorials — start building. Expert video courses with hands-on labs in real sandboxed environments.
Related Articles
DevContainers for Team Development
Dev Containers standardize development environments using Docker. Learn how to set up devcontainers for your team with VS Code, GitHub Codespaces, and custom.
Renovate Automated Dependency Updates
Renovate automatically creates pull requests for dependency updates across npm, pip, Docker, Terraform, and Helm. Learn how to configure Renovate for safe.
Git for DevOps Engineers
Essential Git workflows for DevOps: branching strategies, interactive rebasing, cherry-picking, bisect debugging, and CI/CD integration.
MLflow Experiment Tracking
Learn how to track ML experiments with MLflow — log parameters, metrics, and artifacts. Compare model runs and find the best configuration.
MLflow for Kubernetes
Learn how to deploy and manage ML models at scale using MLflow, Kubernetes, KServe, and Docker. A comprehensive guide to production MLOps.
MLflow on Kubernetes: Full Guide
Deploy MLflow on Kubernetes for production MLOps. Helm charts, experiment tracking, model registry, and model serving guide.
Explore topics
Browse more articles on the topics covered here.