36x Faster Push
341,362 vs 9,488 ops/sec
Single job push operations
Real benchmark results comparing bunqueue with BullMQ on identical workloads.
36x Faster Push
341,362 vs 9,488 ops/sec
Single job push operations
28x Faster Bulk
1,023,376 vs 36,656 ops/sec
Bulk push (100 jobs per batch)
8x Faster Processing
131,923 vs 15,947 ops/sec
Job processing throughput
Zero Infrastructure
No Redis Required
Embedded SQLite vs Redis server
| Operation | bunqueue | BullMQ | Speedup |
|---|---|---|---|
| Push | 341,362 ops/sec | 9,488 ops/sec | 36x faster |
| Bulk Push | 1,023,376 ops/sec | 36,656 ops/sec | 28x faster |
| Process | 131,923 ops/sec | 15,947 ops/sec | 8.3x faster |
| Operation | bunqueue p99 | BullMQ p99 | Improvement |
|---|---|---|---|
| Push | 0.01ms | 0.54ms | 54x lower |
| Bulk Push | 0.55ms | 6.77ms | 12x lower |
| Process | 56.8ms | 614.5ms | 11x lower |
Performance comparison on typical production workloads.
| Scenario | bunqueue | BullMQ | Speedup |
|---|---|---|---|
| Email Queue (5k emails, mixed priorities) | 324,462 ops/sec | 11,658 ops/sec | 27.8x faster |
| Webhook Burst (3k webhooks with retries) | 646,964 ops/sec | 44,648 ops/sec | 14.5x faster |
| Image Processing (1k large payloads) | 190,491 ops/sec | 8,740 ops/sec | 21.8x faster |
| Order Processing (5k orders, priorities) | 387,220 ops/sec | 13,281 ops/sec | 29.2x faster |
Edge cases and stress tests that push the limits.
| Scenario | bunqueue | BullMQ | Speedup |
|---|---|---|---|
| Massive Delayed (10k scheduled jobs) | 950,890 ops/sec | 47,914 ops/sec | 19.8x faster |
| Priority Stress (100 priority levels) | 419,013 ops/sec | 14,382 ops/sec | 29.1x faster |
| IoT Tiny Payloads (50k minimal jobs) | 1,244,372 ops/sec | 52,268 ops/sec | 23.8x faster |
| Deduplication (5k jobs, 1k unique keys) | 362,328 ops/sec | 14,438 ops/sec | 25.1x faster |
| High Concurrency (50 workers) | 189,236 ops/sec | 27,379 ops/sec | 6.9x faster |
No Network Overhead
bunqueue uses embedded SQLite with direct FFI bindings. BullMQ requires network round-trips to Redis.
Optimized Data Structures
Skip lists, MinHeap, and LRU cache provide O(log n) or O(1) operations for common tasks.
Batch Transactions
SQLite transactions batch multiple operations into single disk writes.
32-Way Sharding
Lock contention is minimized by distributing work across 32 independent shards.
| Metric | bunqueue | BullMQ |
|---|---|---|
| Base Memory | ~50 MB | ~80 MB + Redis |
| Per Job | ~100 bytes | ~500 bytes |
| 10K Jobs | ~65 MB | ~120 MB |
| External Services | None | Redis server |
| Feature | bunqueue | BullMQ |
|---|---|---|
| Queue Types | ✅ Standard, Priority, LIFO | ✅ Standard, Priority, LIFO |
| Delayed Jobs | ✅ Yes | ✅ Yes |
| Retries & Backoff | ✅ Exponential | ✅ Exponential |
| Dead Letter Queue | ✅ Built-in | ✅ Built-in |
| Rate Limiting | ✅ Per-queue | ✅ Per-queue |
| Cron Jobs | ✅ Built-in | ✅ Via scheduler |
| Job Dependencies | ✅ Parent-child flows | ✅ Parent-child flows |
| Persistence | ✅ SQLite (embedded) | ✅ Redis |
| Horizontal Scaling | ⚠️ Single process | ✅ Multi-process |
| External Dependencies | ✅ None | ❌ Redis required |
| S3 Backup | ✅ Built-in | ❌ Manual |
git clone https://github.com/egeominotti/bunqueue.gitcd bunqueuebun install
# Start Redis (required for BullMQ)redis-server --daemonize yes
# Run core benchmark (push, bulk, process)bun run bench/comparison/run.ts
# Run scenario benchmarks (real-world & niche)bun run bench/comparison/scenarios.tsHardware:
Software:
Configuration:
While bunqueue is faster for most use cases, BullMQ may be better when: