v2.12.8
nats-io/nats-serverv2.12.8Apr 27, 2026by github-actions[bot]
AI Summary
A maintenance release fixing various JetStream and general server bugs, including Raft consistency, stream recovery issues, and JWT validation. It improves filestore operations and stream sourcing reliability.
Key Highlights
- Fixed Raft commit index reset on term mismatch
- Fixed stream recovery from partial purge after hard kill
- Fixed JWT claims crossing midnight validation
- Improved filestore scanning for starting sequences
- Fixed stream sourcing duplication after leafnode reconnection
Full Release Notes
## Changelog Refer to the [2.12 Upgrade Guide](https://docs.nats.io/release-notes/whats_new/whats_new_212) for backwards compatibility notes with 2.11.x. ### Go Version - 1.25.9 ### Dependencies - golang.org/x/crypto v0.50.0 (#8030) - golang.org/x/sys v0.43.0 (#8030) - github.com/nats-io/nats.go v1.51.0 (#8068) ### Improved JetStream - Refactored and simplified setting the pinned headers in consumers (#8032) - Scanning for the starting sequence for consumers is now an asynchronous operation which no longer pauses the metalayer (#8051) ### Fixed General - Reload logic on gateway `pinned_certs` configuration has been corrected - Repeated `CONNECT` messages on a connection now clear subscriptions - JWT claims with validity times that cross midnight are now validated correctly - The `/connz` monitoring endpoint no longer discloses bearer JWTs - Monitoring redaction of route and cluster URL secrets when passed in as command line arguments - Fixed a panic that could occur when negotiating compression on leafnode connections - Max control line enforcement for non-clients has been fixed - Fixed a bug where setting message headers could mutate the input message buffers Leafnodes - Solicited leafnode connections now send a connect advisory, which was previously missing (#8015) JetStream - Message roll-ups are now applied on interest-based streams where there is no interest over the subjects (#8019) - Stream leaders can now catch up from incoming snapshots, correcting an edge case when scaling up (#8021) - Fixed a Raft commit index reset when terms mismatch (#8023, contributed by @thecitymouse) - Purging via scheduled `Nats-Schedule-Next: purge` now errors when message scheduling is not enabled (#8035) - Recovering with a legacy zero index Raft snapshot will no longer panic (#8039) - Messages with a deduplication `Nats-Msg-Id` header are no longer incorrectly deduplicated in mirrors (#8043) - Fixed a panic when scaling after a stream update when the assignment is not fully populated yet on recovery (#8049) - Stream info and consumer info requests will no longer return not found when the assignments are in-flight (#8054) - Streams and consumers now correctly reject path separators in asset names - Fixed a concurrent map write panic when calling the consumer pause endpoint (#8061) - The cluster stream sequence is no longer incorrectly advanced when a proposal fails, avoiding a `last sequence mismatch` error (#8057) - Stream clustered consistency checks are now performed on transformed subject where applicable instead of the publish subject (#8022) - Stream sourcing should no longer duplicate messages after a leafnode reconnection or after a proposal error (#8069) ### Complete Changes https://github.com/nats-io/nats-server/compare/v2.12.7...v2.12.8