mise as a daily version manager
Mise, pronounced “MEEZ ahn plahs”, is a version manager of version managers. It became a structural part of my daily workflow as a software engineer.

Mise manages versions across platforms, languages, and projects without shell hooks or shims.
ergonomics
Section titled “ergonomics”Compare mise with nvm (Node Version Manager):
autoload -U add-zsh-hook
load-nvmrc() { local nvmrc_path nvmrc_path="$(nvm_find_nvmrc)"
if [ -n "$nvmrc_path" ]; then local nvmrc_node_version nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")
if [ "$nvmrc_node_version" = "N/A" ]; then nvm install elif [ "$nvmrc_node_version" != "$(nvm version)" ]; then nvm use fi elif [ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm version)" != "$(nvm version default)" ]; then echo "Reverting to nvm default version" nvm use default fi}
add-zsh-hook chpwd load-nvmrcload-nvmrcThat snippet comes straight from the nvm docs: https://github.com/nvm-sh/nvm/blob/e4e34ec7f9500709f938e7d0188107741ace70e2/README.md?plain=1#L741C7-L761C5
You put it in ~/.zshrc, so every time you cd into a Node.js project, it installs the right version and switches your shell to it.
With mise, after activation, the same task is one line:
mise use node@latestsemantics
Section titled “semantics”To decide which tool version to use, mise looks for a mise.toml file in the current directory and its parents. Global config lives at ~/.config/mise/config.toml and can look like this:
[tools]bun = "latest"node = "22"usage = "latest"
[settings]idiomatic_version_file_enable_tools = ["node"]configuration hierarchy
Section titled “configuration hierarchy”As described in the docs, mise supports nested config that cascades from broad to specific:
~/.config/mise/config.toml # Global defaults~/work/mise.toml # Work-specific tools~/work/project/mise.toml # Project-specific overrides~/work/project/.tool-versions # Legacy asdf compatibilityEach level can override or extend the previous one, which gives you fine control over tool versions across contexts.
Mise works as a drop-in replacement for asdf. It reads the same .tool-versions files and can use asdf plugins through the asdf backend.
People coming from asdf usually find mise to be a faster and simpler asdf.
built-in tools
Section titled “built-in tools”mise ships with some plugins built into the CLI, written in Rust.
You can list the core plugins with mise registry -b core.
| Tool | Install command |
|---|---|
| Bun | mise use -g bun@latest |
| Elixir | mise use -g erlang elixir |
| Java | mise use -g java@temurin |
| Swift | mise use -g swift |
| Node | mise use -g node@20 |
| Zig | mise use -g zig@latest |
final thoughts
Section titled “final thoughts”Tools like mise make development more approachable. It fits any modern setup and speeds up onboarding.