ipfs/kubo · error
no usable bootstrap peers: AutoConf is disabled (AutoConf.En
Error message
no usable bootstrap peers: AutoConf is disabled (AutoConf.Enabled=false) but 'auto' placeholder is used in Bootstrap config. Either set AutoConf.Enabled=true to enable automatic configuration, or replace 'auto' with specific Bootstrap peer addresses
What it means
validateAutoConfDisabled is invoked by ValidateAutoConfWithRepo when AutoConf.Enabled=false. If the Bootstrap list contains only the 'auto' placeholder and no static peer addresses, there would be zero bootstrap peers, so kubo refuses to start with a clear explanation of the two valid configurations.
Source
Thrown at config/autoconf_client.go:123
errors = append(errors, "Routing.DelegatedRouters contains 'auto' but AutoConf.Enabled=false")
}
// Check Ipns.DelegatedPublishers
if slices.Contains(cfg.Ipns.DelegatedPublishers, AutoPlaceholder) {
hasAutoValues = true
errors = append(errors, "Ipns.DelegatedPublishers contains 'auto' but AutoConf.Enabled=false")
}
// Log all errors
for _, errMsg := range errors {
autoconfLog.Error(errMsg)
}
// If only auto values exist and no static ones, fail to start
if hasAutoValues {
if len(cfg.Bootstrap) == 1 && cfg.Bootstrap[0] == AutoPlaceholder {
autoconfLog.Error("Kubo cannot start with only 'auto' Bootstrap values when AutoConf.Enabled=false")
return fmt.Errorf("no usable bootstrap peers: AutoConf is disabled (AutoConf.Enabled=false) but 'auto' placeholder is used in Bootstrap config. Either set AutoConf.Enabled=true to enable automatic configuration, or replace 'auto' with specific Bootstrap peer addresses")
}
}
return nil
}
View on GitHub (pinned to 329838acdf)
Solutions
- Set AutoConf.Enabled=true so 'auto' resolves to the default bootstrap peers
- Replace the 'auto' placeholder with explicit multiaddr bootstrap peers: ipfs config Bootstrap /dnsaddr/bootstrap.libp2p.io/p2p/Qm...
- Restore the default bootstrap list: ipfs bootstrap rm --all && ipfs bootstrap add --default
- Validate config before deploy: ensure Bootstrap has at least one non-'auto' entry when AutoConf is disabled
Example fix
// before (config.json)
"AutoConf": { "Enabled": false }, "Bootstrap": ["auto"]
// after
"AutoConf": { "Enabled": true }
// or
"Bootstrap": ["/ip4/147.75.83.83/tcp/4001/p2p/Qm..." ] Defensive patterns
Strategy: validation
Validate before calling
if cfg.AutoConf.Enabled == false && len(cfg.Bootstrap) == 1 && cfg.Bootstrap[0] == "auto" {
return errors.New("bootstrap is only 'auto' while AutoConf is disabled; fix config before starting")
} Try / catch
if err := config.ValidateAutoConfWithRepo(repoPath); err != nil {
if strings.Contains(err.Error(), "no usable bootstrap peers") { /* restore defaults or enable AutoConf */ }
return err
} Prevention
- Never leave Bootstrap as 'auto' when toggling AutoConf.Enabled=false
- Keep a static bootstrap fallback in automation-managed configs
- Run config validation (daemon dry start) in deployment pipelines before switching AutoConf
When it happens
Trigger: Starting the daemon with AutoConf.Enabled=false and cfg.Bootstrap == ["/dnsaddr/bootstrap.libp2p.io..."] replaced by the 'auto' placeholder (Bootstrap=["auto"]).
Common situations: Operator first ran with AutoConf enabled (Bootstrap was 'auto'), then disabled AutoConf without replacing Bootstrap; config templates that use 'auto' combined with AutoConf.Enabled=false toggles.
Related errors
- failed to get repo path: %w
- AutoConf cannot use the default mainnet URL (%s) on a privat
- cannot add default bootstrap peers: AutoConf is disabled (Au
- cannot remove individual bootstrap peers when using 'auto' p
- serveHTTPGateway: GetConfig() failed: %s
AI-assisted analysis of ipfs/kubo@329838acdf (2026-09-03).
Data as JSON: /api/errors/d270b62f5c57959a.
Report an issue: GitHub.