ipfs/kubo · error
Routing.Type=delegated does not support content providing. S
Error message
Routing.Type=delegated does not support content providing. Set Provide.Enabled=false in your config
What it means
Routing.Type=delegated uses only delegated routing endpoints and has no DHT capability, so content providing (announcing CIDs) is unsupported. validateDaemonConfig refuses startup when delegated routing is combined with Provide.Enabled=true (explicitly or by default).
Source
Thrown at cmd/ipfs/kubo/daemon.go:987
if cfg.Provider.Enabled != config.Default || !cfg.Provider.Strategy.IsDefault() || !cfg.Provider.WorkerCount.IsDefault() {
return errors.New("deprecated configuration detected. Manually migrate 'Provider' fields to 'Provide' and remove 'Provider' from your config. Documentation: https://github.com/ipfs/kubo/blob/master/docs/config.md#provide")
}
//nolint:staticcheck // intentionally checking deprecated fields
if !cfg.Reprovider.Interval.IsDefault() || !cfg.Reprovider.Strategy.IsDefault() {
return errors.New("deprecated configuration detected. Manually migrate 'Reprovider' fields to 'Provide': Reprovider.Strategy -> Provide.Strategy, Reprovider.Interval -> Provide.DHT.Interval. Remove 'Reprovider' from your config. Documentation: https://github.com/ipfs/kubo/blob/master/docs/config.md#provide")
}
if cfg.Provide.Strategy.WithDefault("") == "flat" {
return errors.New("Provide.Strategy='flat' is no longer supported. Use 'all' instead. Documentation: https://github.com/ipfs/kubo/blob/master/docs/config.md#providestrategy")
}
if cfg.Experimental.StrategicProviding {
return errors.New("Experimental.StrategicProviding was removed. Remove it from your config. Documentation: https://github.com/ipfs/kubo/blob/master/docs/experimental-features.md#strategic-providing")
}
if cfg.Provide.DHT.SweepEnabled.WithDefault(config.DefaultProvideDHTSweepEnabled) &&
cfg.Provide.DHT.MaxWorkers.WithDefault(config.DefaultProvideDHTMaxWorkers) == 0 {
return errors.New("invalid configuration: Provide.DHT.MaxWorkers cannot be 0 when Provide.DHT.SweepEnabled=true. Set Provide.DHT.MaxWorkers to a positive value (e.g., 16) to control resource usage. Documentation: https://github.com/ipfs/kubo/blob/master/docs/config.md#providedhtmaxworkers")
}
if routingOption == routingOptionDelegatedKwd && cfg.Provide.Enabled.WithDefault(config.DefaultProvideEnabled) {
return errors.New("Routing.Type=delegated does not support content providing. Set Provide.Enabled=false in your config")
}
return nil
}
func validateDaemonEnvironment() error {
if flag := os.Getenv("IPFS_REUSEPORT"); flag != "" {
return errors.New("support for IPFS_REUSEPORT was removed. Use LIBP2P_TCP_REUSEPORT instead")
}
return nil
}
// printLibp2pPorts prints which ports are opened to facilitate swarm connectivity.
func printLibp2pPorts(node *core.IpfsNode) {
if !node.IsOnline {
fmt.Println("Swarm not listening, running in offline mode.")
return
}View on GitHub (pinned to 329838acdf)
Solutions
- Disable providing: `ipfs config --json Provide.Enabled false`
- Or switch routing: use Routing.Type=dht (or none/auto) if announcing content is required
- For CLI usage, combine the config change with `ipfs daemon --routing=delegated`
Example fix
// before $ ipfs daemon --routing=delegated Error: Routing.Type=delegated does not support content providing... // after $ ipfs config --json Provide.Enabled false $ ipfs daemon --routing=delegated
Defensive patterns
Strategy: validation
Validate before calling
// delegated routing requires providing disabled rt=$(ipfs config Routing.Type 2>/dev/null); pe=$(ipfs config --json Provide.Enabled 2>/dev/null) if [ "$rt" = delegated ] && [ "$pe" != false ]; then echo "set Provide.Enabled=false for Routing.Type=delegated"; fi
Try / catch
if err := daemonFunc(...); err != nil {
if strings.Contains(err.Error(), "delegated does not support content providing") {
log.Fatalf("disable Provide.Enabled or change routing: %v", err)
}
} Prevention
- Pair every --routing=delegated deployment with Provide.Enabled=false in the template
- Recheck Provide defaults when changing Routing.Type
- Add a config pre-flight check to daemon startup scripts
When it happens
Trigger: `ipfs daemon --routing=delegated` (or Routing.Type=delegated in config) while Provide.Enabled is true or unset (defaulting to enabled).
Common situations: Gateway/light-client setups using delegated routing that inherit the default Provide.Enabled=true; users switching Routing.Type to delegated without touching Provide settings.
Related errors
- private network does not work with Routing.Type=auto. Update
- invalid configuration: Provide.DHT.MaxWorkers cannot be 0 wh
- "all" strategy cannot be combined with other strategies in %
- +unique/+entities must combine with pinned and/or mfs in %q
- method name %q is missing from Routing.Methods config param
AI-assisted analysis of ipfs/kubo@329838acdf (2026-09-03).
Data as JSON: /api/errors/7401463779bec84c.
Report an issue: GitHub.