jdx/mise · error

mise version {min} is required, but you are using {cur}

Error message

mise version {min} is required, but you are using {cur}

What it means

mise aborts when a config file declares a `min_version` requirement that the running mise binary does not satisfy. `enforce_min_version_spec` compares the current version (`version::V`) against the spec from `[settings] min_version` (or similar config field); a hard violation (required minimum not met) bails with this message, while a soft (recommended) violation only warns. The message is augmented with self-update instructions so the user knows how to upgrade.

Source

Thrown at src/config/mod.rs:1331

        Ok(())
    }

    fn validate_versions(&self) -> eyre::Result<()> {
        for cf in self.config_files.values() {
            if let Some(spec) = cf.min_version() {
                Self::enforce_min_version_spec(spec)?;
            }
        }
        Ok(())
    }

    pub(crate) fn enforce_min_version_spec(spec: &MinVersionSpec) -> eyre::Result<()> {
        let cur = &*version::V;
        if let Some(required) = spec.hard_violation(cur) {
            let min = style::eyellow(required);
            let cur = style::eyellow(cur);
            let msg = format!("mise version {min} is required, but you are using {cur}");
            bail!(crate::cli::self_update::append_self_update_instructions(
                msg
            ));
        } else if let Some(recommended) = spec.soft_violation(cur) {
            let min = style::eyellow(recommended);
            let cur = style::eyellow(cur);
            let msg = format!("mise version {min} is recommended, but you are using {cur}");
            warn!(
                "{}",
                crate::cli::self_update::append_self_update_instructions(msg)
            );
        }
        Ok(())
    }

    async fn load_env(self: &Arc<Self>) -> Result<EnvResults> {
        if Settings::no_env() || Settings::get().no_env.unwrap_or(false) {
            return Ok(EnvResults::default());
        }

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Upgrade mise: `mise self-update` (or the package manager that installed it, e.g. `brew upgrade mise`) to at least the required version.
  2. Check the required version in the config file: look for `min_version` in mise.toml / config.toml and confirm the stated minimum.
  3. If the requirement is overly strict for your workflow, ask the config owner to lower `min_version` or remove it (only if the config's features are not actually needed).
  4. Pin mise >= the required version in CI images or Dockerfiles so automated runs don't regress.

Example fix

# before (mise.toml with old mise 2024.1.0 installed)
[settings]
min_version = "2025.1.0"
# error: mise version 2025.1.0 is required, but you are using 2024.1.0

# after
$ mise self-update   # or brew upgrade mise
$ mise --version     # >= 2025.1.0
Defensive patterns

Strategy: validation

Validate before calling

#!/usr/bin/env bash
req=$(mise settings get min_version 2>/dev/null)
cur=$(mise --version | awk '{print $2}')
if [ -n "$req" ] && [ "$(printf '%s\n' "$req" "$cur" | sort -V | head -1)" != "$req" ]; then
  echo "mise $req required, have $cur — run mise self-update"; exit 1
fi

Prevention

When it happens

Trigger: Running any mise command with a mise binary older than the `min_version` declared in a loaded config file (global, project, or env config). `Config::validate` -> `validate_versions` -> `enforce_min_version_spec` runs during config load, so virtually every command triggers the check when the file is present.

Common situations: A teammate committed `[settings] min_version = "2025.10.0"` to the repo's mise.toml because the project uses newer config features, but CI or a coworker's machine still has an older mise installed; a dotfiles sync pulls in a config requiring a newer mise; a stale mise in PATH shadows an updated install.

Related errors


AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09). Data as JSON: /api/errors/48d24a58a53ae7c5. Report an issue: GitHub.