jdx/mise · error

no packages requested for manager

Error message

no packages requested for manager '{only}'

What it means

A single manager was requested but no packages were configured for it in `[bootstrap.packages]`, and no settings-based exclusion explains the empty request. mise cannot perform a package operation for a manager with no requested packages, so it bails.

Solutions

  1. Add packages for the manager under `[bootstrap.packages.<manager>]` in your config.
  2. Check the manager name spelling in --manager and the config keys.
  3. Remove the --manager flag to let mise aggregate all configured managers.

Example fix

// before
[bootstrap.packages]
brew = []
// after
[bootstrap.packages]
brew = ["ripgrep", "fd"]
Defensive patterns

Strategy: validation

Validate before calling

const pkgs = config.bootstrap?.packages?.[manager] ?? [];
if (pkgs.length === 0) { throw new Error(`no packages configured for manager '${manager}'`); }

Type guard

function hasPackages(cfg, mgr) { return Array.isArray(cfg?.bootstrap?.packages?.[mgr]) && cfg.bootstrap.packages[mgr].length > 0; }

Try / catch

try { await run(`mise system install --manager ${m}`) } catch (e) { if (String(e).includes('no packages requested for manager')) { /* fix config or drop flag */ } }

Prevention

When it happens

Trigger: Running a system-packages operation targeting one manager (`--manager <only>`) whose entry in `[bootstrap.packages]` is empty or missing.

Common situations: Typo in the manager name in bootstrap.packages; the packages table for that manager was emptied; user expects defaults but never configured packages.

Understand the failure class

Background: "must not be empty", "cannot be empty" — required-field validation errors across open-source libraries — this error's family across 41 libraries.

Related errors


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

Appendix: source

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

/// disabled/unavailable managers, unsatisfiable version pins, and the
/// confirmation prompt.
pub(crate) async fn run(mgrs: Vec<ManagerPackages>, action: Action, d: &DriverOpts) -> Result<()> {
    if let Some(only) = &d.manager
        && !mgrs.iter().any(|mp| mp.manager.name() == only)
    {
        // distinguish "not configured" from "filtered out by settings" —
        // the aggregation drops managers excluded by
        // system_packages.managers before we ever see them
        if let Some(enabled) = &Settings::get().system_packages.managers
            && !enabled.contains(only)
        {
            bail!(
                "manager '{only}' is excluded by the system_packages.managers setting \
                 (currently: {})",
                enabled.join(", ")
            );
        }
        bail!("no packages requested for manager '{only}'");
    }
    if mgrs.is_empty() {
        info!("no bootstrap packages configured in [bootstrap.packages]");
        return Ok(());
    }
    let opts = InstallOpts {
        dry_run: d.dry_run,
        update: d.update,
    };
    for mp in mgrs {
        if let Some(only) = &d.manager
            && mp.manager.name() != only
        {
            continue;
        }
        let name = mp.manager.name();
        if mp.disabled {
            if d.manager.is_some() {

View on GitHub (pinned to 533346cc37)