Web Dev Tools

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.

On this page