v2.14.6

nats-io/nats-serverv2.14.6Aug 27, 2026by github-actions[bot]

AI Summary

This release focuses on performance optimizations for JetStream operations and general client handling, alongside various bug fixes to ensure data integrity and correct filestore behavior. It requires Go 1.26.7 and skips version 2.13.x.

Key Highlights

  • Stream reads are now isolated with a separate lock to improve performance of direct gets.
  • Filestore block sync and inline compaction fixes prevent data corruption and incorrect file handling.
  • Fixed data races in batch ID and consumer status access to ensure thread safety.
  • Client buffer recycling and deadline handling have been optimized for better resource management.

New Features

  • Removal from service import response maps is now constant-time.
  • Client write buffers are freed correctly when exceeding rational size.
  • Stream reads are isolated with a separate lock for improved performance.
  • Reduced heap escapes in subject tree matching.

Full Release Notes

## Changelog

Refer to the [2.14 Upgrade Guide](https://docs.nats.io/release-notes/whats_new/whats_new_214) for backwards compatibility notes with 2.12.x. Please note that the 2.13.x version was skipped.

### Go Version

- 1.26.7

### Improved

General

- Removal from service import response maps is now constant-time (#8463)
- The client code no longer resets the deadline more times than necessary when flushing client buffers (#8513)
- The client write buffers are now freed correctly when the working buffer exceeds a rational size (#8515)

JetStream

- Stream reads are now isolated with a separate lock, which improves the performance of direct gets (#8486)
- Improved the performance of looking up matching sequence numbers for multi-subject gets (#8486)
- Reduced the number of heap escapes in subject tree matching (#8526)

### Fixed

General

- WebSocket client buffers are recycled more aggressively when reallocating into larger buffers (#8518)
- Fixed missing routes after a reconnect when gossiped URLs were rejected (#8527)

JetStream

- The filestore block sync no longer incorrectly skips blocks that were compacted during the same pass (#8456)
- The filestore block sync now performs a single directory sync upon completion rather than once per compacted block (#8461)
- The filestore I/O semaphore now covers block sync operations (#8462)
- Stream config updates with replicas greater than 1 are now rejected on non-clustered systems (#8464)
- Fixed some issues that could prevent stream snapshots from taking place on a clean shutdown (#8465)
- The filestore inline compaction no longer ignores `sync_interval: always` (#8475)
- The stream created time is now preserved after recovery on a standalone server (#8471, contributed by @Green7)
- Fixed a data race that could apply when accessing the batch ID (#8369)
- Fixed a data race when reading the consumer direct or sourcing status (#8478, contributed by @nberlee)
- Prevent the consumer direct or sourcing status from being changed with a consumer update (#8478, contributed by @nberlee)
- Fixed an issue where the server could fail to distinguish consumer tiers when enforcing limits (#8484)
- Fixed a flow control problem where replicated consumers could get stuck after a leader change (#8488)
- Fixed various consumer create issues that could destroy the state of an existing consumer with the same name (#8491)
- Internal message delete proposals are no longer counted in the JS API statistics (#8502)
- Dynamic filestore reservations no longer incorrectly shrink based on used storage after restarts (#8503)
- Fixed a signalling issue that could stall Raft catchups (#8501)
- The pending append entry cache in-memory is now bounded by size as well as entry count (#8501)
- Fixed an issue where a stale snapshot from a previous Raft group could be replayed if the group name was unchanged (#8501)
- Consumer delivery counts will no longer underflow below zero (#8512, contributed by @no-hup)
- `AckFlowControl` consumers from a work queue stream will no longer incorrectly ack messages outside of the consumer filter (#8431, #8528)

### Complete Changes
 
https://github.com/nats-io/nats-server/compare/v2.14.5...v2.14.6