Trigger.dev
Open-source background job platform built for serverless and edge. Write durable background jobs as plain TypeScript functions with retries, delays, and scheduling — no infrastructure setup.
Why Trigger.dev?
Serverless/edge app that needs durable background tasks
You want to write jobs as plain TypeScript without a Redis queue
Long-running tasks (>10s) that would timeout in Vercel serverless
Signal Breakdown
What drives the Trust Score
Download Trend
Last 12 months
Tradeoffs & Caveats
Know before you commitAlready have Redis — BullMQ is more feature-complete
Python backend — no Python SDK yet
Very high throughput — managed plan has limits
Pricing
Free tier & paid plans
Free tier (500 runs/mo)
From $20/mo
Self-hostable
Alternative Tools
Other options worth considering
The premium queue and job scheduling solution for Node.js, backed by Redis. Handles retries, rate limiting, priorities, repeatable jobs, and job dependencies out of the box.
The most widely used distributed task queue for Python. Celery handles background jobs, scheduled tasks, and async processing using Redis or RabbitMQ as a broker. A staple of Django and Flask applications.
Often Used Together
Complementary tools that pair well with Trigger.dev
Learning Resources
Docs, videos, tutorials, and courses
Get Started
Repository and installation options
View on GitHub
github.com/triggerdotdev/trigger.dev
npm install @trigger.dev/sdkQuick Start
Copy and adapt to get going fast
import { task, wait } from '@trigger.dev/sdk/v3';
export const processUpload = task({
id: 'process-upload',
run: async (payload: { fileUrl: string; userId: string }) => {
// Step 1: Download
const file = await downloadFile(payload.fileUrl);
// Step 2: Process (can take minutes — no timeout!)
const result = await runMLModel(file);
// Step 3: Notify
await notifyUser(payload.userId, result);
return { processed: true };
},
});Code Examples
Common usage patterns
Scheduled task
Run a job on a cron schedule
import { schedules } from '@trigger.dev/sdk/v3';
export const weeklyReport = schedules.task({
id: 'weekly-report',
cron: '0 9 * * 1', // Every Monday at 9am UTC
run: async () => {
const stats = await generateWeeklyStats();
await sendReportEmail(stats);
return { sent: true };
},
});Multi-step workflow
Chain steps with built-in delays
import { task, wait } from '@trigger.dev/sdk/v3';
export const onboardingFlow = task({
id: 'onboarding-flow',
run: async (payload: { userId: string }) => {
await sendWelcomeEmail(payload.userId);
await wait.for({ hours: 24 }); // Non-blocking wait!
await sendTipsEmail(payload.userId);
await wait.for({ days: 7 });
await sendCheckInEmail(payload.userId);
},
});Community Notes
Real experiences from developers who've used this tool