jdx/mise · error

automatic cross-platform provisioning is unavailable from a…

Error message

automatic cross-platform provisioning is unavailable from a debug mise build; set mise_bin, remote_mise, or bootstrap_command

What it means

Automatic cross-platform provisioning can fetch and install an official signed mise binary for the local platform, but this download-and-verify path is disabled in debug builds (cfg!(debug_assertions)) because debug binaries have no official release artifact to compare against. A debug build therefore refuses and tells you to configure an explicit mise binary source.

Solutions

  1. Use a release build of mise (cargo build --release or an installed binary) so official provisioning is available
  2. Set mise_bin to an existing mise executable path
  3. Set remote_mise to control which mise the remote uses
  4. Provide an explicit bootstrap_command instead of relying on automatic provisioning

Example fix

// before
cargo run -- remote exec ...
// after
cargo build --release && ./target/release/mise remote exec ...
// or configure explicitly
mise config set mise_bin /usr/local/bin/mise
Defensive patterns

Strategy: fallback

Validate before calling

#[cfg(debug_assertions)] // detect debug build and configure mise_bin instead of auto-provisioning

Type guard

fn can_auto_provision() -> bool { !cfg!(debug_assertions) }

Try / catch

match res { Err(e) if e.message.contains("debug mise build") => use_configured_mise_bin(), other => other? }

Prevention

When it happens

Trigger: Running a debug (cargo build / cargo run, non-release) mise binary that attempts to provision the local official mise binary via ensure_official_local.

Common situations: Developers running target/debug/mise during development; CI jobs that accidentally invoke the debug build; tests or tooling relying on auto-provisioning while using a locally compiled debug mise.

Related errors


AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17). Data as JSON: /api/errors/bfab2a5300793f96. Report an issue: GitHub.

Appendix: source

Thrown at src/system/remote.rs:1548

            return Err(error).wrap_err_with(|| {
                format!("official mise release artifact {asset} failed verification")
            });
        }
        progress.finish();
        info!(
            "using signed official mise {} artifact {asset}",
            env!("CARGO_PKG_VERSION")
        );
        self.artifacts.insert(asset, path.clone());
        Ok(path)
    }

    async fn ensure_official_local(&mut self, local: &Path) -> Result<()> {
        if self.official_local_verified {
            return Ok(());
        }
        if cfg!(debug_assertions) {
            bail!(
                "automatic cross-platform provisioning is unavailable from a debug mise build; set mise_bin, remote_mise, or bootstrap_command"
            );
        }
        let local_os = normalize_os(std::env::consts::OS);
        let local_arch = normalize_arch(std::env::consts::ARCH);
        let candidates = official_release_assets(&local_os, &local_arch)?;
        let actual = crate::hash::file_hash_sha256(local, None)?;
        let manifest = self.manifest().await?;
        let official = candidates.iter().any(|asset| {
            manifest
                .checksum(asset)
                .is_ok_and(|expected| expected.eq_ignore_ascii_case(&actual))
        });
        if !official {
            bail!(
                "automatic cross-platform provisioning refuses to replace a custom mise build with an official binary because {} does not match the signed mise {} release checksums; set mise_bin, remote_mise, or bootstrap_command",
                local.display(),
                env!("CARGO_PKG_VERSION")

View on GitHub (pinned to 533346cc37)