# RabbitMQ changelog > A reliable and mature messaging and streaming broker. - Vendor: Broadcom - Category: Developer Tools - Official site: https://www.rabbitmq.com - Tracked by: What's New (https://whatsnew.fyi/product/rabbitmq) - Harvested from: GitHub (rabbitmq/rabbitmq-server) - Entries below: 10 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. ## Releases ### v4.3.4 — RabbitMQ 4.3.4 - Date: 2026-07-23 - Version: v4.3.4 - Original notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.3.4 - Permalink: https://whatsnew.fyi/product/rabbitmq/releases/v4.3.4 - **fixed** — Quorum queues in clusters upgraded from 3.13.x to 4.2.x and then to 4.3.x could stop emitting metrics and taking snapshots after a node restart - **fixed** — The AMQP 1.0 parser now detects standard message body sections more strictly - **fixed** — The AMQP 1.0 parser now decodes certain array values more efficiently - **fixed** — The single active consumer coordinator did not notify a consumer that was re-selected for activation while it was still deactivating, leaving the group without an active consumer - **fixed** — Very short lived exclusive queues could cause an exception during metric collection, producing log noise - **fixed** — After an IdP-initiated OAuth 2 login, the management UI now returns the user to the page that was open before the login instead of the default one - **changed** — The management UI Content Security Policy (CSP) no longer includes the unsafe-eval and unsafe-inline directives - **fixed** — In scenarios that involved a federated queue and a federated exchange with exactly the same name in the same virtual host, deleting an upstream unintentionally corrupted the federated exchange(s) operating state, breaking federation for the exchange in question RabbitMQ `4.3.4` is a maintenance release in the `4.3.x` [release series](https://www.rabbitmq.com/release-information). It is **strongly recommended** that you read [4.3.0 release notes](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.3.0) in detail if upgrading from a version prior to `4.3.0`. ###### Minimum Supported Erlang Version The minimum supported Erlang version for this release series is `27.0`. [RabbitMQ and Erlang/OTP Compatibility Matrix](https://www.rabbitmq.com/docs/which-erlang) has more details on Erlang version requirements for RabbitMQ. Nodes **will fail to start** on older Erlang releases. ##### Changes Worth Mentioning Release notes can be found on GitHub at [rabbitmq-server/release-notes](https://github.com/rabbitmq/rabbitmq-server/tree/v4.3.x/release-notes). ###### Core Server ###### Bug Fixes * Quorum queues in clusters upgraded from `3.13.x` to `4.2.x` and then to `4.3.x` could stop emitting metrics and taking snapshots after a node restart. GitHub issues: [#16974](https://github.com/rabbitmq/rabbitmq-server/issues/16974), [#16990](https://github.com/rabbitmq/rabbitmq-server/pull/16990) * The AMQP 1.0 parser now detects standard message body sections more strictly. GitHub issue: [#17017](https://github.com/rabbitmq/rabbitmq-server/pull/17017) * The AMQP 1.0 parser now decodes certain array values more efficiently. GitHub issue: [#16994](https://github.com/rabbitmq/rabbitmq-server/pull/16994) ###### Stream Plugin ###### Bug Fixes * The [single active consumer](https://www.rabbitmq.com/docs/streams#single-active-consumer) coordinator did not notify a consumer that was re-selected for activation while it was still deactivating, leaving the group without an active consumer. Contributed by @pterygota. GitHub issues: [#16975](https://github.com/rabbitmq/rabbitmq-server/issues/16975), [#16976](https://github.com/rabbitmq/rabbitmq-server/pull/16976) ###### Management Plugin ###### Bug Fixes * Very short lived exclusive queues could cause an exception during metric collection, producing log noise. GitHub issues: [#16989](https://github.com/rabbitmq/rabbitmq-server/issues/16989), [#16999](https://github.com/rabbitmq/rabbitmq-server/issues/16999), [#17002](https://github.com/rabbitmq/rabbitmq-server/pull/17002) * After an IdP-initiated OAuth 2 login, the management UI now returns the user to the page that was open before the login instead of the default one. Contributed by @thisisnsh. GitHub issues: [#16957](https://github.com/rabbitmq/rabbitmq-server/pull/16957), [#16961](https://github.com/rabbitmq/rabbitmq-server/pull/16961) ###### Enhancements * The management UI Content Security Policy (CSP) no longer includes the `unsafe-eval` and `unsafe-inline` directives. GitHub issue: [#16916](https://github.com/rabbitmq/rabbitmq-server/pull/16916) ###### Federation Plugin ###### Bug Fixes * In scenarios that involved a federated queue and a federated exchange with exactly the same name in the same virtual host, deleting an upstream unintentionally corrupted the federated exchange(s) operating state, breaking federation for the exchange in question. GitHub issues: [#16991](https://github.com/rabbitmq/rabbitmq-server/issues/16991), [#16997](https://github.com/rabbitmq/rabbitmq-server/pull/16997) ### Dependency Changes None in this release. ### v4.3.3 — RabbitMQ 4.3.3 - Date: 2026-07-20 - Version: v4.3.3 - Original notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.3.3 - Permalink: https://whatsnew.fyi/product/rabbitmq/releases/v4.3.3 - **changed** — Minimum supported Erlang version is now 27.0; Erlang/OTP 26 is no longer supported - **fixed** — Quorum queue, Khepri and other Raft leaders no longer optimistically commit new log entries in certain scenarios - **fixed** — Quorum queues using at-least-once dead lettering no longer get permanently stuck after repeated queue membership changes - **fixed** — Classic queue index directory paths no longer accumulate slashes that could cause enametoolong file system errors - **fixed** — Enabling the tie_binding_to_dest_with_keep_while_cond feature flag no longer fails with an exception on certain exchange-to-exchange topologies - **fixed** — Invalid consumer_timeout configuration values now fall back to the default value of 24 hours - **fixed** — AMQP 1.0 management operations declaring an exchange with an alternate exchange now verify necessary permissions on the alternate exchange - **fixed** — AMQP 1.0 management GET /bindings operations now behave consistently with other binding-related handlers - **fixed** — Worker pool processes no longer terminate when receiving unexpected messages - **fixed** — Race condition between concurrent queue or virtual host deletion and Ra cluster shutdown no longer logs exceptions - **fixed** — Closing channels or connections that fail to send channel.close_ok on already terminated writers or sockets no longer produce excessive logging - **fixed** — Unexpected failures during channel termination cleanup no longer produce excessive logging - **fixed** — Code paths using rabbit_queue_type_util:erpc_call/5 now handle more error conditions - **fixed** — Nodes no longer fail to start with bad_generator exception when a quorum queue record has decorators set to undefined - **fixed** — Enabling tracing on multiple virtual hosts concurrently no longer silently drops some virtual hosts from the traced set - **added** — Password salts are now generated using a cryptographically secure pseudo-random number generator - **changed** — Socket-level metric collection now handles concurrently closed connections safely - **fixed** — rabbitmq-plugins commands now tolerate plugins listed as enabled but not installed - **fixed** — rabbitmq-plugins list no longer outputs an empty plugin table when the target node cannot be reached - **fixed** — rabbitmq-plugins commands now correctly handle file paths of remote nodes and validate remote nodes in offline mode RabbitMQ `4.3.3` is a maintenance release in the `4.3.x` [release series](https://www.rabbitmq.com/release-information). It is **strongly recommended** that you read [4.3.0 release notes](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.3.0) in detail if upgrading from a version prior to `4.3.0`. ###### Minimum Supported Erlang Version **Important**: starting with this release, the minimum supported Erlang version is `27.0`. Erlang/OTP `26` has reached [end of life](https://endoflife.date/erlang) and is no longer supported. GitHub issue: [#16914](https://github.com/rabbitmq/rabbitmq-server/pull/16914) [RabbitMQ and Erlang/OTP Compatibility Matrix](https://www.rabbitmq.com/docs/which-erlang) has more details on Erlang version requirements for RabbitMQ. Nodes **will fail to start** on older Erlang releases. ##### Changes Worth Mentioning Release notes can be found on GitHub at [rabbitmq-server/release-notes](https://github.com/rabbitmq/rabbitmq-server/tree/v4.3.x/release-notes). ###### Core Server ###### Bug Fixes * Quorum queue, Khepri and other Raft leaders could optimistically commit new log entries in certain scenarios. GitHub issue: [rabbitmq/ra#637](https://github.com/rabbitmq/ra/pull/637) * Quorum queues that use [`at-least-once` dead lettering](https://www.rabbitmq.com/docs/quorum-queues#dead-lettering) could get their dead lettering process permanently stuck after repeated queue membership changes. GitHub issue: [#16652](https://github.com/rabbitmq/rabbitmq-server/issues/16652) * Classic queue index directory paths could accumulate slashes, eventually failing with an `enametoolong` file system error. GitHub issue: [#16833](https://github.com/rabbitmq/rabbitmq-server/pull/16833) * Enabling the `tie_binding_to_dest_with_keep_while_cond` feature flag could fail with an exception when certain exchange-to-exchange topologies. GitHub issue: [#16824](https://github.com/rabbitmq/rabbitmq-server/pull/16824) * An invalid `consumer_timeout` value in the configuration now falls back to the default value (24 hours) instead of being used as is. GitHub issue: [#16799](https://github.com/rabbitmq/rabbitmq-server/pull/16799) * AMQP 1.0 management operations that declare an exchange with an alternate exchange now verify the necessary permissions on the alternate exchange, matching AMQP 0-9-1. GitHub issue: [#16785](https://github.com/rabbitmq/rabbitmq-server/pull/16785) * AMQP 1.0 management `GET /bindings` operations now behave consistently with the rest of the binding-related handlers. GitHub issue: [#16790](https://github.com/rabbitmq/rabbitmq-server/pull/16790) * Worker pool processes no longer terminate when they receive an unexpected message. Contributed by @Ayanda-D. GitHub issue: [#16666](https://github.com/rabbitmq/rabbitmq-server/pull/16666) * A race condition between concurrent queue (or virtual host) deletion and a Ra cluster shutdown could log an exception. Contributed by @Ayanda-D. GitHub issue: [#16880](https://github.com/rabbitmq/rabbitmq-server/pull/16880) * A closing channel (connection) that failed to send `channel.close_ok` on an already terminated writer or socket no longer produce log noise. Contributed by @Ayanda-D. GitHub issue: [#16651](https://github.com/rabbitmq/rabbitmq-server/pull/16651) * Unexpected failures during channel termination cleanup no longer produce log noise. Contributed by @Ayanda-D. GitHub issue: [#16740](https://github.com/rabbitmq/rabbitmq-server/pull/16740) * Code paths that use `rabbit_queue_type_util:erpc_call/5` now handle more errors. Contributed by @Ayanda-D. GitHub issue: [#16701](https://github.com/rabbitmq/rabbitmq-server/pull/16701) * Nodes could fail to start with a `bad_generator` exception in `rabbit_queue_decorator:select/1` when a quorum queue rec _[Truncated at 4000 characters — full notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.3.3]_ ### v4.2.9 — RabbitMQ 4.2.9 - Date: 2026-07-20 - Version: v4.2.9 - Original notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.2.9 - Permalink: https://whatsnew.fyi/product/rabbitmq/releases/v4.2.9 - **changed** — Minimum supported Erlang version is now 27.0, with Erlang/OTP 26 no longer supported - **fixed** — Classic queue index directory paths could accumulate slashes, eventually failing with an enametoolong file system error - **fixed** — AMQP 1.0 management operations that declare an exchange with an alternate exchange now verify the necessary permissions on the alternate exchange - **fixed** — AMQP 1.0 management GET /bindings operations now behave consistently with the rest of the binding-related handlers - **fixed** — Worker pool processes no longer terminate when they receive an unexpected message - **fixed** — A race condition between concurrent queue or virtual host deletion and a Ra cluster shutdown could log an exception - **fixed** — A closing channel or connection that failed to send channel.close_ok on an already terminated writer or socket no longer produces log noise - **fixed** — Unexpected failures during channel termination cleanup no longer produce log noise - **fixed** — Code paths that use rabbit_queue_type_util:erpc_call/5 now handle more errors - **fixed** — Nodes could fail to start with a bad_generator exception in rabbit_queue_decorator:select/1 when a quorum queue record in the metadata store had its decorators set to undefined - **fixed** — Enabling tracing on multiple virtual hosts concurrently could silently drop some of the virtual hosts from the traced set, now all virtual host tracing state modifications are linearized - **changed** — Password salts are now generated using a cryptographically secure pseudo-random number generator - **changed** — Socket-level metric collection used by several protocol readers and the management agent now handles concurrently closed connections safely - **fixed** — rabbitmq-plugins commands now tolerate plugins that are listed as enabled but are not installed - **fixed** — rabbitmq-plugins list no longer outputs an empty plugin table when the target node cannot be reached - **fixed** — rabbitmq-plugins commands now correctly handle file paths of remote nodes, validate remote nodes in offline mode, and no longer report false positives for rabbitmq-plugins is_enabled - **fixed** — Shell command completion fixes - **added** — rabbitmq-queues and rabbitmq-streams now provide transfer_leadership commands for individual queues and streams - **changed** — rabbitmq-upgrade drain safety improvements: the command now handles certain failures more gracefully - **fixed** — Permissions required for certain stream protocol operations were adjusted to be consistent with comparable operations over other protocols RabbitMQ `4.2.9` is a maintenance release in the `4.2.x` [release series](https://www.rabbitmq.com/release-information). It is **strongly recommended** that you read [4.2.0 release notes](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.2.0) in detail if upgrading from a version prior to `4.2.0`. ###### Minimum Supported Erlang Version **Important**: starting with this release, the minimum supported Erlang version is `27.0`. Erlang/OTP `26` has reached [end of life](https://endoflife.date/erlang) and is no longer supported. GitHub issue: [#16914](https://github.com/rabbitmq/rabbitmq-server/pull/16914) [RabbitMQ and Erlang/OTP Compatibility Matrix](https://www.rabbitmq.com/docs/which-erlang) has more details on Erlang version requirements for RabbitMQ. Nodes **will fail to start** on older Erlang releases. ##### Changes Worth Mentioning Release notes can be found on GitHub at [rabbitmq-server/release-notes](https://github.com/rabbitmq/rabbitmq-server/tree/v4.2.x/release-notes). ###### Core Server ###### Bug Fixes * Classic queue index directory paths could accumulate slashes, eventually failing with an `enametoolong` file system error. GitHub issue: [#16833](https://github.com/rabbitmq/rabbitmq-server/pull/16833) * AMQP 1.0 management operations that declare an exchange with an alternate exchange now verify the necessary permissions on the alternate exchange, matching AMQP 0-9-1. GitHub issue: [#16785](https://github.com/rabbitmq/rabbitmq-server/pull/16785) * AMQP 1.0 management `GET /bindings` operations now behave consistently with the rest of the binding-related handlers. GitHub issue: [#16790](https://github.com/rabbitmq/rabbitmq-server/pull/16790) * Worker pool processes no longer terminate when they receive an unexpected message. Contributed by @Ayanda-D. GitHub issue: [#16666](https://github.com/rabbitmq/rabbitmq-server/pull/16666) * A race condition between concurrent queue (or virtual host) deletion and a Ra cluster shutdown could log an exception. Contributed by @Ayanda-D. GitHub issue: [#16880](https://github.com/rabbitmq/rabbitmq-server/pull/16880) * A closing channel (connection) that failed to send `channel.close_ok` on an already terminated writer or socket no longer produce log noise. Contributed by @Ayanda-D. GitHub issue: [#16651](https://github.com/rabbitmq/rabbitmq-server/pull/16651) * Unexpected failures during channel termination cleanup no longer produce log noise. Contributed by @Ayanda-D. GitHub issue: [#16740](https://github.com/rabbitmq/rabbitmq-server/pull/16740) * Code paths that use `rabbit_queue_type_util:erpc_call/5` now handle more errors. Contributed by @Ayanda-D. GitHub issue: [#16701](https://github.com/rabbitmq/rabbitmq-server/pull/16701) * Nodes could fail to start with a `bad_generator` exception in `rabbit_queue_decorator:select/1` when a quorum queue record in the metadata store had its decorators set to `undefined`. GitHub issues: [#16843](https://github.com/rabbitmq/rabbitmq-server/issues/16843), [#16844](https://github.com/rabbitmq/rabbitmq-server/pull/16844) * Enabling [tracing](https://www.rabbitmq.com/docs/firehose) on multiple virtual hosts concurrently could silently drop some of the virtual hosts from the traced set. All virtual host tracing state modifications are now linearized. GitHub issues: [#16755](https://github.com/rabbitmq/rabbitmq-server/issues/16755), [#16763](https://github.com/rabbitmq/rabbitmq-server/pull/16763) ###### Enhancements * Password salts are now generated using a cryptographically secure pseudo-random number generator (CSPRNG). GitHub issue: [#16775](https://github.com/rabbitmq/rabbitmq-server/pull/16775) * Socket-level metric collection used by several protocol readers and the management agent now handles concurrently closed conn _[Truncated at 4000 characters — full notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.2.9]_ ### v4.3.2 — RabbitMQ 4.3.2 - Date: 2026-06-15 - Version: v4.3.2 - Original notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.3.2 - Permalink: https://whatsnew.fyi/product/rabbitmq/releases/v4.3.2 - **fixed** — Enabling the tie_binding_to_dest_with_keep_while_cond feature flag could fail in some rare cases - **fixed** — Users created without a password or a password hash over the HTTP API are now stored correctly, exactly like users whose password was cleared with rabbitmqctl clear_password - **fixed** — Consumer activity status of classic queue consumers was not always correctly updated and reported when single active consumer was enabled - **fixed** — The values of the x-consumer-timeout and x-consumer-disconnected-timeout optional arguments are now validated at queue declaration time - **fixed** — Default queue type validation now treats empty strings the same way as a missing value by falling back to the default - **fixed** — Feature flag operations now avoid unnecessary work by excluding flags already enabled on all cluster nodes from synchronization - **fixed** — Configuration changes for deprecated features are now honored when possible - **changed** — The per-node channel limit (channel_max_per_node) is now also enforced for channels opened on direct Erlang client connections used by the Shovel and Federation plugins - **changed** — Modules are now loaded in parallel early on node boot, reducing node startup time - **added** — Several new rabbitmq.conf keys now support encrypted values - **fixed** — rabbitmqctl set_topic_permissions now validates target user and exchange for existence - **fixed** — rabbitmqctl add_vhost now validates the provided default queue type value - **fixed** — Fixed a frame assembly performance regression in the stream protocol reader - **changed** — Stream metadata queries now contact cluster nodes concurrently, subscription lookups use a more efficient data structure, and frame processing short-circuits when a connection reaches a terminal state - **security** — Validate access-control-request-headers values and reject wildcard (*) origin header value - **security** — Definitions import now limits the size of multipart upload bodies and definitions export download filenames are restricted to a safe character set - **fixed** — HTTP API 500 responses no longer include internal error details in the response body - **fixed** — Several HTTP response headers are now consistently lowercase and a previously missing content-type header was added to certain responses - **added** — A one-time warning is now logged when the HSTS or CSP headers are disabled - **added** — The timestamp of the oldest message in a stream is now displayed on the stream page RabbitMQ `4.3.2` is a maintenance release in the `4.3.x` [release series](https://www.rabbitmq.com/release-information). It is **strongly recommended** that you read [4.3.0 release notes](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.3.0) in detail if upgrading from a version prior to `4.3.0`. ###### Minimum Supported Erlang Version [RabbitMQ and Erlang/OTP Compatibility Matrix](https://www.rabbitmq.com/docs/which-erlang) has more details on Erlang version requirements for RabbitMQ. Nodes **will fail to start** on older Erlang releases. ##### Changes Worth Mentioning Release notes can be found on GitHub at [rabbitmq-server/release-notes](https://github.com/rabbitmq/rabbitmq-server/tree/v4.3.x/release-notes). ###### Core Server ###### Bug Fixes * Enabling the `tie_binding_to_dest_with_keep_while_cond` feature flag could fail in some rare cases. GitHub issue: [#16587](https://github.com/rabbitmq/rabbitmq-server/issues/16587) * Users created without a password or a password hash (for example, those that rely on X.509 certificate-based authentication) over the HTTP API are now stored correctly, exactly like the users whose password was cleared with `rabbitmqctl clear_password`. GitHub issues: [#16629](https://github.com/rabbitmq/rabbitmq-server/issues/16629), [#16633](https://github.com/rabbitmq/rabbitmq-server/pull/16633) * Consumer activity status of classic queue consumers was not always correctly updated and reported when [single active consumer](https://www.rabbitmq.com/docs/consumers#single-active-consumer) was enabled. GitHub issues: [#16532](https://github.com/rabbitmq/rabbitmq-server/pull/16532), [#16450](https://github.com/rabbitmq/rabbitmq-server/issues/16450) * The values of the `x-consumer-timeout` and `x-consumer-disconnected-timeout` optional arguments are now validated at queue declaration time. GitHub issue: [#16557](https://github.com/rabbitmq/rabbitmq-server/pull/16557) * Default queue type (DQT) validation now treats empty strings the same way as a missing value: by falling back. to the default (classic queues). GitHub issues: [#16481](https://github.com/rabbitmq/rabbitmq-server/pull/16481), [#16488](https://github.com/rabbitmq/rabbitmq-server/pull/16488) * Feature flag operations now avoid unnecessary work: flags that are already enabled on all cluster nodes are excluded from synchronization, and enabling an empty set of flags is a no-op. GitHub issue: [#16497](https://github.com/rabbitmq/rabbitmq-server/pull/16497) * Configuration changes for [deprecated features](https://www.rabbitmq.com/docs/deprecated-features) are now honored when possible. GitHub issue: [#16500](https://github.com/rabbitmq/rabbitmq-server/pull/16500) ###### Enhancements * The per-node channel limit (`channel_max_per_node`) is now also enforced for channels opened on direct Erlang client connections used by the Shovel and Federation plugins, matching the behavior enforced for "regular" AMQP 0-9-1 clients. GitHub issues: [#16616](https://github.com/rabbitmq/rabbitmq-server/pull/16616), [#16618](https://github.com/rabbitmq/rabbitmq-server/pull/16618) * Modules are now loaded in parallel early on node boot, reducing node startup time. GitHub issue: [#16479](https://github.com/rabbitmq/rabbitmq-server/pull/16479) * Several new `rabbitmq.conf` keys now supports [encrypted values](https://www.rabbitmq.com/docs/configure#configuration-encryption). GitHub issue: [#16632](https://github.com/rabbitmq/rabbitmq-server/pull/16632) ###### CLI Tools ###### Bug Fixes * `rabbitmqctl set_topic_permissions` now validates target user and exchange for existence. GitHub issue: [#16590](https://github.com/rabbitmq/rabbitmq-server/pull/16590) * `rabbitmqctl add_vhost` now validates the provided default queue type value. GitHub issue: [#16481](https://g _[Truncated at 4000 characters — full notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.3.2]_ ### v4.2.8 — RabbitMQ 4.2.8 - Date: 2026-06-15 - Version: v4.2.8 - Original notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.2.8 - Permalink: https://whatsnew.fyi/product/rabbitmq/releases/v4.2.8 - **fixed** — Users created without a password or a password hash over the HTTP API are now stored correctly, exactly like users whose password was cleared with rabbitmqctl clear_password - **fixed** — Consumer activity status of classic queue consumers was not always correctly updated and reported when single active consumer was enabled - **fixed** — Default queue type validation now treats empty strings the same way as a missing value by falling back to the default - **changed** — The per-node channel limit is now also enforced for channels opened on direct Erlang client connections used by the Shovel and Federation plugins - **changed** — Modules are now loaded in parallel early on node boot, reducing node startup time - **changed** — Several new rabbitmq.conf keys now support encrypted values - **fixed** — rabbitmqctl add_vhost now validates the provided default queue type value - **fixed** — Fixed a frame assembly performance regression in the stream protocol reader - **changed** — Stream metadata queries now contact cluster nodes concurrently, subscription lookups use a more efficient data structure, and frame processing short-circuits when a connection reaches a terminal state - **security** — CORS hardening: access-control-request-headers values are now validated and a wildcard origin header value is rejected - **changed** — Definitions import now limits the size of multipart upload bodies, and definitions export download filenames are restricted to a safe character set - **fixed** — HTTP API 500 responses no longer include internal error details in the response body - **fixed** — Several HTTP response headers are now consistently lowercase, and a previously missing content-type header was added to certain responses - **changed** — A one-time warning is now logged when the HSTS or CSP headers are disabled - **changed** — The timestamp of the oldest message in a stream is now displayed on the stream page - **changed** — More plugin configuration keys, such as prometheus.ssl.password, now support encrypted values in rabbitmq.conf - **fixed** — mqtt.tcp_listen_options.* settings in rabbitmq.conf now take effect RabbitMQ `4.2.8` is a maintenance release in the `4.2.x` [release series](https://www.rabbitmq.com/release-information). It is **strongly recommended** that you read [4.2.0 release notes](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.2.0) in detail if upgrading from a version prior to `4.2.0`. ###### Minimum Supported Erlang Version [RabbitMQ and Erlang/OTP Compatibility Matrix](https://www.rabbitmq.com/docs/which-erlang) has more details on Erlang version requirements for RabbitMQ. Nodes **will fail to start** on older Erlang releases. ##### Changes Worth Mentioning Release notes can be found on GitHub at [rabbitmq-server/release-notes](https://github.com/rabbitmq/rabbitmq-server/tree/v4.2.x/release-notes). ###### Core Server ###### Bug Fixes * Users created without a password or a password hash (for example, those that rely on X.509 certificate-based authentication) over the HTTP API are now stored correctly, exactly like the users whose password was cleared with `rabbitmqctl clear_password`. GitHub issues: [#16629](https://github.com/rabbitmq/rabbitmq-server/issues/16629), [#16633](https://github.com/rabbitmq/rabbitmq-server/pull/16633) * Consumer activity status of classic queue consumers was not always correctly updated and reported when [single active consumer](https://www.rabbitmq.com/docs/consumers#single-active-consumer) was enabled. GitHub issues: [#16532](https://github.com/rabbitmq/rabbitmq-server/pull/16532), [#16450](https://github.com/rabbitmq/rabbitmq-server/issues/16450) * Default queue type (DQT) validation now treats empty strings the same way as a missing value: by falling back to the default (classic queues). GitHub issues: [#16481](https://github.com/rabbitmq/rabbitmq-server/pull/16481), [#16488](https://github.com/rabbitmq/rabbitmq-server/pull/16488) ###### Enhancements * The per-node channel limit (`channel_max_per_node`) is now also enforced for channels opened on direct Erlang client connections used by the Shovel and Federation plugins, matching the behavior enforced for "regular" AMQP 0-9-1 clients. GitHub issues: [#16616](https://github.com/rabbitmq/rabbitmq-server/pull/16616), [#16618](https://github.com/rabbitmq/rabbitmq-server/pull/16618) * Modules are now loaded in parallel early on node boot, reducing node startup time. GitHub issue: [#16479](https://github.com/rabbitmq/rabbitmq-server/pull/16479) * Several new `rabbitmq.conf` keys now support [encrypted values](https://www.rabbitmq.com/docs/configure#configuration-encryption). GitHub issue: [#16632](https://github.com/rabbitmq/rabbitmq-server/pull/16632) ###### CLI Tools ###### Bug Fixes * `rabbitmqctl add_vhost` now validates the provided default queue type value. GitHub issue: [#16481](https://github.com/rabbitmq/rabbitmq-server/pull/16481) ###### Stream Plugin ###### Bug Fixes * Fixed a frame assembly performance regression in the stream protocol reader. GitHub issue: [#16588](https://github.com/rabbitmq/rabbitmq-server/pull/16588) ###### Enhancements * Several stream protocol reader optimizations: stream metadata queries now contact cluster nodes concurrently, subscription lookups use a more efficient data structure, and frame processing short-circuits when a connection reaches a terminal state. GitHub issue: [#16588](https://github.com/rabbitmq/rabbitmq-server/pull/16588) ###### Management Plugin ###### Bug Fixes * CORS hardening: `access-control-request-headers` values are now validated and a wildcard (`*`) `origin` header value is rejected. GitHub issue: [#16544](https://github.com/rabbitmq/rabbitmq-server/pull/16544) * Definitions import now limits the size of multipart upload bodies, and definitions export download filenames are restricted to a safe character set. GitHub issue: [#16544](https://github.com/rabbitmq/ _[Truncated at 4000 characters — full notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.2.8]_ ### v4.3.1 — RabbitMQ 4.3.1 - Date: 2026-05-20 - Version: v4.3.1 - Original notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.3.1 - Permalink: https://whatsnew.fyi/product/rabbitmq/releases/v4.3.1 - **fixed** — Messages published to a topic exchange with an empty routing key are no longer incorrectly routed to queues bound with an empty binding key - **fixed** — Virtual hosts are no longer falsely considered deleted in certain metadata store error and timeout scenarios - **fixed** — Passive queue and exchange declarations are now allowed for users with any permission on the virtual host, not only configure - **fixed** — Classic queue shared message store garbage collection no longer falls behind other queue activity under heavy load - **fixed** — Classic queue message store garbage collection is now stopped cleanly during node shutdown - **fixed** — Quorum queues now gracefully handle negative priority values - **fixed** — Quorum queues now accept delayed retry-related policy keys in policy definitions - **fixed** — Quorum queue at-least-once dead lettering no longer directs commands to the wrong replica - **fixed** — Quorum queues reintroduced Raft WAL max entries default of 500K - **fixed** — Quorum queues no longer crash during recovery after an unclean shutdown - **fixed** — Stream queue argument validation was improved - **changed** — Renamed channel_max to max_channels in rabbitmq.conf with original name still supported as an alias - **changed** — Renamed connection_max to max_connections in rabbitmq.conf with original name still supported as an alias - **changed** — The per-node max_connections limit is now enforced for AMQP 1.0 connections as well as AMQP 0-9-1 ones - **changed** — Plain-text clients connecting to TLS listeners or vice versa now receive more useful error messages for AMQP 0-9-1, MQTT, STOMP, and Stream protocols - **changed** — The permission cache is now traversed less often during AMQP 1.0 management and AMQP 0-9-1 channel checks - **fixed** — Stream protocol open frame with empty properties is now handled correctly - **added** — Stream protocol maximum concurrent client connections can now be capped using stream.max_connections configuration key - **fixed** — HTTP API GET /api/connections no longer returns 500 response when STOMP connections are present - **added** — Maximum concurrent HTTP API connections can now be capped using management.tcp.max_connections and management.ssl.max_connections configuration keys - **added** — Peer certificate serial number is now exposed in the management UI and select CLI commands - **added** — Maximum concurrent HTTP API connections can now be capped using prometheus.tcp.max_connections and prometheus.ssl.max_connections configuration keys RabbitMQ `4.3.1` is a maintenance release in the `4.3.x` [release series](https://www.rabbitmq.com/release-information). It is **strongly recommended** that you read [4.3.0 release notes](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.3.0) in detail if upgrading from a version prior to `4.3.0`. ###### Minimum Supported Erlang Version [RabbitMQ and Erlang/OTP Compatibility Matrix](https://www.rabbitmq.com/docs/which-erlang) has more details on Erlang version requirements for RabbitMQ. Nodes **will fail to start** on older Erlang releases. ##### Changes Worth Mentioning Release notes can be found on GitHub at [rabbitmq-server/release-notes](https://github.com/rabbitmq/rabbitmq-server/tree/v4.3.x/release-notes). ###### Core Server ###### Bug Fixes * If a queue was bound to a topic exchange using an empty binding key (`""`), messages published to **any** topic exchange with an empty routing key would be incorrectly routed to that queue. To apply the fix, enable the new `topic_binding_projection_v5` feature flag after upgrading all cluster nodes. GitHub issue: [#16271](https://github.com/rabbitmq/rabbitmq-server/pull/16271) * A virtual host could be falsely considered to be deleted in certain metadata store error and timeout scenarios. GitHub issue: [#16422](https://github.com/rabbitmq/rabbitmq-server/pull/16422) * Passive queue and exchange declarations are now allowed for users that have **any** permission on the virtual host (`configure`, `write`, or `read`), not only `configure`. GitHub issues: [#16272](https://github.com/rabbitmq/rabbitmq-server/pull/16272), [#16085](https://github.com/rabbitmq/rabbitmq-server/pull/16085) * Classic queue shared message store GC could fall behind other queue activity under heavy load GitHub issues: [#16142](https://github.com/rabbitmq/rabbitmq-server/pull/16142), [#16141](https://github.com/rabbitmq/rabbitmq-server/issues/16141) * Classic queue message store: garbage collection is now stopped cleanly during node shutdown. GitHub issue: [#15498](https://github.com/rabbitmq/rabbitmq-server/pull/15498) * Quorum queues now gracefully handle negative priority values. GitHub issue: [#16280](https://github.com/rabbitmq/rabbitmq-server/pull/16280) * Quorum queues: delayed retry-related policy keys are now accepted in policy definitions. GitHub issues: [#16395](https://github.com/rabbitmq/rabbitmq-server/pull/16395), [#16398](https://github.com/rabbitmq/rabbitmq-server/pull/16398) * Fixed a bug where quorum queue's at-least-once dead lettering could direct commands to the wrong member (replica). GitHub issue: [#16203](https://github.com/rabbitmq/rabbitmq-server/pull/16203) * Quorum queues: reintroduced Raft WAL max entries default of 500K. GitHub issue: [#16382](https://github.com/rabbitmq/rabbitmq-server/pull/16382) * A quorum queue could crash during recovery after an unclean shutdown PR: [rabbitmq/ra#629](https://github.com/rabbitmq/ra/pull/629) * Stream queue argument validation was improved. GitHub issue: [#16285](https://github.com/rabbitmq/rabbitmq-server/pull/16285) ###### Enhancements * `channel_max` was renamed to `max_channels` in `rabbitmq.conf`. The original name is still supported as an alias. GitHub issue: [#16347](https://github.com/rabbitmq/rabbitmq-server/pull/16347) * `connection_max` was renamed to `max_connections` in `rabbitmq.conf`. The original name is still supported as an alias. GitHub issue: [#16347](https://github.com/rabbitmq/rabbitmq-server/pull/16347) * The per-node `max_connections` limit is now enforced for AMQP 1.0 connections as well as AMQP 0-9-1 ones. GitHub issue: [#16300](https://github.com/rabbitmq/rabbitmq-server/pull/16300) * When a plain-text client connects to a TLS listener (or vice versa) for AMQP 0-9-1, MQTT, STOMP, and the Stream protoco _[Truncated at 4000 characters — full notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.3.1]_ ### v4.2.7 — RabbitMQ 4.2.7 - Date: 2026-05-19 - Version: v4.2.7 - Original notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.2.7 - Permalink: https://whatsnew.fyi/product/rabbitmq/releases/v4.2.7 - **fixed** — A virtual host could be falsely considered to be deleted in certain metadata store error and timeout scenarios - **fixed** — Passive queue and exchange declarations are now allowed for users that have any permission on the virtual host, not only configure - **fixed** — Classic queue message store garbage collection is now stopped cleanly during node shutdown - **fixed** — Fixed a bug where quorum queue's at-least-once dead lettering could direct commands to the wrong member - **changed** — Stream queue argument validation was improved - **changed** — channel_max was renamed to max_channels in rabbitmq.conf with the original name still supported as an alias - **changed** — connection_max was renamed to max_connections in rabbitmq.conf with the original name still supported as an alias - **changed** — The per-node max_connections limit is now enforced for AMQP 1.0 connections as well as AMQP 0-9-1 ones - **changed** — The permission cache is now traversed less often during AMQP 1.0 management and AMQP 0-9-1 channel checks - **fixed** — Stream protocol open frame with empty properties is now handled correctly - **added** — It is now possible to cap the maximum number of concurrent Stream Protocol client connections using the stream.max_connections configuration key - **fixed** — HTTP API GET /api/connections could return a 500 response when STOMP connections were present - **added** — It is now possible to cap the maximum number of concurrent HTTP API connections using management.tcp.max_connections and management.ssl.max_connections configuration keys - **changed** — The peer certificate serial number is now exposed in the management UI and select CLI commands - **added** — It is now possible to cap the maximum number of concurrent HTTP API connections using prometheus.tcp.max_connections and prometheus.ssl.max_connections configuration keys - **fixed** — The MQTT connection process no longer fails and logs an exception when keepalive checks encounter socket errors on an already-closed connection - **added** — It is now possible to cap the maximum number of concurrent MQTT client connections using the mqtt.max_connections configuration key - **fixed** — Federation links could fail to start during rolling cluster restarts - **added** — New rabbitmq.conf configuration settings for TLS cipher suites: auth_ldap.ssl_options.ciphers - **added** — New rabbitmq.conf configuration settings for TLS cipher suites: auth_http.ssl_options.ciphers - **fixed** — The cache was not effective for reconnecting clients in the Auth Backend Cache Plugin RabbitMQ `4.2.7` is a maintenance release in the `4.2.x` [release series](https://www.rabbitmq.com/release-information). It is **strongly recommended** that you read [4.2.0 release notes](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.2.0) in detail if upgrading from a version prior to `4.2.0`. ###### Minimum Supported Erlang Version [RabbitMQ and Erlang/OTP Compatibility Matrix](https://www.rabbitmq.com/docs/which-erlang) has more details on Erlang version requirements for RabbitMQ. Nodes **will fail to start** on older Erlang releases. ##### Changes Worth Mentioning Release notes can be found on GitHub at [rabbitmq-server/release-notes](https://github.com/rabbitmq/rabbitmq-server/tree/v4.2.x/release-notes). ###### Core Server ###### Bug Fixes * A virtual host could be falsely considered to be deleted in certain metadata store error and timeout scenarios. GitHub issue: [#16422](https://github.com/rabbitmq/rabbitmq-server/pull/16422) * Passive queue and exchange declarations are now allowed for users that have **any** permission on the virtual host (`configure`, `write`, or `read`), not only `configure`. GitHub issue: [#16272](https://github.com/rabbitmq/rabbitmq-server/pull/16272) * Classic queue message store: garbage collection is now stopped cleanly during node shutdown. GitHub issue: [#15498](https://github.com/rabbitmq/rabbitmq-server/pull/15498) * Fixed a bug where quorum queue's at-least-once dead lettering could direct commands to the wrong member (replica). GitHub issue: [#16203](https://github.com/rabbitmq/rabbitmq-server/pull/16203) * Stream queue argument validation was improved. GitHub issue: [#16285](https://github.com/rabbitmq/rabbitmq-server/pull/16285) ###### Enhancements * `channel_max` was renamed to `max_channels` in `rabbitmq.conf`. The original name is still supported as an alias. GitHub issue: [#16347](https://github.com/rabbitmq/rabbitmq-server/pull/16347) * `connection_max` was renamed to `max_connections` in `rabbitmq.conf`. The original name is still supported as an alias. GitHub issue: [#16347](https://github.com/rabbitmq/rabbitmq-server/pull/16347) * The per-node `max_connections` limit is now enforced for AMQP 1.0 connections as well as AMQP 0-9-1 ones. GitHub issue: [#16300](https://github.com/rabbitmq/rabbitmq-server/pull/16300) * The permission cache is now traversed less often during AMQP 1.0 management and AMQP 0-9-1 channel checks. GitHub issue: [#16274](https://github.com/rabbitmq/rabbitmq-server/pull/16274) ###### Stream Plugin ###### Bug Fixes * Stream protocol: an `open` frame with empty properties is now handled correctly. GitHub issue: [#16341](https://github.com/rabbitmq/rabbitmq-server/pull/16341) ###### Enhancements * It is now possible to cap the maximum number of concurrent Stream Protocol client connections using the `stream.max_connections` configuration key in `rabbitmq.conf`. GitHub issue: [#16341](https://github.com/rabbitmq/rabbitmq-server/pull/16341) ###### Management Plugin ###### Bug Fixes * HTTP API `GET /api/connections` could return a 500 response when STOMP connections were present. GitHub issue: [#16435](https://github.com/rabbitmq/rabbitmq-server/pull/16435) ###### Enhancements * It is now possible to cap the maximum number of concurrent HTTP API connections using the `management.tcp.max_connections`, `management.ssl.max_connections` configuration keys in `rabbitmq.conf`. GitHub issue: [#16407](https://github.com/rabbitmq/rabbitmq-server/pull/16407) * The peer (client) certificate serial number is now exposed in the management UI and select CLI commands. GitHub issue: [#16463](https://github.com/rabbitmq/rabbitmq-server/pull/16463) ###### Prometheus Plugin ###### Enhancements * It is now possible to cap the maximum number of c _[Truncated at 4000 characters — full notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.2.7]_ ### v4.3.0 — RabbitMQ 4.3.0 - Date: 2026-04-23 - Version: v4.3.0 - Original notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.3.0 - Permalink: https://whatsnew.fyi/product/rabbitmq/releases/v4.3.0 - **removed** — Remove Mnesia partition handling configuration keys cluster_partition_handling, cluster_partition_handling.pause_if_all_down.recover, and cluster_partition_handling.pause_if_all_down.nodes.$name - **changed** — Transient non-exclusive queues are now disabled by default and require opt-in via deprecated_features.permit.transient_nonexcl_queues configuration - **removed** — Remove Classic Queues v1 storage (CQv1) implementation - **removed** — Reject queue declarations using x-queue-mode or x-queue-version set to 1 - **changed** — Move consumer timeout handling responsibility into queues themselves and evaluate consumer timeouts for all queue types except classic queues and streams - **removed** — Remove Mnesia as metadata store, leaving Khepri as the only supported metadata store - **changed** — Require cluster availability when a majority of nodes must be online at all times due to Khepri-only metadata store - **added** — Add strict priority queues for quorum queues with per-priority message counts, correct redelivery ordering, and priority-aware message expiration - **added** — Add delayed retry for quorum queues with configurable increasing backoff when messages are returned - **added** — Add consumer timeout for quorum queues with configurable timeout for unacknowledged messages and protocol-specific handling for AMQP 1.0 and MQTT - **added** — Add recovery snapshots and snapshot throttling for quorum queues to reduce recovery time and improve snapshotting decisions - **changed** — Introduce 8th version of quorum queue state machine with memory optimisations including compact message references and optimised tuple storage - **changed** — Upgrade Ra dependency to version 3.x RabbitMQ `4.3.0` is a new feature release. ##### Breaking Changes and Compatibility Notes ###### Mnesia and Parition Handling Strategies are Removed Since only `4.2.x` clusters can upgrade to `4.3.0` [in place](https://www.rabbitmq.com/docs/upgrade), this won't be a breaking change for nearly all instalations but it will affect community plugins that use Mnesia. All partition handling-related keys in `rabbitmq.conf` will be accepted by `4.3.0` nodes but won't have any effect: * `cluster_partition_handling` * `cluster_partition_handling.pause_if_all_down.recover` * `cluster_partition_handling.pause_if_all_down.nodes.$name` Team RabbitMQ recommends removing the above keys from `rabbitmq.conf` before or shortly after upgrading. ###### Deprecated Features are Now Disabled by Default A number of [deprecated features](https://www.rabbitmq.com/docs/deprecated-features) are now disabled by default and require the user to opt-in in order to use them. This includes [non-durable (transient) non-exclusive](https://www.rabbitmq.com/docs/queues) queues: attempts to declare a queue with such property combination will be rejected by default. Use durable queues, transient exclusive queues, or durable queues with a [queue TTL](https://www.rabbitmq.com/docs/ttl#queue-ttl) instead. To explicitly allow transient non-exclusive queues, make sure that **all nodes in the cluster** include the following `rabbitmq.conf` key and were restarted so that all nodes have a consistent view of the deprecated feature settings: ```ini #### Enables deprecated non-durable (transient) non-exclusive queues #### (disabled by default as of RabbitMQ `4.3.0`, will be removed in a later version). #### #### Must be effective on all cluster nodes BEFORE #### the cluster is upgraded to `4.3.0`. #### If only some nodes have the setting configured, it will not have the desired effect. deprecated_features.permit.transient_nonexcl_queues = true ``` If only some nodes have setting configured, it will not have the desired effect. ###### Classic Queues v1 Storage (CQv1) is Removed This release removes the original classic queue storage implementation these days known as CQv1. A 2nd generation implementation called CQv2 has been adopted as the default starting with `4.2.0`. This means that attempts to declare a queue using the following [optional queue arguments](https://www.rabbitmq.com/docs/queues#optional-arguments) will fail: * `x-queue-mode` set to any value * `x-queue-version` set to `1` Existing classic queues upgraded to CQv2 during an earlier upgrade to `4.2.x` will continue operating as usual. ###### Consumer Timeouts are No Longer Evaluated for Classic Queues and Streams This release moves consumer timeout handling responsibility into the queues themselves. Also, all protocols (except for the stream protocol) now evaluate consumer timeout for queue types that support them. Classic queues and streams never evaluate consumer timeouts as their use cases largely avoid the need for such as feature. ##### Release Highlights ###### Khepri is Now The Only Metadata Store As of this release, Khepri is the only [metadata store](https://www.rabbitmq.com/docs/metadata-store) supported by RabbitMQ: Mnesia was removed completely. In practical operational terms, this means that 1. For a cluster to be available, a majority of nodes must be online at all times 2. Failure and partition recovery in a RabbitMQ cluster is now significantly simpler and uniform: all components that have replicated state (Khepri, quorum queues, streams) recover per Raft recovery semantics ###### Quorum Queues Enhancements This release upgrades the [Ra](https://github.com/rabbitmq/ra) dependency to `3.x` and introduces a new (8th) version of the quorum queue state machine with several new features and optimisations: * **Strict priority queues** with per-priority message counts, correct _[Truncated at 4000 characters — full notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.3.0]_ ### v4.2.6 — RabbitMQ 4.2.6 - Date: 2026-04-23 - Version: v4.2.6 - Original notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.2.6 - Permalink: https://whatsnew.fyi/product/rabbitmq/releases/v4.2.6 - **fixed** — Quorum queues: get_checked_out aux command could return messages in incorrect order - **fixed** — rabbitmqctl forget_cluster_node now removes all quorum queue and stream members before proceeding to leave the metadata store cluster - **fixed** — Channel limit exceeded error message now correctly identifies the per-user limit as the reason - **fixed** — AMQP 0-9-1: configure permission checks now apply to passive queue and exchange declarations - **fixed** — Khepri: missing keys are now correctly distinguished from errors in certain internal operations - **fixed** — Bindings targeting Direct Reply-to pseudo-queues are now rejected instead of being silently accepted - **changed** — More rabbitmq.conf keys now accept tagged values - **changed** — Quorum queue members are stopped in parallel when deleted from a node via rabbitmq-queues shrink or rabbitmqctl forget_cluster_node - **changed** — AMQP 0-9-1: when a connection's credentials are refreshed, the permissions cache is now cleared and consumer permissions are re-validated immediately - **fixed** — effective_policy_definition in HTTP API responses now returns an empty JSON object when no policy applies to a queue - **fixed** — Management UI: OAuth 2 combined with basic_auth could fail to reload provider configuration correctly - **fixed** — Management UI: preference cookie expiry now respects the configured session timeout setting - **fixed** — Management UI: users are no longer presented with a 401 error after changing their own password, session is now refreshed automatically - **removed** — The deprecated GET /api/auth endpoint was removed - **fixed** — POST /api/users/bulk-delete now respects the protected_users configuration - **fixed** — Quorum queue status and stream tracking endpoints now enforce virtual host access checks - **changed** — HTTP API displays static connection info even when stats collection is disabled - **changed** — Super stream creation via HTTP API now verifies configure permission - **changed** — Management API regex filters now enforce match limits to prevent pathological patterns from consuming excessive CPU time - **fixed** — Fixed a timing-sensitive issue around Last Will message delivery and session expiration in MQTT plugin - **changed** — MQTT QoS 0 queue type now reports member information in management API responses RabbitMQ `4.2.6` is a maintenance release in the `4.2.x` [release series](https://www.rabbitmq.com/release-information). It is **strongly recommended** that you read [4.2.0 release notes](https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.2.0) in detail if upgrading from a version prior to `4.2.0`. ###### Minimum Supported Erlang Version [RabbitMQ and Erlang/OTP Compatibility Matrix](https://www.rabbitmq.com/docs/which-erlang) has more details on Erlang version requirements for RabbitMQ. Nodes **will fail to start** on older Erlang releases. ##### Changes Worth Mentioning Release notes can be found on GitHub at [rabbitmq-server/release-notes](https://github.com/rabbitmq/rabbitmq-server/tree/v4.2.x/release-notes). ###### Core Server ###### Bug Fixes * Quorum queues: `get_checked_out` aux command could return messages in incorrect order GitHub issue: [#16008](https://github.com/rabbitmq/rabbitmq-server/pull/16008) * `rabbitmqctl forget_cluster_node` now removes all quorum queue and stream members (replicas) before proceeding to leave the metadata store cluster. This order minimizes the risk of some replicas being left behind on the leaving node. GitHub issue: [#15729](https://github.com/rabbitmq/rabbitmq-server/pull/15729) * The channel limit exceeded error message now correctly identifies the per-user limit as the reason GitHub issue: [#15750](https://github.com/rabbitmq/rabbitmq-server/pull/15750) * AMQP 0-9-1: `configure` permission checks now apply to passive queue and exchange declarations, matching the behavior of their regular counterparts * Khepri: missing keys are now correctly distinguished from errors in certain internal operations, avoiding spurious error-level log messages GitHub issue: [#15942](https://github.com/rabbitmq/rabbitmq-server/pull/15942) * Bindings targeting [Direct Reply-to](https://www.rabbitmq.com/docs/direct-reply-to) pseudo-queues are now rejected instead of being silently accepted without any functional effect GitHub issue: [#15935](https://github.com/rabbitmq/rabbitmq-server/pull/15935) ###### Enhancements * More `rabbitmq.conf` keys now accept tagged values (e.g., `encrypted:...`) GitHub issue: [#15808](https://github.com/rabbitmq/rabbitmq-server/pull/15808) * When quorum queue members (replicas) are deleted from a node, either manually via `rabbitmq-queues shrink` or as part of `rabbitmqctl forget_cluster_node`, the members are stopped in parallel GitHub issue: [#15081](https://github.com/rabbitmq/rabbitmq-server/pull/15081) * AMQP 0-9-1: `configure` permission checks now apply to passive queue and exchange declarations, matching the behavior of their regular counterparts GitHub issue: [#16085](https://github.com/rabbitmq/rabbitmq-server/pull/16085) * AMQP 0-9-1: when a connection's credentials are refreshed, the permissions cache is now cleared and consumer permissions are re-validated immediately GitHub issue: [#16092](https://github.com/rabbitmq/rabbitmq-server/pull/16092) ###### Management Plugin ###### Bug Fixes * `effective_policy_definition` in HTTP API responses now returns an empty JSON object (not an array or empty string) when no policy applies to a queue GitHub issue: [#16017](https://github.com/rabbitmq/rabbitmq-server/pull/16017) * Management UI: OAuth 2 combined with basic_auth could fail to reload provider configuration correctly GitHub issue: [#15858](https://github.com/rabbitmq/rabbitmq-server/issues/15858) * Management UI: preference cookie expiry now respects the configured session timeout setting rather than using a hardcoded value GitHub issue: [#15814](https://github.com/rabbitmq/rabbitmq-server/pull/15814) * Management UI: users were presented with a 401 error after changing their own password via the UI. The session is now refreshed automati _[Truncated at 4000 characters — full notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.2.6]_ ### v4.3.0-rc.1 — RabbitMQ 4.3.0-rc.1 - Date: 2026-04-20 - Version: v4.3.0-rc.1 - Original notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.3.0-rc.1 - Permalink: https://whatsnew.fyi/product/rabbitmq/releases/v4.3.0-rc.1 - Labels: Pre-release - **removed** — Mnesia and partition handling strategies are removed; cluster_partition_handling and related configuration keys are no longer supported - **removed** — Classic Queues v1 Storage (CQv1) implementation is removed - **changed** — Non-durable non-exclusive queues are now disabled by default and require opt-in to use - **changed** — Consumer timeout handling is moved into queues themselves; classic queues and streams no longer evaluate consumer timeouts - **changed** — Khepri is now the only metadata store; Mnesia was removed completely - **added** — Quorum queues now support strict priority queues with per-priority message counts and priority-aware message expiration - **added** — Quorum queues now support delayed retry with configurable increasing backoff when messages are returned - **added** — Quorum queues now support consumer timeout for unacknowledged messages with protocol-specific handling for AMQP 1.0 and MQTT - **added** — Quorum queues now include recovery snapshots and snapshot throttling to reduce recovery time - **changed** — Quorum queues include memory optimisations including compact message references and optimised tuple storage for delayed keys - **removed** — Deprecated feature ram_node_type is removed - **changed** — Deprecated features amqp_address_v1, amqp_filter_set_bug, global_qos, queue_master_locator, and transient_nonexcl_queues are now denied by default instead of permitted by default - **changed** — Ra dependency is upgraded to version 3.x - **changed** — Quorum queue state machine is upgraded to version 8 with new features and optimisations RabbitMQ `4.3.0-rc.1` is a new feature release candidate. ##### Breaking Changes and Compatibility Notes ###### Mnesia and Parition Handling Strategies are Removed Since only `4.2.x` clusters can upgrade to `4.3.0` [in place](https://www.rabbitmq.com/docs/upgrade), this won't be a breaking change for nearly all instalations but it will affect community plugins that use Mnesia. All partition handling-related keys in `rabbitmq.conf` will be accepted by `4.3.0` nodes but won't have any effect: * `cluster_partition_handling` * `cluster_partition_handling.pause_if_all_down.recover` * `cluster_partition_handling.pause_if_all_down.nodes.$name` Team RabbitMQ recommends removing the above keys from `rabbitmq.conf` before or shortly after upgrading. ###### Deprecated Features are Now Disabled by Default A number of [deprecated features](https://www.rabbitmq.com/docs/deprecated-features) are now disabled by default and require the user to opt-in in order to use them. This includes [non-durable (transient) non-exclusive](https://www.rabbitmq.com/docs/queues) queues: attempts to declare a queue with such property combination will be rejected by default. Use durable queues or transient exclusive queues instead. ###### Classic Queues v1 Storage (CQv1) is Removed This release removes the original classic queue storage implementation these days known as CQv1. A 2nd generation implementation called CQv2 has been adopted as the default starting with `4.2.0`. This means that attempts to declare a queue using the following [optional queue arguments](https://www.rabbitmq.com/docs/queues#optional-arguments) will fail: * `x-queue-mode` set to any value * `x-queue-version` set to `1` Existing classic queues upgraded to CQv2 during an earlier upgrade to `4.2.x` will continue operating as usual. ###### Consumer Timeouts are No Longer Evaluated for Classic Queues and Streams This release moves consumer timeout handling responsibility into the queues themselves. Also, all protocols (except for the stream protocol) now evaluate consumer timeout for queue types that support them. Classic queues and streams never evaluate consumer timeouts as their use cases largely avoid the need for such as feature. ##### Release Highlights ###### Khepri is Now The Only Metadata Store As of this release, Khepri is the only [metadata store](https://www.rabbitmq.com/docs/metadata-store) supported by RabbitMQ: Mnesia was removed completely. In practical operational terms, this means that 1. For a cluster to be available, a majority of nodes must be online at all times 2. Failure and partition recovery in a RabbitMQ cluster is now significantly simpler and uniform: all components that have replicated state (Khepri, quorum queues, streams) recover per Raft recovery semantics ###### Quorum Queues Enhancements This release upgrades the [Ra](https://github.com/rabbitmq/ra) dependency to `3.x` and introduces a new (8th) version of the quorum queue state machine with several new features and optimisations: * **Strict priority queues** with per-priority message counts, correct redelivery ordering, and priority-aware message expiration * **Delayed retry** for quorum queues: configurable increasing backoff when messages are returned * **Consumer timeout** for quorum queues: configurable timeout for unacknowledged messages, with protocol-specific handling for AMQP 1.0 and MQTT * **Recovery snapshots** and **snapshot throttling** to reduce recovery time and improve snapshotting decisions * **Memory optimisations** including compact message references, optimised tuple storage for delayed keys, and removal of `rabbit_fifo_index` usage ##### Upgrading to 4.3.0 ###### Documentation Guides on Upgrades See the [Upgrading guide](https://www.rabbitmq.com/docs/upgrade) for documentation on upgrades and [GitHub releases](https://github.com/rabbit _[Truncated at 4000 characters — full notes: https://github.com/rabbitmq/rabbitmq-server/releases/tag/v4.3.0-rc.1]_