v2.14.0
nats-io/nats-serverv2.14.0Apr 30, 2026by github-actions[bot]
AI Summary
A major feature release introducing significant JetStream enhancements including fast batch publishing, repeating/cron-based message schedules, and domain-aware ack/flow control. It also introduces feature flags and skips version 2.13.
Key Highlights
- Fast-ingest batch publishing for high-speed message ingestion
- Repeating & cron-based message schedules using `@every` or crontab syntax
- Scheduled subject sampling and rollup capabilities
- Consumer reset API to reset state without deletion
- Domain-aware ack and flow control subjects (disabled by default)
New Features
- Fast-ingest batch publishing
- Repeating & cron-based message schedules
- Scheduled subject sampling and rollups
- Consumer reset API
- Domain-aware ack and flow control subjects
- Feature flags in server configuration
- Asynchronous stream state snapshots
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.2 ### Added General - Feature flags in the server configuration (#7866) - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-53.md JetStream - Fast-ingest batch publishing (#7778, #7892, #7894, #7945) - Allows high-speed publishing of message batches into the server when using a supported client - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-50.md#fast-ingest-batch-publishing - Repeating & cron-based message schedules (#7504, #7687, #7688) - The `Nats-Schedule` header can now be configured on a repeating basis, i.e. `@every 5m`, `@hourly` or using crontab-like syntax - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-51.md - Scheduled subject sampling (#7506) - The `Nats-Schedule-Source` header allows sampling the contents of the last message in the stream for a given subject, allowing sampling of values at a different rate to the original publisher - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-51.md#subject-sampling - Scheduled subject rollups (#7559) - The `Nats-Schedule-Rollup` header allows initiating a rollup of the `Nats-Schedule-Target` subject on a scheduled basis - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-51.md - Consumer reset API (#7489) - It is now possible to reset a consumer back to an earlier sequence number using the `$JS.API.CONSUMER.RESET.stream.consumer` API without deleting and recreating it - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-60.md#consumer-delivery-state-reset-api - Domain-aware ack and flow control subjects (#7860) - This is disabled by default and can be enabled with the `js_ack_fc_v2` feature flag, this will be enabled by default in v2.15 - In an environment where ACLs are used to control ack or flow control subjects, updates will be required to match the new `$JS.ACK.domain.acchash.stream.consumer.>` and `$JS.FC.domain.acchash.stream.consumer.>` subject formats - Asynchronous stream state snapshots for replicated streams (#7876) - Allows stream state snapshots to be taken and written without pausing stream processing, improving tail latencies - This is particularly impactful in cases where the stream has a large number of interior deletes - Ability to disable message deduplication when sourcing (#7651) Leafnodes - Leafnode remote configurations can now be added and removed at runtime by reloading the configuration (#7937) - New `ignore_discovered_servers` option for leafnode remotes to allow ignoring any leafnode URLs sent by the hub (#8067) ### Changed General - The `traceparent` header is no longer modified by the message tracing (#7755) - The sentinel `Nats-Trace-Dest: trace disabled` header value disables all server tracing-related functionality JetStream - Consumers now generate a `404 No Messages` response when using `no_wait` but without setting an expiry when there are no pending messages in the stream (#7466) - Invalid or divergent consumer state is reset to match the stream state on startup, i.e. after unclean shutdowns (#7692) - Account info, stream info, stream list, consumer info and consumer list API requests are now queued separately, deprioritising them relative to create-update-delete API operations (#7898) MQTT - Retained messages can no longer contain the ASCII DEL character (0x7F) in the subject (#8071) ### Improved JetStream - Sourcing and mirroring from interest and workqueue streams is now supported (#7613) - When sourcing or mirroring from an interest or workqueue stream, the server automatically upgrades to a durable consumer with `AckFlowControl` policy and uses consumer reset where necessary - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-60.md - End-of-batch commit support for atomic batch publishing (#7403) - Batches can now be committed after already having sent the last message with `Nats-Batch-Commit: eob`, which indicates the batch is to be committed, but this last message is purely used to commit and doesn't get persisted - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-50.md - Rollups are now allowed if the stream has reached the `discard_new_per_subject` limit (#7974) - Raft nodes will step down if overrun (#7853) ### Fixed JetStream - Raft nodes will no longer start if the snapshot is missing or corrupt, or if the snapshot doesn't align with the remaining log on disk, avoiding potential data loss (#7566, #7580, #7620) - Filestore operations now handle read and write errors from the filesystem more thoroughly (#7788) - Filestore recovers from partial purge after hard kill (#7676) - Consistent Raft group rename when moving to or off R1 (#7802) ### Complete Changes https://github.com/nats-io/nats-server/compare/v2.12.0...v2.14.0