mise use: Pin Tool Versions in mise.toml
mise use installs a tool and records the version in the nearest mise.toml.
Where install reads existing pins, use writes them. It is the command that adds node@20 to the project config and installs it in one step.
What it does
mise use <tool>@<version> installs the tool and writes the pin into the local mise.toml [tools] table so the choice is committed to the repo. --global writes to the global config instead. --pin records the exact resolved version rather than a fuzzy spec, which is what you want for reproducible CI.
Common usage
# pin Node 20 for this project (writes mise.toml)
mise use node@20
# pin the exact resolved version for reproducibility
mise use --pin node@20
# set a global default on the machine
mise use --global python@3.12
# the resulting mise.toml
# [tools]
# node = "20"Syntax
| Flag | What it does |
|---|---|
| mise use <tool>@<ver> | Install and pin in the local mise.toml |
| --global, -g | Write the pin to the global config |
| --pin | Record the exact resolved version |
| --env <name> | Write to an environment-specific config file |
| mise use <tool>@latest | Pin to the latest available version |
In CI
Commit the mise.toml that mise use produces so the pipeline installs the same versions you developed against. Prefer mise use --pin for exact, reproducible versions; a fuzzy pin like node@20 can drift to a new patch release on a fresh runner.
Common errors in CI
"mise <tool>@<ver> not found" means the version string does not resolve for that backend; check mise ls-remote <tool>. A read-only checkout makes mise use fail to write mise.toml with a permission error; in CI you usually run mise install against a committed config instead of mise use. Mixing fuzzy pins between local and CI causes version drift.