jdx/mise · error
no dotfiles matched target filter: {}
Error message
no dotfiles matched target filter: {} What it means
Thrown by `mise bootstrap dotfiles status [TARGET]...` when target filters were given, nothing matched, and the config does define at least one dotfile file or edit. It distinguishes 'your filter matched nothing' (hard error) from 'no dotfiles configured' (info message), so a typo in a script cannot silently report an empty, all-good status.
Source
Thrown at src/cli/dotfiles/status.rs:96
},
req.origin.config.display_user(),
state_str,
]);
}
}
let all_edits = system::edits::edits_from_config(&config)?;
let edits = all_edits
.iter()
.filter(|req| system::edits::matches_target(req, &self.targets))
.cloned()
.collect::<Vec<_>>();
if files.is_empty()
&& edits.is_empty()
&& !self.targets.is_empty()
&& (!all_files.is_empty() || !all_edits.is_empty())
{
eyre::bail!(
"no dotfiles matched target filter: {}",
self.targets.join(", ")
);
}
let mut edit_rows: Vec<Vec<String>> = vec![];
let mut json_edits = vec![];
for req in &edits {
let state = match system::edits::check(&config, req) {
Ok(state) => state,
Err(err) => FileState::Differs(format!("{err}")),
};
let state_str = match &state {
FileState::Applied => "applied".to_string(),
FileState::Missing => "missing".to_string(),
FileState::SourceMissing => "source missing".to_string(),
FileState::Differs(reason) => format!("differs ({reason})"),
};
any_missing |= state != FileState::Applied;View on GitHub (pinned to 6f52dcdf99)
Solutions
- Run `mise bootstrap dotfiles status` with no filters to list the exact target names, then re-run with the correct one
- Check shell quoting: leave `~` and globs unquoted, or pass the literal path exactly as the config declares it
- If the entry lives in a project config, run from that directory (or `mise trust` it) so the config is actually loaded
- If no dotfiles should be configured, drop the filters — that path prints an info line instead of failing
Example fix
# before $ mise bootstrap dotfiles status '~/.zshrc' # quoted ~ never expands error: no dotfiles matched target filter: ~/.zshrc # after $ mise bootstrap dotfiles status ~/.zshrc
Defensive patterns
Strategy: validation
Validate before calling
# Verify a target is configured before filtering
mise bootstrap dotfiles status | grep -qF "$TARGET" || { echo "unknown target: $TARGET" >&2; exit 2; }
mise bootstrap dotfiles status "$TARGET" Prevention
- Quote filters so ~ and globs still match the config spelling
- Run unfiltered `status` once when onboarding a script to confirm target names
- Treat non-zero exits from filtered status as a script bug, not an empty state
When it happens
Trigger: Calling `mise bootstrap dotfiles status zshrc` or with a glob filter where both `files` and `edits` are empty after filtering while `all_files`/`all_edits` are non-empty. Happens with typos, wrong shell expansion (quoted `~` or globs that never expand), or a target defined in a config file that is not loaded in this directory.
Common situations: CI scripts that check one dotfile's state by name and the name drifts; running inside a subdirectory where the mise.toml defining the entry is not trusted or loaded; passing `'~/.zshrc'` in single quotes so the shell never expands `~` and the literal string matches nothing.
Related errors
- no dotfiles matched target filter: {}
- {raw}: multiple [dotfiles] edit entries match; choose one of
- {raw}: target must be absolute or start with ~/
- files: cannot unapply these entries:\n{}
- target symlink points to {}, use --force to remove it
AI-assisted analysis of jdx/mise@6f52dcdf99 (2026-08-22).
Data as JSON: /api/errors/7098c8bff25198c6.
Report an issue: GitHub.