I mentioned swapping nvm for mise when I moved over to Arch last summer. Nine months in and it’s become one of my favourite tools.
Mise is one tool that replaces nvm, pyenv, rbenv, asdf, direnv and a small pile of install scripts. It handles Node, Python, Ruby, Bun, Go, Rust, the Shopify CLI, etc for me.
Install
On Arch it’s in the repos:
sudo pacman -S mise
Then activated in my bash config:
if command -v mise &> /dev/null; then
eval "$(mise activate bash)"
fi
It hooks into the prompt and swaps the right versions in when I cd into a project.
Global config
My global setup lives in ~/.config/mise/config.toml:
[tools]
python = "latest"
node = "22"
"npm:@shopify/cli" = "latest"
Three things I use everywhere - Python, Node LTS and the Shopify CLI. The npm: prefix is cool - mise will install a global npm package and pin it, so I can upgrade the Shopify CLI just like any other tool with mise up.
Per-project
Every project gets a .mise.toml at the root.
# shopify-import
[tools]
ruby = "3.3"
Running mise ls on my machine right now:
Tool Version Source Requested
bun 1.3.12
node 22.22.2 ~/.config/mise/config.toml latest
npm:@shopify/cli 3.93.2 ~/.config/mise/config.toml latest
npm:wrangler 4.84.1 ~/.config/mise/config.toml latest
python 3.10.19
python 3.13.7 ~/.config/mise/config.toml latest
ruby 3.3.10 ~/.config/mise/config.toml latest
Why I like it
.mise.tomlin the repo means anyone cloning gets the right versions withmise install- Global npm packages get versioned too
I’m still using nvm on my olders debian servers for now, mostly because they’re set up and I haven’t wanted to touch them. But next time I rebuild a server it’ll be mise there too.