{"record":{"id":"29dffd4cb1e885d5","repo":"jdx/mise","slug":"name-is-a-core-plugin-and-does-not-need-to-be-in","errorCode":null,"errorMessage":"{name} is a core plugin and does not need to be installed","messagePattern":"(.+?) is a core plugin and does not need to be installed","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/plugins/install.rs","lineNumber":82,"sourceCode":"    /// Show installation output\n    #[usage(long, short, action = usage_rs::ArgAction::Count, verbatim_doc_comment)]\n    verbose: u8,\n}\n\nimpl PluginsInstall {\n    pub(crate) async fn run(self, config: &Arc<Config>) -> Result<()> {\n        let this = Arc::new(self);\n        if this.all {\n            return this.install_all_missing_plugins(config).await;\n        }\n        let (name, git_url) = get_name_and_url(&this.new_plugin.clone().unwrap(), &this.git_url)?;\n        if git_url.is_some() {\n            this.install_one(config, name, git_url).await?;\n        } else {\n            let is_core = CORE_PLUGINS.contains_key(&name);\n            if is_core {\n                let name = style::eblue(name);\n                bail!(\"{name} is a core plugin and does not need to be installed\");\n            }\n            let mut plugins: Vec<String> = vec![name];\n            if let Some(second) = this.git_url.clone() {\n                plugins.push(second);\n            };\n            plugins.extend(this.rest.clone());\n            this.install_many(config, plugins).await?;\n        }\n\n        Ok(())\n    }\n\n    async fn install_all_missing_plugins(self: Arc<Self>, config: &Arc<Config>) -> Result<()> {\n        let ts = ToolsetBuilder::new().build(config).await?;\n        let missing_plugins = ts.list_missing_plugins();\n        if missing_plugins.is_empty() {\n            warn!(\"all plugins already installed\");\n        }","sourceCodeStart":64,"sourceCodeEnd":100,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/cli/plugins/install.rs#L64-L100","documentation":"`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.","triggerScenarios":"`mise plugins install <name>` (run, without a git URL) where <name> is a key in CORE_PLUGINS, e.g. node, python, ruby, go.","commonSituations":"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.","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."],"exampleFix":"// before\nmise plugins install node\n// after\nmise use node@22","handlingStrategy":"validation","validationCode":"case \"$PLUGIN\" in node|python|ruby|go|java|bun|deno) echo \"$PLUGIN is built into mise; use mise install $PLUGIN\"; exit 1;; esac","typeGuard":null,"tryCatchPattern":null,"preventionTips":["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."],"tags":["cli","plugins","core-plugin"],"backgroundTag":"unsupported-operation","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}