Production checklist
Quick gate before exposing the dashboard to real traffic.
Auth
The dashboard has no built-in auth. Add one. See Add basic auth.
CSRF
Destructive actions (retry, clean, pause, drain, obliterate) are state-changing requests. Behind a browser session, they're CSRF-reachable. See CSRF protection.
Read-only where possible
If the audience is "everyone with a login", most of them don't need obliterate. Mark queues read-only and enable retries only on the queues that need them.
Multi-tenancy
Running a shared dashboard across tenants? Add a visibility guard. Don't rely on "nobody will guess the queue name" — the name is in the URL.
Polling interval
Default is 5 seconds. If the dashboard has many open tabs, every tab polls every queue. Cap it with pollingInterval.forceInterval or leave the picker on so users can dial it down. See Polling interval.
Redis access
The dashboard connects directly to Redis via your queue instances. If Redis is reachable from the dashboard process, the dashboard can do anything Redis permits. Treat dashboard access as Redis access.
Environment badge
Production and staging sharing a browser? Set environment.label = 'production' with a red color on the production instance. Small thing, saves a real outage.
Version pinning
The dashboard talks to your Bull / BullMQ instances. Mismatched versions across workers and the dashboard have bitten people (see issues #1074, #1088, #1097). Pin the same BullMQ across both.
Logs
Workers that call job.log() will have their lines visible in the dashboard under each job's Logs tab. If you're wondering "what did this job do before it failed", that's the answer. See Job logs and flows.