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

  1. Don't install it — use the tool directly: `mise use node@22` or `mise install node@22`.
  2. Check `mise plugins ls` — core plugins don't need entries here.
  3. 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

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


AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09). Data as JSON: /api/errors/29dffd4cb1e885d5. Report an issue: GitHub.