jdx/mise · error

not found in mise tool registry Did you mean?

Error message

{self} not found in mise tool registry

Did you mean?

What it means

BackendArg parsing failed to resolve a short tool name (e.g. the `foo` in `mise use foo`) against mise's registry, so it builds an enhanced error listing close matches from both the mise registry and the aqua registry; the message is the header of that suggestion list.

Solutions

  1. Use one of the suggested names printed after 'Did you mean?'.
  2. Search the registry (`mise registry | grep <name>`) for the correct shorthand.
  3. Install via explicit backend syntax instead of a registry shorthand (e.g. `mise use github:owner/repo`).

Example fix

// before
[tools]
ripgrep-all = "latest"  # not in registry
// after
[tools]
rga = "latest"
Defensive patterns

Strategy: validation

Validate before calling

mise registry | grep -w <tool>

Prevention

When it happens

Trigger: Any BackendArg resolution where the name (after stripping backend: prefixes) is absent from the registry and no backend:tool format matched — e.g. `mise x ndoe@22 -- ...`.

Common situations: Typos in tool names in mise.toml, .tool-versions, or CLI invocations; using an unofficial tool name that was never added to the registry.

Understand the failure class

Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.

Related errors


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

Appendix: source

Thrown at src/cli/args/backend_arg.rs:390

                    .filter(|s| *s != self.short)
                    .map(|s| s.to_string())
                    .collect();

            let mise_names: HashSet<String> = suggestions.iter().cloned().collect();
            for aqua in crate::aqua::aqua_registry_wrapper::aqua_suggest(&self.short) {
                if !mise_names.contains(&aqua.name) {
                    suggestions.push(aqua.backend);
                }
            }

            let mut msg = format!("{self} not found in mise tool registry");
            if !suggestions.is_empty() {
                msg.push_str("\n\nDid you mean?");
                for s in suggestions.iter().take(5) {
                    msg.push_str(&format!("\n  {s}"));
                }
            }
            bail!("{msg}");
        }
    }

    pub(crate) fn backend_type(&self) -> BackendType {
        // Check if this is a valid backend:tool format first
        if let Some((backend_prefix, _tool_name)) = self.short.split_once(':')
            && let Ok(backend_type) = backend_prefix.parse::<BackendType>()
        {
            return backend_type;
        }

        // Then check if this is a vfox plugin:tool format
        // We cannot reliably determine backend type within install state so we check config first.
        if let Some(backend_type) = plugin_backend_type(&self.short) {
            return backend_type;
        }

        // Derive the backend type from the same resolved identifier used by

View on GitHub (pinned to 533346cc37)