See inside your job queues, down to the payload.

Attach the Queuedash SDK to a queue and its jobs are kept with their payload, timing and error. Search them, chart them, and hear about it by email, Slack or webhook when failures climb.

Free plan: 1,000 jobs a month, 7 days of history, no card.

dashboard / webhook-delivery
/specimen/projects/recording/local/webhook-delivery

recording / local

webhook-delivery

Success Rate

87.9%

145/165

Throughput

621.4/hr

145 jobs

Failed

20

12.1% rate

JobsInsights
JobLifecycle

Showing 50 of 170 jobs

21:52:49 UTC · 14:00 of 30:00
A recreation of the queue page, replaying the specimen: 1,536 jobs recorded from BullMQ 5.81.5 through @queuedash/sdk 2.0.0.Hatched on the track: a staged webhook outage, 21:50:49 to 21:54:49 UTC. The real page refreshes its job list every 10 seconds.
With the SDK
BullMQ ≥ 5.0.0
With a Redis connection
BullMQBullBee-Queue

01Instrument

Attach in two lines. Nothing to run beside it.

Add the queue in Queuedash, then attach the SDK to it. It listens through BullMQ's own QueueEvents, reads each job it hears about, and sends it on in small batches.
queue.ts
import { Queuedash } from "@queuedash/sdk";

const qd = new Queuedash({ apiKey: process.env.QUEUEDASH_API_KEY! });
qd.attach(queue);
@queuedash/sdk@2.0.1
Dependencies
0
Size, unpacked
90.9 kB
License
MIT
Batches
50 jobs or 100 ms
Retries
5, after 1, 2, 4, 8 and 16 s
Circuit breaker
60 s pause after 10 failures
Writes to Redis
Never
schematic / data path

How a job gets from your queue into Queuedash

Each hop is labeled with what the code sets. The one hop the specimen could time is labeled with what it measured: a finished job reaching the endpoint, on one machine.

your app

BullMQ queue

Jobs in Redis

12 queueevents

npm

@queuedash/sdk

Listens, reads, batches

≤ 50 jobsevery 100 msp50 57 msp95 103 ms

https

Sync endpoint

POST /api/v1/jobs/sync

queued foringest

worker

Ingest

Redacts, checks the quota

one rowper job

postgres

Queuedash

Kept 7, 30, 90 days by plan

Alerts are evaluated every 5 minutes; finished jobs are kept 7, 30, 90 days by planqueuedash-sdk client.ts · sync route · sdk-sync processor
sdk / requests

Every request the SDK made during the specimen

One tick per POST to /api/v1/jobs/sync, as tall as its body (log scale). Pick a request below to read it as it arrived.

Bodies are shown as sent. Stack trace frames are cut to their file name, line and column.

POST /api/v1/jobs/sync · request 183 · 550 B

{
"jobs": [
{
"jobId": "10",
"name": "charge",
"queueName": "payment-processing",
"data": {
"orderId": "ord_5pmz",
"amount": 9657,
"currency": "usd",
"customer": {
"email": "mia.68@example.org",
"name": "mia Example"
},
"card": {
"brand": "visa",
"last4": "4242",
"expMonth": 12,
"expYear": 2030
}
},
"opts": {
"attempts": 3,
"removeOnFail": false,
"removeOnComplete": false,
"backoff": {
"delay": 2000,
"type": "exponential"
}
},
"addedAt": "2026-09-27T21:41:59.236Z",
"processedAt": "2026-09-27T21:41:59.238Z",
"finishedAt": null,
"stacktrace": [],
"timestamp": 1790545319236,
"progress": 0,
"status": "waiting"
}
]
}
3,135 requests · 3,592 job snapshots · 2.3 MB in total · median request 482 BCaptured on localhost · @queuedash/sdk 2.0.0

03Alerts

Told once when it breaks. Told again when it's over.

Every alert runs every five minutes. When one fires, each of its channels gets one notice for the incident, and an all-clear when it passes. Email and webhooks on every plan; Slack on Pro and Business.
alerts / failure-rate

A failure-rate alert on webhook-delivery, run over the specimen

Grey bars: the share of each minute's finished jobs that failed. Dots: what the evaluator saw at each 5-minute run. The 502 outage runs 21:50 to 21:54 UTC.

Window

Cooldown 15 min · the defaults are 10% over 5 min

  1. Triggered · notice sent
  2. Resolved · notice sent
6 runs · fired on 1 · 1 triggered notice · threshold 10% over 5 minfailure-rate.evaluator.ts · evaluate-alerts.processor.ts · the specimen
Failure rate
Share of the jobs finished in a window that failed
Queue depth
How many jobs are waiting, delayed or active
Stuck jobs
Jobs active for longer than you allow
Processing time
Average or 95th-percentile run time over a window
Success check
No successful run of a named job in the last N hours

04Privacy

Redacted before it's stored. On for new projects.

Redaction runs on our side, before a synced job's data, options and error are written to the database. Five built-in patterns start switched on; add field names or your own patterns for a project or an environment.
redaction / rules

Redaction rules on jobs from the specimen

A job's data, options and error, as the SDK sent them in the specimen. Toggle the rules; replaced values light up.

Built-in patterns · on for new projects
Field names · any depth, any case

Written to the database · payment-processing · job 1 · waiting

{
  "data": {
    "orderId": "ord_7dy",
    "amount": 2639,
    "currency": "usd",
    "customer": {
      "email": "[REDACTED]",
      "name": "mia Example"
    },
    "card": {
      "brand": "visa",
      "last4": "4242",
      "expMonth": 12,
      "expYear": 2030
    }
  },
  "opts": {
    "attempts": 3,
    "removeOnFail": false,
    "removeOnComplete": false,
    "backoff": {
      "delay": 2000,
      "type": "exponential"
    }
  }
}
1 value replaced with [REDACTED] · 5 rules onsdk-sync.processor.ts · packages/shared/redaction.ts
API keys
Scoped to one environment, stored as a SHA-256 hash, shown once
Two-factor
Authenticator codes, with ten backup codes
Passkeys
Sign in with WebAuthn instead of a password
Sessions
See every signed-in session and end any of them

05Plans

Priced by the jobs you record. Alerts and search on every plan.

Plans differ in how many jobs they record a month, how long they keep them, and how many people, projects and queues they hold. Slack alerts need Pro or Business.
plans / quotas

What each plan records a month, and what it costs

Each line runs from nothing to the plan's monthly quota. Past it, new jobs are not recorded until the next period; the ones you have stay.

$0$29$99
Free · 1K
Pro · 100K
Business · 1M
LimitFree$0Pro$29Business$99
Jobs recorded a month1,000100,0001,000,000
History kept7 days30 days90 days
Team members31050
Projects15Unlimited
Environments per project1310
Queues per environment520100
Redis connections15Unlimited
Alerts by SlackNoYesYes
25,000 jobs a month · cheapest plan that records them all: Pro, $29 a month · 30 days of historyPLAN_LIMITS · packages/shared/limits.ts

06Open source

Built in the open. Since January 2023.

Queuedash started in 2023 as a dashboard you host yourself, under the MIT license. It still is. The hosted product adds history that outlives Redis, and alerts.
npm / @queuedash/api

Daily npm downloads of @queuedash/api

One bar per day for a year, with the trailing 7-day mean over it. Ticks under the baseline are the days a new version was published; open circles are days npm has no count for.

@queuedash/api was downloaded 1,171,999 times from npm in the year to 2026-09-27. October 2025 had 27,031; the busiest month, July 2026, had 159,017.

1,171,999 downloads counted from Sep 28, 2025 to Sep 27, 2026 · 15 release days · 12 days without a countapi.npmjs.org · registry.npmjs.org · 2026-09-28
npm downloads, 12 months1,171,999
Releases since 202349
GitHub stars453
LicenseMIT

07Specimen

Every figure comes from one run. 30 minutes of BullMQ.

The dashboard at the top, the search, the alert and the redaction all replay one recording: 1,536 made-up jobs on 4 queues, run by BullMQ 5.81.5 on Redis 7.4.7 and reported by @queuedash/sdk 2.0.0. 12 minutes in, the webhook endpoint answered most calls with a 502 for 4 minutes, on purpose.
specimen / attempts

Specimen: 30 minutes of 4 queues

Every attempt from a real BullMQ run, placed by when it ended and how long it ran. The work is synthetic; the timings, retries and backoff are measured. The hatched band is a staged outage of the webhook endpoint. Replayed at 75×.

30:00 elapsed · 1,536 jobs added · 1,487 completed · 339 failed attempts · 49 out of retriesBullMQ 5.81.5 · Redis 7.4.7 · @queuedash/sdk 2.0.0 · Sep 27, 2026

Attach it to one queue. See what it does.

The free plan records 1,000 jobs a month and keeps 7 days of them. No card to start.