jdx/mise · error
package plugin ' ' collides with a built-in package manager
Error message
package plugin '{}' collides with a built-in package manager What it means
Vfox 'package' type plugins wrap a package manager, but mise already has built-in package-manager integrations. If a package plugin's name matches a built-in manager name (`system::packages::is_builtin_manager_name`), mise deletes the plugin directory and bails rather than shadowing built-in behavior.
Solutions
- Remove the built-in-backed usage: just use the built-in package manager support directly instead of the vfox package plugin.
- If the plugin is obsolete, drop it — mise deleted the plugin directory already; verify with `mise plugins ls`.
- If you truly need the plugin, rename it (fork with a distinct plugin name) so it doesn't collide with the builtin.
Example fix
// before mise plugin add pip https://github.com/version-fox/vfox-pip // after mise use pipx:somepackage # built-in pipx/pip support
Defensive patterns
Strategy: validation
Validate before calling
const BUILTINS = ['pip','cargo','gem','npm','go','composer'];
if (BUILTINS.includes(pluginName)) throw new Error(`${pluginName} collides with a built-in manager`); Prevention
- Use mise's built-in package manager support instead of package-type vfox plugins.
- Before adding a vfox package plugin, check `mise plugins ls` and current docs for built-in equivalents.
When it happens
Trigger: Installing a vfox package-type plugin whose name collides with a built-in package manager (e.g. pip, cargo, gem, npm style names) via `mise plugin add`/`mise install`, after taking the plugin lock.
Common situations: Plugin renamed/republished so its name matches a builtin; user following an outdated tutorial for a package plugin that has since become built-in; stale plugin cache holding an old plugin at a now-colliding name.
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
- Impossible to find at least two unused byte codes in this…
- vfox-backend plugin ' ' exists but ' ' is not available or…
- vfox plugin ' ' exists but ' ' is not available or the…
- asdf plugin ' ' exists but ' ' is not available or the…
- is not installed
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/d35440e4a61deff1.
Report an issue: GitHub.
Appendix: source
Thrown at src/plugins/vfox_plugin.rs:366
}
}
let prefix = format!("plugin:{}", style(&self.name).blue().for_stderr());
let pr = mpr.add_with_options(&prefix, dry_run);
if !dry_run {
// Force requests reinstallation, but staged replacements still
// need exclusive access to their destination and backup.
let skip_lock = force && !self.get_repo_url(config)?.starts_with("packslip:");
let plugin_lock = lock_file::get(&self.plugin_path, skip_lock)?;
self.install(config, pr.as_ref()).await?;
let plugin_type =
PluginType::from_plugin_path(&self.plugin_path).unwrap_or(PluginType::Vfox);
if plugin_type == PluginType::Package
&& crate::system::packages::is_builtin_manager_name(&self.name)
{
drop(plugin_lock);
file::remove_all(&self.plugin_path)?;
bail!(
"package plugin '{}' collides with a built-in package manager",
self.name
);
}
install_state::add_plugin(&self.name, plugin_type).await?;
backend::remove(&self.name);
warn_if_env_plugin_shadows_registry(&self.name, &self.plugin_path);
}
Ok(())
}
async fn update(&self, pr: &dyn SingleReport, gitref: Option<String>) -> Result<()> {
if let Some(installed) = packslip::installed(&self.plugin_path)? {
if self.plugin_path.is_symlink() {
warn!("plugin:{} is a symlink, not updating", self.name);
return Ok(());
}
let _lock = lock_file::get(&self.plugin_path, false)?;View on GitHub (pinned to 533346cc37)