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
- Reinstall/repair the plugin: mise plugin remove <plugin> && mise plugin add <plugin> <url>
- Verify the plugin actually provides the tool: mise ls-remote <plugin> or run the plugin's list-all script
- Confirm the plugin directory is intact and its bin/list-all is executable
- 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
- Run mise doctor regularly
- Reinstall plugins after environment changes
- Verify plugin list-all output before use
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
- is not installed
- error running : exited with code
- error running : terminated by signal
- package plugin ' ' is not a tool backend
- Paranoid mode is enabled, refusing to install…
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)