mise¶
Every language ecosystem invented its own version manager, so you ended up juggling nvm, pyenv, rbenv, and tfenv like a circus act. mise (formerly rtx) fires them all: one Rust binary that pins any tool version per project or globally, reads a single committed config, and throws in a task runner for free. Install it once, stop thinking about which toolchain is active ever again.
2026 Update
mise ships calendar-versioned releases (2026.x.x) and has become the pragmatic default on Linux boxes. Its backend registry covers hundreds of tools — including everything in the DevSecOps section — through native, aqua, cargo, npm, pipx, and asdf-compatible sources.
Quick Hits¶
# Install — lands in ~/.local/bin, no root required
curl https://mise.run | sh # (1)!
# Activate for zsh (add to ~/.zshrc)
echo 'eval "$(mise activate zsh)"' >> ~/.zshrc # (2)!
# Global tool installs
mise use -g node@22 python@3.14 # (3)!
# See what is installed and active here
mise ls # (4)!
# Upgrade everything mise manages
mise up # (5)!
- Single static binary; the install script never touches system packages.
- Activation hooks your shell PATH per directory — bash users swap
zshforbash. -gwrites to~/.config/mise/config.toml; omit it to pin inside the current project instead.- Shows installed versions plus which one is active for this directory.
- Short for upgrade; run it periodically or pin deliberately and skip it.
Real talk:
- Activation is not optional decoration — without it, mise-managed binaries are not on PATH.
- Trust prompts exist for a reason: review unknown
.mise.tomlfiles before accepting. mise doctordiagnoses PATH problems faster than staring at dotfiles.
Pin an entire toolchain for a project in one committed file:
# .mise.toml — commit this
[tools]
terraform = "1.15"
tflint = "0.64"
python = "3.14"
[tasks.lint]
run = ["terraform fmt -check -recursive", "tflint --recursive"]
Then everyone — humans and CI — gets identical versions:
mise use terraform@1.15.8 tflint@0.64 # writes the block above
# CI bootstrap is one line
mise install
# Run project tasks
mise run lint
Why this works:
- One file pins every tool, so laptop and pipeline cannot drift apart.
mise installis idempotent — safe at the top of any CI job.- Tasks replace Makefile boilerplate for dev commands while keeping real builds where they belong.
Tips:
mise x -- terraform planruns any command with the project's tools without permanent activation.- Version strings accept partial pins —
"0.64"tracks the newest 0.64.x patch. - Backends matter for speed: aqua and native downloads beat asdf-plugin builds.
Gotchas:
- Do not mix activation with manually adding the shims dir to PATH — pick one mechanism or fight ghosts.
- IDE integrated terminals do not inherit activation automatically; configure them or run
mise activatethere too. - Tools installed through legacy asdf plugins compile from source more often than you would like.
Reference¶
Documentation:
Related:
- Terraform
- tflint
Last Updated: 2026-08-22 | Vibe Check: Single Point of Truth - One manager, one config file, zero version drift between machines.
Tags: tools, linux, version-manager