Releases: redis/node-redis
Release list
redis@6.1.0
What's Changed
- feat: add key prefixing (fixes #2982) by @gajus in #3312
- feat(cluster): add getNodeClientForKey for WATCH/MULTI/EXEC by @nkaradzhov in #3315
New Contributors
Full Changelog: https://github.com/redis/node-redis/compare/redis@6.0.1...redis@6.1.0
redis@6.0.1
What's Changed
- ci: bump GitHub Actions to Node 24-compatible versions by @nkaradzhov in #3298
- chore(tests): bump default docker test image to 8.8.0 by @nkaradzhov in #3297
- fix(client): align RedisClientOptions RESP default with RedisClientType by @aartisonigra in #3303
- test(client): fix three flaky tests around socket/connect lifecycle by @nkaradzhov in #3299
- fix: embed sources in emitted sourcemaps by @raashish1601 in #3274
- Sentinel scan iterator by @harshrai654 in #3141
- ci: replace brittle Codecov uploader with codecov-action by @nkaradzhov in #3314
- Fix/issue 3311 by @aartisonigra in #3313
- fix(sentinel): preserve seed nodes in sentinelRootNodes after topology update (#3237) by @aartisonigra in #3306
New Contributors
- @aartisonigra made their first contribution in #3303
- @harshrai654 made their first contribution in #3141
Full Changelog: https://github.com/redis/node-redis/compare/redis@6.0.0...redis@6.0.1
redis@6.0.0
Changes
This is the first major release of node-redis since 5.x. The headline change is RESP3 by default, alongside broader Redis 8.8 command coverage, pubsub/cluster reliability fixes, and a bumped minimum Node.js version.
Key changes
- RESP3 is the default protocol β opt back into RESP2 explicitly if you need the old wire format
- Node.js 20 is the new minimum supported runtime
- Redis 8.8 coverage β new array commands, INCREX / INCREXBYFLOAT, ZINTER/ZUNION COUNT aggregator, XNACK, CLIENT UNBLOCK
- Sentinel & cluster pubsub fixes for failover-moved connections and sharded topology recovery
- Stack modules exposed on pool type and the core client classes are now publicly re-exported
π₯ Breaking Changes
See the v5 β v6 migration guide for migration steps.
- RESP3 is now the default protocol (#3215)
- Node.js 20 is now the minimum supported version (#3293)
- New default values for
keepAliveInitialDelay(30s) andcommandTimeout(5s) (#3292)
π Security
- entraid: bump
@azure/msal-nodeto 5.x to drop vulnerable transitiveuuid(CVE-2026-41907) (#3269)
π New Features
- Add
CLIENT UNBLOCKcommand (#3266) - Add
XNACKcommand with options (#3238) - Add Redis 8.8 array commands (#3285)
- Add
INCREXandINCREXBYFLOATcommands (#3288) - Add
COUNTaggregator toZINTER/ZINTERSTORE/ZUNION/ZUNIONSTORE(#3243) - Add
FPHAoption toJSON.SET(#3235) - time-series: add multi-aggregation range APIs (#3249)
- Add
duplicate()method toRedisSentinel(#3212) - Parse
unix://URLs inparseURL(#3271) - Expose
RedisClient,RedisCluster,RedisSentineland pool classes (#3251) - Expose stack modules on the pool type (#3267)
π Bug Fixes
- sentinel: use mapped address when failover moves pubsub connections (#3190)
- cluster: recover sharded pubsub topology after node reconnects (#3223)
- client: swallow synchronous EPIPE from writeAfterFIN (#3283)
- search: allow
LOAD *inFT.AGGREGATE(#3241) - otel: record client connection errors (#3259)
- entraid: bump
@azure/msal-nodeto 5.x to drop vulnerableuuidtransitive (#3269) - Fix wrapper command options handling (#3295)
- Non-functional typo fixes (#3244)
π Documentation
- Document Node.js 20 minimum version in migration guide (#3293)
- Numerous typo and grammar fixes across docs and comments (#3230, #3231, #3232, #3239, #3240, #3242, #3245, #3246, #3
- Inline JSDoc improvements (#3250)
- Compact receiver hovers via public type aliases (#3248)
π§° Maintenance
- Add changed-file lint gate (#3257)
- CI: lint changed files against PR merge base (#3265)
- CI: build monorepo before documentation generation (#3233)
- Add
min-release-agecooldown to.npmrc(#3286) - Allow empty object types in lint config (#3263)
- Add hash field subkey notifications test (#3264)
- Restore generic-transformers spec on current APIs (#3214)
- Bump default docker test image through 8.8 milestones to 8.8-rc1 (#3234, #3236, #3260, #3284)
- chore(deps): bump
basic-ftp(#3225),tmpand@inquirer/editor(#3294)
π₯ New Contributors
- @Rohan5commit made their first contribution in #3232
- @opensourcezeal made their first contribution in #3244
- @aarond-sp made their first contribution in #3251
- @claygeo made their first contribution in #3212
- @raashish1601 made their first contribution in #3267
We'd like to thank all the contributors who worked on this release!
@Rohan5commit, @opensourcezeal, @aarond-sp, @claygeo, @raashish1601, @watersRand, @PavelPashov, @elimelt, @nkaradzhov
Full Changelog: https://github.com/redis/node-redis/compare/redis@5.12.1...redis@6.0.0
redis@5.12.0
β¨ What's Changed
π Features
- feat: expose
sendCommandonmultifor all clients by @nkaradzhov in #3181 - feat(sentinel): add
sSubscribe/sUnsubscribemethods to Sentinel client by @nkaradzhov in #3178
π Fixes
- fix(search): correct
INDEXMISSINGplacement by @nkaradzhov in #3179 - Pool fixes by @nkaradzhov in #3182
- fix(search): use
@redis/clientdist imports inCREATEcommand by @PavelPashov in #3187 - fix(sentinel): preserve root seeds for outage recovery by @nkaradzhov in #3188
- fix: fallthrough bug in
transformDoubleReplyby @rhymincymon in #3213
π Observability (OTEL + Diagnostics)
Node Redis now ships with first-class observability via OpenTelemetry metrics and Node.js diagnostics_channel. Initialize OpenTelemetry before creating clients (OpenTelemetry.init({ metrics: { enabled: true } })) and you can plug Redis client telemetry into your existing OTel SDK/exporter pipeline.
This enables visibility into command latency, connection lifecycle, resiliency/errors, Pub/Sub traffic, streaming behavior, and client-side caching activity. On top of metrics, diagnostics channels provide a more abstract, higher-level way to track runtime behavior through low-overhead event streams (commands, batches, connection events, maintenance notifications, pub/sub, cache, and pool wait timing), so APM tools or custom subscribers can observe the system without changing application code.
- add OpenTelemetry metrics instrumentation by @PavelPashov in #3110
- feat: implement diagnostic channels for observability by @logaretm in #3195
π§ͺ Tests & CI
- test(scho oss): add smigrating checks for new connections by @nkaradzhov in #3186
- Add self-report metrics step to CI workflow by @bobymicroby in #3199
- Add run tests action by @dariaguy in #3221
π Docs
- improve sentinel docs by @cutiepoka in #3189
- docs: clarify DUMP/RESTORE binary payload usage by @nkaradzhov in #3201
- fix(docs): configure typedoc entry points for monorepo by @nkaradzhov in #3220
π New Contributors
- @cutiepoka made their first contribution in #3189
- @rhymincymon made their first contribution in #3213
- @logaretm made their first contribution in #3195
- @dariaguy made their first contribution in #3221
Full Changelog: https://github.com/redis/node-redis/compare/redis@5.11.0...redis@5.12.0
redis@5.11.0
5.11.0 Release Changelog
π Highlights
Smart Client Handoffs for Enterprise OSS API (Pending a Redis Enterprise version release)
This release introduces support for Redis Enterprise Cluster maintenance notifications via SMIGRATING/SMIGRATED push notifications. The client now automatically handles slot migrations by:
- Relaxing timeouts during migration (SMIGRATING) to prevent false failures
- Automatic slot handoff when completed (SMIGRATED)
- Enabling seamless operations during Redis Enterprise maintenance windows
Redis 8.6 Support
This release adds support for Redis 8.6 features:
- XADD idempotency options (
IDMPAUTO,IDMP, andpolicy) - Prevent duplicate entries by tracking producer and message IDs - XCFGSET command - Configure per-stream idempotency parameters (
IDMP_DURATION,IDMP_MAXSIZE) - XINFO STREAM enhancements - New idempotency tracking fields (
idmp-duration,idmp-maxsize,pids-tracked,iids-tracked,iids-added,iids-duplicates) - HOTKEYS command family (
START,STOP,GET,RESET) - Track and identify hot keys by CPU time and network bytes
π New Features
- feat(cluster): smart client handoffs OSS (hitless upgrades) by @nkaradzhov in #3142
- feat(client): add VRANGE command for vector sets by @nkaradzhov in #3158
- feat(client): add HOTKEYS command for hotkey tracking by @nkaradzhov in #3164
- feat(client): add XCFGSET command for stream idempotency configuration by @nkaradzhov in #3163
- feat(client): add XADD idempotency options (IDMPAUTO, IDMP) and policy by @nkaradzhov in #3161
- feat(client): add idempotency fields to XINFO STREAM response by @nkaradzhov in #3162
- feat(time-series): add NaN support and new aggregation types by @PavelPashov in #3167
- feat(client): add local digest helper for CAS/CAD operations by @PavelPashov in #3154
- feat(search): support indexing same field multiple times with different configurations by @nkaradzhov in #3157
- feat(sentinel): implement nodeAddressMap for sentinel by @elimelt in #3145
- feat(test-utils): add testAllAuto method for automatic cluster test generation by @bobymicroby in #3148
- Add socket.servname property to createClient configuration by @itrich in #3165
π Bug Fixes
- fix(client): Support IPv6 literals in URL by @TimWolla in #3176
- fix(client): return Promise consistently in cluster functions by @orgads in #3159
- fix(search): improve FT.HYBRID command implementation by @PavelPashov in #3171
- fix(pool): cannot read private member by @Eomm in #3151
- fix: unwrap constructors to primitives in type mapping by @watersRand in #3174
π Documentation & Testing
- docs: correct CAS/CAD parameter name and update example by @PavelPashov in #3156
- docs(token-manager): Correct documentation for jitterPercentage by @dubek in #3153
- tests: fix flaky timeout assertion in maintenance notification test by @kiryazovi-redis in #3143
- tests: add TLS connection tests by @PavelPashov in #3166
- tests: add mocha multi-reporters and junit reporter support by @bobymicroby in #3138
- refactor(test-utils): use separate redis-tag and redis-version CLI arguments by @nkaradzhov in #3169
- Hotkeys Adjustments by @nkaradzhov in #3173
New Contributors
- @kiryazovi-redis made their first contribution in #3143
- @elimelt made their first contribution in #3145
- @dubek made their first contribution in #3153
- @itrich made their first contribution in #3165
- @TimWolla made their first contribution in #3176
Full Changelog: https://github.com/redis/node-redis/compare/redis@5.10.0...redis@5.11.0
redis@5.10.0
Changes
π New Features
- Add MSETEX command support (#3116)
- Add CLAIM attribute to XREADGROUP command (#3122)
- Add index/query doc page examples (#3109)
π§ͺ Experimental Features
- Add support for CAS/CAD, DELEX, DIGEST commands (#3123)
- Add support for HYBRID search (#3119 #3132)
- Add latency histogram (#3099)
π Bug Fixes
- Fix dist/package.json version bumping in release process (#3125)
- Prevent false-ready state when socket errors during handshake (#3128)
- Don't parse number properties in XREADGROUP (#3133)
π§° Maintenance
- Apply proxy improvements (#3121)
- Mark 8.4 features as experimental (#3134)
- Extract supported Redis versions into SUPPORTED_REDIS_VERSIONS.md (#3131)
- Bump test container image to 8.4.0 (#3139)
Contributors
We'd like to thank all the contributors who worked on this release!
- @andy-stark-redis
- @htemelski-redis
- @nkaradzhov
- @NaughtySora
- @PavelPashov
Full Changelog: https://github.com/redis/node-redis/compare/redis@5.9.0...redis@5.10.0
redis@5.9.0
What's Changed
- fix(ts): use all commands in cluster type by @nkaradzhov in #3065
- Main by @watersRand in #3047
- docs: fix scanIterator example in readme by @nkaradzhov in #3072
- Hitless upgrades by @nkaradzhov in #3021
- fix(cluster): prevent infinite loop by @nkaradzhov in #3078
- docs: update RedisJSON documentation link by @Caiuriuller in #3079
- refactor(test): improve test scenario reliability and maintainability by @PavelPashov in #3077
- Improve stale issue management workflow by @elena-kolevska in #3082
- Maint fixes by @nkaradzhov in #3086
- feat: add default modules to createClientPool by @killagu in #3088
- DOC-5743 BITOP examples by @andy-stark-redis in #3087
- feat: add typed/untyped mode support for multi-commands by @PavelPashov in #3084
- Fix: resolve doubly linked list push issue by @ntvviktor in #3085
- Update default Redis version to 8.4-M01-pre in tests by @bobymicroby in #3092
- Adjust scenario tests according to latest maint naming changes by @nkaradzhov in #3090
- test(maint): touch up wrong assertions by @nkaradzhov in #3096
- fix(pool): make createClientPool use provided options by @nkaradzhov in #3095
- Emit invalidate events from client by @sastcsgh in #3076
- Fix client kill enums by @watersRand in #3074
- cluster/node events (#1855) by @NaughtySora in #3083
- fix(ssubscribe): properly resubscribe in case of shard failover by @nkaradzhov in #3098
- fix: multi-byte character corruption when converting Buffers to strings by @brb3 in #3100
- fix(cmd): PUBSUB_NUMSUB return count as number by @nkaradzhov in #3103
- Extend proxy by @nkaradzhov in #3105
New Contributors
- @watersRand made their first contribution in #3047
- @Caiuriuller made their first contribution in #3079
- @elena-kolevska made their first contribution in #3082
- @killagu made their first contribution in #3088
- @ntvviktor made their first contribution in #3085
- @sastcsgh made their first contribution in #3076
- @NaughtySora made their first contribution in #3083
- @brb3 made their first contribution in #3100
Full Changelog: https://github.com/redis/node-redis/compare/redis@5.8.3...redis@5.9.0
redis@5.9.0-beta.3
What's Changed
- Fix: resolve doubly linked list push issue by @ntvviktor in #3085
- Update default Redis version to 8.4-M01-pre in tests by @bobymicroby in #3092
- Adjust scenario tests according to latest maint naming changes by @nkaradzhov in #3090
- test(maint): touch up wrong assertions by @nkaradzhov in #3096
- fix(pool): make createClientPool use provided options by @nkaradzhov in #3095
- Emit invalidate events from client by @sastcsgh in #3076
- Fix client kill enums by @watersRand in #3074
- cluster/node events (#1855) by @NaughtySora in #3083
- fix(ssubscribe): properly resubscribe in case of shard failover by @nkaradzhov in #3098
- fix: multi-byte character corruption when converting Buffers to strings by @brb3 in #3100
- fix(cmd): PUBSUB_NUMSUB return count as number by @nkaradzhov in #3103
- Extend proxy by @nkaradzhov in #3105
New Contributors
- @ntvviktor made their first contribution in #3085
- @sastcsgh made their first contribution in #3076
- @NaughtySora made their first contribution in #3083
- @brb3 made their first contribution in #3100
Full Changelog: https://github.com/redis/node-redis/compare/redis@5.9.0-beta.2...redis@5.9.0-beta.3
redis@5.8.3
What's Changed
- fix: add typed/untyped mode support for multi-commands by @PavelPashov in #3084
Full Changelog: https://github.com/redis/node-redis/compare/redis@5.8.2...redis@5.8.3
redis@5.9.0-beta.2
What's Changed
- feat: add default modules to createClientPool by @killagu in #3088
- DOC-5743 BITOP examples by @andy-stark-redis in #3087
- feat: add typed/untyped mode support for multi-commands by @PavelPashov in #3084
New Contributors
Full Changelog: https://github.com/redis/node-redis/compare/redis@5.9.0-beta.1...redis@5.9.0-beta.2