# Trigger.dev v3 — Durable Background Jobs with No Timeouts > Trigger.dev v3 runs durable TypeScript background jobs with no Lambda 15-min limit. Subtasks, retries, queues, dead letter, realtime UI streaming. ## Install Copy the content below into your project: ## Quick Use 1. `npx trigger.dev@latest init` in your existing TS project 2. Define tasks in `trigger/` folder, each with an `id` and `run` function 3. `npx trigger.dev@latest dev` to run locally; `deploy` for Cloud or self-host --- ## Intro Trigger.dev v3 is the durable execution engine for TypeScript. Tasks run as long as needed (no Lambda 15-min limit), survive restarts, support subtasks, retries, queues, dead-letter queues, and stream progress to the UI in realtime. Best for: long agent runs, video/file processing, AI generation pipelines that exceed serverless limits. Works with: Node 20+, Bun, Deno (preview). Setup time: 5 minutes. --- ### Define a task ```typescript // trigger/process-video.ts import { task, logger } from "@trigger.dev/sdk/v3"; export const processVideo = task({ id: "process-video", maxDuration: 3600, // 1 hour OK retry: { maxAttempts: 3 }, run: async ({ videoUrl }: { videoUrl: string }) => { logger.info("Downloading", { url: videoUrl }); const local = await downloadVideo(videoUrl); logger.info("Transcoding"); const transcoded = await transcode(local); logger.info("Uploading"); const uploadedUrl = await uploadToS3(transcoded); return { url: uploadedUrl }; }, }); ``` ### Trigger from your app ```typescript import { tasks } from "@trigger.dev/sdk/v3"; import type { processVideo } from "@/trigger/process-video"; const handle = await tasks.trigger( "process-video", { videoUrl: "https://example.com/clip.mp4" }, ); return Response.json({ runId: handle.id }); ``` ### Stream progress to the UI ```typescript // React component import { useRealtimeRun } from "@trigger.dev/react-hooks"; const { run, error } = useRealtimeRun(runId, { accessToken: publicToken }); return ; ``` ### Subtasks for parallelism ```typescript const transcribeVideo = task({ id: "transcribe-video", run: async ({ videoUrl }) => { const chunks = await splitVideo(videoUrl); const transcripts = await Promise.all( chunks.map((chunk) => transcribeChunk.triggerAndWait({ chunk })) ); return mergeTranscripts(transcripts.map(r => r.output)); }, }); ``` Subtasks run in parallel on Trigger's infra; the parent waits and proceeds when all return. --- ### FAQ **Q: Is Trigger.dev free?** A: Yes — open-source under Apache 2.0. Self-host on your own Postgres + Docker for free. Trigger.dev Cloud has a free tier (5K runs/mo) and paid plans with more concurrency and longer retention. **Q: How is this different from Inngest?** A: Both are durable execution platforms. Trigger.dev is TypeScript-first with deeper React/Next.js integration (realtime hooks). Inngest spans TS + Python and uses event-driven primitives. Pick by ecosystem fit. **Q: What happens if my server crashes mid-task?** A: Trigger.dev checkpoints state. After restart, the task resumes from the last completed step. Long-running operations (download, AI generation) survive deployments and crashes. --- ## Source & Thanks > Built by [Trigger.dev](https://github.com/triggerdotdev). Licensed under Apache-2.0. > > [triggerdotdev/trigger.dev](https://github.com/triggerdotdev/trigger.dev) — ⭐ 12,000+ --- ## 快速使用 1. 在现有 TS 项目里跑 `npx trigger.dev@latest init` 2. 在 `trigger/` 目录定义任务,每个带 `id` 和 `run` 函数 3. `npx trigger.dev@latest dev` 本地跑;`deploy` 上 Cloud 或自托管 --- ## 简介 Trigger.dev v3 是 TypeScript 的持久化执行引擎。任务可以跑任意长(没有 Lambda 15 分钟上限)、能扛重启、支持子任务、重试、队列、死信队列、实时流式推进度到 UI。适合长 agent 运行、视频/文件处理、超出 serverless 限制的 AI 生成流水线。需要 Node 20+,Bun,Deno(预览)。装机时间 5 分钟。 --- ### 定义任务 ```typescript // trigger/process-video.ts import { task, logger } from "@trigger.dev/sdk/v3"; export const processVideo = task({ id: "process-video", maxDuration: 3600, // 1 小时也行 retry: { maxAttempts: 3 }, run: async ({ videoUrl }: { videoUrl: string }) => { logger.info("Downloading", { url: videoUrl }); const local = await downloadVideo(videoUrl); logger.info("Transcoding"); const transcoded = await transcode(local); logger.info("Uploading"); const uploadedUrl = await uploadToS3(transcoded); return { url: uploadedUrl }; }, }); ``` ### 从你的应用触发 ```typescript import { tasks } from "@trigger.dev/sdk/v3"; import type { processVideo } from "@/trigger/process-video"; const handle = await tasks.trigger( "process-video", { videoUrl: "https://example.com/clip.mp4" }, ); return Response.json({ runId: handle.id }); ``` ### 把进度流给 UI ```typescript // React 组件 import { useRealtimeRun } from "@trigger.dev/react-hooks"; const { run, error } = useRealtimeRun(runId, { accessToken: publicToken }); return ; ``` ### 子任务并行 ```typescript const transcribeVideo = task({ id: "transcribe-video", run: async ({ videoUrl }) => { const chunks = await splitVideo(videoUrl); const transcripts = await Promise.all( chunks.map((chunk) => transcribeChunk.triggerAndWait({ chunk })) ); return mergeTranscripts(transcripts.map(r => r.output)); }, }); ``` 子任务在 Trigger 基础设施上并行跑,父任务等待所有返回再继续。 --- ### FAQ **Q: Trigger.dev 免费吗?** A: 免费 —— Apache 2.0 开源。自己用 Postgres + Docker 跑免费。Trigger.dev Cloud 有免费档(5K 次/月)和付费档(更高并发、更长保留)。 **Q: 跟 Inngest 啥区别?** A: 都是持久执行平台。Trigger.dev TypeScript 优先,跟 React/Next.js 集成更深(realtime hook)。Inngest 跨 TS + Python,事件驱动原语。按生态适配选。 **Q: 任务跑到一半服务器挂了怎么办?** A: Trigger.dev 会 checkpoint 状态。重启后任务从最后一个完成 step 继续。长运行操作(下载、AI 生成)能扛部署和崩溃。 --- ## 来源与感谢 > Built by [Trigger.dev](https://github.com/triggerdotdev). Licensed under Apache-2.0. > > [triggerdotdev/trigger.dev](https://github.com/triggerdotdev/trigger.dev) — ⭐ 12,000+ --- Source: https://tokrepo.com/en/workflows/trigger-dev-v3-durable-background-jobs-with-no-timeouts Author: Trigger.dev