mise: the front-end to your dev env

mise (pronounced "meez") or "mise-en-place" is a development environment setup tool. The name refers to a French culinary phrase that roughly translates to "setup" or "put in place". The idea is that before one begins cooking, they should have all their utensils and ingredients ready to go in their place.

mise does the same for your projects. Using its mise.toml config file, you'll have a consistent way to setup and interact with your projects no matter what language they're written in.

Its functionality is grouped into 3 categories described below.

mise installs and manages dev tools/runtimes like node, python, or terraform both simplifying installing these tools and allowing you to specify which version of these tools to use in different projects. mise supports hundreds of dev tools.

mise manages environment variables letting you specify configuration like AWS_ACCESS_KEY_ID that may differ between projects. It can also be used to automatically activate a Python virtualenv when entering projects too.

mise is a task runner that can be used to share common tasks within a project among developers and make things like running tasks on file changes easy.

mise is mostly built and maintained by Jeff Dickey. The goal is to make local development of software easy and consistent across languages. He have spent many years building dev tools and thinking about the problems that mise addresses.

This project is simply a labor of love. He is making it because He want to make your life as a developer easier. Hope you find it useful.

Install mise CLI

See installing mise for other ways to install mise (aptyumnix, etc.).

curl https://mise.run | sh

By default, mise will be installed to ~/.local/bin (this is simply a suggestion. mise can be installed anywhere). You can verify the installation by running:

~/.local/bin/mise --version
# mise 2024.x.x
  • ~/.local/bin does not need to be in PATH. mise will automatically add its own directory to PATH when activated.
  • mise respects MISE_DATA_DIR and XDG_DATA_HOME if you'd like to change these locations.

Activate mise

Now that mise is installed, you can optionally activate it or add its shims to PATH.

  • mise activate method updates your environment variable and PATH every time your prompt is run to ensure you use the correct versions.
  • Shims are symlinks to the mise binary that intercept commands and load the appropriate environment

For interactive shells, mise activate is recommended. In non-interactive sessions, like CI/CD, IDEs, and scripts, using shims might work best. You can also not use any and call mise exec/run directly instead. See this guide for more information.

Activation may be handled automatically if you use fish shell and installed via homebrew. This can be disabled with set -Ux MISE_FISH_AUTO_ACTIVATE 0.

echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc
  • Make sure you restart your shell session after modifying your rc file in order for it to take effect.
  • Also note that this uses ~/.local/bin/mise as the binary location since that's what https://mise.run uses by default. If you've installed mise by some other means it may be on PATH or somewhere different.

Using mise

Of course, if using mise solely for environment management or running tasks this step is not necessary. You can use it to make sure mise is correctly setup.

As an example, here is how you can install node and set it as the global default:

mise use --global node@22

You can now run node using mise exec:

mise exec -- node -v
# v22.x.x

Use mise x -- node -v or set a shell alias in your shell's rc file like alias x="mise x --" to save some keystrokes.

If you did activate mise or add its shims to PATH, then node is also available directly!

node -v
# v22.x.x

Note that when you ran mise use --global node@22mise updated the global mise configuration.

cat ~/.config/mise/config.toml

[tools]
node = "22"

Follow the walkthrough for more examples on how to use mise.

Set up the autocompletion

See autocompletion to learn how to set up autocompletion for your shell.