jdx/mise · error

remote host '{}' mise binary does not exist: {}

Error message

remote host '{}' mise binary does not exist: {}

What it means

Thrown by `RemoteHostConfig::validate_with_source` when a remote host entry sets `mise_bin` to a path that does not exist as a file. This path tells mise where the mise binary already lives on the remote host; mise validates that the local path you wrote is sane before attempting the remote session.

Source

Thrown at src/system/remote.rs:354

            for link in &self.copy_link {
                validate_copy_link(&self.source, link).wrap_err_with(|| {
                    format!("remote host '{}' has invalid copy_link", self.name)
                })?;
            }
        }
        if let Some(identity) = &self.identity_file
            && !identity.is_file()
        {
            bail!(
                "remote host '{}' identity file does not exist: {}",
                self.name,
                identity.display()
            );
        }
        if let Some(binary) = &self.mise_bin
            && !binary.is_file()
        {
            bail!(
                "remote host '{}' mise binary does not exist: {}",
                self.name,
                binary.display()
            );
        }
        let provisioning_strategies = [
            self.mise_bin.is_some(),
            self.remote_mise.is_some(),
            self.bootstrap_command.is_some(),
        ]
        .into_iter()
        .filter(|configured| *configured)
        .count();
        if provisioning_strategies > 1 {
            bail!(
                "remote host '{}' must set at most one of mise_bin, remote_mise, or bootstrap_command",
                self.name
            );

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Set `mise_bin` to the actual mise binary path on the target host (check with `which mise` on the host)
  2. Remove `mise_bin` and use `remote_mise`, `bootstrap_command`, or `install_mise` provisioning instead
  3. Install mise on the remote host at the configured path

Example fix

// before
mise_bin = "/opt/mise/bin/mise"
// after
mise_bin = "/usr/local/bin/mise"
Defensive patterns

Strategy: validation

Validate before calling

if !Path::new(&host.mise_bin).is_file() {
    panic!("mise_bin does not exist: {}", host.mise_bin);
}

Prevention

When it happens

Trigger: Configuring `mise_bin` with a typo'd or non-existent binary path and running a remote operation, so `validate`/`apply_overrides` rejects the host config.

Common situations: Hand-typed install path that doesn't match where mise was installed (`~/.local/bin/mise` vs `/usr/local/bin/mise`); mise uninstalled or moved on the host; config copied between machines with different layouts.

Understand the failure class

Background: "File not found" and ENOENT errors: why libraries can't find a file that should exist — this error's family across 50 libraries.

Related errors


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