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

  1. Set a valid duration with a unit: `ipfs config IPNS.RepublishPeriod 4h`
  2. Clear the value (`ipfs config IPNS.RepublishPeriod ""`) to use the default republish interval
  3. 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

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


AI-assisted analysis of ipfs/kubo@329838acdf (2026-09-03). Data as JSON: /api/errors/e2d473f9857bf9d8. Report an issue: GitHub.