How to use mise: install, activate shell, Node/Python runtimes, and .mise.toml

Install mise and commit .mise.toml so Node and Python track each repo directory.

Switching repos should not mean juggling nvm, pyenv, and mismatched README versions. mise (formerly rtx) pins runtimes per directory and can store the pin in a committed .mise.toml.

Searchers looking for mise version manager install Node Python mise.toml need: install mise, activate the shell hook, install Node/Python runtimes, and share versions via .mise.toml. Steps follow mise.jdx.dev.

Install miseActivate shellNode/Python · .mise.toml

Who mise is for

01

Polyglot devs on many repos

One CLI for Node, Python, Ruby, Terraform, and more — auto-switch when you cd.

02

Teams that commit toolchain pins

.mise.toml in Git; teammates run mise install after clone.

03

Docs that must match laptops

Replace “use Node 22” hand-waving with a file everyone can diff.

Install mise (macOS / Linux)

  1. 1

    Official installer

    Run the Getting Started command from the docs, e.g. curl https://mise.run | sh. Open a new terminal and confirm mise --version.

  2. 2

    macOS: Homebrew optional

    brew install mise is documented for Homebrew users. Pick one install path from mise.jdx.dev; avoid undocumented third-party scripts.

  3. 3

    Linux packages

    Some distros ship community packages — follow the install page for your OS, then verify with mise --version.

  4. 4

    Windows

    Windows and WSL are covered upstream. This guide focuses on macOS/Linux shells; see the Windows section on the site.

Activate the shell hook

mise must hook into your shell at startup or node/python will not track the directory. Add the line for your shell (from the docs):

# zsh (~/.zshrc)
eval "$(mise activate zsh)"

# bash (~/.bashrc)
eval "$(mise activate bash)"

# fish (~/.config/fish/config.fish)
mise activate fish | source

source the rc file or restart the terminal. Use mise doctor when available to catch a missing hook.

Install Node and Python runtimes

  1. 1

    Install explicit versions

    mise install node@22 and mise install python@3.12 download and cache backends. First run may take time on slow networks.

  2. 2

    Pin in the current directory

    mise use node@22 python@3.12 writes config (often .mise.toml). Check with node -v and python3 --version.

  3. 3

    Optional global default

    mise use --global node@22 for a personal default; the repo file still wins inside projects.

  4. 4

    List and verify

    mise ls shows installed tools; which node should point at mise shims.

.mise.toml in a project

At the repo root, commit something like:

[tools]
node = "22"
python = "3.12"

[env]
PROJECT_ENV = "dev"

After clone: mise trust if prompted, then mise install. Entering the directory should auto-select versions.

CommandActionWhen
mise installInstall missing tools from configAfter clone
mise use node@22Write directory pinProject bootstrap
mise ls --currentActive versions hereDebugging
mise uninstall node@20Remove cached versionFree disk

mise pins dev-machine toolchains. Production images still need their own pins in Dockerfiles or compose files.

Once versions match, open a browser room from the wbroom homepage for whiteboard or voice sync — create and join a room.

Questions worth checking

Can mise live beside asdf or nvm?

Yes, but multiple managers fighting PATH causes pain. Pick one per team repo and activate only one hook in your rc file. Migration docs cover asdf moves.

Versions do not switch on cd?

Confirm mise activate in the shell, that .mise.toml exists, and mise trust ran. IDE embedded terminals sometimes skip rc files — test in Terminal.app or iTerm2.

CI usage?

Install mise in the job, run mise install, then mise exec -- … for tests (see Tasks/CI on the docs). Never print secrets in logs.

.tool-versions vs .mise.toml?

mise reads asdf-style .tool-versions and TOML. New repos favor .mise.toml for [env] blocks; legacy asdf files can stay until you migrate.

Start a meeting