jdx/mise · error
package plugin '{name}' collides with a built-in package man
Error message
package plugin '{name}' collides with a built-in package manager What it means
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.
Source
Thrown at src/cli/plugins/install.rs:164
let (mut plugin_type, name) = PluginType::from_plugin_config(name);
let git_url = git_url.or_else(|| {
config
.get_repo_url(name)
.filter(|url| url.starts_with("packslip:"))
});
if git_url
.as_deref()
.is_some_and(|url| url.starts_with("packslip:"))
{
if explicit_type && plugin_type != PluginType::Vfox {
bail!("packslip plugin sources require the vfox plugin type");
}
plugin_type = PluginType::Vfox;
}
let name = name.to_string();
if plugin_type == PluginType::Package && crate::system::packages::is_builtin_manager_name(&name)
{
bail!("package plugin '{name}' collides with a built-in package manager");
}
let path = dirs::PLUGINS.join(name.to_kebab_case());
let plugin = plugin_type.plugin(name.clone());
if let Some(url) = git_url {
plugin.set_remote_url(url);
}
if !force && plugin.is_installed() {
warn!("Plugin {name} already installed");
warn!("Use --force to install anyway");
} else {
let mpr = MultiProgressReport::get();
plugin
.ensure_installed(config, &mpr, force, dry_run)
.await?;
if !dry_run {
warn_if_env_plugin_shadows_registry(&name, &path);
}
}View on GitHub (pinned to afd2eddd3a)
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.
Example fix
// before mise plugins install cargo packslip:owner/cargo-plugin // after mise use cargo:serde_cli # built-in cargo backend, no plugin needed
Defensive patterns
Strategy: validation
Validate before calling
for m in cargo npm pipx gem go dotnet; do [ "$PLUGIN" = "$m" ] && { echo "$m collides with a built-in backend"; exit 1; }; done Prevention
- 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.
When it happens
Trigger: `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).
Common situations: 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.
Understand the failure class
Background: "already exists" / EEXIST / FileAlreadyExistsException: what the 'file already exists' error means and how to fix it — this error's family across 37 libraries.
Related errors
- execute_external_command not implemented for {}
- {name} is a core plugin and does not need to be installed
- packslip plugin sources require the vfox plugin type
- package plugin '{}' collides with a built-in package manager
- {}@{requested} is not installed{resolved} hint: run `mise in
AI-assisted analysis of jdx/mise@afd2eddd3a (2026-09-09).
Data as JSON: /api/errors/2592a35ddde2167c.
Report an issue: GitHub.