MISE¶
Pronounced "meez" (short for mise-en-place). One tool that replaces asdf, direnv, and Make: installs runtimes, loads env vars per project, runs tasks. Written in Rust by Jeff Dickey (jdx) — the guy who got tired of waiting for Bash. 30k+ GitHub stars, ThoughtWorks Adopt rating.
2026 Update
MISE hit 30.6k stars, 7,437 commits, 1000+ tools in registry. Renamed from rtx in 2024. Fully backward-compatible with .tool-versions — zero migration friction. Active development with daily releases (v2026.7.5).
Quick Hits¶
Install:
# Quick install (recommended)
curl https://mise.run | sh
# Or via package manager
brew install mise # macOS
sudo snap install mise # Linux
cargo install mise # From source
Activate in shell:
Install tools:
# One command: installs plugin + runtime + sets version
mise use node@22
mise use python@3.12
# Install from existing .tool-versions or .mise.toml
mise install
# List installed / available
mise ls # Installed tools
mise ls-remote node # Available versions
Real talk:
- mise use node@22 does everything — plugin install, version install, config write
- Reads .tool-versions automatically (no migration needed from asdf)
- mise install installs everything in the config file at once
- Use mise use --global for system-wide defaults
.mise.toml — project config:
[tools]
node = "22"
python = "3.12"
terraform = "1"
[env]
NODE_ENV = "development"
DATABASE_URL = "postgres://localhost/myapp"
[tasks.build]
run = "npm run build"
[tasks.test]
depends = ["build"]
run = "pytest"
Using env vars:
# Load .env files
mise set DATABASE_URL=postgres://localhost/myapp
# Show env for current project
mise env
Running tasks:
# Define tasks in mise.toml, then:
mise run test
mise build # Shortcut — no "run" needed if no name conflict
# Selector UI for picking a task
mise run
Why this works: - TOML is readable, git-friendly, supports comments - Tasks auto-install required tools before running - Env vars load per-directory (like direnv, but built-in) - Replaces asdf + direnv + Makefile with one file
Tips:
- No shims — MISE modifies PATH directly, so node -v has zero overhead (asdf shims add ~120ms per call)
- Fuzzy matching everywhere — mise use node@20 works in all contexts (config files, CLI, tasks)
- Auto-install — entering a project with uninstalled tools triggers automatic installation
- Backends — supports asdf, aqua, cargo, npm, pipx, go, gem, ubi, vfox backends (not just asdf plugins)
- Security — built-in support for Cosign, SLSA, GitHub Artifact Attestations
- Legacy compat — reads .nvmrc, .node-version, .ruby-version files
- Update — mise self-update keeps you on latest (daily releases)
- Use mise doctor to diagnose shell integration issues
Gotchas:
- brew vs curl — the brew formula lags slightly behind the curl install (curl recommended)
- Shell hook required — without eval "$(mise activate ...)", tools won't switch automatically
- Windows support — limited (no native Windows, WSL2 recommended)
- Task naming conflicts — if MISE adds a command name you use as a task, fall back to mise run task-name
- Plugin dependency — some asdf plugins need build tools (Python needs libssl-dev, etc.)
- Cache — run mise cache clear if remote version listings seem stale
Resources¶
Official: - MISE Docs — Full documentation - :lucide-github: GitHub — Source code, 30.6k stars - :simple-git-compare: Comparison to asdf — Why MISE exists
Install:
- Quick install — curl https://mise.run | sh
- Homebrew — brew install mise
- Crates.io — cargo install mise
Communities: - Discord — MISE community server - GitHub Discussions — Q&A, ideas, bug reports - X/Twitter @jdxcode — Creator updates
Related: - aube — Node.js package manager by @jdx - rtx — Predecessor (renamed to MISE in 2024)
Last Updated: 2026-07-09 | Vibe Check: Rust-Powered Upgrade - MISE is what asdf should have been from day one. Same plugin ecosystem, zero migration cost, dramatically better performance. If you use asdf, switch. If you don't, start here.
Tags: mise, version-manager, rust, dev-tools, task-runner, cli, development-tools