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.
Who mise is for
Polyglot devs on many repos
One CLI for Node, Python, Ruby, Terraform, and more — auto-switch when you cd.
Teams that commit toolchain pins
.mise.toml in Git; teammates run mise install after clone.
Docs that must match laptops
Replace “use Node 22” hand-waving with a file everyone can diff.
Install mise (macOS / Linux)
- 1
Official installer
Run the Getting Started command from the docs, e.g.
curl https://mise.run | sh. Open a new terminal and confirmmise --version. - 2
macOS: Homebrew optional
brew install miseis documented for Homebrew users. Pick one install path frommise.jdx.dev; avoid undocumented third-party scripts. - 3
Linux packages
Some distros ship community packages — follow the install page for your OS, then verify with
mise --version. - 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 | sourcesource the rc file or restart the terminal. Use mise doctor when available to catch a missing hook.
Install Node and Python runtimes
- 1
Install explicit versions
mise install node@22andmise install python@3.12download and cache backends. First run may take time on slow networks. - 2
Pin in the current directory
mise use node@22 python@3.12writes config (often.mise.toml). Check withnode -vandpython3 --version. - 3
Optional global default
mise use --global node@22for a personal default; the repo file still wins inside projects. - 4
List and verify
mise lsshows installed tools;which nodeshould 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.
| Command | Action | When |
|---|---|---|
mise install | Install missing tools from config | After clone |
mise use node@22 | Write directory pin | Project bootstrap |
mise ls --current | Active versions here | Debugging |
mise uninstall node@20 | Remove cached version | Free 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.