Background Jobs in Node.js 2026: BullMQ, Trigger.dev, or Inngest?
Node.jsBackendPerformance

Background Jobs in Node.js 2026: BullMQ, Trigger.dev, or Inngest?

Compared on real client projects: BullMQ vs Trigger.dev vs Inngest for Node.js background jobs. What I pick for what, with cost, DX, and operational trade-offs.

HJ
Hassan Javed
April 2026
10 min read

Why this comparison matters

Every non-trivial Node.js app needs background work — sending emails, processing webhooks, running scheduled tasks, chunking heavy work out of the request cycle.

In 2026, the three options I see actually used in production are BullMQ (self-hosted with Redis), Trigger.dev (hosted), and Inngest (hosted, durable execution model).

I've shipped client work on all three in the last year. Here's the comparison.

BullMQ — self-hosted, Redis-backed

The OG. A queue library backed by Redis. Mature, battle-tested, used everywhere.

Strengths:

Free (you pay only Redis)
Mature ecosystem, lots of documentation
Bull Board UI for monitoring is free and good enough
Predictable: it's a queue, jobs go in, workers pull them out

Weaknesses:

You operate the worker process (its own server, its own monitoring)
Scheduled jobs need a separate scheduler concept
No durable execution — if a worker dies mid-job, the job retries from scratch
Doesn't fit serverless deployment naturally

Pick when:

You have a long-running Node.js server already (Railway, Render, Fly, AWS)
You're cost-conscious and have ops capacity
Jobs are short and idempotent
You want zero vendor lock-in

Trigger.dev — hosted, "background functions"

A managed service where you write background functions in your codebase and Trigger handles the runtime, retries, scheduling.

Strengths:

Functions live in your repo, deploy with your code
Beautiful dashboard with logs and retries
Built-in scheduling (cron-like)
Works with Vercel or serverless deployments cleanly
Generous free tier

Weaknesses:

Paid tier scales with usage (per run)
Vendor lock-in if you use their durable runs heavily
Newer than BullMQ; some patterns aren't documented as well

Pick when:

Vercel or serverless deployment
You want a hosted, "just works" runtime
You're shipping fast and ops capacity is limited

Inngest — durable execution model

The newest mental model. Your background function is a "step function" — each step is durably saved, so if the worker dies, execution resumes at the last completed step.

Strengths:

Durable execution is genuinely powerful for multi-step workflows (e.g., a 5-step onboarding flow)
Beautiful event-driven model — emit events, functions subscribe
Excellent for AI agent workflows where each step might take seconds
Works on serverless without modification

Weaknesses:

The mental model takes a week to internalize
Pricing scales with execution time and steps
Overkill for simple "send an email when X happens" jobs

Pick when:

Multi-step workflows (onboarding, billing, AI agent runs)
Event-driven architecture
You're shipping AI agent backends that need durable execution

My pick per project type

Simple SaaS background work (send emails, process webhooks)

Trigger.dev. Free tier covers most apps. Zero ops. Functions deploy with code.

Long-running, heavy processing (video transcoding, large data jobs)

BullMQ on a dedicated worker. Self-hosted, predictable cost, can run for hours.

AI agent backend (multi-step LLM workflows)

Inngest. Durable execution is exactly what AI agents need — each LLM call as a step, retry-friendly, the run survives worker crashes.

Web3 indexer (consume chain events, write to DB)

BullMQ. Long-running worker, predictable workload, Redis-backed.

Scheduled reports or batch jobs

Trigger.dev for cron-style, BullMQ if already self-hosted.

What changed my mind in 2026

Two specific moments:

Moment 1: shipped on BullMQ, regretted it

Built a SaaS on Vercel with BullMQ workers on Railway. Two services to deploy. Two sets of env vars. Two monitoring dashboards. When the Railway worker died at 2am, I noticed at 9am.

Moved to Trigger.dev. One deploy, one dashboard, same uptime, half the ops.

Moment 2: built an AI agent on Trigger.dev, regretted it

Multi-step LLM workflow: classify intent, then fetch context, then call tool, then format response. Each step is 2-5 seconds of LLM call.

On Trigger.dev v3, the workflow worked but the lack of native step-level durability meant a partial failure retried the whole chain. Wasted tokens, slow recovery.

Moved to Inngest, where each step is durably saved. Failures resume mid-flow. Token spend dropped 60 percent.

Cost reality (numbers from real client work)

For a SaaS at ~10K background jobs per day:

BullMQ on Railway: 20-50 dollars per month (worker plus Redis)
Trigger.dev Pro: 0-50 dollars per month (free tier covers most of this volume)
Inngest Pro: 50-150 dollars per month (their pricing includes step count)

At ~100K jobs per day:

BullMQ: 100-200 dollars per month
Trigger.dev: 200-400 dollars per month
Inngest: 400-800 dollars per month (more, but durable execution is genuinely different)

At ~1M jobs per day: BullMQ wins on cost by a wide margin. Hosted options are convenient but expensive at scale.

TL;DR

BullMQ for self-hosted, long-running workers, cost-sensitive scale
Trigger.dev for serverless deployments, simple to medium workflows
Inngest for multi-step durable workflows, especially AI agents
Don't pick by hype. Pick by your deploy target and your workflow shape.

If you're choosing a background job stack for a Node.js project and want a second opinion before committing, contact me.

Related Reads

You might also like