{"record":{"id":"37c08f2ad149e5bd","repo":"jdx/mise","slug":"packslip-plugin-sources-require-the-vfox-plugin-ty","errorCode":null,"errorMessage":"packslip plugin sources require the vfox plugin type","messagePattern":"packslip plugin sources require the vfox plugin type","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/plugins/install.rs","lineNumber":157,"sourceCode":"    config: &Arc<Config>,\n    name: &str,\n    git_url: Option<String>,\n    force: bool,\n    dry_run: bool,\n) -> Result<()> {\n    let explicit_type = name.contains(':');\n    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();","sourceCodeStart":139,"sourceCodeEnd":175,"githubUrl":"https://github.com/jdx/mise/blob/afd2eddd3a50c16190efc1c7e94404b48f72af57/src/cli/plugins/install.rs#L139-L175","documentation":"When installing a plugin from a `packslip:` source, mise forces the plugin type to vfox. If the user explicitly specified a different plugin type (via the type flag/option) that conflicts with packslip, install_plugin bails instead of silently overriding the user's explicit choice.","triggerScenarios":"`mise plugins install <name> packslip:owner/repo` combined with an explicit plugin type (explicit_type true) set to anything other than vfox, e.g. --type asdf or a package type.","commonSituations":"Copy-pasting an install command and leaving a --type flag from a previous asdf-based instruction; assuming packslip sources behave like git/asdf plugins; scripting installs with a generic --type parameter.","solutions":["Remove the explicit --type flag (or the explicit type in your script) so mise defaults to vfox for packslip sources.","Set the type explicitly to vfox if you want to state it: --type vfox.","Use a git:// or other source URL if you actually need a non-vfox plugin type."],"exampleFix":"// before\nmise plugins install mytool --type asdf packslip:owner/mytool\n// after\nmise plugins install mytool packslip:owner/mytool","handlingStrategy":"validation","validationCode":"# ensure no --type conflicts with packslip source\ncase \"$ARGS\" in *--type*) [ \"${TYPE:-}\" = vfox ] || { echo 'packslip requires --type vfox'; exit 1; };; esac","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Omit --type entirely for packslip: sources; mise defaults to vfox.","Audit install scripts for leftover --type flags from asdf-based instructions.","Remember: packslip plugin sources are always vfox-type."],"tags":["cli","plugins","packslip","validation"],"backgroundTag":"conflicting-config-options","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"}