RabbitMQ website and documentation guides
JavaScript HTML PHP XSLT CSS Python Other
Switch branches/tags
rabbitmq_v3_7_0_milestone18 rabbitmq_v3_7_0_milestone17 rabbitmq_v3_7_0_milestone16 rabbitmq_v3_7_0_milestone15 rabbitmq_v3_7_0_milestone14 rabbitmq_v3_7_0_milestone13 rabbitmq_v3_7_0_milestone12 rabbitmq_v3_7_0_milestone11 rabbitmq_v3_7_0_milestone10 rabbitmq_v3_7_0_milestone9 rabbitmq_v3_7_0_milestone8 rabbitmq_v3_7_0_milestone7 rabbitmq_v3_7_0_milestone6 rabbitmq_v3_7_0_milestone5 rabbitmq_v3_7_0_milestone4 rabbitmq_v3_7_0_milestone3 rabbitmq_v3_7_0_milestone2 rabbitmq_v3_7_0_milestone1 rabbitmq_v3_6_14 rabbitmq_v3_6_13 rabbitmq_v3_6_13_rc2 rabbitmq_v3_6_13_rc1 rabbitmq_v3_6_13_milestone1 rabbitmq_v3_6_12 rabbitmq_v3_6_12_rc3 rabbitmq_v3_6_12_rc2 rabbitmq_v3_6_12_rc1 rabbitmq_v3_6_11 rabbitmq_v3_6_11_rc3 rabbitmq_v3_6_11_rc2 rabbitmq_v3_6_11_rc1 rabbitmq_v3_6_11_milestone5 rabbitmq_v3_6_11_milestone4 rabbitmq_v3_6_11_milestone3 rabbitmq_v3_6_11_milestone2 rabbitmq_v3_6_11_milestone1 rabbitmq_v3_6_10 rabbitmq_v3_6_10_rc2 rabbitmq_v3_6_10_rc1 rabbitmq_v3_6_10_milestone4 rabbitmq_v3_6_10_milestone3 rabbitmq_v3_6_10_milestone2 rabbitmq_v3_6_10_milestone1 rabbitmq_v3_6_9 rabbitmq_v3_6_8 rabbitmq_v3_6_7 rabbitmq_v3_6_7_rc3 rabbitmq_v3_6_7_rc2 rabbitmq_v3_6_7_rc1 rabbitmq_v3_6_7_milestone6 rabbitmq_v3_6_7_milestone5 rabbitmq_v3_6_7_milestone4 rabbitmq_v3_6_7_milestone3 rabbitmq_v3_6_7_milestone2 rabbitmq_v3_6_7_milestone1 rabbitmq_v3_6_6 rabbitmq_v3_6_6_rc2 rabbitmq_v3_6_6_rc1 rabbitmq_v3_6_6_milestone5 rabbitmq_v3_6_6_milestone4 rabbitmq_v3_6_6_milestone3 rabbitmq_v3_6_6_milestone2 rabbitmq_v3_6_6_milestone1 rabbitmq_v3_6_5 rabbitmq_v3_6_5_milestone2 rabbitmq_v3_6_5_milestone1 rabbitmq_v3_6_4 rabbitmq_v3_6_4_rc1 rabbitmq_v3_6_4_milestone2 rabbitmq_v3_6_4_milestone1 rabbitmq_v3_6_3 rabbitmq_v3_6_3_rc3 rabbitmq_v3_6_3_rc2 rabbitmq_v3_6_3_rc1 rabbitmq_v3_6_3_milestone2 rabbitmq_v3_6_3_milestone1 rabbitmq_v3_6_2 rabbitmq_v3_6_2_rc4 rabbitmq_v3_6_2_rc3 rabbitmq_v3_6_2_rc2 rabbitmq_v3_6_2_rc1 rabbitmq_v3_6_2_milestone5 rabbitmq_v3_6_2_milestone4 rabbitmq_v3_6_2_milestone3 rabbitmq_v3_6_2_milestone2 rabbitmq_v3_6_2_milestone1 rabbitmq_v3_6_1 rabbitmq_v3_6_1_rc2 rabbitmq_v3_6_1_rc1 rabbitmq_v3_6_0 rabbitmq_v3_6_0_rc3 rabbitmq_v3_6_0_rc2 rabbitmq_v3_6_0_rc1 rabbitmq_v3_6_0_milestone3 rabbitmq_v3_6_0_milestone2 rabbitmq_v3_5_7 pre_early_2017_redesign
Nothing to show
Clone or download
kjnilsson Don't use self-closing script tag.
As this stops the blog from rendering.
Latest commit b213539 Jul 13, 2018



This repository contains source code for rabbitmq.com content.

All changes that need to be deployed right away need to be committed to the live branch.

Changes which should be deployed when the next patch release (a.k.a. stable) of RabbitMQ ships should be committed to the stable branch.

Changes which should be deployed when the next 3.6.x patch release of RabbitMQ ships should be committed to the 3.6.x branch.

Changes which should be deployed when the next minor release (a.k.a. master) of RabbitMQ ships should be committed to the master branch.


There are a few noteworthy and long-lived named branches in this repository:

Branch Description
live The current version of the website. This must represent whatever's deployed to www.rabbitmq.com.
stable Changes to the website that will correspond to the next point (maintenance) release of RabbitMQ. This gets merged into live when a 3.7.x release occurs.
3.6.x Same as stable but for RabbitMQ 3.6.x. This gets merged into live when a 3.6.x release occurs.
master Changes to the website that will correspond to the next minor release of RabbitMQ. Periodically deployed to next.rabbitmq.com. This gets merged into stable and then live when a minor release occurs.

Development environment

Running a Local Copy

The site requires Python 3.6 at least and Python XSLT support for development, and assumes Apache is used for deployment. You can use pyenv to install the appropriate Python version without affecting the version(s) you alreay have and use on your system. You can also use your OS native package manager, but be aware that those packages are often out-of-date. For simple development on Debian-based systems, it is enough to run

sudo apt-get install python-lxml python-markdown python-pygments

to install required dependencies and then

./driver.py [www|next|previous]

from the base of the repository to run a local version of the site, with page regeneration on reload. The site will be available at http://localhost:8191. Note that using driver.py the site will not feature:

  • Any release artefacts (this includes the web versions of the man pages)
  • The blog

The script diagrams.py generates PNGs from graph descriptions embedded in files. Generally you don't need to run this, since we check the PNGs in, but if you do want to use it, you'll also need dot:

sudo apt-get install graphviz

If you want the site/news.atom feed generated, you can run the following command:

xsltproc --novalid site/feed-atom.xsl site/news.xml > site/news.atom


Using Homebrew, you can install the necessary parts with:

brew install python
pip install lxml markdown

Using the system Python, you can install the necessary parts with:

sudo easy_install pip
sudo pip install lxml markdown


The website also has the concept of being deployed in modes. The three modes are:

Mode Description
www This is the "normal" mode. You would normally deploy from the live branch with this mode.
next This is the mode for next.rabbitmq.com. This mode has the home page and download page chopped down, no blog or search, and a watermark. You would normally deploy from the master branch with this mode.
previous For previous.rabbitmq.com. The website is reduced in the same way as "next", but this mode is meant for previous releases rather than future releases.

You determine which mode you are using with an argument to the driver or deploy scripts. Modes are implemented with the <x:modal/> tag and the $page-mode variable in XSLT.

Copyright and License