jdx/mise · error

package manager ' ' does not support pruning

Error message

package manager '{}' does not support pruning

What it means

`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.

Solutions

  1. Prune only managers implemented as package plugins (those with package hook Lua files).
  2. For brew, remove packages via `brew uninstall` or by removing them from `[bootstrap.packages]` and running the install/sync flow instead of prune.
  3. Check `mise bootstrap packages --help` / available managers to see which support pruning.

Example fix

// before
$ mise bootstrap packages prune --manager brew
error: package manager 'brew' does not support pruning

// after
$ brew autoremove  # or manage removal via mise bootstrap packages install sync
Defensive patterns

Strategy: validation

Validate before calling

# Only attempt prune for plugin-based managers
case "$MANAGER" in
  brew|cargo|npm) echo "manager $MANAGER does not support prune"; exit 1 ;;
esac
mise bootstrap packages prune --manager "$MANAGER"

Try / catch

try {
  await run("mise", ["bootstrap","packages","prune","--manager", m]);
} catch (e) {
  if (e.message.includes("does not support pruning")) {
    // fall back to the manager's native removal command
  } else throw e;
}

Prevention

When it happens

Trigger: 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.

Common situations: Assuming prune works uniformly across all bootstrap package managers; using brew as the manager for prune because import uses brew by default.

Related errors


AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17). Data as JSON: /api/errors/ac82d37d22745918. Report an issue: GitHub.

Appendix: source

Thrown at src/cli/system/prune.rs:76

            bail!(
                "manager '{}' is excluded by the system_packages.managers setting",
                self.manager
            );
        }
        match self.manager.as_str() {
            "brew" => self.run_brew().await,
            "brew-cask" => self.run_brew_cask().await,
            _ => self.run_plugin().await,
        }
    }

    async fn run_plugin(self) -> Result<()> {
        let discovered = system::packages::all_managers()
            .into_iter()
            .find(|manager| manager.name() == self.manager)
            .ok_or_else(|| eyre::eyre!("unknown bootstrap package manager '{}'", self.manager))?;
        if !discovered.is_plugin() {
            bail!(
                "package manager '{}' does not support pruning",
                self.manager
            );
        }
        if let Some(reason) = discovered.unavailable_reason_async().await {
            bail!("{} is not available: {reason}", self.manager);
        }
        let manager = PackagePluginManager::new(self.manager.clone())?;
        let config = Config::get().await?;
        let configured = system::package_requests_for_manager_from_config_and_tracked_config_files(
            &config,
            &self.manager,
        )
        .await?;
        let plan = manager.prune_plan(&configured).await?;
        if plan.is_empty() {
            if !self.dry_run {
                manager.apply_prune_plan(&plan).await?;

View on GitHub (pinned to 533346cc37)