jdx/mise · error

{}

Error message

{}

What it means

Aqua registry entries can carry an `error_message` field that registry maintainers set to explain why a package cannot be used (deprecated, moved, renamed, requires migration). When validate() sees it, it bails with the message verbatim (bail!("{}")), so the text you get is the registry's own explanation.

Source

Thrown at src/backend/aqua.rs:5003

        return Ok(versions.into_iter().map(|v| (v, None, None)).collect());
    }
    let repo = format!("{}/{}", pkg.repo_owner, pkg.repo_name);
    let releases = github::list_releases_including_prereleases(&repo).await?;
    Ok(releases
        .into_iter()
        .map(|r| {
            let released_at = r.released_at().to_string();
            (r.tag_name, Some(released_at), Some(r.prerelease))
        })
        .collect())
}

fn validate(pkg: &AquaPackage, version: &str) -> Result<()> {
    if pkg.no_asset.unwrap_or(false) {
        bail!("no asset released");
    }
    if let Some(message) = &pkg.error_message {
        bail!("{}", message);
    }
    if !is_platform_supported(&pkg.supported_envs, os(), arch()) {
        bail!(
            "unsupported env: {}/{} (supported: {:?})",
            os(),
            arch(),
            pkg.supported_envs
        );
    }
    match pkg.package_type() {
        AquaPackageType::Cargo => {
            bail!(
                "package type `cargo` is not supported in the aqua backend. Use the cargo backend instead{}.",
                pkg.crate_name
                    .as_deref()
                    .filter(|name| !name.is_empty())
                    .or_else(|| {
                        pkg.name

View on GitHub (pinned to afd2eddd3a)

Solutions

  1. Read the error_message text — it usually names the replacement package or reason
  2. Switch mise.toml to the replacement tool/package named in the message
  3. Update mise to refresh the embedded registry in case the entry was fixed upstream
  4. Check the upstream repository's status (archived/renamed) and migrate accordingly

Example fix

// before
[tools]
aqua:old-owner/renamed-tool = "latest"

// after (per the registry's error_message)
[tools]
aqua:new-owner/renamed-tool = "latest"
Defensive patterns

Strategy: try-catch

Validate before calling

// surface the registry's error_message before attempting install
const pkg = await fetchAquaRegistryEntry(pkgName);
if (pkg.error_message) {
  console.warn(`aqua registry says: ${pkg.error_message} — migrate before installing`);
}

Try / catch

try {
  await $`mise install`;
} catch (e) {
  const msg = String(e);
  if (!msg.includes("unsupported env") && msg.includes("Use") === false && msg.length < 300) {
    // likely a registry error_message; read it and switch to the recommended replacement
    console.error("registry says:", msg);
  } else throw e;
}

Prevention

When it happens

Trigger: Installing an aqua package whose AquaPackage.error_message is Some (src/backend/aqua.rs:5003); the check runs for every install/resolution of that package.

Common situations: Tool was deprecated or archived upstream; the registry entry points to a moved repository and instructs users to use a new name; a package is temporarily disabled by aqua maintainers.

Related errors


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