RabbitMQ comes with a UI, and it does the job. But if you use RabbitMQ every day, the small frictions add up: logging in again for every environment, "getting" messages that you then have to requeue, typing JSON into a plain text area. This is the story of why we built RabbitGUI, a desktop RabbitMQ UI for Mac, Windows and Linux, and what we changed.
The built-in RabbitMQ UI
Yes, RabbitMQ comes with a built-in UI, the management plugin. This is what 99% of people using RabbitMQ use today. And to be frank, it is an incredibly useful piece of software. It might be old and not the most user-friendly tool you've used, but it gets the job done. It lives at http://localhost:15672 (see RabbitMQ ports for why 15672 and not 5672), and on a fresh install you log in with the RabbitMQ default login, guest / guest.
The interface is also incredibly stable. It has barely changed in a decade, and it never breaks on you as a result. If you are new to it, our complete guide to the RabbitMQ Management UI walks through every tab.
What the management plugin gets wrong
None of these are bugs. They are design choices that made sense for a web admin panel bundled with the broker, but they hurt when the UI is your daily debugging tool.
One broker per tab, one login per broker
The management UI is served by each broker. Local, staging and production are three URLs, three logins, and three tabs that look exactly the same. Sessions expire, so you log in again. Most teams end up with a folder of bookmarks and a password manager doing the work a connection list should do.
Reading a message means consuming it
There is no way to look at a message without taking it off the queue. "Get messages" consumes messages and, depending on the ack mode you pick, either requeues them (which sets the redelivered flag and can change their order) or drops them. You also read them one long list at a time, with no search and no filter. That is fine for one test message. It is painful for a dead-letter queue with 4,000 messages, and the wrong ack mode deletes data. We wrote more about this in how to browse RabbitMQ messages without consuming them.
Large payloads are truncated
The UI cuts payloads off at 50,000 characters, so big JSON documents show up incomplete (see RabbitMQ max message size).
Publishing is a text area
To send a test message you type the payload into a plain text box and the headers into key/value fields. No syntax highlighting, no validation, no formatting. One missing comma and your consumer rejects the message.
Routing is spread across pages
Bindings live on the exchange page and on the queue page. Dead-letter exchanges and alternate exchanges are hidden in arguments and policies. Names are mostly plain text, so following a message from an exchange to its queue and on to its dead-letter queue means a lot of copy, paste and filter.
No search across the broker
The list pages have a filter box, but there is no global "jump to" that finds a queue, exchange or vhost from anywhere.
Why we needed something better
When you use a tool every day, those frustrations add up. Combine that with the addiction of building tools, and the spark goes off pretty quickly. After fighting the urge to stop everything and build the tool I wished existed, I ended up writing the first lines of code for what would become RabbitGUI.
It was a tedious start, since the management HTTP API is only lightly documented, so there was a lot of reverse engineering at first. Once the first bricks were in place, I could finally focus on the experience I had in mind. If you are curious about the internals, we wrote about how we built RabbitGUI with Electron.
Our proudest improvements for RabbitGUI
Here are the features I am the most proud of, the ones that really motivated me to get RabbitGUI started. They are not just a polished version of something you could already do, but a rethink of how to get the job done much, much faster.
All your connections in a single place
This is the most common complaint about the management UI: switching environments means switching tabs and logging in again. Can you imagine doing that for database connections?
This is the welcome screen of RabbitGUI. Just like a database tool, you add as many connections as you need and never see a login screen again. Your credentials are stored encrypted on your machine, see how security is built into RabbitGUI for how encryption and offline use work.
To switch environment later, a quick access menu at the top lets you jump to any connection instantly while keeping your context.
Finally, a way to manage dead-letter queues
This could be an app of its own, given how bad the problem is. RabbitMQ has no way to explore the messages sitting in a queue, which makes dead-letter management tedious and painful.
RabbitGUI consumes the queue locally and stores the messages in a database on your machine. With every message local, you can search and filter at will, without the constraints of RabbitMQ.
Explore, search and filter messages, select the ones you are interested in, and republish only those, either to their original queue or to any queue you choose.
If you want to know more about how RabbitGUI handles dead letters, we wrote a dedicated article: dead-letter queue introspection with RabbitGUI.
Watch live traffic without touching consumers
To see what is flowing through a queue right now, RabbitGUI creates a temporary shadow queue with the same bindings and captures a copy of every message. Your consumers keep working as if nothing happened. The details are in how to spy on real-time queue traffic.
An actual JSON editor to send messages
This one is so obvious, I do not understand why the management plugin does not have it. Writing JSON by hand in a text area is painful, and the chance of making a mistake is high. For RabbitGUI, I took the editor from VS Code and put it right into the app.
We have a dedicated article that goes more in depth about publishing messages to RabbitMQ. As a bonus, it also compares it with the publish form of the management plugin.
Buttery-smooth navigation
Navigation was a big focus for RabbitGUI. I didn't see it as a single feature, but as a set of principles that make the user's life much easier.
The first thing users expect is a reliable quick search from anywhere. So we implemented the classic CMD+K to search for anything (queue, exchange, vhost...) using the same string matching and highlighting algorithm as WebStorm.
Once you can jump to anything, the next cornerstone of navigation is hopping from one entity to another by clicking on it. Anytime you see the name of an entity, whether in bindings, settings, a dead-letter exchange, an alternate exchange or a policy, you can click on it.
The last piece of the puzzle is managing routing in a single place. It builds on clickable names, but most importantly it groups bindings, dead-letter queues and alternate exchanges in one view. We wrote an entire article on exploring RabbitMQ bindings if you are curious.
Management plugin vs RabbitGUI at a glance
| Task | Management plugin | RabbitGUI |
|---|---|---|
| Switch between brokers | New tab and login per broker | Saved connections, one click |
| Read messages in a queue | "Get messages", consumes then requeues or drops | Browse, search and filter locally |
| Replay dead letters | Shovel or a script | Select messages, republish, throttle |
| Watch live traffic | Not available | Spy via a temporary shadow queue |
| Publish a JSON message | Plain text area | VS Code editor |
| Find a queue or exchange | Filter box per list page |
CMD+K from anywhere |
| Follow routing | Bindings split across pages | Clickable names, one routing view |
| Where it runs | In the broker, in your browser | Desktop app for Mac, Windows and Linux |
The management plugin still wins on one thing: it is already there, on every broker, for free. RabbitGUI talks to the same management API, so you keep the plugin enabled and use whichever fits the task.
Compared with other tools
RabbitGUI is not the only alternative. If you are evaluating options, we keep sourced, side-by-side comparisons up to date:
- The best RabbitMQ GUI clients, an overview of every desktop, web and CLI option
- RabbitMQ Management UI alternatives
- RabbitGUI vs the Management UI, feature by feature
- RabbitGUI vs QueueExplorer
Wrapping up
Those are only the features we are the most proud of. RabbitGUI is built with love, and a lot of small details went into it. For backlog ETAs, see queue drain time. If you want to know what is coming next, check out our public roadmap. And if there is something you've always wanted in a RabbitMQ UI, give us some feedback to shape what we build next.
You can download RabbitGUI and connect it to your local broker in a minute.
Originally published on the RabbitGUI blog.








Top comments (0)