NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #1853 most downloaded on npm
A robust, performance-focused and full-featured Redis client for Node.js.
Last release 2 months ago
31 Jul 2026
Ships fairly regularly
a new release about every 3 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
12 years old
251 releases · first in 2015
clear stale socket timeout on reconnect
protocol: 2 to retain the v5 wire protocol.One column per quarter.
clear stale socket timeout on reconnect
protocol: 2 to retain the v5 wire protocol.cluster: reconnect to nodes that restart without slot changes
TracingChannel support (#2089) (4760e0a)replace deprecated url.parse() with WHATWG URL API ( #2081 ) ( 0021a45 ), closes redis/ioredis#1747
TracingChannel support (#2089) (4760e0a)cluster: lazily start sharded subscribers
add hash field expiration commands and tests
autopipelining to route writes to masters with scaleReads
cluster: Cluster reconnect sharded subscribers
make client-side blocking timeouts opt-in
remove unnecessary case-sensitivity when working with commands
ssubscribe: re-subscribe sharded pubsub channels individually
ssubscribe: re-subscribe sharded pubsub channels individually on ready
adding debug log on cluster.slots initial connection error
Sharded pub/sub support via dedicated subscribers
Connection instability when using socketTimeout parameter (#1937) (ca5e940), closes #1919
## 5.4.1 (2024-04-17) ### Bug Fixes * remove console.log
when refreshSlotsCache is called concurrently, call the callback only when the refresh process is done
## 5.3.2 (2023-04-15) ### Bug Fixes * add types for known events
Fix commands not resend on reconnect in edge cases (#1720) (fe52ff1), closes #1718
remove extraneous TCP/IPC properties from RedisOptions TS type
The original way (import Redis from 'ioredis') will still be supported but will be deprecated in the next major version.
Named export to support ESM imports in Typescript (#1695) (cdded57)
With this change, users would be able to import Redis with import { Redis} from 'ioredis'. This makes it possible to import Redis in an ESM project. The original way (import Redis from 'ioredis') will still be supported but will be deprecated in the next major version.
passing in family parameter in URL in node 18
srandmember with count argument should return array of strings
always allow selecting a new node for cluster mode subscriptions when the current one fails
# 5.2.0 (2022-07-11) ### Features * add mode property to client
add command typings for Redis 7.0.2. Also fix a typing issue for hgetallBuffer.
Add back Pipeline#length (#1585) (63b2ee4), closes #1584
Expose ChainableCommander and other types
add named exports to keep compatible with @types/ioredis
allow option maxRetriesPerRequest to be null (#1553) (d62a808), closes #1550
improve typing compatibility with @types/ioredis
In the update of v5, we've made ioredis even more stable and developer-friendly while minimizing the number of breaking changes, so you can spend more time enjoying your life 😄.
Please refer to the guideline to upgrade your projects: 🚀 Upgrading from v4 to v5.
slotsRefreshInterval is disabled by default,
previously, the default value was 5000.allowUsernameInURI is removed and ioredis will always
use the username passed via URI.
Previously, the username part in new Redis("redis://username:authpassword@127.0.0.1:6380/4")
was ignored unless allowUsernameInURI is specified: new Redis("redis://username:authpassword@127.0.0.1:6380/4?allowUsernameInURI=true").
Now, if you don't want to send username to Redis, just leave the username part empty:
new Redis("redis://:authpassword@127.0.0.1:6380/4")Redis#serverInfo is removed. This field is never documented so
you very likely have never used it.exports.Promise = require('bluebird')) are kept but they don't take any effects. The native Promise will always be used.Redis can't be called as a function anymore as it's now a class.
Please change Redis() to new Redis(). Note that Redis() was already deprecated
in the previous version.slotsRefreshInterval is disabled by default,
previously, the default value was 5000.allowUsernameInURI is removed and ioredis will always
use the username passed via URI.
Previously, the username part in new Redis("redis://username:authpassword@127.0.0.1:6380/4")
was ignored unless allowUsernameInURI is specified: new Redis("redis://username:authpassword@127.0.0.1:6380/4?allowUsernameInURI=true").
Now, if you don't want to send username to Redis, just leave the username part empty:
new Redis("redis://:authpassword@127.0.0.1:6380/4")Redis#serverInfo is removed. This field is never documented so
you very likely have never used it.exports.Promise = require('bluebird')) are kept but they don't take any effects. The native Promise will always be used.Redis can't be called as a function anymore as it's now a class.
Please change Redis() to new Redis(). Note that Redis() was already deprecated
in the previous version.In the update of v5, we've made ioredis even more stable and developer-friendly while minimizing the number of breaking changes, so you can spend more…
In the update of v5, we've made ioredis even more stable and developer-friendly while minimizing the number of breaking changes, so you can spend more time enjoying your life 😄.
Please refer to the guideline to upgrade your projects: 🚀 Upgrading from v4 to v5.
slotsRefreshInterval is disabled by default,
previously, the default value was 5000.allowUsernameInURI is removed and ioredis will always
use the username passed via URI.
Previously, the username part in new Redis("redis://username:authpassword@127.0.0.1:6380/4")
was ignored unless allowUsernameInURI is specified: new Redis("redis://username:authpassword@127.0.0.1:6380/4?allowUsernameInURI=true").
Now, if you don't want to send username to Redis, just leave the username part empty:
new Redis("redis://:authpassword@127.0.0.1:6380/4")Redis#serverInfo is removed. This field is never documented so
you very likely have never used it.exports.Promise = require('bluebird')) are kept but they don't take any effects. The native Promise will always be used.Redis can't be called as a function anymore as it's now a class.
Please change Redis() to new Redis(). Note that Redis() was already deprecated
in the previous version.add missing declaration for callBuffer
pipeline fails when cluster is not ready (af60bb0), closes #1460
# 5.0.0-beta.2 (2022-03-16) ### Features * improve typings for smismember (487c3a0) * improve typings for xread
Please change Redis() to new Redis(). Note that Redis() was already deprecated in the previous version.
slotsRefreshInterval is disabled by default,
previously, the default value was 5000.allowUsernameInURI is removed and ioredis will always
use the username passed via URI.
Previously, the username part in new Redis("redis://username:authpassword@127.0.0.1:6380/4")
was ignored unless allowUsernameInURI is specified: new Redis("redis://username:authpassword@127.0.0.1:6380/4?allowUsernameInURI=true").
Now, if you don't want to send username to Redis, just leave the username part empty:
new Redis("redis://:authpassword@127.0.0.1:6380/4")Redis#serverInfo is removed. This field is never documented so
you very likely have never used it.exports.Promise = require('bluebird')) are kept but they don't take any effects. The native Promise will always be used.Redis can't be called as a function anymore as it's now a class.
Please change Redis() to new Redis(). Note that Redis() was already deprecated
in the previous version.cluster: refactor sharded pub/sub v4
Nothing published for this version
## 4.30.1 (2025-09-16) ### Bug Fixes * release: trigger release
added the option for disabling slots refresh, fixed concurrent calls to refreshSlotsCache
Adds support for Redis 7 commands
Reset loaded script hashes to force a reload of scripts after reconnect of redis
make sure timers is cleared on exit
fix exceptions on messages of client side cache
handle possible unhandled promise rejection with autopipelining+cluster (#1467) (6ad285a), closes #1466
tls: add TLS profiles for easier configuration
make export interface compatible with jest
cluster: lazyConnect with pipeline
handle malicious keys for hgetall (#1416) (7d73b9d), closes #1267
fixed autopipeline performances.
SENTINEL: actively failover detection under an option
Your coding agent can read these notes before it upgrades. Set up the MCP server →