How to Install and Use mise in Linux to Manage Development Runtimes and Tools

Modern software engineering requires juggling multiple programming languages, runtimes, and command-line tools across different projects. One repository might require Node.js 18 with Python 3.10, while another demands Node.js 22, Python 3.12, and specific versions of Terraform and Go. Historically, developers installed separate managers like nvm, pyenv, rbenv, and gvm, which bloat shell startup times and create complex configuration chains. The mise tool (formerly known as rtx) consolidates this into a single, high-performance polyglot environment manager.

Written in Rust, mise is a blazing-fast drop-in replacement for asdf, providing instantaneous version switching, automated environment variable loading (similar to direnv), and task running capabilities with zero shell latency.

What Is mise and Why Is It Replacing Legacy Version Managers?

Unlike Bash-based managers that inject sluggish shim wrappers into your system $PATH, mise modifies environment variables dynamically using fast binary lookups:

  • Instantaneous Execution: Because it is compiled in Rust, mise executes commands directly without the 100ms–300ms latency overhead common to traditional shim scripts.
  • Universal Tool Management: Installs and manages hundreds of languages and developer CLIs—including Node.js, Python, Go, Rust, Java, Ruby, Terraform, Kubernetes tools, and Zig.
  • Cross-Compatibility: Automatically reads legacy configuration files like .nvmrc, .node-version, .python-version, and .tool-versions without requiring migrations.
  • Built-In Environment and Task Runner: Replaces separate tools by managing project-level environment variables (like .env files) and executing development tasks defined in configuration tables.

How to Install mise on Linux

Installing mise is straightforward using the official standalone binary installer or distribution package archives.

Recommended: Standalone Binary Installer

The simplest and fastest method to install mise is via its automated curl script:

curl https://mise.run | sh

This command downloads the compiled binary and installs it safely into ~/.local/bin/mise.

Ubuntu, Debian, and Linux Mint (via APT Repository)

To receive automatic system updates via APT, add the official repository:

sudo apt update && sudo apt install -y gpg sudo wget curl
sudo install -dm 755 /etc/apt/keyrings
wget -qO - https://mise.jdx.dev/gpg-key.pub | gpg --dearmor | sudo tee /etc/apt/keyrings/mise-archive-keyring.gpg 1> /dev/null
echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg arch=amd64] https://mise.jdx.dev/deb stable main" | sudo tee /etc/apt/sources.list.d/mise.list
sudo apt update
sudo apt install -y mise

Arch Linux and Manjaro

Install directly from the official Arch community repositories:

sudo pacman -S mise

Configuring Shell Activation

For mise to dynamically activate runtimes when changing directories, hook it into your interactive shell profile:

For Bash Users

Append the hook to ~/.bashrc:

echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc
source ~/.bashrc

For Zsh Users

Append the hook to ~/.zshrc:

echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc
source ~/.zshrc

For Fish Users

Add to your Fish configuration:

echo '~/.local/bin/mise activate fish | source' >> ~/.config/fish/config.fish

Installing and Managing Runtimes with mise

Once activated, installing specific tool versions is lightning fast:

1. Installing Languages Globally

To establish default global runtime versions across your entire user account, execute:

mise use --global node@22
mise use --global [email protected]
mise use --global [email protected]

Verify that the versions are active:

node -v
python --version
go version

2. Setting Project-Specific Versions

To bind specific runtime versions exclusively to a single development repository:

cd ~/projects/legacy-backend
mise use [email protected] [email protected]

This command creates or updates a mise.toml configuration file inside the project directory. Whenever you navigate into this folder, mise switches your active Node and Python binaries instantly. When you navigate away, your shell reverts to global defaults.

Essential mise Commands Reference

Command Function Practical Use Case
mise ls List installed runtimes Inspect which versions of tools are currently downloaded locally.
mise ls-remote <tool> List available versions Browse all downloadable releases (e.g. mise ls-remote python).
mise current Show active tool versions Audit currently active binaries and their originating config paths.
mise install Install missing tools Installs all versions declared in a cloned repository’s mise.toml.
mise upgrade Update installed runtimes Bumps tools to their latest minor or patch versions.
mise prune Delete unused versions Removes orphaned runtime versions to recover disk space.

Managing Environment Variables with mise.toml

Beyond language runtimes, mise.toml functions as an environment variable manager. Open your project’s mise.toml and configure an [env] block:

[tools]
node = "20"
python = "3.11"

[env]
NODE_ENV = "development"
API_ENDPOINT = "https://api.dev.local"
DATABASE_PORT = 5432

As soon as you enter the folder, mise exports these variables into your shell session. When you exit, it cleans them up automatically, eliminating the need to install separate tools like direnv.

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.