jdx/mise · error

{self} not found in mise tool registry

Error message

{self} not found in mise tool registry

What it means

The terminal fallback of BackendArg::backend() (src/cli/args/backend_arg.rs:380): the name produced no backend, no plugin, and no registry entry. Before bailing, mise builds a 'Did you mean?' list from close registry shorts (similarity threshold 0.8) plus aqua registry suggestions, so the correction is usually printed with the error.

Source

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

            let mise_names: HashSet<String> = suggestions.iter().cloned().collect();
            for aqua_id in crate::aqua::aqua_registry_wrapper::aqua_suggest(&self.short) {
                // Skip aqua suggestions whose tool name matches an existing mise suggestion
                let name = aqua_id
                    .rsplit_once('/')
                    .map_or(aqua_id.as_str(), |(_, n)| n);
                if !mise_names.contains(name) {
                    suggestions.push(format!("aqua:{aqua_id}"));
                }
            }

            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 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 9dcfcaa0dc)

Solutions

  1. Read the 'Did you mean?' block and re-run with the suggested short or 'aqua:owner/repo' form
  2. Spell the backend explicitly: 'mise use npm:<pkg>' / 'cargo:<crate>' / 'go:<module>' / 'github:owner/repo'
  3. Search the registry: 'mise registry | grep -i <fragment>'
  4. Update mise to pick up a larger bundled registry

Example fix

# before
mise use nodee@20
# Error: nodee not found in mise tool registry
# Did you mean?
#   node

# after
mise use node@20
Defensive patterns

Strategy: validation

Validate before calling

# bash: verify the short name exists in the registry before scripting it
mise registry 2>/dev/null | awk '{print $1}' | grep -qx "$TOOL" || { echo "unknown tool: $TOOL" >&2; exit 1; }

Try / catch

# bash: fail loudly and show mise's own suggestions
if ! mise use "$TOOL" 2>err.log; then
  sed -n '/Did you mean?/,$p' err.log
  exit 1
fi

Prevention

When it happens

Trigger: 'mise use nodee@20' (typo); a bare internal/company tool name that only exists as a private repo; an npm/cargo package name used without its backend prefix; a registry short that was renamed between mise versions.

Common situations: Typos at the CLI; scripts assuming mise resolves every package name by default; offline installs with an old bundled registry; names copied from other managers (brew formula names, etc.).

Related errors


AI-assisted analysis of jdx/mise@9dcfcaa0dc (2026-08-17). Data as JSON: /api/errors/52696cbc061fe7f7. Report an issue: GitHub.