jdx/mise · error

package plugin ' ' is not a tool backend

Error message

package plugin '{plugin_name}' is not a tool backend

What it means

mise's BackendArg resolver found a plugin installed via a plugin manager but of type 'Package', which is a package-style plugin rather than a tool backend, so it cannot be used as a tool backend for the requested tool. This guard exists because package plugins do not expose tool-resolution APIs.

Solutions

  1. Use the actual tool/backend name instead of the package plugin name (check `mise plugins ls`).
  2. Install the tool via a supported backend (registry shorthand, aqua:, github:, cargo:, etc.).
  3. Remove or rename the package plugin so it does not shadow the tool name.

Example fix

// before
mise use somepkg@1.2   # somepkg is a package plugin
// after
mise use aqua:owner/somepkg@1.2
Defensive patterns

Strategy: validation

Validate before calling

mise plugins ls | grep <plugin>  # confirm it is a tool plugin, not a package plugin

Prevention

When it happens

Trigger: Calling `mise x/install/use <tool>@<version>` (or anything that resolves a BackendArg) where <tool>'s name maps to an installed plugin whose PluginType is Package.

Common situations: A user installs a plugin that is a package (e.g. via a plugin manager) and then references it as a tool in mise.toml or on the CLI, e.g. `mise use myplugin@1.0`.

Understand the failure class

Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.

Related errors


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

Appendix: source

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

                // 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 {
                // Plugin doesn't exist
                bail!("{plugin_name} is not a valid plugin name");
            }
        } else {
            // Check if the tool is in the registry but has no available backends
            if let Some(rt) = REGISTRY.get(self.registry_short().as_str())
                && rt
                    .backends_for_version(self.registry_version.as_deref())
                    .is_empty()
                && !rt.backends.is_empty()
            {
                let all_backends: Vec<&str> = rt.backends.iter().map(|rb| rb.full).collect();
                bail!(
                    "{self} is in the mise tool registry but none of its backends ({}) are supported in the current configuration{}",
                    all_backends.join(", "),

View on GitHub (pinned to 533346cc37)