jdx/mise · error

remote host ' ' mise binary does not exist

Error message

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

What it means

The remote host's `mise_bin` override must point to an existing regular file locally; validate_with_source checks the filesystem and bails when the configured mise binary path does not exist. This prevents remote runs from failing later on a bad binary path.

Solutions

  1. Build or reinstall mise and point mise_bin at the real binary path (e.g. ~/.local/bin/mise).
  2. Fix the path in the remote host config to the existing binary.
  3. Remove mise_bin to use the default mise resolution on the host.
  4. Use `which mise` to find the installed binary path and copy it into config.

Example fix

// before
mise_bin = "target/debug/mise"
// after
mise_bin = "/home/user/.local/bin/mise"
Defensive patterns

Strategy: validation

Validate before calling

const fs = require('fs');
function assertMiseBin(host) {
  if (host.mise_bin && !fs.statSync(host.mise_bin).isFile()) {
    throw new Error(`mise binary missing: ${host.mise_bin}`);
  }
}

Prevention

When it happens

Trigger: A remote host entry sets `mise_bin = "..."` and the path is missing or is a directory; validate() or apply_overrides() call validate_with_source and bail.

Common situations: Custom-built mise binary moved or deleted after `cargo build` cleaned target/; pointing at target/debug/mise on a machine where it was never built; path typo; switching machines or CI runners without rebuilding.

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@533346cc37 (2026-09-17). Data as JSON: /api/errors/5a9543fc69b4a814. Report an issue: GitHub.

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