v2.14.8
nats-io/nats-serverv2.14.8Oct 9, 2026by github-actions[bot]
Upgrading?
AI Summary
Maintenance release focusing on stability and bug fixes, addressing concurrent JWT updates, configuration reload issues, and memory leaks in Leafnodes and JetStream.
Key Highlights
- Removed legacy `$GR.` reply prefix support in Gateways
- Fixed concurrent account JWT updates and configuration reload data races
- Improved Leafnode handling including TLS state availability for auth callouts
- Fixed memory leaks affecting pull requests and direct gets
- Fixed PDH counter buffer overflow on Windows
Breaking Changes
- Removed support for sending and handling the legacy `$GR.` reply prefix in Gateways
New Features
- Leafz now reports whether a leafnode connection uses WebSockets
- MQTT packet lengths are validated earlier against `max_payload`
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.9 (#8740) ### Dependencies - github.com/klauspost/compress v1.20.1 (#8737) - github.com/nats-io/nats.go v1.53.1 (#8737) ### Changed Gateways - Support for sending and handling the legacy `$GR.` reply prefix, used by servers prior to v2.1.2, has been removed (#8615) ### Improved JetStream - Stalled source and mirror flow control is now reported in stream info and warning logs, making missing `$JS.FC.>` imports or exports easier to diagnose (#8633) - Stream and consumer placement now prefers peers that have caught up with the metalayer, reducing delays in API responses (#8643) - Improved the performance of deleting entries from and encoding AVL sequence sets (#8646) - Fast batch publish now reports backward sequence gaps as well as forward gaps (#8699) - Stream pending message calculations avoid unnecessary filestore cache access and handle deleted sequence ranges more efficiently (#8680, #8681) - Stream restore waits for the preferred node to become leader, avoiding an incorrect create response during clustered restore (#8690) - Memory backed streams avoid copying message headers and bodies twice when storing messages (#8652, contributed by @randomizedcoder) Monitoring - Leafz now reports whether a leafnode connection uses WebSockets (#8683) MQTT - Partial packets are no longer copied in full on every read, reducing allocations and buffer copying (#8692) ### Fixed General - Concurrent account JWT updates no longer invalidate stream imports and interrupt message delivery (#8610) - Configuration reloads no longer incorrectly disconnect operator mode clients that send an `nkey` (#8609) - `Connz` requests selecting a connection by `cid` now correctly apply account, user and MQTT client ID filters (#8613) - Pipelined client operations are no longer processed after a connection is rejected for exceeding the account's `max_connections` limit (#8614) - Queue subscription deny permissions are now checked against the mapped delivery subject (#8616) - Outstanding reply permissions are now preserved when inherited account permissions are refreshed without changing the response policy (#8620, contributed by @0xasritha) - Subscription deny filters are now rebuilt atomically when inherited account permissions are refreshed, preventing a window in which denied messages could be delivered (#8622, contributed by @0xasritha) - Unquoted configuration values beginning with a number and a size or exponent suffix, such as `0K1abc`, are now correctly parsed as strings (#8263, contributed by @koriyoshi2041) - Account JWT updates now reject invalid subject mappings instead of reporting success, and failed replacements no longer remove existing mappings (#8627, contributed by @vulragrag-star) - Cached subscription results are now cleared when an already connected client sends another `CONNECT`, preventing stale results from being reused after an account change (#8641, reported by @Tan-JunWei) - Fixed several data races affecting service imports and exports during configuration reloads and account updates (#8675) - Per-account routes no longer double count inbound account message and byte statistics (#8677) - TLS certificate pin validation now checks the correct pins after a configuration reload (#8679) - Fast batch ping no longer starts a new batch incorrectly (#8714) - Auth callout rejections are now reported as authentication errors instead of account connection limit errors (#8688, contributed by @aniketatgithub) - Scoped `ProxyRequired` settings are now respected in JWTs and auth callouts (#8694) - Subscription interest notifications are no longer missed when a subscription is added or removed concurrently (#8703) - Fixed issues with auth callout `auth_users` bypass - Fixed a PDH counter buffer overflow on Windows JetStream - Stream scale-down requests are now rejected when the target replica count has no configured account tier (#8608) - Stale per-message TTL entries are now removed when their messages have already been deleted, avoiding repeated expiry scans and excess CPU and memory usage (#8595, contributed by @digitalstraw) - The maximum deliveries exceeded advisory is now sent correctly when a consumer's `max_deliver` is lowered below a message's existing delivery count (#8605, contributed by @zeke-lin) - The consumer created time is now preserved after recovery (#8621) - Filestore compaction now respects the configured sync settings when replacing a message block (#8629) - Fixed a race during filestore compaction that could cause consumers to skip messages or lose redelivery tracking (#8623, contributed by @as-clearview) - Concurrent updates to R1 consumers no longer lose API responses (#8628) - Stream and consumer create and delete requests received during metalayer catchup now receive responses once catchup completes (#8643) - R1 consumer create requests no longer lose their responses when the consumer is deleted immediately afterwards (#8643) - Fixed a data race when handling consumer leader stepdown requests (#8647) - Fixed a memory leak affecting pull requests and direct gets after a configuration reload when the system account is explicitly configured in the `accounts` block (#8650, contributed by @1995parham) - Fixed a panic when shutting down a clustered JetStream server immediately after startup (#8707, contributed by @clwluvw) - Idempotent stream create requests with sources no longer time out after leader changes (#8703) - Recovered ephemeral consumers with `inactive_threshold` set are now cleaned up properly after a server restart (#8732) Leafnodes - Publish permissions are now checked against the transformed subject sent over the leafnode connection, avoiding the need to also allow the original stream import subject (#8530, contributed by @fbarth-ifr) - Fixed incorrect pending byte accounting after a partial compressed write that could stall a leafnode connection and prevent it from reconnecting (#8636) - Closed leafnode connections are now correctly removed from the account's leafnode list, reducing retained memory and garbage collection pressure (#8637) - TLS state is now available to auth callouts when leafnodes connect over WebSockets (#8686, contributed by @jurry-duty) - Leafnode clients are now shed alongside regular clients during lame duck shutdown, avoiding a thundering herd (#8695) - Remote proxies now support TLS with `https://` proxy URLs and an optional proxy `tls` block (#8701) - Remote proxies no longer incorrectly warn that `nats://` URLs are unsupported or lose the hub's initial `INFO` message (#8701) - Remote proxy options are now rejected when no proxy URL is specified (#8701) - Leafnode interest and request/reply across account imports (#8730, contributed by @edjeffreys) Gateways - The legacy `$GR.` reply prefix is now reserved on client ingress, preventing clients from publishing to gateway reply subjects using that prefix (#8615) MQTT - Config load no longer breaks QoS1/QoS2 delivery when `max_ack_pending` is unset (#8671) - MQTT packet lengths are validated earlier against `max_payload` (#8692) ### Complete Changes https://github.com/nats-io/nats-server/compare/v2.14.7...v2.14.8
Related Repositories
ollama/ollama★ 184,208
Get up and running with Kimi, GLM, MiniMax, DeepSeek, gpt-oss, Qwen, Gemma and other models.
fatedier/frp★ 110,051
A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
infiniflow/ragflow★ 92,612
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
gohugoio/hugo★ 90,198
The world’s fastest framework for building websites.
junegunn/fzf★ 83,716
:cherry_blossom: A command-line fuzzy finder