PostGate

pg-boss vs BullMQ in 2026: which Node.js job queue to pick

The short answer

Node.js app already on PostgreSQL? Start with pg-boss. Need a requests-per-second limiter, workers in other languages or Redis throughput? Pick BullMQ.

pg-boss in one line

A Node.js job queue built only on PostgreSQL 13+. Workers claim jobs with SKIP LOCKED, so many of them can share a queue without blocking each other.

BullMQ runs on Postgres too

BullMQ 6.0, released July 30, 2026, added a PostgreSQL backend with the same Queue and Worker API. Its docs say Redis is still the default.

The throughput trade-off

BullMQ's own guide puts processing on Postgres at roughly 1.5 to 2 times fewer jobs per second than on Redis. Benchmark with your real payloads.

Jobs inside your transaction

pg-boss can create a job in the same transaction as your data, with adapters for Drizzle, Knex, Kysely and Prisma. Save the post and queue it together.

Delayed jobs

pg-boss startAfter takes seconds, a Date or an ISO date with offset, and update() can move a queued job. BullMQ takes a delay in milliseconds.

Cron schedules

pg-boss: cron or RRULE with a time zone, checked every 30 seconds, one job per minute at most. BullMQ: Job Schedulers with cron (seconds allowed) or intervals.

Rate limits

BullMQ has a global limiter and can pause the queue on a 429. pg-boss has throttling slots, queue policies and group concurrency, but no N-per-second limiter.

Retries

pg-boss defaults to 2 retries, supports exponential backoff and dead letter queues. BullMQ uses attempts with fixed, exponential or custom backoff.

Either way

Both deliver at least once, so a publish call needs an idempotency key. Keep the post row as the source of truth and the job as a pointer to it.

In the full guide

A feature table, pg-boss code for a dated job, a reschedule and a cron schedule, plus a checklist for scheduled social media posts.

postgate.studio

Read the full guide