jdx/mise · error

cargo-binstall is not available, but cargo.binstall_only is

Error message

cargo-binstall is not available, but cargo.binstall_only is set

What it means

BinstallStatus can be Unavailable (binary not present / cannot run). When the user set `cargo.binstall_only = true`, source builds via `cargo install` are forbidden, so if binstall is not available at all the install cannot proceed and mise bails with this error.

Source

Thrown at src/backend/cargo.rs:282

                    if result.as_ref().is_ok() {
                        self.write_install_state_best_effort(&tv);
                        return Ok(tv.clone());
                    }
                    if Settings::get().cargo.binstall_only
                        || !result.as_ref().is_err_and(|err| {
                            Error::get_exit_status(err)
                                == Some(CARGO_BINSTALL_NO_FALLBACK_EXIT_CODE)
                        })
                    {
                        result?;
                    }
                    info!("cargo-binstall found no prebuilt binary; falling back to cargo install");
                }
                BinstallStatus::Disabled if Settings::get().cargo.binstall_only => {
                    bail!("cargo-binstall is disabled, but cargo.binstall_only is set");
                }
                _ if Settings::get().cargo.binstall_only => {
                    bail!("cargo-binstall is not available, but cargo.binstall_only is set");
                }
                BinstallStatus::Unavailable => match Settings::get().cargo.binstall_native {
                    Some(true)
                        if self
                            .native_binstall(ctx, &tv, NativeBinstallAction::Install)
                            .await? =>
                    {
                        self.write_install_state_best_effort(&tv);
                        return Ok(tv.clone());
                    }
                    Some(_) => {}
                    None if native_binstall::rollout_warning_active() => {
                        self.native_binstall(ctx, &tv, NativeBinstallAction::WarnOnly)
                            .await?;
                    }
                    None => {}
                },
                _ => {}

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Install cargo-binstall (`cargo install cargo-binstall` or via the binstall install script).
  2. Remove `cargo.binstall_only = true` to allow fallback to `cargo install`.
  3. Check `cargo binstall --version` works in the environment mise uses (PATH, cargo toolchain).

Example fix

// before
mise use cargo:ripgrep  # with cargo.binstall_only = true, no cargo-binstall installed

// after
cargo install cargo-binstall
mise use cargo:ripgrep
Defensive patterns

Strategy: validation

Validate before calling

command -v cargo-binstall >/dev/null || echo 'cargo-binstall missing; do not set cargo.binstall_only'
cargo binstall --version || echo 'binstall probe will fail'

Try / catch

if ! mise install "$pkg"; then
  cargo install cargo-binstall || true
  mise install "$pkg"   # or drop binstall_only to allow source build
fi

Prevention

When it happens

Trigger: `mise install cargo:<crate>` with `cargo.binstall_only = true` while cargo-binstall is not installed on PATH, is an incompatible version, or fails its availability probe (the `_ if Settings::get().cargo.binstall_only` catch-all arm in install_version_).

Common situations: CI image or fresh machine without cargo-binstall; binstall probe failing due to old cargo version; user enabling binstall_only globally but hitting crates with no prebuilt artifacts.

Understand the failure class

Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.

Related errors


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