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.
recording / local
webhook-delivery
Success Rate
87.9%
145/165
Throughput
621.4/hr
145 jobs
Failed
20
12.1% rate
Showing 50 of 170 jobs
- With the SDK
- BullMQ ≥ 5.0.0
- With a Redis connection
- BullMQBullBee-Queue
01Instrument
Attach in two lines. Nothing to run beside it.
import { Queuedash } from "@queuedash/sdk"; const qd = new Queuedash({ apiKey: process.env.QUEUEDASH_API_KEY! }); qd.attach(queue);
- 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
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
npm
@queuedash/sdk
Listens, reads, batches
https
Sync endpoint
POST /api/v1/jobs/sync
worker
Ingest
Redacts, checks the quota
postgres
Queuedash
Kept 7, 30, 90 days by plan
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
02Search
Find the one job. By name, id, error or payload.
field:value, data.path:value for anything in the payload, quotes to match a name, id or error exactly, and a minus to leave something out. Below, the dashboard's own parser runs over the specimen, redacted as a new project stores it.The specimen's 1,536 jobs on a 1,536-well plate
One well per job, grouped by queue. Type a query or pick one; the wells that match light up.
What the query becomes
WHERE failed_reason ILIKE '%502%'
03Alerts
Told once when it breaks. Told again when it's over.
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.
Cooldown 15 min · the defaults are 10% over 5 min
- Triggered · notice sent
- Resolved · notice sent
- 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 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.
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"
}
}
}- 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.
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.
| Limit | Free · $0 | Pro · $29 | Business · $99 |
|---|---|---|---|
| Jobs recorded a month | 1,000 | 100,000 | 1,000,000 |
| History kept | 7 days | 30 days | 90 days |
| Team members | 3 | 10 | 50 |
| Projects | 1 | 5 | Unlimited |
| Environments per project | 1 | 3 | 10 |
| Queues per environment | 5 | 20 | 100 |
| Redis connections | 1 | 5 | Unlimited |
| Alerts by Slack | No | Yes | Yes |
06Open source
Built in the open. Since January 2023.
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.
07Specimen
Every figure comes from one run. 30 minutes of BullMQ.
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×.
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.