jdx/mise · error
Plugin is not installed
Error message
Plugin {ba} is not installed What it means
mise's `mise current <plugin>` command resolves the currently active versions for a tool backend. Before querying, it checks whether the named plugin's backend exposes a plugin and that the plugin is actually installed (e.g. an asdf/vfox plugin has been downloaded). If not, it bails instead of returning meaningless 'current version' data.
Solutions
- Run `mise install <plugin>` to install the plugin (e.g. `mise install node`).
- Check the plugin name with `mise ls-remote <plugin>` / `mise plugins ls` to confirm spelling and availability.
- Run `mise install` with no arguments to install everything listed in mise.toml.
Example fix
// before $ mise current nodejs // "Plugin nodejs is not installed" // after $ mise install node $ mise current node
Defensive patterns
Strategy: validation
Validate before calling
mise plugins ls | grep -qx <plugin> || mise install <plugin>
Prevention
- Always run `mise install` after cloning a project with a mise.toml.
- Check `mise plugins ls` before querying tool-specific commands.
When it happens
Trigger: Run `mise current <name>` (or `mise current <name>` via `one()`) where `<name>.backend()?.plugin()` returns a plugin and `plugin.is_installed()` is false — i.e. the tool is known to the registry but has never been installed via `mise install <name>`.
Common situations: Typo'd or uninstalled plugin name in `mise current`; fresh machine where mise.toml lists tools but `mise install` was never run; plugin removed manually from ~/.local/share/mise/plugins.
Understand the failure class
Background: "not installed", "pip install", "required for": how missing-dependency errors surface across open-source libraries — this error's family across 34 libraries.
Related errors
- is not available
- package manager ' ' does not support pruning
- package plugin ' ' does not support uninstall; add…
- package plugin ' ' is not a tool backend
- is not a valid plugin name
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/4d1061a6b75664a2.
Report an issue: GitHub.
Appendix: source
Thrown at src/cli/current.rs:51
)
)]
pub(crate) struct Current {
/// Plugin to show versions of
/// e.g.: ruby, node, cargo:eza, npm:prettier, etc.
#[usage()]
plugin: Option<BackendArg>,
}
impl Current {
pub(crate) async fn run(self) -> Result<()> {
let config = Config::get().await?;
let ts = ToolsetBuilder::new().build(&config).await?;
match &self.plugin {
Some(ba) => {
if let Some(plugin) = ba.backend()?.plugin()
&& !plugin.is_installed()
{
bail!("Plugin {ba} is not installed");
}
self.one(ts, ba.backend()?.as_ref()).await
}
None => self.all(ts).await,
}
}
async fn one(&self, ts: Toolset, tool: &dyn Backend) -> Result<()> {
if let Some(plugin) = tool.plugin()
&& !plugin.is_installed()
{
warn!("Plugin {} is not installed", tool.id());
return Ok(());
}
match ts
.list_versions_by_plugin()
.into_iter()
.find(|(p, _)| p.id() == tool.id())View on GitHub (pinned to 533346cc37)