{"record":{"id":"ac82d37d22745918","repo":"jdx/mise","slug":"package-manager-does-not-support-pruning","errorCode":null,"errorMessage":"package manager '{}' does not support pruning","messagePattern":"package manager '(.+?)' does not support pruning","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/cli/system/prune.rs","lineNumber":76,"sourceCode":"            bail!(\n                \"manager '{}' is excluded by the system_packages.managers setting\",\n                self.manager\n            );\n        }\n        match self.manager.as_str() {\n            \"brew\" => self.run_brew().await,\n            \"brew-cask\" => self.run_brew_cask().await,\n            _ => self.run_plugin().await,\n        }\n    }\n\n    async fn run_plugin(self) -> Result<()> {\n        let discovered = system::packages::all_managers()\n            .into_iter()\n            .find(|manager| manager.name() == self.manager)\n            .ok_or_else(|| eyre::eyre!(\"unknown bootstrap package manager '{}'\", self.manager))?;\n        if !discovered.is_plugin() {\n            bail!(\n                \"package manager '{}' does not support pruning\",\n                self.manager\n            );\n        }\n        if let Some(reason) = discovered.unavailable_reason_async().await {\n            bail!(\"{} is not available: {reason}\", self.manager);\n        }\n        let manager = PackagePluginManager::new(self.manager.clone())?;\n        let config = Config::get().await?;\n        let configured = system::package_requests_for_manager_from_config_and_tracked_config_files(\n            &config,\n            &self.manager,\n        )\n        .await?;\n        let plan = manager.prune_plan(&configured).await?;\n        if plan.is_empty() {\n            if !self.dry_run {\n                manager.apply_prune_plan(&plan).await?;","sourceCodeStart":58,"sourceCodeEnd":94,"githubUrl":"https://github.com/jdx/mise/blob/533346cc374382b41ec5ff70536252b2e96e725c/src/cli/system/prune.rs#L58-L94","documentation":"`mise bootstrap packages prune` only works for plugin-based package managers (vfox-style plugins with package hooks). `run_plugin` looks the manager up in the discovered manager list and, if it exists but `is_plugin()` is false (e.g. a built-in manager like brew), pruning is unsupported and mise throws this error.","triggerScenarios":"Running `mise bootstrap packages prune --manager brew` (or another non-plugin manager name): the manager is known to mise but is not a package plugin, so there is no prune implementation.","commonSituations":"Assuming prune works uniformly across all bootstrap package managers; using brew as the manager for prune because import uses brew by default.","solutions":["Prune only managers implemented as package plugins (those with package hook Lua files).","For brew, remove packages via `brew uninstall` or by removing them from `[bootstrap.packages]` and running the install/sync flow instead of prune.","Check `mise bootstrap packages --help` / available managers to see which support pruning."],"exampleFix":"// before\n$ mise bootstrap packages prune --manager brew\nerror: package manager 'brew' does not support pruning\n\n// after\n$ brew autoremove  # or manage removal via mise bootstrap packages install sync","handlingStrategy":"validation","validationCode":"# Only attempt prune for plugin-based managers\ncase \"$MANAGER\" in\n  brew|cargo|npm) echo \"manager $MANAGER does not support prune\"; exit 1 ;;\nesac\nmise bootstrap packages prune --manager \"$MANAGER\"","typeGuard":null,"tryCatchPattern":"try {\n  await run(\"mise\", [\"bootstrap\",\"packages\",\"prune\",\"--manager\", m]);\n} catch (e) {\n  if (e.message.includes(\"does not support pruning\")) {\n    // fall back to the manager's native removal command\n  } else throw e;\n}","preventionTips":["Check which bootstrap managers are plugin-based before scripting prune.","Use manager-native cleanup (e.g. brew autoremove) for non-plugin managers.","Keep import and prune manager choices distinct — import's brew default does not imply prune support."],"tags":["prune","plugin","cli","unsupported"],"backgroundTag":"operation-not-supported","analyzedSha":"533346cc374382b41ec5ff70536252b2e96e725c","analyzedAt":"2026-09-17T13:35:38.149Z","contentChangedAt":"2026-09-17T13:35:38.149Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}