Skip to main content
BullMQ is a Node.js library that implements a fast and robust queue system built on top of Redis. It helps resolve many modern microservices architecture challenges by providing a reliable message queue system.

Overview

The fastest, most reliable, Redis-based distributed queue for Node. Carefully written for rock solid stability and atomicity. BullMQ is designed to fulfill the following goals:
  • Exactly once semantics - Attempts to deliver every message exactly one time, but will deliver at least once in the worst case scenario
  • Horizontal scalability - Easy to scale by adding more workers for processing jobs in parallel
  • Consistency - Reliable and consistent job processing
  • High performance - Achieves the highest possible throughput from Redis by combining efficient Lua scripts and pipelining
View the repository, see open issues, and contribute back on GitHub!

Core Concepts

BullMQ is based on 4 main classes that together can be used to resolve many different problems:

Queue

Used for adding jobs to the queue and basic queue manipulation such as pausing, cleaning, or getting data from the queue.

Worker

Instances capable of processing jobs. You can have many workers running in the same process, separate processes, or different machines.

QueueEvents

Used to listen to global events like job completions, failures, and progress updates.

FlowProducer

Used for creating jobs with parent-child dependencies and complex job workflows.

Key Features

BullMQ provides a comprehensive set of features for queue management:
  • Minimal CPU usage - Polling-free design for optimal performance
  • Distributed execution - Job execution based on Redis for distributed systems
  • Job ordering - Support for LIFO and FIFO job processing
  • Priorities - Prioritize important jobs over others
  • Delayed jobs - Schedule jobs to be processed at a future time
  • Repeatable jobs - Schedule jobs according to cron specifications
  • Automatic retries - Failed jobs can be automatically retried
  • Concurrency control - Set concurrency per worker
  • Sandboxed processing - Threaded (sandboxed) processing functions for isolation
  • Automatic recovery - Recover from process crashes
  • Parent-Child dependencies - Create complex job workflows with dependencies
  • Rate limiting - Control the rate of job processing
  • Job events - Listen to various job lifecycle events

Why Use Message Queues?

If you’re new to message queues, you may wonder why they are needed. Queues can solve many different problems elegantly:
  • Smoothing processing peaks - Handle traffic spikes without overwhelming your system
  • Microservices communication - Create robust communication channels between services
  • Offloading heavy work - Distribute heavy workloads from one server to many workers
  • Background processing - Handle time-consuming tasks asynchronously
  • Job scheduling - Schedule tasks to run at specific times or intervals
  • Reliability - Ensure jobs are processed even if services temporarily go down

Used By

BullMQ is trusted by many organizations, including:
  • Microsoft (Lage build system)
  • Vendure (E-commerce framework)
  • Datawrapper (Data visualization tool)
  • NestJS (Progressive Node.js framework)
  • Langfuse (LLM engineering platform)
  • Novu (Notification infrastructure)
  • NocoDB (Open source Airtable alternative)
  • Infisical (Secret management platform)

Next Steps

Installation

Get started by installing BullMQ in your project

Quick Start

Create your first queue and worker in minutes

Architecture

Understand how BullMQ works under the hood

API Reference

Explore the complete API documentation

Build docs developers (and LLMs) love