In this series, I will briefly talk about tools that I love and that I use often. I will keep things brief, as there is already a lot of good content that goes into more depth.

mise-en-place, or mise for short, is a tool for setting up well-defined development environments. To use it, I simply specify which tools or dependencies I want in a file named mise.toml inside a project. Then, when I work on that project, mise automatically ensures that I have the specified tools at the specified versions available.

For example, let’s say I am working on a project where I want Python 3.12, Java 21, Neovim 0.51 and Hurl. I could define mise.toml at the root directory of my project with this content:

[tools]
java = '21.0'
python = '3.12'
neovim = '0.5'
hurl = 'latest'

mise will now ensure that I have these exact versions on my PATH whenever I work on that project. In my experience, it is beautiful in its simplicity, and it just works™!

Here’s a short list of reasons why it’s on my “love” list:

Addendum

Before mise (and rtx as it was named in the early days), I used asdf, “the Multiple Runtime Version Manager”. I combined asdf with direnv, and the two worked excellent together. To my knowledge, mise started out as a sort of “rewrite” of asdf. It is compatible with the .tool-versions specification files used by asdf.

Today, I think mise has grown into something much better and more robust. It easily replaces both asdf and direnv.

I should also mention that I am aware of and quite intrigued by both Nix and Guix. However, both of these require me to learn much more before they become useful. I believe it would also be much harder to on-board colleagues and friends. As such, I find mise really hits the sweet spot with regard to its simplicity and convenience!


  1. For no sane reason. Clearly, we want the Neovim nightly release↩︎

  2. mise does have some Windows support, but it’s not as smooth. ↩︎