BullMQ runtimes
BullMQ has libraries for Node.js, Python, Rust, Elixir, PHP and .NET, on Redis or PostgreSQL. They all run the same Lua and SQL scripts, so a job added in one language can be processed in another.
Node.js
npm install bullmq
The original BullMQ library. Background jobs and message queues for Node.js and TypeScript, on Redis or PostgreSQL.
View Node.jsPython
pip install bullmq
The official BullMQ library for Python. Async background jobs on Redis, using the same queues as your Node.js services.
View PythonRust
cargo add bullmq
A Rust port of BullMQ. It uses the same Lua scripts and Redis data structures as the Node.js and Elixir libraries, so they can all work on the same queues.
View RustElixir
{:bullmq, "~> 1.0"}
An Elixir port of BullMQ built with GenServers and Supervisors. It runs on Redis or PostgreSQL and can share queues with Node.js.
View ElixirPHP
composer require taskforcesh/bullmq-php
A PHP client for BullMQ. Add jobs to a queue from your PHP application and process them with workers written in Node.js, Python or Elixir.
View PHP.NET
dotnet add package BullMQ
The official .NET port of BullMQ. It runs the same scripts as the other libraries on Redis or PostgreSQL, and works with the queues your Node.js services use.
View .NETFeature support
The core queue behavior is the same in every library because they all run the same scripts. Higher-level features are added to each library separately, and this table shows what each one supports today.
| Feature | Node.js | Python | Rust | Elixir | PHP | .NET |
|---|---|---|---|---|---|---|
| Add jobs to queues | Supported | Supported | Supported | Supported | Supported | Supported |
| Process jobs (workers) | Supported | Supported | Supported | Supported | Not available | Supported |
| Delayed jobs | Supported | Supported | Supported | Supported | Supported | Supported |
| Repeatable / scheduled jobs | Supported | Supported | Supported | Supported | Supported | Supported |
| Job priorities | Supported | Supported | Supported | Supported | Supported | Supported |
| Rate limiting | Supported | Supported | Supported | Supported | Not available | Supported |
| Retries & backoff | Supported | Supported | Supported | Supported | Supported | Supported |
| Flows (parent / child) | Supported | Supported | Supported | Supported | Not available | Supported |
| Job events | Supported | Supported | Supported | Supported | Not available | Supported |
| Redis backend | Supported | Supported | Supported | Supported | Supported | Supported |
| PostgreSQL backend | Supported | Soon | Soon | Supported | Soon | Supported |
| BullMQ Pro | Supported | Soon | Soon | Soon | Soon | Soon |
Supported Soon Coming soon Not available
Choosing a runtime
Node.js has the most features. Otherwise, use the library for the language your service is already written in. The queue works the same way from any of them.