Parallels rq-dashboard for Python RQ monitoring
Flask-based web front-end for monitoring RQ queues
At a glance
- What is it?
- rq-dashboard is a lightweight Flask interface for inspecting RQ queues, jobs, and workers through Redis. It can run as a standalone command or a Flask blueprint, although the project still identifies itself as beta and its reverse proxy guidance is explicitly non-production.
- Who is it for?
- Adopt rq-dashboard when an engineering team needs a focused interface for RQ operations and is comfortable with a beta project and a custom license. Do not choose it as a production monitoring platform or for queue types beyond RQ.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 16 days ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The RQ monitoring gap addressed by rq-dashboard
Parallels rq-dashboard addresses the operational gap between Redis queue data and the workers and jobs placed there by RQ, the Python job queue library. Its stated audience is anyone running RQ who needs a web view of queues, queued jobs, running jobs, and workers without building those screens into an internal Flask application. The interface is intended for real-time monitoring, with a configurable refresh interval, rather than as a general Redis administration console.
The package is useful when the operational question is specifically about RQ. A team can inspect job state and worker activity from a browser instead of translating raw Redis keys into application-level information. That scope also defines where it is a poor fit. The documentation does not claim that rq-dashboard is a metrics database, alerting service, distributed tracing system, log viewer, or general-purpose Redis browser. Those jobs require different components.
The project remains explicitly in beta according to both the README and the `Development Status :: 4 - Beta` classifier in `setup.py`. Its migration notes point to a separate wiki page for moving to version 1.0, which is a direct signal that upgrade planning deserves attention. The repository is not archived, and its last push was on 2026-10-07. Recent release entries include v0.9.0 on 2026-07-02 and v0.8.7 on 2026-05-26.
Redis-backed Flask architecture and request flow
The repository uses a Flask blueprint as its central integration point. In the documented integration example, a host Flask application loads `rq_dashboard.default_settings`, calls `rq_dashboard.web.setup_rq_connection(app)`, and registers `rq_dashboard.blueprint` at `/rq`. Requests handled by the dashboard therefore travel through the host application, while the underlying connection is established from RQ dashboard configuration rather than from a separate service boundary.
For a standalone deployment, the `rq-dashboard` console entry point is defined as `rq_dashboard.cli:main`. The CLI starts a Flask server and accepts a Redis URL through `--redis-url`; this option may be supplied more than once. It defaults to `redis://127.0.0.1:6379`. Configuration can also come from environment variables named `RQ_DASHBOARD_*`, a Python module selected with `--config`, or a `.cfg` file selected through `RQ_DASHBOARD_SETTINGS`.
The repository's `docker-compose.yml` demonstrates an isolated service on host port `9181`. Its Redis variable uses the form `RQ_DASHBOARD_REDIS_URL`, and commented entries show `RQ_DASHBOARD_USERNAME` and `RQ_DASHBOARD_PASSWORD`. The README also describes Redis Sentinel URLs for the connection setting. That supports Redis-backed deployments and the presence of `redis-sentinel-url` in package dependencies, but the documentation does not explain every multi-connection or Sentinel routing behavior in detail.
The polling option changes how frequently the UI refreshes. The project does not claim event streaming or push-based updates. For operational use, that distinction matters because browser refresh behavior and Redis polling remain part of the monitoring path.
PyPI installation and a first standalone launch
The shortest documented installation uses PyPI. This command installs the `rq-dashboard` package and its declared runtime dependencies, including RQ, Flask, Redis, Arrow, and the Redis Sentinel URL helper.
$ pip install rq-dashboardAfter installation, run the console entry point. With no connection override, it uses the documented Redis default and binds the dashboard locally on port 9181.
$ rq-dashboardThe documented output includes:
* Running on http://127.0.0.1:9181/At that address, the operator can begin reviewing RQ queues, jobs, and workers through the browser interface. This first launch is suitable for confirming that the package can reach the intended Redis instance. It does not by itself establish a production deployment or specify a secure network exposure policy.
Before a real first use, it is worth checking the available CLI options. The command lists bind, port, URL prefix, authentication, configuration, Redis URL, polling interval, Python path, deletion, debug, verbosity, and JSON serializer settings.
$ rq-dashboard --helpThe README states that deletion is enabled unless `--disable-delete` is supplied. The `--json` option enables `JSONSerializer`, while `--debug` and `--verbose` add diagnostic output. These controls matter for a first launch because the operator can inspect the exact interface and decide whether destructive dashboard actions should be available.
Embedding the blueprint in an existing Flask service
Teams that already operate a Flask application can embed the dashboard instead of running a second standalone server. This avoids depending on the standalone CLI's default binding and port while retaining the same RQ dashboard blueprint.
from flask import Flask
import rq_dashboard
app = Flask(__name__)
app.config.from_object(rq_dashboard.default_settings)
rq_dashboard.web.setup_rq_connection(app)
app.register_blueprint(rq_dashboard.blueprint, url_prefix="/rq")When the example Flask application starts on its default port, the README places the dashboard at `http://localhost:5000/rq`. The order in the example is meaningful: load the dashboard defaults, initialize the RQ connection for the Flask application, and then register the blueprint at the chosen prefix.
This approach also allows an existing route such as `/` to coexist with the dashboard. However, the documentation does not specify how the blueprint behaves under authentication schemes, authorization middleware, or application-specific Flask extensions. It only documents HTTP Basic Auth credentials for the standalone command. Integrators should not infer that embedding the blueprint automatically applies their existing access controls.
For WSGI deployments, the README describes `rq_dashboard/app.py` as an application factory wrapper. It says the factory gives Gunicorn or another WSGI server an importable callable, `rq_dashboard.app:create_app()`, and configures static assets under `/rq-dashboard/static`. It also centralizes Redis credentials and other `RQ_DASHBOARD_*` settings through environment variables. Those documented paths address common packaging and URL-prefix problems, but they still require application-level access control.
Docker Compose isolation and reverse proxy boundaries
The repository includes a direct Docker path based on its checked-in `Dockerfile` and `docker-compose.yml`. The README's shorter procedure copies `docker-compose.yml` to `docker-compose.override.yml`, changes the environment variables, and starts the service.
Copy `docker-compose.yml` to `docker-compose.override.yml`, then run `docker-compose up`.
The checked-in Compose service builds from the repository, publishes `9181:9181`, and supplies `RQ_DASHBOARD_REDIS_URL`. The Dockerfile starts from `python:3.8-slim`, installs build dependencies, installs the pinned requirements file, installs the package in development mode, exposes port 9181, and starts `python3 -m rq_dashboard`.
That is a concrete deployment shape, not merely a generic recommendation for containerization. The README also points to `cjlapao/rq-dashboard:latest`, but it does not document an immutable digest for that image. The repository's own Compose file builds from the local Dockerfile, which is the path with the clearest connection to the source layout shown here.
Reverse proxy support is documented through `--url-prefix` and an Apache example. The text explicitly labels this material "non-production functionality". It does not provide a complete NGINX configuration, TLS guidance, or an access-control design. The systemd example also combines a loopback binding, port 5001, `/rq`, a Python settings module, debug mode, and verbose logging. It is useful as a configuration reference, but the README's production warning prevents treating it as a hardened service recipe.
License, upgrades, and operating limitations
The license metadata is inconsistent at the packaging layer. The repository is categorized as using a custom license that GitHub cannot classify, with the `LICENSE` file named as the place to inspect. In contrast, `setup.py` declares `license='BSD'`. This review does not interpret either statement as legal advice. Before adoption or redistribution, the actual `LICENSE` file should be compared with the packaging metadata and with the organization's compliance requirements.
Versioning creates another concrete upgrade consideration. The README says the dashboard is in beta and links to "How to migrate to version 1.0". Published entries move from v0.8.6 on 2025-12-02 to v0.8.7 on 2026-05-26 and v0.9.0 on 2026-07-02. The repository is not archived, and its last push was on 2026-10-07, but release recency does not remove the project's own beta designation.
The deletion controls are an operational limitation worth noting. The CLI exposes `--disable-delete`, which disables deleting jobs and cleaning up registries. Leaving deletion enabled may permit actions through the interface that an operator expects to be read-only. The documentation gives the switch but does not explain a role-based permission model, so the safest interpretation is that access to the dashboard itself is the primary boundary.
RQ's JSON serializer is also relevant. `-j, --json` enables `JSONSerializer`, but the README does not explain compatibility with queues or jobs using a different serialization configuration. Job inspection or deletion should not be assumed to behave identically across serializer setups.
Where rq-dashboard differs from external RQ dashboards
The documentation names a specific alternative for Heroku: the independently maintained `rq-dashboard-on-heroku` project. According to the README, that project installs `rq-dashboard` from PyPI and wraps it in Gunicorn for deployment to Heroku. The practical difference is deployment responsibility. The core package supplies the Flask CLI and blueprint, while the third-party project specializes the package for Heroku and Gunicorn.
This alternative does not replace RQ dashboard's functionality. It changes how the application is deployed. The core project's Compose file keeps the dashboard as a separate service and can place it behind Caddy, NGINX, Traefik, or another reverse proxy. The Heroku wrapper instead targets a managed application deployment model.
For teams that already have Flask, embedding `rq_dashboard.blueprint` is a different approach again. It avoids a second service, but it also transfers integration and access-control responsibilities into the host application. Standalone CLI operation, blueprint embedding, and WSGI factory deployment should therefore be compared by ownership of Redis configuration, authentication, routing, process supervision, and URL-prefix handling rather than by feature claims alone.
Editorial conclusion
Adopt rq-dashboard when an engineering team needs a focused interface for RQ operations and is comfortable with a beta project and a custom license. Do not choose it as a production monitoring platform or for queue types beyond RQ. Verify first that the current LICENSE matches the expected obligations, then confirm your Redis topology, authentication model, and the release-specific migration notes for version 1.0.
Frequently asked questions
How do I install and start Parallels rq-dashboard?
Install the package with `pip install rq-dashboard`, then run `rq-dashboard`. The documented default connection is `redis://127.0.0.1:6379`, and the server is shown running at `http://127.0.0.1:9181/`.
Can rq-dashboard be integrated into an existing Flask application?
Yes. The documented approach loads `rq_dashboard.default_settings`, calls `rq_dashboard.web.setup_rq_connection(app)`, and registers `rq_dashboard.blueprint` with a URL prefix such as `/rq`.
Is rq-dashboard suitable for production reverse proxy deployment?
The README provides Apache and systemd examples, but explicitly labels its reverse proxy functionality as non-production. It does not document a complete production-hardening or access-control configuration.
What license does Parallels rq-dashboard use?
Repository metadata points to a custom license in the `LICENSE` file, while `setup.py` declares `license='BSD'`. The two sources are inconsistent, so the actual `LICENSE` file needs direct review before use or redistribution.
Can rq-dashboard monitor multiple Redis connections?
The `--redis-url` option can be specified multiple times, and the README also documents a Redis Sentinel URL form. It does not provide detailed routing rules for displaying jobs across those connections.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/parallels-rq-dashboard)Was this useful?