This repository contains open source RabbitMQ, a multi-protocol messaging and streaming broker that supports AMQP 1.0, AMQP 0-9-1, MQTTv5, the RabbitMQ Stream Protocol, STOMP 1.2, MQTT-over-WebSockets, and STOMP-over-WebSockets.
To learn more about RabbitMQ and its features, visit rabbitmq.com.
The mainline repository on GitHub is rabbitmq/rabbitmq-server,
the website repository is rabbitmq/rabbitmq-website.
The GNU Make 4-based build system is described in CONTRIBUTING.md.
Consult CONTRIBUTING.md before running any tests, in particular to learn how to run
a specific suite, group of cases or a single test case.
When looking for GNU Make 4, consult gmake as well as make.
Use gmake dialyze and gmake xref to run static code analysis tools
from individual deps/ component directories (see below).
deps/rabbit: the core RabbitMQ server, the most important part of the codebasedeps/rabbit_common: internal library for common modulesdeps/rabbitmq_amqp1_0: a no-op plugin that exists for backwards compatibility since AMQP 1.0 is a core protocol as of RabbitMQ 4.0deps/rabbitmq_amqp_client: Erlang AMQP 1.0 client with RabbitMQ-specific management operationsdeps/rabbitmq_auth_backend_http: external HTTP server-based authentication (authN), authorization (authZ) backenddeps/rabbitmq_auth_backend_internal_loopback: alocalhost-only version of the internal authN, authZ backenddeps/rabbitmq_auth_backend_ldap: LDAP authN, authZ plugindeps/rabbitmq_auth_backend_oauth2: OAuth 2.0 authN, authZ backenddeps/rabbitmq_auth_backend_cache: a caching layer for other authN, authZ backendsdeps/rabbitmq_auth_mechanism_ssl: X.509 certificate-based authentication supportdeps/rabbitmq_aws: AWS API client librarydeps/rabbitmq_cli: standard CLI tools (rabbitmqctl,rabbitmq-plugins,rabbitmq-diagnostics, etc.); note thatrabbitmqadminv2 lives in a separate repository,rabbitmq/rabbitmqadmin-ngdeps/rabbitmq_codegen: generates AMQP 0-9-1 serialization modules from machine-readable specification documentsdeps/rabbitmq_consistent_hash_exchange: consistent hashing exchange (x-consistent-hash)deps/rabbitmq_ct_client_helpers: Common Test helpers for managing connections, channelsdeps/rabbitmq_ct_helpers: Common Test helpers used by RabbitMQ test suitesdeps/rabbitmq_event_exchange: exposes internal events to AMQP 0-9-1 clientsdeps/rabbitmq_exchange_federation: exchange federationdeps/rabbitmq_queue_federation: queue federationdeps/rabbitmq_federation: a no-op plugin that depends onrabbitmq_queue_federationandrabbitmq_exchange_federationdeps/rabbitmq_federation_common: a common library used by federation pluginsdeps/rabbitmq_federation_management: management UI extension for federationdeps/rabbitmq_federation_prometheus: Prometheus metrics for federationdeps/rabbitmq_jms_topic_exchange: JMS topic exchange (x-jms-topic) with SQL selection rulesdeps/rabbitmq_management: management plugin, including the HTTP API and management UI codedeps/rabbitmq_management/priv/www: management UI codedeps/rabbitmq_management_agent: collects node-wide metrics reported by the management plugindeps/rabbitmq_mqtt: MQTT protocol supportdeps/rabbitmq_peer_discovery_aws: AWS EC2-based peer discoverydeps/rabbitmq_peer_discovery_common: common library for peer discovery backendsdeps/rabbitmq_peer_discovery_consul: Consul-based peer discoverydeps/rabbitmq_peer_discovery_etcd: etcd-based peer discovery (v3 API)deps/rabbitmq_peer_discovery_k8s: Kubernetes peer discoverydeps/rabbitmq_prelaunch: internal component used very early on node bootdeps/rabbitmq_prometheus: Prometheus plugindeps/rabbitmq_random_exchange: random exchange (x-random)deps/rabbitmq_recent_history_exchange: recent history exchange (x-recent-history)deps/rabbitmq_sharding: an opinionated exchange plugin that's lost relevance in the age of super streamsdeps/rabbitmq_shovel: the shovel plugindeps/rabbitmq_shovel_management: management UI extension for shoveldeps/rabbitmq_shovel_prometheus: Prometheus metrics for shoveldeps/rabbitmq_stomp: STOMP protocol supportdeps/rabbitmq_stream: the streaming subsystem and a RabbitMQ Stream Protocol implementationdeps/rabbitmq_stream_common: common library for streamsdeps/rabbitmq_stream_management: management UI extension for streamsdeps/rabbitmq_top:top-like Erlang runtime process viewerdeps/rabbitmq_tracing: a plugin that traces messagesdeps/rabbitmq_trust_store: an opinionated alternative to traditional TLS peer verificationdeps/rabbitmq_web_dispatch: a shared foundation for all HTTP- and WebSocket-based pluginsdeps/rabbitmq_web_mqtt: MQTT-over-WebSocketsdeps/rabbitmq_web_mqtt_examples: MQTT-over-WebSockets examples (with a Web UI part)deps/rabbitmq_web_stomp: STOMP-over-WebSocketsdeps/rabbitmq_web_stomp_examples: STOMP-over-WebSockets examples (with a Web UI part)docs/compatibility.json: machine-readable Erlang/Elixir compatibility matrix for all releases from 3.11.0 onwards. Seedocs/COMPATIBILITY.mdfor maintenance instructionsscriptscontains shell scripts that drive the server and CLI toolspackagingcontains some packaging-related code; release artifacts source can be found inrabbitmq/rabbitmq-packagingseleniumcontains Selenium tests for the management UI and the OAuth 2 pluginrelease-notescontains release notes all the way back to 1.0.0 previews
Dependency sources, repositories, and versions are defined in rabbitmq-components.mk.
These dependencies are cloned by gmake during the build process:
deps/ranchis Ranch, a socket acceptor library used by all protocol implementationsdeps/rais Ra, our Raft implementationdeps/atenisaten, an implementation of adaptive accrual failure detector for Radeps/osirisisosiris, a library that underpins the streaming subsystemdeps/khepriiskhepri, an embedded distributed Ra-based schema data storedeps/cuttlefishiscuttlefish, arabbitmq.confparser and translation librarydeps/cowboyis the HTTP server and API framework used by the RabbitMQ HTTP API and other HTTP and WebSockets-based pluginsdeps/thoasis Thoas, a JSON parser and generatordeps/seshatisseshat, a counters (metrics) library
erlang.mkis the heart of the Make-based build systemrabbitmq-components.mklists all dependencies, their sources (e.g. a Git repo orhex.pm) and target versionmk,./*.mk,deps/rabbit_common/mkare various Make files included intoMakefileebin,sbin,escript,pluginsdirectories contain build artifactslogscontains Common Test run logs. Inspect it when troubleshooting test failuresrebar.config: Rebar configuration; Rebar is used sparingly throughout the codebase; Make is the primary build tool
RabbitMQ targets Erlang 27.x and a reasonably recent Elixir (e.g. 1.18.x, 1.19.x).
Per-release Erlang and Elixir compatibility ranges in machine-readable format
can be found in docs/compatibility.json.
This repository uses GitHub Actions for CI and releases. Find them at their usual place in .github/workflows
and on the Web.
Jobs and run results can be inspected via gh on the command line.
rabbitmq/server-packagescontains workflows for producing open source RabbitMQ releasesrabbitmq/build-env-imagescontains OCI build environment images
- Only add very important comments, both in tests and in the implementation
- Keep comments concise and to the point
- Add comments above the line they are referring to, not at the end of the line (an example of what's not to do:
1 + 1. %% equals 2) - Make sure to use proper English grammar, in particular articles, punctuation and full stops at the end of sentences except for Markdown list items
- Never add yourself to the list of commit co-authors
- Never mention yourself in commit messages in any way (no "Generated by", no AI tool links, etc)
The currently developed branches are:
main(becomes 4.4.0)v4.3.xv4.2.xv4.1.x
When backporting commits to older branches,
always use git cherry-pick -x to include a reference to the original commit.
When fetching a GitHub pull request details or diffs, prefer the Web option over the gh CLI tool.
gh can require an explicit operation approval.
- Never add full stops to Markdown list items
After completing a task, perform up to twenty iterative reviews of your changes. In every iteration, look for meaningful improvements that were missed, for gaps in test coverage, and for deviations from the instructions in this file.
If no meaningful improvements are found for three iterations in a row, report it and stop iterating.