v2.15.0
nats-io/nats-serverv2.15.0Sep 17, 2026by github-actions[bot]
Upgrading?
AI Summary
This release introduces a new desired state metalayer for JetStream to improve the safety of asset moves and scales, along with new endpoints for cancelling moves and evacuating streams. It also includes a new backup format for stream snapshots and updates the Go runtime to version 1.27.1.
Key Highlights
- New desired state metalayer for safer stream scaling and moves.
- New `$JS.API.STREAM.CANCEL_MOVE` and `$JS.API.SERVER.EVACUATE` endpoints.
- Stream backup and restore v2 format.
- Go version updated to 1.27.1.
New Features
- Desired state metalayer reconciliation engine for streams and consumers.
- New `$JS.API.STREAM.CANCEL_MOVE` endpoint to cancel in-flight moves.
- New `$JS.API.SERVER.EVACUATE` and `$JS.API.STREAM.PEER.EVACUATE.*` endpoints for safe maintenance.
- New `$JS.API.META.RESCUE` endpoint for disaster recovery.
- Stream backup and restore v2 with per-message reading format.
- Detection of source stream recreation to restart sourcing.
- Stream source indexing to improve performance during restarts.
- Domain-prefixed JS API support for system accounts.
- MQTT QOS 1 pipelining for increased JetStream throughput.
Full Release Notes
## Changelog Refer to the [2.15 Upgrade Guide](https://docs.nats.io/release-notes/upgrade-to-2.15) for backwards compatibility notes with 2.14.x. This release also contains all changes up to and including [v2.14.7](https://github.com/nats-io/nats-server/releases/tag/v2.14.7). ### Go Version - 1.27.1 (#8551) ### Added JetStream - Desired state metalayer (#8432, #8437, #8439, #8443, #8452, #8460, #8476, #8576, #8598, #8602, #8603) - A new desired state reconciliation engine for streams and consumers considerably improves the safety and reliability of asset moves and scales - Updating the placement or replication factor midway through an existing scale/move operation, cancelling an in-flight scale/move, or peer-removing is now much safer - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-62.md - Cancel stream move endpoint (#8476) - An in-flight scale/move operation on a stream can be cancelled and the asset returned to its original placement using the new `$JS.API.STREAM.CANCEL_MOVE` endpoint - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-62.md - Evacuate endpoints (#8443) - The new `$JS.API.SERVER.EVACUATE` endpoint can safely evacuate streams, and any consumers on those streams, from a node - The new `$JS.API.STREAM.PEER.EVACUATE.*` endpoint can safely evacuate a peer, and any consumers on that peer, from a stream - These operations combined allow for maintenance operations with full transfer of data and state without having to peer-remove first - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-62.md - Metalayer rescue for disaster recovery (#8408) - The new `$JS.API.META.RESCUE` endpoint can temporarily lower the quorum-needed for the metalayer, in order to facilitate the recovery of a system where nodes have been permanently lost and the metalayer cannot reach quorum - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-61.md - Stream backup and restore v2 (#7882, #8584, #8591, #8604) - A new backup format for stream snapshots which reads out per-message rather than per-block - The new backup format also now correctly includes non-replicated consumers on follower nodes - ADR: https://github.com/nats-io/nats-architecture-and-design/blob/main/adr/ADR-63.md - Detect source stream recreation (#8384) - The server now detects a source stream being recreated, restarting the sourcing back from the beginning, ensuring new messages are sourced - Stream source indexing (#8282, #8516, #8283) - Restarts and leader changes previously required expensive backward scans through the stream to find the last sourced indices. These are now persisted in an index for instant lookup. - Domain-prefixed JS API in system account (#8429) - When a system account is bridged between the hub and a leaf node, the domain-prefixed JS API can now be used to operate on the leaf node while directly connected to the hub ### Changed JetStream - Streams now have a default limit of 1000 consumers, unless `max_consumers` is specified in the stream config or account limits (#8337, #8566) - Applications planning to use a large number of consumers on a stream should configure `max_consumers` in the stream config or account limits to an appropriately high number - The server-wide default of 1000 can be overridden by setting `default_max_consumers` in the JetStream limits, or can be disabled by setting to `-1` - This limit does not affect existing consumers and will not result in consumer deletions, only the creation of new consumers is prevented - Sync changes for replicated streams (#8447) - When the `sync_interval` is set to `always`, replicated streams now sync their WAL entries but no longer sync upper stream layer writes - The synced log allows the stream to recover safely, but removing unnecessary syncs from the upper stream layer dramatically improves performance - Non-replicated R1 streams are not affected by this change and will continue to sync at the stream layer as normal - The `js_raft_delete_range` feature is now enabled by default (#8520) Leafnodes - The `no_advertise` option no longer includes the hub's own listener address (#8451, contributed by @freakes) ### Improved JetStream - Shorter wait for durable source/mirror consumer resets (#8323) - When using durable consumers for sourcing or mirroring, the heartbeats now short-circuit the recreation backoff - An atomic batch for a single-replica stream run with `sync: always` now syncs messages as a group (#8539, contributed by @RainyPixel) - JetStream source/mirror reply subjects can now opt-in to be domain/account aware (#8586, contributed by @ayushk-1801) MQTT - QOS 1 published into JetStream are pipelined for increased throughput (#8415, contributed by @levb) ### Fixed Leafnodes - Leafnode isolation using `request_isolation`, or with hub-enforced `isolate`, now works correctly across cluster nodes (#8504) ### Complete Changes https://github.com/nats-io/nats-server/compare/v2.14.7...v2.15.0
Related Repositories
Get up and running with Kimi, GLM, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other models.
A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
RAGFlow is a leading open-source Retrieval-Augmented Generation (RAG) engine that fuses cutting-edge RAG with Agent capabilities to create a superior context layer for LLMs
The world’s fastest framework for building websites.
:cherry_blossom: A command-line fuzzy finder