jdx/mise · error

local mise is {local_os}/{local_arch}, while the remote targ

Error message

local mise is {local_os}/{local_arch}, while the remote target is {}

What it means

When preparing remote execution, mise compares the remote target platform (detected via the SSH session) with the local binary's OS/arch and records "local mise is {os}/{arch}, while the remote target is {desc}" if they differ. This string is used to warn/fail about attempting to run a local mise binary that cannot execute on the remote host.

Source

Thrown at src/system/remote.rs:987

        session.status_async(&["sh", "-lc", &script], true).await?;
        let candidates = session.output_async(&["cat", &candidates_file]).await?;
        let candidates = parse_remote_mise_candidates(&candidates)?;
        let after_identities = remote_mise_candidate_identities(session, &candidates).await;
        let mise =
            select_bootstrapped_mise(&before, &before_identities, &candidates, &after_identities)?;
        session.status_async(&[&mise, "version"], false).await?;
        return Ok(mise);
    }
    let binary = if let Some(binary) = &session.host.mise_bin {
        binary.clone()
    } else {
        let platform = detect_remote_platform(session).await?;
        let local_os = normalize_os(std::env::consts::OS);
        let local_arch = normalize_arch(std::env::consts::ARCH);
        let local = std::env::current_exe()?;
        let local_incompatibility = if platform.os != local_os || platform.arch != local_arch {
            Some(format!(
                "local mise is {local_os}/{local_arch}, while the remote target is {}",
                platform.description()
            ))
        } else {
            validate_default_binary_compatibility(session, &local, &platform.os)
                .await
                .err()
                .map(|error| format!("{error:#}"))
        };
        if local_incompatibility.is_none() {
            local
        } else {
            artifacts
                .resolve(&platform, &local)
                .await
                .wrap_err_with(|| {
                    format!(
                        "local mise could not run on remote host '{}' ({}) because {}; official mise {} artifact fallback also failed",
                        session.host.name,

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Install mise natively on the remote host so the local binary is not shipped over.
  2. Ensure a matching mise binary for the remote platform is available.
  3. If os/arch match but the error persists, address the glibc/musl compatibility issue reported by validate_default_binary_compatibility.
  4. Use a statically-linked (musl) mise build for cross-platform remotes.

Example fix

// before
mise run --remote host deploy.sh   # local arm64 mac, remote x86_64 linux → incompatible binary
// after
ssh host 'curl https://mise.run | sh'   # install mise on the remote, then run there
Defensive patterns

Strategy: validation

Validate before calling

ssh host 'uname -sm'  # compare remote OS/arch with the local `uname -sm` before remote runs

Prevention

When it happens

Trigger: Using remote-execution features (running tasks on a remote host over SSH) where `detect_remote_platform` returns an os/arch that differs from `std::env::consts::OS/ARCH` of the running local binary — e.g. x86_64 machine driving an aarch64 Linux remote.

Common situations: SSHing from Apple Silicon to an Intel server (or vice versa); macOS-to-Linux remotes; musl vs glibc incompatibility surfaced by `validate_default_binary_compatibility` even when os/arch match.

Understand the failure class

Background: "unsupported platform" / "not supported on this platform" errors: what they mean and how to fix them — this error's family across 47 libraries.

Related errors


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