Skip to content

Announcement: Updated default retry behavior (2026) #8037

Description

@millems

This issue tracks the 2026 retry updates for AWS SDK for JavaScript 3.x. See the announcement blog post for the full story across all AWS SDKs, including how to tell if you are affected.

Status

Opt-in available in @aws-sdk/client-* versions 3.1048.0 and later
Opt-in flag AWS_NEW_RETRIES_2026=true
Default rollout No sooner than November 2026

What changed

When you set AWS_NEW_RETRIES_2026=true, the retry defaults within standard mode update. The retry mode itself does not change.

If you have explicitly configured max attempts or backoff, your value takes precedence for that setting.

Setting Before After
Transient (non-throttling) base delay 100 ms 50 ms
Throttling base delay 100 ms 1,000 ms
Max attempts 3 3 (unchanged)
Transient (non-throttling) retry quota cost 10 tokens 14 tokens
Throttling retry quota cost 5 tokens 5 tokens (unchanged)
DynamoDB and DynamoDB Streams
Transient (non-throttling) base delay 100 ms 25 ms
Throttling base delay 100 ms 1,000 ms
Max attempts 3 4

DynamoDB defaults use a shorter base delay to match its low-latency profile. The additional attempt keeps the last retry's maximum backoff comparable to the general default.

Transient errors (such as 500s and connection resets) now use a much shorter backoff than throttling errors (where the service asks you to slow down). For details on backoff timing, error classification, and the retry quota, see Retry behavior in the AWS SDKs. For retry mode selection and configuration options, see Retry behavior in the AWS SDKs.

How to opt in

Update to @aws-sdk/client-* version 3.1048.0 or later, then set the environment variable:

export AWS_NEW_RETRIES_2026=true

This value is only read from process.env once at startup. Updating process.env.AWS_NEW_RETRIES_2026 while the application is running will have no effect if the SDK has been loaded.

How to revert

During the opt-in period, remove the environment variable:

unset AWS_NEW_RETRIES_2026

After the default rollout (no sooner than November 2026), the AWS_NEW_RETRIES_2026 flag will be removed. A full revert to the previous behavior is not available because this SDK does not support legacy retry mode. You can override some individual settings:

Setting Can revert? How
Max attempts Yes Set AWS_MAX_ATTEMPTS or configure in code.
Base backoff delay Yes Configure in code
Per-error-type backoff split No Not configurable.
Retry quota token costs No Not configurable.
Long-polling backoff on depleted quota No Not configurable.
import { DynamoDBClient } from "@aws-sdk/client-dynamodb";
import { StandardRetryStrategy } from "@aws-sdk/config/retryStrategy";

const retryStrategy = new StandardRetryStrategy({
  maxAttempts: 3,
  baseDelay: 100
});

const client = new DynamoDBClient({
  retryStrategy,
});

If full revert is a concern for your use case, please let us know in this issue.

Where you might notice a difference

For most workloads, the change is invisible or strictly better. Transient errors recover faster because the base delay is significantly shorter.

  • Retry quota activates sooner for transient errors. Each transient retry costs 14 tokens (previously 5 for most errors). During sustained transient failures (such as 500s and connection resets), the retry quota triggers at a lower failure rate than the previous version of standard mode. Throttling retries cost 5 tokens.
  • Long-polling operations now back off when the retry quota is depleted. Operations like SQS.ReceiveMessage apply a backoff delay before returning an error, even when retries are blocked. Without this, polling loops tighten during outages, spiking client CPU usage and generating additional load that can delay recovery. For details, see long-polling operations.

Feedback

If you encounter unexpected behavior or have questions, comment on this issue. Your feedback during the opt-in period directly shapes when and how we make this the default.

Metadata

Metadata

Assignees

No one assigned

    Labels

    announcementThis is an announcement issue

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions