{"record":{"id":"2592a35ddde2167c","repo":"jdx/mise","slug":"package-plugin-name-collides-with-a-built-in-p","errorCode":null,"errorMessage":"package plugin '{name}' collides with a built-in package manager","messagePattern":"package plugin '(.+?)' collides with a built-in package manager","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/plugins/install.rs","lineNumber":164,"sourceCode":"    let (mut plugin_type, name) = PluginType::from_plugin_config(name);\n    let git_url = git_url.or_else(|| {\n        config\n            .get_repo_url(name)\n            .filter(|url| url.starts_with(\"packslip:\"))\n    });\n    if git_url\n        .as_deref()\n        .is_some_and(|url| url.starts_with(\"packslip:\"))\n    {\n        if explicit_type && plugin_type != PluginType::Vfox {\n            bail!(\"packslip plugin sources require the vfox plugin type\");\n        }\n        plugin_type = PluginType::Vfox;\n    }\n    let name = name.to_string();\n    if plugin_type == PluginType::Package && crate::system::packages::is_builtin_manager_name(&name)\n    {\n        bail!(\"package plugin '{name}' collides with a built-in package manager\");\n    }\n    let path = dirs::PLUGINS.join(name.to_kebab_case());\n    let plugin = plugin_type.plugin(name.clone());\n    if let Some(url) = git_url {\n        plugin.set_remote_url(url);\n    }\n    if !force && plugin.is_installed() {\n        warn!(\"Plugin {name} already installed\");\n        warn!(\"Use --force to install anyway\");\n    } else {\n        let mpr = MultiProgressReport::get();\n        plugin\n            .ensure_installed(config, &mpr, force, dry_run)\n            .await?;\n        if !dry_run {\n            warn_if_env_plugin_shadows_registry(&name, &path);\n        }\n    }","sourceCodeStart":146,"sourceCodeEnd":182,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/cli/plugins/install.rs#L146-L182","documentation":"A plugin of type Package (a package-manager-backed plugin) whose name matches one of mise's built-in package manager names (crate::system::packages::is_builtin_manager_name) collides with a backend mise already provides natively. install_plugin bails to prevent a user plugin shadowing or conflicting with the built-in backend.","triggerScenarios":"`mise plugins install <name>` (or install_one path) where the resolved plugin type is Package and <name> equals a built-in package manager name (e.g. cargo, npm, pipx, gem, go, dotnet).","commonSituations":"Trying to register a custom plugin named after an existing backend (e.g. `mise plugins install cargo ...`); migrating old plugin setups after those tools became built-in backends; scripted installs using unvalidated names.","solutions":["Drop the plugin install — use the built-in backend directly (`mise use cargo:crate-name`, `mise use npm:pkg`).","Rename your plugin to something that doesn't collide with a built-in manager name.","If you need custom behavior for that tool, implement it as a vfox/asdf plugin with a distinct name instead of a Package plugin."],"exampleFix":"// before\nmise plugins install cargo packslip:owner/cargo-plugin\n// after\nmise use cargo:serde_cli  # built-in cargo backend, no plugin needed","handlingStrategy":"validation","validationCode":"for m in cargo npm pipx gem go dotnet; do [ \"$PLUGIN\" = \"$m\" ] && { echo \"$m collides with a built-in backend\"; exit 1; }; done","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Don't create plugins named after built-in backends; use explicit backend syntax instead (mise use cargo:...).","Choose distinctive plugin names when writing custom plugins.","Review mise docs on built-in backends before registering Package-type plugins."],"tags":["cli","plugins","naming-conflict"],"backgroundTag":"file-already-exists","analyzedSha":"afd2eddd3a50c16190efc1c7e94404b48f72af57","analyzedAt":"2026-09-09T01:38:25.179Z","contentChangedAt":"2026-09-09T01:38:25.179Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}