Mise solved my tool version management fatigue
Tool version management seemed like an unresolved issue to me.
My use case is simple — I need to ensure that for each project Node and pnpm versions are always the same on my and other developers’ machines.
There are a lot of tools to do so: nvm, volta, asdf. Also, there is corepack, which is both deprecated and not.
All of them can do the job, but with a lot of asterisks: some use strange formats, some can’t install pnpm, some are just hard to set up.
Finally, we have a good one — mise
Mise is a tool version manager done right:
- It isn’t tied to one language ecosystem, e.g., it can handle pnpm, Node and Ruby
- It has its own version format, and supports standard version formats — chances are you can add it to an existing project, without bothering your colleagues with migrating
- It enables the needed tool version as you navigate the filesystem without doing any bash-gymnastics
Apart from managing versions on your computer, it’s helpful in a few other use cases:
- You can use it to install tools in GitHub Actions. It is way simpler than googling a setup action for each tool, and then thinking how to pass version numbers from repo to action
- You can use it to install tools in Docker images. I don’t think it gives the best build times, but you will have a single source of truth and a simple way to install all build tools you need
- It has prebuilt binaries that may not be available via your system package managers. For example, I was able to install an up-to-date Neovim version on Ubuntu 24, which I would otherwise need to build myself
P.S. The Mise author also has quite a nice secrets manager — fnox. So you don’t store your API keys as plaintext in $HOME, you know…
P.P.S. When writing this post, I found that mise can also do environment variable management and can act as a task runner. Haven’t tried any of these features yet.