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
- Read `{reason}` in the message — it states exactly what made the provider inactive (e.g. `missing package.json`)
- Run the command from the directory that contains that provider's manifest, or create/commit the manifest if the project genuinely uses it
- Drop the inactive id from `--only`, or add it to `--skip`, or run without `--only` so inactive providers are filtered out naturally
- 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
- In monorepos, run deps commands from the package directory, not the root
- Prefer running without `--only` so inactive providers are skipped instead of erroring
- Ensure each provider block has a real run command so it never registers as inactive
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
- No config file found in current directory
- deps provider '{}' depends on unknown provider '{}'
- deps run command cannot be empty
- provider '{}' does not support adding packages
- provider '{}' does not support removing packages
AI-assisted analysis of jdx/mise@9dcfcaa0dc (2026-08-17).
Data as JSON: /api/errors/3db9b88e03b2b629.
Report an issue: GitHub.