Bull is a Node.js library for managing distributed jobs and message queues using Redis as the primary data store. It functions as a distributed task worker, job scheduler, and priority queue manager designed to handle asynchronous workloads across multiple processes.
The project distinguishes itself by providing a persistent communication channel that decouples servers through the exchange of serializable data objects. It ensures distributed system reliability by detecting stalled tasks and recovering from process crashes to ensure every queued job is completed.
The system covers a broad range of queue management capabilities, including priority-based task ordering, automatic retry policies, and delayed or recurring job execution via cron specifications. It provides observability tools for tracking job progress, querying execution states, and monitoring queue events. To maintain performance, it supports task concurrency scaling, rate limiting, and child-process sandboxing for CPU-intensive workloads.
The library includes specific integrations for Redis environments, such as connection pooling and hash-slot key prefixing for compatibility with Redis clusters.