Job Queues & Background Jobs
Where to put work that shouldn't run inside the request.
DB-backed (no Redis required)
- ★ pg-boss — Postgres-backed queue. Cron, deferred jobs, retries, throttling, dead-letter, multi-queue. The default if you're already on Postgres and don't want Redis.
- Graphile Worker — also Postgres-backed, smaller surface area but very fast (uses LISTEN/NOTIFY for low-latency dispatch).
- River (Go), Oban (Elixir), GoodJob / Solid Queue (Rails 8) — non-JS equivalents worth knowing if you blend stacks.
Redis-backed
- ★ BullMQ — the dominant Redis queue for Node. Bull Board UI for inspection.
- bee-queue — older, simpler, smaller.
Hosted / "durable execution"
- ★ Inngest — durable functions, fan-out/fan-in, retries, debouncing, declarative steps. Free tier is generous; great fit for Next.js.
- ★ Trigger.dev — durable functions with a UI; generous free tier; the most direct competitor to Inngest. Self-hostable.
- QStash (Upstash) — serverless message queue / scheduler; pay-per-message, Workers-friendly.
- Defer — durable workflows, hosted.
- Cloudflare Queues — fire-and-forget messaging on Cloudflare.
- Cloudflare Workflows — durable, multi-step workflows on Cloudflare.
Cron specifically
- node-cron — basic in-process cron (don't use this if you have multiple instances).
- Vercel Cron Jobs — built into Vercel.
- Cloudflare Cron Triggers — built into Workers.
- pg-boss has built-in cron via the schedule API.
Pick this if…
- You're on Postgres, low/medium volume: pg-boss (perfect for your stack).
- Already have Redis, high throughput: BullMQ.
- You want durable workflows, not just queues: Inngest or Trigger.dev.
- All-Cloudflare stack: Cloudflare Queues + Workflows.