sindresorhus/got · error · Error

The maximum acceptable retry noise is +/- 100ms, got ${value

Error message

The maximum acceptable retry noise is +/- 100ms, got ${value.noise}

What it means

Thrown by the `retry` setter when `retry.noise` has an absolute value greater than 100 (milliseconds). The noise value jitters the exponential backoff to avoid thundering-herd retries; Got caps it at +/-100ms because larger jitter would make retry timing unpredictable and could exceed timeout budgets.

Source

Thrown at source/core/options.ts:3073

	*/
	get retry(): Partial<RetryOptions> {
		return this.#internals.retry;
	}

	set retry(value: Partial<RetryOptions>) {
		assertPlainObject('retry', value);

		assertAny('retry.calculateDelay', [is.function, is.undefined], value.calculateDelay);
		assertAny('retry.maxRetryAfter', [is.number, is.undefined], value.maxRetryAfter);
		assertAny('retry.limit', [is.number, is.undefined], value.limit);
		assertAny('retry.methods', [is.array, is.undefined], value.methods);
		assertAny('retry.statusCodes', [is.array, is.undefined], value.statusCodes);
		assertAny('retry.errorCodes', [is.array, is.undefined], value.errorCodes);
		assertAny('retry.noise', [is.number, is.undefined], value.noise);
		assertAny('retry.enforceRetryRules', [is.boolean, is.undefined], value.enforceRetryRules);

		if (value.noise && Math.abs(value.noise) > 100) {
			throw new Error(`The maximum acceptable retry noise is +/- 100ms, got ${value.noise}`);
		}

		for (const key of Object.keys(value)) {
			if (key === '__proto__') {
				continue;
			}

			if (!(key in this.#internals.retry)) {
				throw new Error(`Unexpected retry option: ${key}`);
			}
		}

		if (this.#merging) {
			safeObjectAssign(this.#internals.retry, value);
		} else {
			this.#internals.retry = {...value};
		}

View on GitHub (pinned to e3924aa1e5)

Solutions

  1. Set `retry.noise` to a value between -100 and 100 (inclusive).
  2. Leave `noise` unset to use Got's default jitter.
  3. If you need wider spread, raise `retry.limit`/`retry.maxRetryAfter` instead of inflating noise.

Example fix

// before
await got(url, {retry: {limit: 3, noise: 500}});
// after
await got(url, {retry: {limit: 3, noise: 100}});
Defensive patterns

Strategy: validation

Validate before calling

function clampNoise(noise) {
  if (noise !== undefined && Math.abs(noise) > 100) {
    throw new Error(`retry.noise must be within +/-100ms; got ${noise}`);
  }
}

Type guard

function isValidNoise(v: unknown): boolean {
  return v === undefined || (typeof v === 'number' && Math.abs(v) <= 100);
}

Prevention

When it happens

Trigger: Calling `got(url, {retry: {noise: 500}})` or any negative value like `{retry: {noise: -250}}` where `Math.abs(noise) > 100`.

Common situations: Copying a noise/`jitter` value from another library that allows larger ranges; tuning retry timing without reading the cap; passing milliseconds vs seconds by mistake.

Related errors


AI-assisted analysis of sindresorhus/got@e3924aa1e5 (2026-08-03). Data as JSON: /data/errors/6094c77d1aa3b77d.json. Report an issue: GitHub.