jdx/mise · error
{name} is a core plugin and does not need to be installed
Error message
{name} is a core plugin and does not need to be installed What it means
`mise plugins install` refuses to install a plugin whose name matches one of mise's built-in core plugins (CORE_PLUGINS), since core plugins ship inside the mise binary and cannot be (re)installed as external asdf/vfox plugins. The name is styled blue in the message for clarity.
Source
Thrown at src/cli/plugins/install.rs:82
/// Show installation output
#[usage(long, short, action = usage_rs::ArgAction::Count, verbatim_doc_comment)]
verbose: u8,
}
impl PluginsInstall {
pub(crate) async fn run(self, config: &Arc<Config>) -> Result<()> {
let this = Arc::new(self);
if this.all {
return this.install_all_missing_plugins(config).await;
}
let (name, git_url) = get_name_and_url(&this.new_plugin.clone().unwrap(), &this.git_url)?;
if git_url.is_some() {
this.install_one(config, name, git_url).await?;
} else {
let is_core = CORE_PLUGINS.contains_key(&name);
if is_core {
let name = style::eblue(name);
bail!("{name} is a core plugin and does not need to be installed");
}
let mut plugins: Vec<String> = vec![name];
if let Some(second) = this.git_url.clone() {
plugins.push(second);
};
plugins.extend(this.rest.clone());
this.install_many(config, plugins).await?;
}
Ok(())
}
async fn install_all_missing_plugins(self: Arc<Self>, config: &Arc<Config>) -> Result<()> {
let ts = ToolsetBuilder::new().build(config).await?;
let missing_plugins = ts.list_missing_plugins();
if missing_plugins.is_empty() {
warn!("all plugins already installed");
}View on GitHub (pinned to afd2eddd3a)
Solutions
- Don't install it — use the tool directly: `mise use node@22` or `mise install node@22`.
- Check `mise plugins ls` — core plugins don't need entries here.
- If you truly need a custom plugin, use a different plugin name that doesn't collide with the core plugin.
Example fix
// before mise plugins install node // after mise use node@22
Defensive patterns
Strategy: validation
Validate before calling
case "$PLUGIN" in node|python|ruby|go|java|bun|deno) echo "$PLUGIN is built into mise; use mise install $PLUGIN"; exit 1;; esac
Prevention
- Check `mise plugins ls` and mise docs before installing plugins for common tools.
- Update asdf-era scripts: core tools need no plugin install.
- Use `mise install <tool>@<version>` for core tools.
When it happens
Trigger: `mise plugins install <name>` (run, without a git URL) where <name> is a key in CORE_PLUGINS, e.g. node, python, ruby, go.
Common situations: Following old asdf-era docs that installed plugins for tools mise now ships as core; muscle memory from asdf (`asdf plugin add nodejs`); trying to reinstall a 'missing' core plugin.
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
- execute_external_command not implemented for {}
- packslip plugin sources require the vfox plugin type
- package plugin '{name}' collides with a built-in package man
- {}@{requested} is not installed{resolved} hint: run `mise in
- No executable found for configured tool: {bin_name} The inst
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/29dffd4cb1e885d5.
Report an issue: GitHub.