Production-grade Axios retry library for TypeScript and JavaScript β with concurrency control, request prioritization, automatic token refresh, response caching, circuit breaker, and composable plugins.
π Full Documentation Β· GitHub Β· npm Β· Changelog
axios-retryer is a drop-in Axios retry manager for Node.js, React, and any TypeScript or JavaScript project. It solves the hard parts that ad hoc retry interceptors get wrong: concurrent token refresh without duplicate calls, ordered request queues under backpressure, circuit breaking on unstable upstreams, response caching, and pluggable observability β all with zero magic and full type safety.
Key capabilities:
| Feature | Description |
|---|---|
| π Intelligent retries | Automatic or manual retry modes, exponential / linear / static backoff, fully custom strategies |
| π¦ Priority queue | CRITICAL β LOW priorities, binary-heap scheduling, configurable concurrency cap |
| π Token refresh | Queues concurrent 401s, refreshes once, replays all requests with the new token |
| π‘οΈ Circuit breaker | Trips on N failures, fast-fails during recovery window, sliding-window analysis |
| πΎ Response caching | TTR-based in-memory cache, exact / prefix / regex invalidation, swappable storage adapters |
| π Metrics & events | Live retry counters, timer health, rich lifecycle event hooks |
| π³ Tree-shakeable plugins | Each plugin is a separate entry point β unused code is never bundled |
Peer dependency: axios >= 1.7.4
npm install axios-retryer
# yarn add axios-retryer
# pnpm add axios-retryerimport { createRetryer } from 'axios-retryer';
import { createTokenRefreshPlugin } from 'axios-retryer/plugins/TokenRefreshPlugin';
import { createCircuitBreaker } from 'axios-retryer/plugins/CircuitBreakerPlugin';
// Chain .use() on one expression so TypeScript merges each plugin's event types
const retryer = createRetryer({
retries: 3,
maxConcurrentRequests: 10,
})
.use(
createTokenRefreshPlugin(async (axios) => {
const { data } = await axios.post('/auth/refresh');
return { token: data.accessToken };
}),
)
.use(createCircuitBreaker({ failureThreshold: 5, openTimeout: 30_000 }));
// Drop-in replacement for your existing axios instance
const { data } = await retryer.axiosInstance.get('/api/users');Try it: Interactive sandbox (browser, mocked HTTP)
Import only what your application needs. Each plugin is independently tree-shakeable:
| Plugin | Import path | Purpose |
|---|---|---|
TokenRefreshPlugin |
axios-retryer/plugins/TokenRefreshPlugin |
Auth token refresh on 401; optional per-request opt-out |
CircuitBreakerPlugin |
axios-retryer/plugins/CircuitBreakerPlugin |
Fail-fast on repeated upstream failures |
CachingPlugin |
axios-retryer/plugins/CachingPlugin |
In-memory response cache with TTR invalidation |
ManualRetryPlugin |
axios-retryer/plugins/ManualRetryPlugin |
Store failed requests and replay on reconnect |
MetricsPlugin |
axios-retryer/plugins/MetricsPlugin |
Live retry counters and lifecycle events |
DebugSanitizationPlugin |
axios-retryer/plugins/DebugSanitizationPlugin |
Redact secrets from debug logs |
Retry-Afterheader support. When a response carries aRetry-Afterheader (numeric seconds or HTTP-date), it overrides the computed backoff delay for that retry. The honored value is capped at 5 minutes to prevent runaway waits.- Backoff cap. All backoff strategies (
static,linear,exponential) are capped at 60 seconds by default. Override via themaxBackoffDelayMsoption onRetryManagerOptions.
| Feature | axios-retryer | axios-retry | retry-axios |
|---|---|---|---|
| Automatic & Manual retry modes | β | β | β |
| Concurrency control | β | β | β |
| Priority queue | β | β | β |
| Token refresh (401 handling) | β | β | β |
| Circuit breaker | β | β | β |
| Response caching | β | β | β |
| Request cancellation | β | β | β |
| Plugin architecture | β | β | β |
| TypeScript-first | β | ||
| Tree-shakeable | β | β | β |
Benchmarks from the current release (standard profile, local suite):
- Healthy-path throughput (core scenario):
2,150 req/sec - Peak burst throughput (stress scenario):
4,285 req/sec - Cache hit rate:
100%(integration + hot-read scenarios) - Test suite:
117suites Β·1414tests (pnpm test:run); usepnpm test:quickfor a faster local run (~75 suites, skips integration, performance, and package-contract)
See BENCHMARK_RESULTS.md for full methodology and raw numbers.
Full API reference, all plugin options, guides, and migration notes:
https://samplexbro.github.io/axios-retryer
- Installation guide
- Configuration reference
- Plugins overview
- Production setup guide
- Offline support guide
- Migration: v1.x β v2.0
- API reference
- SECURITY.md Β· KNOWN_ISSUES.md Β· BENCHMARK_RESULTS.md
Bug reports, feature ideas, and pull requests are welcome. See CONTRIBUTING.md for guidelines.
MIT β see LICENSE.
Made with β€οΈ by sampleX (Serhii Zhabskyi)