github nats-io/nats-server v2.4.0
Release v2.4.0


For JetStream users, it is recommended that you check out the Changed section below.

Go Version

  • 1.16.7: Both release executables and Docker images are built with this Go release.


  • JetStream:
    • Domain to the content of a PubAck protocol (#2432, #2434)
    • PushBound boolean in ConsumerInfo to indicate that a push consumer is already bound to an active subscription (#2438)
    • DeliverGroup string in ConsumerConfig to specify which deliver group (or queue group name) the consumer is created for (#2438)
    • Warning log statement in situations where catchup for a stream resulted in an error (#2444)
  • Monitoring:
    • Ability for normal accounts to access scoped connz information (#2437)
  • Operator option resolver_pinned_accounts to ensure user are signed by certain accounts (#2461)


  • JetStream:
    • ConsumerInfo's Delivered and AckFloor are now SequenceInfo instead of SequencePair. SequenceInfo contains Last which represents the last active time (in UTC) (#2462)
    • Delivery of messages for consumers will now be subject to proper group information. Older clients may fail to receive messages on a queue subscription if the library has not been updated to specify the DeliverGroup (#2438)


  • Make error message actionable when adding operator and leaf nodes. Thanks to @alsuren for the contribution (#2449)
  • JetStream:
    • File utilization when using a Jetstream stream as a KeyValue store (#2456)
    • Encryption at rest with message expiration on server restart (#2467)
    • Enable global account on non JetStream servers in mixed mode (#2473)


  • JetStream:
    • Stream delete can fail for non empty directory (#2418)
    • Possible panic for concurrent stream remove and consumer create (#2419)
    • Simplified flow control and avoid stalls due to message loss (#2425)
    • Consumer info max_msgs_per_subject defaults to 0, but should be -1 (#2426)
    • Creating a consumer with a max_waiting value and a deliver subject was returning the wrong error message (#2427)
    • Assign default to max_ack_pending when AckExplicit or AckAll (#2428)
    • Subscriptions for internal clients for JetStream consumers were not properly removed, resulting in possible subscriptions leak/high memory usage (#2439)
    • Expiration of messages during a server restart could lead to clients reporting errors after reconnect when trying to send new messages (#2452)
    • Added additional checks for failures during filestore encryption (#2453)
    • Processing of a publish ACK could cause a server panic (#2460)
    • Consumer's number of pending messages for multiple matches and merging (#2464)
    • Deadlock due to lock inversion when creating a RAFT group. Thanks to @lokiwins for the report (#2471)
  • Leafnode:
    • User authorization issue when JetStream is involved. Thanks to @wchajl for the report (#2430)
    • A remote websocket connection with wss:// scheme but no tls{} configuration block would be attempted as non TLS connection, resulting on an "invalid websocket connection" in the log of the server attempting to create the remote connection (#2442)
    • Wrong permission checks prevented messages flow. Thanks to @rbboulton for the report (#2455, #2470)
    • Daisy chained subject propagation issue. Thanks to @KimonHoffmann for the report (#2468)
  • Possible subscription leak with the use of "AutoUnsubscribe" (#2421)
  • Prevent JWT claim updates from removing system imports (#2450, #2451)
  • Error print when adding back existing system imports (#2466)
  • Build on OpenBSD-6.9. Thanks to @miraculli for the contribution (#2472)

Complete Changes

latest release: v2.5.0
22 days ago