{"record":{"id":"d270b62f5c57959a","repo":"ipfs/kubo","slug":"no-usable-bootstrap-peers-autoconf-is-disabled-a","errorCode":null,"errorMessage":"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","messagePattern":"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","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"config/autoconf_client.go","lineNumber":123,"sourceCode":"\t\terrors = append(errors, \"Routing.DelegatedRouters contains 'auto' but AutoConf.Enabled=false\")\n\t}\n\n\t// Check Ipns.DelegatedPublishers\n\tif slices.Contains(cfg.Ipns.DelegatedPublishers, AutoPlaceholder) {\n\t\thasAutoValues = true\n\t\terrors = append(errors, \"Ipns.DelegatedPublishers contains 'auto' but AutoConf.Enabled=false\")\n\t}\n\n\t// Log all errors\n\tfor _, errMsg := range errors {\n\t\tautoconfLog.Error(errMsg)\n\t}\n\n\t// If only auto values exist and no static ones, fail to start\n\tif hasAutoValues {\n\t\tif len(cfg.Bootstrap) == 1 && cfg.Bootstrap[0] == AutoPlaceholder {\n\t\t\tautoconfLog.Error(\"Kubo cannot start with only 'auto' Bootstrap values when AutoConf.Enabled=false\")\n\t\t\treturn 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\")\n\t\t}\n\t}\n\n\treturn nil\n}\n","sourceCodeStart":105,"sourceCodeEnd":129,"githubUrl":"https://github.com/ipfs/kubo/blob/329838acdfafae224582930457efe80aa217afc0/config/autoconf_client.go#L105-L129","documentation":"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.","triggerScenarios":"Starting the daemon with AutoConf.Enabled=false and cfg.Bootstrap == [\"/dnsaddr/bootstrap.libp2p.io...\"] replaced by the 'auto' placeholder (Bootstrap=[\"auto\"]).","commonSituations":"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.","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"],"exampleFix":"// before (config.json)\n\"AutoConf\": { \"Enabled\": false }, \"Bootstrap\": [\"auto\"]\n// after\n\"AutoConf\": { \"Enabled\": true }\n// or\n\"Bootstrap\": [\"/ip4/147.75.83.83/tcp/4001/p2p/Qm...\" ]","handlingStrategy":"validation","validationCode":"if cfg.AutoConf.Enabled == false && len(cfg.Bootstrap) == 1 && cfg.Bootstrap[0] == \"auto\" {\n    return errors.New(\"bootstrap is only 'auto' while AutoConf is disabled; fix config before starting\")\n}","typeGuard":null,"tryCatchPattern":"if err := config.ValidateAutoConfWithRepo(repoPath); err != nil {\n    if strings.Contains(err.Error(), \"no usable bootstrap peers\") { /* restore defaults or enable AutoConf */ }\n    return err\n}","preventionTips":["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"],"tags":["autoconf","bootstrap","config-validation","startup"],"backgroundTag":"bootstrap-placeholder-misconfig","analyzedSha":"329838acdfafae224582930457efe80aa217afc0","analyzedAt":"2026-09-03T18:30:52.135Z","contentChangedAt":"2026-09-03T18:30:52.135Z","schemaVersion":2},"datasetVersion":"2026-09-11T00:17:11.886Z"}