jdx/mise · error · eyre::Report

provider '{}' is inactive: {reason}

Error message

provider '{}' is inactive: {reason}

What it means

`DepsEngine::validate_provider_selection` (src/deps/engine.rs:570) runs before deps steps: for every provider explicitly selected via `only` that is not skipped, it checks `applicability()`. `Inactive(reason)` (src/deps/mod.rs:41) is returned when a manifest is missing/empty (`missing package.json`, `empty Cargo.toml`) or the run command is unset/empty — mise then bails instead of silently skipping work the user explicitly requested.

Source

Thrown at src/deps/engine.rs:580

    }

    fn validate_provider_selection(
        providers: &[Box<dyn DepsProvider>],
        only: Option<&[String]>,
        skip: &[String],
    ) -> Result<()> {
        let Some(only) = only else {
            return Ok(());
        };
        for id in only {
            if skip.contains(id) {
                continue;
            }
            let Some(provider) = providers.iter().find(|provider| provider.id() == id) else {
                continue;
            };
            if let DepsProviderApplicability::Inactive(reason) = provider.applicability() {
                bail!("provider '{}' is inactive: {reason}", provider.id());
            }
        }
        Ok(())
    }

    /// Run all stale deps steps, respecting dependency ordering
    pub async fn run(&self, opts: DepsOptions) -> Result<DepsResult> {
        let mut results = vec![];

        Self::validate_provider_selection(&self.providers, opts.only.as_deref(), &opts.skip)?;

        let is_selected = |provider: &dyn DepsProvider| {
            (!opts.auto_only || provider.is_auto())
                && !opts.skip.iter().any(|id| id == provider.id())
                && opts
                    .only
                    .as_ref()
                    .is_none_or(|only| only.iter().any(|id| id == provider.id()))

View on GitHub (pinned to 9dcfcaa0dc)

Solutions

  1. Read `{reason}` in the message — it states exactly what made the provider inactive (e.g. `missing package.json`)
  2. Run the command from the directory that contains that provider's manifest, or create/commit the manifest if the project genuinely uses it
  3. Drop the inactive id from `--only`, or add it to `--skip`, or run without `--only` so inactive providers are filtered out naturally
  4. If the reason is `missing run command`/`run command is empty`, define a real run command for the provider

Example fix

# before
$ mise deps run --only npm      # in a dir with no package.json
# after
$ cd packages/web && mise deps run --only npm
# or create the manifest:
$ npm init -y && mise deps run --only npm
Defensive patterns

Strategy: validation

Validate before calling

# only --only providers whose manifests exist
for p in npm pnpm; do
  [ -f package.json ] || { echo "skip $p: no package.json here" >&2; continue; }
  mise deps run --only "$p"
done

Try / catch

Treat `provider '...' is inactive` as a signal to re-check the working directory/manifest, not a transient failure: catch, print {reason}, and either cd to the package dir or drop the id from --only.

Prevention

When it happens

Trigger: `mise deps run --only <id>` (or DepsOptions with `only`) where provider `<id>` exists but its applicability is Inactive — its manifest file absent or empty, or its run command missing — while that provider is neither skipped nor absent from the provider list.

Common situations: Running `mise deps run --only npm` in a directory without package.json; monorepo root vs package subdir confusion; CI using a fixed `--only` list across heterogeneous projects; a provider block missing its `run` key so it registers as inactive.

Related errors


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