jdx/mise · error

asdf plugin ' ' exists but ' ' is not available or the…

Error message

asdf plugin '{plugin_name}' exists but '{tool_name}' is not available or the plugin is not properly installed

What it means

mise found a registered asdf plugin of the given name but could not construct a working backend for the requested tool — typically because the plugin does not actually provide that tool or its installation is broken. The error distinguishes plugin existence from tool availability so users know the plugin name is right but something inside the plugin is wrong.

Solutions

  1. Reinstall/repair the plugin: mise plugin remove <plugin> && mise plugin add <plugin> <url>
  2. Verify the plugin actually provides the tool: mise ls-remote <plugin> or run the plugin's list-all script
  3. Confirm the plugin directory is intact and its bin/list-all is executable
  4. Check the tool name spelling — plugin and tool names must match what the plugin exposes

Example fix

# before (broken plugin state)
mise use --plugin asdf:myplugin mytool@latest
# after
mise plugin remove myplugin
mise plugin add myplugin https://github.com/user/asdf-myplugin.git
mise use myplugin@latest
Defensive patterns

Strategy: validation

Validate before calling

# verify plugin health before backend resolution
pt = get_plugin_type(plugin)
if pt == 'asdf':
    versions = run(['mise', 'ls-remote', plugin])
    assert versions.stdout.strip(), f'{plugin} exposes no tool versions'

Try / catch

match backend {
    Err(e) if e.to_string().contains("asdf plugin") =>
        reinstall_plugin(plugin),
    r => r,
}

Prevention

When it happens

Trigger: Resolving a backend via BackendArg::backend() when install_state::get_plugin_type returns PluginType::Asdf for plugin_name, but backend creation fails (missing tool listing, broken plugin scripts, corrupted plugin directory).

Common situations: Typos in the tool name portion of an asdf shorthand; an asdf plugin half-installed or removed mid-operation; plugin repo cloned but its list-all script fails; stale plugin state after mise migration.

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/93aa63ae3288d30f. Report an issue: GitHub.

Appendix: source

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

        // TODO: see above about hash key
        // let backend = self.backend.get_or_try_init(|| {
        //     if let Some(backend) = backend::get(self) {
        //         Ok(backend)
        //     } else {
        //         bail!("{self} not found in mise tool registry");
        //     }
        // })?;
        // Ok(backend.clone())
        if let Some(backend) = backend::get(self) {
            Ok(backend)
        } else if let Some((plugin_name, tool_name)) = self.short.split_once(':') {
            // Check if the plugin exists first
            if let Some(plugin_type) = install_state::get_plugin_type(plugin_name) {
                // Plugin exists, but the backend couldn't be created
                // This could be due to the tool not being available or plugin not properly installed
                match plugin_type {
                    PluginType::Asdf => {
                        bail!(
                            "asdf plugin '{plugin_name}' exists but '{tool_name}' is not available or the plugin is not properly installed"
                        );
                    }
                    PluginType::Vfox => {
                        bail!(
                            "vfox plugin '{plugin_name}' exists but '{tool_name}' is not available or the plugin is not properly installed"
                        );
                    }
                    PluginType::VfoxBackend => {
                        bail!(
                            "vfox-backend plugin '{plugin_name}' exists but '{tool_name}' is not available or the plugin is not properly installed"
                        );
                    }
                    PluginType::Package => {
                        bail!("package plugin '{plugin_name}' is not a tool backend");
                    }
                }
            } else {

View on GitHub (pinned to 533346cc37)