BullMQ infrastructure.
Solved.
Managed hosting, real-time monitoring, or self-hosted with eject — BullRun gives your BullMQ queues a control plane, no matter how you run them.
$ npx bullrun init
Created bullrun.config.ts
Created src/tasks/example.ts
$ npx bullrun dev
[bullrun] Worker started for queue "default" (1 task, concurrency: 5)
[bullrun] Worker ready. Watching for changes...
Running 48 tasks across 13 queues and 13 schedules in production today.
Two ways to run BullRun
Managed
We host your Redis. You write tasks.
For teams starting fresh or migrating off self-hosted Redis.
- Hosted Redis + Dashboard + SDK + Alerting + Scheduling
Free up to 10K runs/mo
Start managedMonitor
You keep your Redis. We give you eyes.
For teams already running BullMQ who want dashboard + alerting.
- Dashboard + Alerting + Job management (your infra stays)
Free with 1 connection
Connect your RedisOr go fully self-hosted. bullrun eject exports your config to run on your own Redis. Zero lock-in. Your code doesn't change.
Sound familiar?
"We spend more time on Redis than on our product."
Provisioning, failover, connection pooling, memory alerts. You didn't start a company to babysit Redis.
"Our BullMQ queues are a black box."
Jobs fail. Queues back up. You find out when a customer emails. Taskforce wants $95/mo for a dashboard.
"Alternatives mean rewriting everything."
Trigger.dev and Inngest are great greenfield tools. But you have 48 BullMQ tasks in production. Migration isn't an afternoon.
Same BullMQ API. We handle the infrastructure.
5 lines of code. No Redis config. No worker boilerplate.
Your BullMQ today
import { Worker } from "bullmq";
import Redis from "ioredis";
const connection = new Redis({
host: process.env.REDIS_HOST,
port: 6379,
maxRetriesPerRequest: null,
});
const worker = new Worker(
"emails",
async (job) => {
await sendEmail(job.data);
},
{ connection, concurrency: 10 }
);
// + Redis provisioning
// + Failover handling
// + Dashboard (Taskforce $95/mo)
// + Alerting (custom build)
// + Monitoring (custom build)Same code on BullRun
import { defineTask } from "@bullrun/sdk";
export const sendEmail = defineTask({
name: "send-email",
queue: "emails",
concurrency: 10,
handler: async (payload) => {
await sendEmail(payload);
},
});
// Redis: managed ✓
// Dashboard: included ✓
// Alerting: built-in ✓
// Monitoring: built-in ✓
// Retry/DLQ: built-in ✓Monitor mode requires zero code changes — just connect your Redis URL.
The dashboard your BullMQ queues deserve
Every feature works in both Managed and Monitor mode.
Real-time dashboard
Queue health, throughput charts, job inspection. Dark mode.
Task registry
Define tasks in code, see them in the dashboard. 48 tasks and counting.
Job search & filters
Find any job by ID, status, queue, or payload. Instant.
Bulk operations
Retry, remove, or promote thousands of jobs in one click.
Scheduling
Cron, one-off, recurring. Timezone-aware. 13 schedules running.
Alerting
Slack, email, webhooks. Know before your users do.
Team management
Invite your team. Role-based access. Audit log.
Worker monitoring
See which workers are active, their concurrency, and throughput.
CSV export
Export job data for debugging or reporting. One click.
Keyboard shortcuts
Power-user navigation. k to search, r to retry, ? for help.
Multi-environment
Dev, staging, prod. Isolated configs, one dashboard.
Managed Redis
Provisioned, scaled, monitored. Per-project isolation.
How BullRun compares
If you need managed hosting
| BullRun | Trigger.dev | Inngest | |
|---|---|---|---|
| BullMQ compatible | |||
| Migration effort | Minimal | Full rewrite | Full rewrite |
| Dashboard | Included | Included | Included |
| Self-host option | |||
| Free tier | 10K runs/mo | 50K runs/mo | 25K runs/mo |
| Starting paid | $19/mo | $25/mo | $25/mo |
If you have your own Redis
| BullRun Monitor | Taskforce.sh | Upqueue | |
|---|---|---|---|
| Price per connection | $6.33/conn | $49/conn | $50/conn |
| Free tier | |||
| Bulk job operations | |||
| Job search | Basic | Basic | |
| Team management | |||
| Alerting | Slack, email, webhooks | Basic email | |
| Keyboard shortcuts |
BullRun Monitor Pro: $19 for 3 connections. Taskforce: $49/connection. Upqueue: $50/connection.
Built for production. Running in production.
48
Tasks in production
13
Queues running 24/7
13
Scheduled jobs
BullRun powers the background infrastructure for Propzilla (206M property records), Bud Fox Capital (financial data), and Foxhound (web scraping). We built it for ourselves first.
Simple pricing. Start free.
All plans include the dashboard, CLI, and alerting. No credit card required.
Beta pricing — lock in reduced rates before general availability.
Free
For side projects and testing
- 10,000 runs/month
- 2 workers
- 3 queues
- 1-day logs
- Email alerts
Pro
Beta pricingFor indie devs and small teams
- 100,000 runs/month
- 10 workers
- Unlimited queues
- 7-day logs
- Slack + email + webhooks
- 3 environments
Team
Beta pricingFor growing engineering teams
- 1,000,000 runs/month
- 100 workers
- Unlimited everything
- 30-day logs
- All alert channels
- Bulk job operations
- 20 team members
- Priority support
Start with us. Go local anytime.
BullRun is managed BullMQ. When you're ready to run your own Redis, one command exports everything. Your code doesn't change.
Start managed
BullRun hosts your Redis. Or connect your own. Either way: define tasks, trigger jobs, see results.
Grow with us
Dashboard, alerting, team management, bulk ops, keyboard shortcuts. All included.
Eject anytime
bullrun eject exports your config. Point at your own Redis. Zero lock-in.
BullRun is BullMQ-compatible. No proprietary APIs. No lock-in. Your workers talk standard BullMQ. If you leave, your code stays the same.
Your BullMQ queues deserve better.
Managed hosting or dashboard-only monitoring. Start free in 60 seconds.