jdx/mise · error
{plugin_name} is not a valid plugin name
Error message
{plugin_name} is not a valid plugin name What it means
Bailed from BackendArg::backend() (src/cli/args/backend_arg.rs:339) when the short name contains ':' (parsed as backend:tool or plugin:tool) but the prefix parses as no known BackendType and install_state::get_plugin_type() has no record of it. In other words: 'xxx:yyy' where xxx is neither a backend alias nor an installed plugin.
Source
Thrown at src/cli/args/backend_arg.rs:339
);
}
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.short.as_str())
&& rt.backends().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(", ")
);
}
let registry_shorts: Vec<&str> = REGISTRY.keys().collect();
let mut suggestions: Vec<String> =
xx::suggest::similar_n_with_threshold(&self.short, ®istry_shorts, 3, 0.8)
.into_iter()View on GitHub (pinned to 9dcfcaa0dc)
Solutions
- Fix the separator grammar: versions use '@' ('mise use node@20'); colons are reserved for backends/plugins
- Correct the prefix: valid backend prefixes include aqua:, github:, gitlab:, npm:, pipx:, gem:, cargo:, go:, dotnet:, conda:, asdf:, vfox:
- If a plugin was meant, install it first: 'mise plugin add <name-or-url>', then reference 'name:tool'
- Use the bare registry short name when it exists: 'mise registry | grep <name>'
Example fix
# before mise use node:20 # ':' is a backend separator, not a version pin # Error: node is not a valid plugin name # after mise use node@20
Defensive patterns
Strategy: validation
Validate before calling
# bash: accept only known backend prefixes or installed plugins for 'xxx:yyy' specs
prefix="${SPEC%%:*}"
case "$prefix" in
aqua|github|gitlab|npm|pipx|gem|cargo|go|dotnet|conda|asdf|vfox) exit 0 ;;
esac
mise plugin ls 2>/dev/null | grep -qx "$prefix" || { echo "unknown backend/plugin prefix: $prefix" >&2; exit 1; } Try / catch
# bash: surface the error and stop instead of half-running if ! mise use "$SPEC" 2>err.log; then cat err.log >&2 # message names the invalid prefix explicitly exit 1 fi
Prevention
- Remember the grammar: 'name@version' pins a version; 'backend:name' selects a backend
- Run 'mise plugin add' before referencing plugin:tool in committed configs
- Lint tool specs in CI so a bad prefix fails before any install runs
When it happens
Trigger: Typos in the prefix such as 'mise use aqau:owner/repo'; referencing 'plugin:tool' without ever running 'mise plugin add'; a removed plugin still named in a script or mise.toml; using ':' where '@' was meant ('mise use node:20' pins no version - it claims a backend named 'node').
Common situations: New users mixing up @ (version) and : (backend) separators; CI caches where plugins were never installed; shared mise.toml entries that depend on locally-installed plugins.
Related errors
- vfox-backend plugin '{plugin_name}' exists but '{tool_name}'
- package plugin '{plugin_name}' is not a tool backend
- invalid prefix: {}
- --connect-timeout must be greater than zero
- config file not found: {}
AI-assisted analysis of jdx/mise@9dcfcaa0dc (2026-08-17).
Data as JSON: /api/errors/827aedd26f497ea6.
Report an issue: GitHub.