jdx/mise · error

mise version is required, but you are using

Error message

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

What it means

The current mise binary is older than the minimum version declared by a config (min_version spec hard violation). mise aborts because the config uses features requiring a newer release; the message includes self-update instructions.

Solutions

  1. Run `mise self-update` (or use the instructions appended to the error) to upgrade mise
  2. On CI, bump the mise version in your installer action (e.g. jdx/mise-action with version or mise_version input)
  3. If you cannot upgrade yet, temporarily remove/lower the min_version declaration — but expect newer config features to fail

Example fix

# CI before
- uses: jdx/mise-action@v2 # old default version
# after
- uses: jdx/mise-action@v2
  with:
    version: 2026.9.0
Defensive patterns

Strategy: validation

Validate before calling

# shell: compare installed mise version to required min before running
required=$(grep -oP 'min_version\s*=\s*"\K[^"]+' mise.toml)
cur=$(mise --version | awk '{print $2}')
[ "$(printf '%s\n%s\n' "$required" "$cur" | sort -V | head -1)" = "$required" ] || echo "mise too old"

Try / catch

// Rust
match Config::enforce_min_version_spec(&spec) {
    Ok(()) => proceed(),
    Err(e) if e.to_string().contains("is required, but you are using") => {
        eprintln!("run `mise self-update` or bump CI mise version");
    }
    Err(e) => return Err(e),
}

Prevention

When it happens

Trigger: Config::enforce_min_version_spec is called with a MinVersionSpec whose hard_violation(current_version) returns Some — the running version is below the required minimum declared in mise.toml (e.g. min_version or [settings] minimum version).

Common situations: CI machines or colleagues running an old pinned mise against a project config that declared a newer min_version after adopting new features (monorepo support, task providers, etc.).

Related errors


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

Appendix: source

Thrown at src/config/mod.rs:1339

        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 533346cc37)