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
- Set `retry.noise` to a value between -100 and 100 (inclusive).
- Leave `noise` unset to use Got's default jitter.
- 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
- Keep `retry.noise` within +/-100ms or omit it.
- Do not copy jitter values from libraries with larger ranges.
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
- Invalid DNS lookup IP version: ${value as string}
- Unexpected retry option: ${key}
- Unexpected option: ${key}
- Unexpected agent option: ${key}
- Unexpected timeout option: ${key}
AI-assisted analysis of sindresorhus/got@e3924aa1e5 (2026-08-03).
Data as JSON: /data/errors/6094c77d1aa3b77d.json.
Report an issue: GitHub.