jdx/mise · error
remote bootstrap configuration is invalid for
Error message
remote bootstrap configuration is invalid for {} target(s):
{} What it means
After selecting targets, mise applies RemoteOverrides (per-host CLI overrides) to each host. If any host fails validation in apply_overrides, mise collects all errors and aborts before running anything, listing each target and its error.
Solutions
- Read the per-target error lines in the message to find the offending host(s)
- Fix the host entry under [bootstrap.remote.hosts] (validate user@host format and options)
- Remove or correct conflicting --override-style CLI flags for those hosts
- Test with a single --host to isolate the failing entry
Example fix
# before (invalid host string) [bootstrap.remote.hosts] web1 = "web1 example" # after [bootstrap.remote.hosts] web1 = "deploy@web1.example.com"
Defensive patterns
Strategy: validation
Validate before calling
hosts.forEach(h => { if (!/^[^@\s]+@[^@\s]+$|^[[^\s]+]$/.test(h)) throw new Error(`bad host: ${h}`) }) Prevention
- Validate host strings as [user@]host before committing config
- Keep overrides minimal to reduce merge conflicts
- Test each new host with a single --host run
When it happens
Trigger: One or more selected hosts have invalid configuration after applying overrides — e.g. bad user/host strings, invalid relay or env settings merged from CLI flags onto config-defined hosts.
Common situations: Malformed entries under [bootstrap.remote.hosts]; CLI override flags incompatible with a host definition; recent config edits introducing invalid fields.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- Check command must not be empty
- --connect-timeout must be greater than zero
- managed path ' ' notifies unconfigured bootstrap service
- managed path ' ' notifies unconfigured bootstrap service
- managed system path must be absolute
AI-assisted analysis of jdx/mise@533346cc37 (2026-09-17).
Data as JSON: /api/errors/f8ade94ed9f8e852.
Report an issue: GitHub.
Appendix: source
Thrown at src/cli/bootstrap.rs:3097
relay,
dry_run: self.dry_run,
yes: self.yes,
update: self.update,
prompt_secrets: self.prompt_secrets,
force_dotfiles: self.force_dotfiles,
skip: self.skip.iter().map(bootstrap_part_name).collect(),
only: self.only.iter().map(bootstrap_part_name).collect(),
keep_staging: self.keep_staging,
connect_timeout: self.connect_timeout,
};
let mut configuration_errors = vec![];
for host in selected.values_mut() {
if let Err(error) = host.apply_overrides(&overrides) {
configuration_errors.push(format!("{}: {error:#}", host.name));
}
}
if !configuration_errors.is_empty() {
bail!(
"remote bootstrap configuration is invalid for {} target(s):\n {}",
configuration_errors.len(),
configuration_errors.join("\n ")
);
}
let mut failures = vec![];
let repository = self
.adopt
.as_deref()
.map(crate::github_relay::expand_repository)
.transpose()?;
if let Some(origin) = &repository {
system::remote_repository::validate_origin(origin)?;
}
// a dry run fetches and transfers like a real one: the preview comes
// from the target, which inspects itself and the repository
let repository = if let Some(origin) = repository {
Some(View on GitHub (pinned to 533346cc37)