ipfs/kubo · error
failure to parse config setting IPNS.RepublishPeriod: %s
Error message
failure to parse config setting IPNS.RepublishPeriod: %s
What it means
`IPNS.RepublishPeriod` is a Go duration string; it is parsed with time.ParseDuration during Online construction. If the string is not a valid duration (missing unit, bad number, non-numeric), node construction fails with this wrapped parse error.
Source
Thrown at core/node/groups.go:331
func Online(bcfg *BuildCfg, cfg *config.Config, userResourceOverrides rcmgr.PartialLimitConfig) fx.Option {
// Namesys params
ipnsCacheSize := cfg.Ipns.ResolveCacheSize
if ipnsCacheSize == 0 {
ipnsCacheSize = DefaultIpnsCacheSize
}
if ipnsCacheSize < 0 {
return fx.Error(errors.New("cannot specify negative resolve cache size"))
}
// Republisher params
var repubPeriod, recordLifetime time.Duration
if cfg.Ipns.RepublishPeriod != "" {
d, err := time.ParseDuration(cfg.Ipns.RepublishPeriod)
if err != nil {
return fx.Error(fmt.Errorf("failure to parse config setting IPNS.RepublishPeriod: %s", err))
}
if !util.Debug && (d < time.Minute || d > (time.Hour*24)) {
return fx.Error(fmt.Errorf("config setting IPNS.RepublishPeriod is not between 1min and 1day: %s", d))
}
repubPeriod = d
}
if cfg.Ipns.RecordLifetime != "" {
d, err := time.ParseDuration(cfg.Ipns.RecordLifetime)
if err != nil {
return fx.Error(fmt.Errorf("failure to parse config setting IPNS.RecordLifetime: %s", err))
}
recordLifetime = d
}
View on GitHub (pinned to 329838acdf)
Solutions
- Set a valid duration with a unit: `ipfs config IPNS.RepublishPeriod 4h`
- Clear the value (`ipfs config IPNS.RepublishPeriod ""`) to use the default republish interval
- Note valid durations are additionally constrained to between 1 minute and 24 hours unless debug mode is on
Example fix
// before (config.json)
"Ipns": { "RepublishPeriod": "5" }
// after
"Ipns": { "RepublishPeriod": "5m" } Defensive patterns
Strategy: validation
Validate before calling
if p := cfg.Ipns.RepublishPeriod; p != "" {
if _, err := time.ParseDuration(p); err != nil {
return fmt.Errorf("IPNS.RepublishPeriod %q is not a Go duration (e.g. 4h)", p)
}
} Try / catch
d, err := time.ParseDuration(cfg.Ipns.RepublishPeriod)
if err != nil {
return fmt.Errorf("IPNS.RepublishPeriod: %w", err)
} Prevention
- Always include a unit in Go duration strings (5m, 4h)
- Remember valid republish periods are 1min-24h outside debug mode
- Write durations via `ipfs config IPNS.RepublishPeriod 4h` instead of manual JSON edits
When it happens
Trigger: `cfg.Ipns.RepublishPeriod != ""` and `time.ParseDuration` fails — values like "5", "5m30", "hours", or stray whitespace in the config value.
Common situations: Writing "5" instead of "5m" (Go durations require a unit); using "24h" variants with typos like "24 h"; config generated by scripts concatenating numbers and units incorrectly.
Understand the failure class
Background: "invalid duration" / "failed to parse duration": why your timeout, interval, or TTL string is rejected and which formats each library accepts — this error's family across 32 libraries.
Related errors
- failure to parse config setting IPNS.RecordLifetime: %s
- failed to read config: %w
- no delegated publishers configured: add Ipns.DelegatedPublis
- cannot specify negative resolve cache size
- failed to read config: %w
AI-assisted analysis of ipfs/kubo@329838acdf (2026-09-03).
Data as JSON: /api/errors/e2d473f9857bf9d8.
Report an issue: GitHub.