jdx/mise · error · eyre::Report

brew prune is not supported on windows

Error message

brew prune is not supported on windows

What it means

The Windows build of mise compiles run_brew as a stub (cfg(not(unix))) that always bails, because Homebrew pruning is only implemented for unix. Any `mise bootstrap packages prune --manager brew` on Windows fails unconditionally — nothing is inspected first.

Source

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

            .iter()
            .map(|candidate| format!("{}@{}", candidate.token, candidate.version))
            .collect::<Vec<_>>();
        if !self.yes && !Settings::get().yes && console::user_attended_stderr() {
            let msg = format!("brew-cask: prune {}?", remove.join(", "));
            if !prompt::confirm(msg)? {
                info!("brew-cask: skipped");
                return Ok(());
            }
        }
        let removed = brew::apply_cask_prune_plan(&plan, false)?;
        info!("brew-cask: pruned {removed} casks");
        Ok(())
    }

    #[cfg(not(unix))]
    async fn run_brew(self) -> Result<()> {
        let _ = self.manager;
        bail!("brew prune is not supported on windows")
    }

    #[cfg(not(unix))]
    async fn run_brew_cask(self) -> Result<()> {
        let _ = self.manager;
        bail!("brew-cask prune is not supported on windows")
    }
}

static AFTER_LONG_HELP: &str = color_print::cstr!(
    r#"<bold><underline>Examples:</underline></bold>

    $ <bold>mise bootstrap packages prune --manager brew</bold>
    $ <bold>mise bootstrap packages prune --manager brew --dry-run</bold>
    $ <bold>mise bootstrap packages prune --manager brew --yes</bold>
    $ <bold>mise bootstrap packages prune --manager brew-cask --dry-run</bold>
"#
);

View on GitHub (pinned to 9dcfcaa0dc)

Solutions

  1. Skip brew prune on Windows: guard the call with an OS check (e.g. `if [ "$(uname)" != "Darwin" ] && [ "$(uname)" != "Linux" ]; then ... fi` or in PowerShell check $IsWindows)
  2. Use WSL for brew-based workflows on Windows
  3. Manage Windows packages with a native manager (winget/choco/scoop) instead

Example fix

# before
$ mise bootstrap packages prune --manager brew   # on Windows PowerShell
# error: brew prune is not supported on windows

# after
# bootstrap.ps1
if (-not $IsWindows) { mise bootstrap packages prune --manager brew }
Defensive patterns

Strategy: validation

Validate before calling

# PowerShell
if (-not $IsWindows) { mise bootstrap packages prune --manager brew }

# bash
[ "$(uname)" != "_NT-"* ] && [ "$(uname -s 2>/dev/null || uname)" != MINGW* ] && mise bootstrap packages prune --manager brew

Try / catch

mise bootstrap packages prune --manager brew || { echo 'brew prune unsupported on this platform' >&2; true; }

Prevention

When it happens

Trigger: Running `mise bootstrap packages prune --manager brew` on any Windows host (native or MSVC toolchain build of mise).

Common situations: Shared mise config/bootstrap script executed on Windows CI runners; developers on Windows running a setup script written for macOS colleagues.

Related errors


AI-assisted analysis of jdx/mise@9dcfcaa0dc (2026-08-17). Data as JSON: /api/errors/c33fa2abb504009d. Report an issue: GitHub.