The missing dashboard for BullMQ.

Inspect, debug, and replay your BullMQ queues. Run it as a native desktop app, drop it into any Node framework, or deploy it as a standalone Docker container.

macOS 11+ · Apple-signed · MIT

HonoElysiaExpressFastifyNestJSAdonisJSNext.jsTanStack StartKoaAstroNuxtBunh3Docker
redis://127.0.0.1:6379 · 4 queues
Queues
email12
image-processing47
billing3
webhooks18
Views
image-processing
47 active · 1,204 waiting · last 24h
Completed
184,392
+12.4%
Failed
287
-3.1%
Active
47
+8/min
Waiting
1,204
stable
Throughput · jobs/min
completedfailed
p50 wait12ms
p95 duration847ms
Overview

Every queue, every job — at a glance.

Live counters, p50/p95 latency, throughput sparklines, and per-queue health without ever shelling into Redis. Built for the way modern apps actually run on BullMQ.

redis://127.0.0.1:6379 · 4 queues
Queues
email12
image-processing47
billing3
webhooks18
Views
image-processing
47 active · 1,204 waiting · last 24h
Completed
184,392
+12.4%
Failed
287
-3.1%
Active
47
+8/min
Waiting
1,204
stable
Throughput · jobs/min
completedfailed
p50 wait12ms
p95 duration847ms
Runs

Inspect every run. Replay any failure.

A virtualized table with sharp status colors, real timestamps, and full job payloads one click away. Filter by status, search by ID, retry from the keyboard.

image-processing · last 50
Runs
184,679
All184kActive47Completed184kFailed287
Job IDNameDurationAttemptsAge
j_3aa18resize-thumbnailactive1/3now
j_3aa17transcode-videoactive1/32s
j_3aa16resize-thumbnailcompleted284ms1/38s
j_3aa15extract-framescompleted1.2s1/314s
j_3aa14resize-thumbnailfailed1.8s3/322s
j_3aa13ocr-documentcompleted612ms1/331s
j_3aa12transcode-videocompleted4.7s2/344s
j_3aa11send-receiptdelayed0/3in 2m
j_3aa10resize-thumbnailcompleted198ms1/31m
j_3aa09extract-frameswaiting0/31m
Flows

Visualize FlowProducer graphs.

Parent/child relationships rendered as a real DAG with per-node status and duration. Drill into any node, replay subtrees, and see where time is going.

order-fulfillment · flow_4f12
order-fulfillment
flow_4f12 · 6 jobs · 2.4s total
completed
validate-cart
completed42ms
charge-card
completed612ms
reserve-stock
completed118ms
email-receipt
completed287ms
generate-pdf
completed894ms
notify-warehouse
completed71ms
finalize
completed33ms
Schedulers

Cron + delayed jobs you can actually trust.

See which schedulers are active, when they last ran, and what's next. Pause, resume, and edit cron expressions without redeploying.

email · 6 schedulers
Schedulers
6 activenext: in 2m
NameCronNextLast run
weekly-digest0 9 * * MONin 2d 4hok · 1.2s
cleanup-stale-jobs*/15 * * * *in 4mok · 87ms
refresh-search-index0 */6 * * *in 1h 12mok · 4.7s
send-trial-reminders0 10 * * *in 18hok · 612ms
rotate-credentials0 0 1 * *in 6dok · 28ms
warm-cache*/5 * * * *in 2mok · 142ms
Test

Enqueue jobs straight from the dashboard.

Compose a payload, pick a queue, hit ⌘↵. Validates against your schema and shows the run on the next render.

image-processing · resize-thumbnail
Enqueue a job
Queue
image-processing
Job name
resize-thumbnail
Delay
0ms
payload.jsonJSON · 4 lines
{
  "src": "s3://uploads/IMG_4827.heic",
  "sizes": [128, 512, 2048],
  "format": "webp"
}
1 of 1 worker connected
Enqueue⌘↵
Errors

Triage failures, not log files.

Errors are grouped by class, ranked by frequency, and trended over time so you can spot regressions the moment they hit production.

Top errors · last 24h
287 events
ECONNRESET184
TimeoutError63
ValidationError28
S3AccessDenied12
What's inside

Everything a BullMQ dashboard should do.

Metrics, runs, errors, flows, schedulers, and an enqueue form — wired together so the thing you need next is always one keystroke away.

Live counters

Completed, failed, active, waiting — per queue, updated as workers move jobs. p50/p95 latency and throughput tracked alongside.

Run inspector

A virtualized table of every job. Filter by status, search by ID, expand the full payload and attempts history without leaving the row.

Error triage

Failures grouped by error class and ranked by frequency, with a 24h trend per class. See the regression the moment it spikes.

Open in Cursor

Click any line in a failed job's stack trace — Workbench jumps straight to that file in Cursor or VS Code. No copy-paste, no grep.

FlowProducer DAG

Parent/child flows rendered as a real graph with per-node status and duration. Drill into any node, replay subtrees, see where time is going.

Cron + delayed schedulers

Which schedulers are active, when they last ran, what's next. Pause, resume, edit cron expressions — without a redeploy.

Enqueue from the UI

Compose a payload, pick a queue, hit ⌘↵. Validates against your schema and shows the run on the next render. Faster than `redis-cli`.

Keyboard for everything

⌘K to search, ⌥1–9 to switch queues, R to retry, ↵ to drill in. Every action you reach for has a binding — no menu hunting.

Install

One dashboard. Three ways to run it.

Native macOS app for local debugging, one command to mount the dashboard inside your Node server, or a standalone Docker container pointed at your Redis. Same UI, same open-source core.

Desktop

Native macOS app

Local-first. Auto-discovers queues from any Redis URL. Stores credentials in the OS keychain. Auto-updates via signed releases.

Embed

Drop into your Node app

One command wires the dashboard into your existing server. Works with Hono, Elysia, Express, Fastify, NestJS, AdonisJS, Next.js, TanStack Start, Koa, Astro, Nuxt, Bun, and h3 — share the same Redis as your workers.

$
npx @getworkbench/cli init
Docker

Standalone container

Run Workbench without embedding it in your app. Set REDIS_URL and QUEUE_NAMES — published to GHCR on every release tag.

$
docker run --rm -p 3000:3000 \ -e REDIS_URL=redis://host.docker.internal:6379 \ -e QUEUE_NAMES=default \ ghcr.io/pontusab/workbench-standalone:latest