Skip to content
Latchkey

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

Terminal
# 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

FlagWhat it does
mise use <tool>@<ver>Install and pin in the local mise.toml
--global, -gWrite the pin to the global config
--pinRecord the exact resolved version
--env <name>Write to an environment-specific config file
mise use <tool>@latestPin 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.

Related guides

Run this faster and cheaper on Latchkey managed runners. Start free →