BullMQ alternatives for Node.js: an honest 2026 guide
BullMQ is the default Redis job queue for Node.js — but it isn't the only choice. Here's an even-handed map of the alternatives (Bee-Queue, pg-boss, Agenda, @imqueue/job and more), what each is actually good at, and how to pick.
BullMQ is the name most Node.js teams reach for when they need background jobs on Redis — it's mature, feature-rich, and by far the most downloaded option (~500K weekly). For a lot of projects it's the right answer, and this guide isn't here to talk you out of it.
But "most popular" and "best fit for your stack" aren't the same thing. Maybe you don't run Redis. Maybe you want a smaller surface than BullMQ's full job-lifecycle machinery. Maybe you already have a service framework and want the queue to be part of it. This is an even-handed map of the realistic alternatives in 2026, what each is genuinely good at, and how to choose.
Disclosure: I maintain
@imqueue, which includes a job queue (@imqueue/job). It's on this list, and I've tried hard to place it honestly — as one small, opinionated option among several, not the "winner." Where BullMQ or another tool is the better fit, I say so.
When you'd look for a BullMQ alternative
BullMQ is an excellent default. You'd reasonably shop around when:
- You don't want to run Redis. BullMQ requires it. If your system of record is Postgres or MongoDB, adding Redis just for jobs is real operational surface (another thing to provision, monitor, back up, and reason about during failures).
- You want a smaller footprint. BullMQ's feature surface — flows, rate limiting, repeatable/cron jobs, priorities — is a strength when you need it and weight when you don't.
- Licensing matters to you. BullMQ is MIT. Some alternatives (including
@imqueue) are copyleft or dual-licensed — that can be a plus or a minus depending on your project. - The queue should be part of a larger framework, sharing a client, serialization, and conventions with the rest of your services.
- You want a fully managed queue and are willing to trade library-level control for not operating infrastructure at all.
The landscape at a glance
| Option | Datastore | Best for | License |
|---|---|---|---|
| BullMQ | Redis | Feature-rich job processing: flows, rate limits, cron, priorities | MIT |
| Bee-Queue | Redis | Simple, high-throughput, short-lived jobs | MIT |
| pg-boss | PostgreSQL | Teams already on Postgres who want ACID guarantees, no Redis | MIT |
| Agenda | MongoDB | Cron-style recurring scheduling on an existing Mongo stack | MIT |
| @imqueue/job | Redis | Minimal, safe-by-default jobs inside a cohesive RPC framework | GPL‑3.0 / commercial |
| Cloud queues (SQS, Cloud Tasks) | Managed | Zero infra ops, cloud-native pipelines | Proprietary (usage-based) |
| Bull (v3) | Redis | Existing apps already on it | MIT |
(Feature and maintenance details reflect each project's documented behavior at the time of writing — always check the project's own repo for the current picture.)
The alternatives, one by one
Bee-Queue — the lightweight Redis option
Bee-Queue is a Redis-backed queue built deliberately around simplicity and speed, with a much smaller feature set than BullMQ. It shines for large volumes of short, near-real-time jobs where you don't need flows, cron, or a big lifecycle API. If BullMQ feels like more than you need and you're staying on Redis, Bee-Queue is the classic "just a fast queue" pick.
Trade-off: you give up the breadth — no flows, limited scheduling/lifecycle features — in exchange for a small, fast core.
pg-boss — a job queue inside Postgres
pg-boss is the standout if you're already on PostgreSQL and don't want to add Redis. It implements the queue using Postgres's SKIP LOCKED — a feature designed precisely for this — giving you safe concurrent job pickup with the ACID guarantees of your existing database. Jobs commit in the same transactional world as your data, and it's actively maintained.
Trade-off: Postgres-backed queues top out at lower throughput than a Redis queue under very heavy load, and you're leaning on your primary database for queue traffic. For most application workloads that's a fine bargain; for extreme fan-out it may not be.
Agenda — MongoDB-based scheduling
Agenda uses MongoDB and is oriented toward cron-like recurring scheduling. If your stack already runs Mongo and your need is "run this job every night / every 5 minutes" more than "process a firehose of jobs," Agenda fits naturally without introducing a new datastore.
Trade-off: it's a scheduler first; it isn't aiming at the high-throughput, rich-lifecycle territory BullMQ occupies.
@imqueue/job — minimal and safe-by-default
@imqueue/job is the Redis-backed job queue inside the @imqueue framework. Its point of difference is being small and safe by default: guaranteed processing is on out of the box (if a worker grabs a job and dies, the job is re-queued for another worker after a lock TTL), with delayed/scheduled jobs to millisecond granularity and programmable retry/backoff. It's TypeScript-first and has a single dependency.
It makes most sense when you already use @imqueue for service-to-service RPC (the job queue shares the same core, serialization and conventions), or when you specifically want a tiny queue where "don't lose jobs" is the default rather than something you configure.
Trade-off: it is not trying to match BullMQ's feature surface. If you need declarative retry policies with automatic dead-lettering, priorities, rate limiting, cron-style repeatable jobs, or flows/parent-child dependencies, BullMQ is the stronger tool and @imqueue/job doesn't compete there. It's also GPL‑3.0 (with a commercial license available) rather than MIT — worth understanding if you ship closed-source. There's a full, honest head-to-head in @imqueue/job vs BullMQ.
Cloud / managed queues — no infra to run
If you'd rather not operate a queue at all, managed services like AWS SQS or Google Cloud Tasks move the durability, scaling and availability problem to the provider. Great for cloud-native pipelines and teams that want to minimize ops.
Trade-off: you trade library-level control and local ergonomics for a network hop and vendor coupling, and you work within the provider's model (visibility timeouts, delivery semantics, quotas) rather than an in-process API.
Bull (v3) — the predecessor
Bull is BullMQ's older sibling. It isn't deprecated and still powers plenty of production systems, but BullMQ is the recommended path for new projects — it's the actively evolved successor with the modern API. If you're already on Bull and it works, there's no emergency; if you're starting fresh, start on BullMQ.
Skip: Kue is officially deprecated and unmaintained — don't reach for it in new projects. You'll still see it in old tutorials; use one of the options above instead.
How to choose
A quick decision guide:
- Already on Redis, need the full feature set (flows, rate limiting, cron, priorities)? → BullMQ. It's the default for a reason.
- On Redis but want something small and fast for short jobs? → Bee-Queue.
- Primary datastore is Postgres and you'd rather not add Redis? → pg-boss.
- On MongoDB and mostly need recurring/cron scheduling? → Agenda.
- Want zero queue infrastructure to operate? → a cloud queue (SQS / Cloud Tasks).
- Already building services with
@imqueue, or you want a minimal queue that won't drop jobs by default? →@imqueue/job.
The honest summary: BullMQ remains the safe, capable default on Redis. The alternatives win when a specific constraint — your datastore, your appetite for features, your ops budget, or your framework — points elsewhere.
FAQ
Is BullMQ still the best Node.js job queue in 2026? For a feature-rich, Redis-backed queue, BullMQ is still the most capable and most widely used option. "Best" depends on your constraints — if you don't run Redis or want a smaller surface, an alternative may fit better.
What's the best BullMQ alternative if I don't use Redis? pg-boss (PostgreSQL) if you're on Postgres, or Agenda (MongoDB) if you're on Mongo. Both let you avoid introducing Redis just for jobs.
What's a lighter alternative to BullMQ on Redis?
Bee-Queue for a simple, fast queue, or @imqueue/job for a minimal, safe-by-default queue — especially if you already use @imqueue for RPC.
Is Bull deprecated? No. Bull (v3) is still maintained enough to run in production, but BullMQ is its successor and the recommended choice for new projects. Kue, a different older library, is deprecated — avoid it.
Should I use a job queue or a workflow engine? If you need durable, long-running orchestration with complex state, a workflow engine (e.g. Temporal) is a different category worth evaluating. For discrete background jobs, a queue like the ones above is simpler and lighter.
Want to try the minimal, safe-by-default option? Get started with @imqueue, read the @imqueue/job vs BullMQ deep-dive, or browse the API reference. Shipping inside a closed-source product? See commercial licensing & support.
Building on @imqueue? The open-source packages live on GitHub and the docs at imqueue.org. Shipping inside a closed-source product? See commercial licensing & support.