Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?


Failed to load latest commit information.
Latest commit message
Commit time
August 14, 2022 14:54
December 17, 2021 15:36
September 26, 2023 04:30
September 26, 2023 04:30
January 6, 2021 18:08
December 6, 2021 08:52
December 19, 2018 22:46

The fastest, most reliable, Redis-based distributed queue for Node.
Carefully written for rock solid stability and atomicity.

Read the documentation

Follow @manast for *important* Bull/BullMQ/BullMQ-Pro news and updates!

πŸ›  Tutorials

You can find tutorials and news in this blog:

Official FrontEnd, Inc

Supercharge your queues with a professional front end:

  • Get a complete overview of all your queues.
  • Inspect jobs, search, retry, or promote delayed jobs.
  • Metrics and statistics.
  • and many more features.

Sign up at

Used by

Some notable organizations using BullMQ:

Microsoft Vendure Datawrapper Nest
Curri Novu NoCodeDB

The gist


$ yarn add bullmq

Add jobs to the queue:

import { Queue } from 'bullmq';

const queue = new Queue('Paint');

queue.add('cars', { color: 'blue' });

Process the jobs in your workers:

import { Worker } from 'bullmq';

const worker = new Worker('Paint', async job => {
  if ( === 'cars') {
    await paintCar(;

Listen to jobs for completion:

import { QueueEvents } from 'bullmq';

const queueEvents = new QueueEvents('Paint');

queueEvents.on('completed', ({ jobId }) => {
  console.log('done painting');

  ({ jobId, failedReason }: { jobId: string; failedReason: string }) => {
    console.error('error painting', failedReason);

This is just scratching the surface, check all the features and more in the official documentation

Feature Comparison

Since there are a few job queue solutions, here is a table comparing them:

Feature BullMQ-Pro BullMQ Bull Kue Bee Agenda
Backend redis redis redis redis redis mongo
Observables βœ“
Group Rate Limit βœ“
Group Support βœ“
Batches Support βœ“
Parent/Child Dependencies βœ“ βœ“
Priorities βœ“ βœ“ βœ“ βœ“ βœ“
Concurrency βœ“ βœ“ βœ“ βœ“ βœ“ βœ“
Delayed jobs βœ“ βœ“ βœ“ βœ“ βœ“
Global events βœ“ βœ“ βœ“ βœ“
Rate Limiter βœ“ βœ“ βœ“
Pause/Resume βœ“ βœ“ βœ“ βœ“
Sandboxed worker βœ“ βœ“ βœ“
Repeatable jobs βœ“ βœ“ βœ“ βœ“
Atomic ops βœ“ βœ“ βœ“ βœ“
Persistence βœ“ βœ“ βœ“ βœ“ βœ“ βœ“
UI βœ“ βœ“ βœ“ βœ“ βœ“
Optimized for Jobs / Messages Jobs / Messages Jobs / Messages Jobs Messages Jobs

πŸš€ Sponsor πŸš€

Memetria for Redis

If you need high quality production Redis instances for your BullMQ project, please consider subscribing to Memetria for Redis, leaders in Redis hosting that works perfectly with BullMQ. Use the promo code "BULLMQ" when signing up to help us sponsor the development of BullMQ!


Fork the repo, make some changes, submit a pull-request! Here is the contributing doc that has more details.


Thanks for all the contributors that made this library possible, also a special mention to Leon van Kammen that kindly donated his npm bullmq repo.