DEV Community

Alex Spinov
Alex Spinov

Posted on

Trigger.dev Has a Free Background Jobs Framework — Run Long Tasks with Retries and Scheduling in TypeScript

Why Trigger.dev?

Trigger.dev runs background jobs in TypeScript with automatic retries, scheduling, and monitoring. No Redis, no Bull, no separate worker processes.

npx trigger.dev@latest init
Enter fullscreen mode Exit fullscreen mode

Define a Job

import { task } from '@trigger.dev/sdk/v3'

export const processOrder = task({
  id: 'process-order',
  retry: { maxAttempts: 3 },
  run: async (payload: { orderId: string }) => {
    const order = await db.getOrder(payload.orderId)
    await chargePayment(order)
    await sendConfirmationEmail(order)
    await updateInventory(order)
    return { success: true }
  },
})
Enter fullscreen mode Exit fullscreen mode

Trigger from Your App

import { processOrder } from './trigger/process-order'

// From API route
app.post('/checkout', async (req, res) => {
  const order = await createOrder(req.body)
  await processOrder.trigger({ orderId: order.id })
  res.json({ status: 'processing' })
})
Enter fullscreen mode Exit fullscreen mode

Scheduled Jobs (Cron)

import { schedules } from '@trigger.dev/sdk/v3'

export const dailyReport = schedules.task({
  id: 'daily-report',
  cron: '0 9 * * *',  // 9 AM daily
  run: async () => {
    const stats = await generateDailyStats()
    await sendSlackMessage(stats)
  },
})
Enter fullscreen mode Exit fullscreen mode

Trigger.dev vs Bull/BullMQ

Feature Trigger.dev BullMQ
Redis Not needed Required
Monitoring Built-in UI Separate
Scheduling Built-in Built-in
TypeScript Native Via adapter
Deploy Managed Self-host

Need to extract data from any website at scale? I build custom web scrapers — 77 production scrapers running on Apify Store. Email me at spinov001@gmail.com for a tailored solution.

Top comments (0)