jdx/mise · error · eyre::Report

mise {} has no official precompiled artifact for {os}/{arch}

Error message

mise {} has no official precompiled artifact for {os}/{arch}; set mise_bin, remote_mise, or bootstrap_command

What it means

Thrown by release_asset_name when the CPU architecture is not one of x86_64, aarch64, or armv7 (after normalization, so armv6l/armv6, riscv64, ppc64le, s390x, loongarch64, i686 all land here). mise only publishes precompiled release artifacts for x64, arm64, and armv7, so it cannot construct an asset name for other architectures. Reachable for either the remote platform (RemotePlatform::release_asset_name in resolve) or the local platform (official_release_assets -> release_asset_name in ensure_official_local).

Source

Thrown at src/system/remote.rs:1084

            })?;
            self.manifest = Some(ReleaseManifest::verified(&contents, &signature)?);
        }
        Ok(self.manifest.as_ref().expect("release manifest was loaded"))
    }
}

fn release_url(filename: &str) -> String {
    let version = env!("CARGO_PKG_VERSION");
    format!("{RELEASE_BASE_URL}/v{version}/{filename}")
}

fn release_asset_name(os: &str, arch: &str, libc: Option<LibcFlavor>) -> Result<String> {
    let release_arch = match arch {
        "x86_64" => "x64",
        "aarch64" => "arm64",
        "armv7" => "armv7",
        _ => {
            bail!(
                "mise {} has no official precompiled artifact for {os}/{arch}; set mise_bin, remote_mise, or bootstrap_command",
                env!("CARGO_PKG_VERSION")
            )
        }
    };
    let suffix = match os {
        "macos" if matches!(arch, "x86_64" | "aarch64") => {
            if libc.is_some() {
                bail!("macOS release targets cannot declare a libc family");
            }
            format!("macos-{release_arch}")
        }
        "linux" if matches!(arch, "x86_64" | "aarch64" | "armv7") => match libc {
            Some(LibcFlavor::Glibc) => format!("linux-{release_arch}"),
            Some(LibcFlavor::Musl) => format!("linux-{release_arch}-musl"),
            None => bail!("Linux release targets require a detected libc family"),
        },
        _ => {

View on GitHub (pinned to 6f52dcdf99)

Solutions

  1. Set bootstrap_command to install mise on the remote by whatever means supports that arch (e.g. build from source: 'curl ... && cargo install mise')
  2. Set remote_mise to an already-installed mise path/command on the remote
  3. Set mise_bin to upload a binary you cross-compiled yourself for that arch

Example fix

# before (mise.toml)
[bootstrap.remote.hosts.pi]
host = "pi@zero"

# after
[bootstrap.remote.hosts.pi]
host = "pi@zero"
bootstrap_command = "curl -fsSL https://mise.run | sh"  # or point remote_mise at a from-source build
Defensive patterns

Strategy: fallback

Validate before calling

# Probe the remote arch before relying on automatic provisioning:
ARCH=$(ssh pi@zero 'uname -m')
case "$ARCH" in
  x86_64|aarch64|armv7l|armv7) echo "official artifact available" ;;
  *) echo "no prebuilt artifact for $ARCH: set bootstrap_command/remote_mise/mise_bin" ;;
esac

Type guard

fn has_official_artifact(os: &str, arch: &str) -> bool {
    let os = normalize_os(os);
    let arch = normalize_arch(arch);
    matches!(arch.as_str(), "x86_64" | "aarch64" | "armv7")
        && match os.as_str() {
            "linux" => true,
            "macos" => matches!(arch.as_str(), "x86_64" | "aarch64"),
            "windows" => matches!(arch.as_str(), "x86_64" | "aarch64"),
            _ => false,
        }
}

Try / catch

match platform.release_asset_name() {
    Err(e) if e.to_string().contains("no official precompiled artifact") => {
        // fall back to explicit provisioning instead of failing the whole run
        ensure_remote_mise_via_bootstrap(session, host).await?;
    }
    other => other?,
}

Prevention

When it happens

Trigger: Remote host reports uname -m of armv6l (Raspberry Pi Zero/1), riscv64, ppc64le, s390x, i686, etc.; or the local machine runs such an arch (e.g. local armv6 Linux) and automatic provisioning needs official_release_assets for the local side.

Common situations: Hobby boards (Raspberry Pi older than 4 running 32-bit armv6), mainframes/specialty arches, 32-bit x86 remotes, cross-developing from an armv6 local machine.

Related errors


AI-assisted analysis of jdx/mise@6f52dcdf99 (2026-08-22). Data as JSON: /api/errors/83863c780fcc0b37. Report an issue: GitHub.