jdx/mise · error

mise's self-update feature has been disabled at build time,

Error message

mise's self-update feature has been disabled at build time, cannot update

What it means

When mise is compiled without self-update support (`self_update` feature disabled — typical for distro/package-manager builds), the stubbed `SelfUpdate::run` always fails with this error after optionally printing package-manager upgrade instructions. There is no way to self-update such a binary.

Source

Thrown at src/cli/self_update_stub.rs:38

    /// Update even if already up to date
    #[usage(long, short)]
    force: bool,

    /// Skip confirmation prompt
    #[usage(long, short)]
    yes: bool,

    /// Disable auto-updating plugins
    #[usage(long)]
    no_plugins: bool,
}

impl SelfUpdate {
    pub(crate) async fn run(self) -> crate::Result<()> {
        if let Some(instructions) = upgrade_instructions_text() {
            warn!("{}", instructions);
        }
        eyre::bail!("mise's self-update feature has been disabled at build time, cannot update");
    }
    pub(crate) fn is_available() -> bool {
        false
    }
}

#[derive(Debug, Default, serde::Deserialize)]
struct InstructionsToml {
    message: Option<String>,
    #[serde(flatten)]
    commands: BTreeMap<String, String>,
}

fn read_instructions_file(path: &PathBuf) -> Option<String> {
    let body = fs::read_to_string(path).ok()?;
    let parsed: InstructionsToml = toml::from_str(&body).ok()?;
    if let Some(msg) = parsed.message {
        return Some(msg);

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Update via your package manager (apt/dnf/brew/etc.) — the printed instructions tell you which
  2. Reinstall mise via the official installer (https://mise.run) or cargo with the self_update feature to get a self-updatable binary
  3. Guard automation: check `mise self-update --help` availability or the install source before calling self-update in scripts

Example fix

// before
mise self-update  # disabled at build time
// after (debian/ubuntu)
sudo apt update && sudo apt install --only-upgrade mise
Defensive patterns

Strategy: fallback

Validate before calling

const help = child_process.execSync('mise self-update --help 2>&1 || true').toString();
const selfUpdateCapable = !help.includes('disabled at build time');
if (!selfUpdateCapable) console.log('Use the package manager upgrade path instead');

Try / catch

try {
  await $`mise self-update`;
} catch (e) {
  if (String(e).includes('disabled at build time')) {
    await $`sudo apt-get install --only-upgrade mise`; // per install source
  } else throw e;
}

Prevention

When it happens

Trigger: Running `mise self-update` on a build compiled without the self-update feature (most Linux distro packages, some brew formulas and CI-packaged builds). Always triggered regardless of arguments (except that `--force` does not exist on the stub path).

Common situations: Users of distro-packaged mise trying `mise self-update`; switching from a package-manager install and expecting self-update to work; scripts that unconditionally call self-update.

Related errors


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