Trigger Dev

Trigger.dev for TypeScript background jobs and AI workflows: deployment, retries, waits, self-hosting, and when n8n, Inngest or Temporal fits better.

Published

Trigger Dev

Trigger.dev is a strong fit when your TypeScript app needs background work that outlives a web request and you want someone else to run the workers. Its current major version is v4: if you searched “trigger dev” to decide whether it replaces your queue, cron jobs, or agent runtime, the answer depends on who should own execution and recovery.

Trigger Dev: What It Replaces

Trigger.dev combines a task runner, queues, scheduling, deployment, and a run dashboard. You write an asynchronous function, send it a payload, and let a separate worker execute it while your app returns a response to the user. It can replace the infrastructure you would otherwise assemble around background jobs; it does not replace your application database, business rules, or the model that makes an AI agent's decisions.

Verified against live documentation, pricing, changelog, and the GitHub repository on 11 November 2026. This is a documentation-based evaluation, with no signed-in test or performance benchmark. The recommendation turns on runtime ownership, recovery boundaries, operator usability, and production limits.

Trigger.dev public homepage showing its durable agent and background task offering
Trigger.dev

The v4 launch changelog, dated 18 August 2025, added warm starts, waitpoints for approvals and callbacks, priority queuing, dashboard changes, and lifecycle hooks. The latest listed release at verification, v4.8.4 on 10 November 2026, adds workload identity and trusted deployment publishing. Those identity features let supported services and deployment systems authenticate with short-lived identity tokens instead of stored long-lived credentials.

For a founder, the practical change is that “generate the report after upload” can become a managed background task instead of a web endpoint held open until the report finishes. Your app still needs to record which report belongs to which customer and decide what happens if generation fails.

Who Should Pick It, and Who Should Skip It?

Trigger.dev suits an engineering-owned product whose background logic belongs beside the rest of its TypeScript code. The closer your requirement is to “run this function reliably, with its dependencies,” the stronger the fit.

The shortlist below compares where you express the workflow and what you must own. These are architecture choices, not a ranking of which vendor has the longest feature list.

ToolBest fitHow you describe the workDecision boundary
Trigger.devManaged TypeScript background workersTasks and ordinary async codePick when deploying the worker is part of the problem
n8nBusiness integrations maintained by operatorsConnected workflow nodesPick when people must inspect and change the process visually
InngestApplications organized around durable stepsFunctions with saved step resultsShortlist for explicit step recovery or native Python/Go workflow SDKs
TemporalCross-service business processes owned by engineersWorkflows and application workersShortlist when orchestration ownership is a deliberate platform investment

n8n: When the Workflow Owner Is an Operator

n8n makes more sense for a sales-operations owner connecting lead intake, enrichment, and follow-up. Its visual workflow approach keeps the process inspectable without requiring every change to become an application-code change. It supports AI and business automation, so “we need an agent” alone is not a reason to rule it out.

n8n public homepage showing a visual agent workflow
n8n

The tradeoff is ownership. If the hard part is custom application logic with libraries and deployment dependencies, a TypeScript task may be easier to maintain than a growing visual flow. If the hard part is letting an operator change business steps, Trigger.dev hands that operator an engineering dependency. See the broader n8n alternatives comparison for that buying decision.

Inngest vs Trigger Dev

Inngest is the close comparison for developers who want durable functions. Its current documentation describes saving step results and retrying from the failed step, with TypeScript, Python, and Go SDKs. That makes it worth shortlisting when the application naturally decomposes into named steps or a Python team wants to write workflows in Python.

Inngest documentation describing durable workflows and step recovery
Inngest

Trigger.dev's attraction is bringing the task runtime and its dependencies with the orchestration. Inngest's explicit step model makes the recovery boundary visible in your code. Neither choice removes the need to make an external write safe to repeat. Pick by how you want to deploy the workload and reason about failure, not by assuming only one supports waits or agents.

Temporal: When This Is a Platform Decision

Temporal deserves a place on the shortlist when a business process crosses services and its lifecycle matters more than getting a background function deployed quickly. Its documentation covers multiple SDK languages and deployment of your application alongside a self-hosted or managed Temporal service.

Temporal documentation showing SDK and production deployment choices
Temporal

The cost here is an architectural commitment: your engineers own the workflow application and its operational design. For a small TypeScript product trying to move a report generator off the request path, that can be more system than the problem needs. For a platform team standardizing long-lived business processes, it can be the point.

Write, Deploy, and Retry a Background Task

Trigger.dev moves the slow part of a request into a task that you can observe independently. Consider a document-import feature: the app accepts the upload, records an import, triggers processing, and returns control to the customer. Extraction and classification can continue in the background.

The following is the task documentation's hello-world example, with comments removed and an export added so the task can be discovered and imported:

TypeScript
import { task } from "@trigger.dev/sdk";

export const helloWorld = task({
  id: "hello-world",
  run: async (payload: { message: string }) => {
    console.log(payload.message);
  },
});

The important boundary is the payload: pass the information needed to locate and process the import, then keep the customer-facing request independent of the task's completion.

Trigger.dev quick-start documentation with public task testing and run-page examples
Trigger.dev quick start
  1. Initialize and run locally

    From your existing app directory, run npx trigger.dev@latest init, then npx trigger.dev@latest dev. The CLI creates the task directory and configuration, registers tasks, and runs development work locally. Follow the manual quick-start instructions to connect your project.

  2. Inspect a development run

    In the dashboard's Tasks page, open the task and use Test. For the example above, supply a JSON payload with a message. The run page updates as execution progresses; inspect its status and logs before connecting the task to your app.

  3. Deploy the worker

    Use npx trigger.dev@latest deploy --env prod to build and deploy the tasks, following the CLI deployment reference. Configure the production environment's credentials deliberately. Deploying background tasks is a separate responsibility from deploying the web app.

  4. Exercise failure before expanding the workflow

    Make a development run fail at a known point and check what repeats. Split expensive or externally visible operations into sensible recovery boundaries before adding more processing. This is a suggested acceptance test, not a test performed for this review.

The retry documentation distinguishes task retries from retrying a smaller block with retry.onThrow or an HTTP request with retry.fetch. A task retry can repeat the whole task. If import processing succeeds but a later notification throws, blindly rerunning everything can repeat earlier writes.

The design rule: retry transient failures close to the failing operation, and make writes idempotent, meaning repeating the same operation does not create another business effect. A task platform provides recovery machinery; your database constraints and external API choices determine whether a retry duplicates an invoice, email, or record.

Trigger Dev Python

Trigger.dev can execute Python scripts inside TypeScript tasks through its Python build extension. That is useful when your web product is TypeScript but a document parser is Python. It is a bridge between runtimes, not the same developer experience as a native Python workflow SDK.

One deployment detail matters: the extension's requirementsFile installation is production-only; development dependencies must be installed locally. A parser that works on a laptop is not proof that its deployed dependencies are correct.

Pause an Agent for Approval or a Callback

Trigger.dev's waitpoints let a workflow stop until a person or external service supplies the missing result. For a refund agent, that means separating “recommend a refund” from “issue the refund.” The task can prepare the recommendation, wait for approval, and continue only after the approval result arrives.

Trigger.dev waiting documentation explaining waits and checkpoint behavior
Trigger.dev waits

The maker's waitpoint walkthrough uses wait.createToken, wait.forToken, and wait.completeToken for that handoff. It also shows callback URLs for external services. The application still decides who may approve and what an approval authorizes.

There are separate controls for time and cost. The current wait documentation says timed waits longer than 5 seconds do not count toward compute usage. But a timed wait releases its concurrency slot only after the machine is snapshotted and shut down, 60 seconds into the wait. A shorter wait can therefore be compute-free while still occupying a slot.

That distinction matters if many agent runs pause briefly at once. A sleeping task is not automatically spare capacity for another task. Design your concurrency budget around executing and short-waiting work, not just around CPU-heavy operations.

For the agent's reasoning layer, use the separate AI agent frameworks comparison. Trigger.dev's runtime can keep work moving, but the choice of prompts, tools, and approval rules still determines what the agent does.

Schedule Syncs Without Hiding Timing Assumptions

Trigger.dev supports recurring work through schedules.task, with schedules defined in code or attached through the dashboard and SDK. A customer-data sync is a good example: the schedule starts processing, the task handles the work, and the run history shows whether it completed.

Trigger.dev scheduled-task documentation showing cron configuration and schedule management
Trigger.dev schedules

The scheduled-task documentation contains a limitation that matters more than the word “cron”: new schedules default to a 60-minute spreading window. A daily job need not start at the exact nominal cron time. Where the plan permits it, window: "0m" disables spreading.

New schedules created on Free are restricted to no more than hourly and a minimum 60-minute window. Existing grandfathered schedules are an exception. Upgrading does not immediately rewrite a restricted schedule; save it again or redeploy it while on the paid plan.

For a daily digest, spreading may be acceptable. For a customer promise that a report appears at an exact time, the default is the wrong assumption. Treat cadence, timezone, and permitted delay as separate requirements before replacing an existing cron job.

Show Progress to Users and Failures to Developers

Trigger.dev Realtime helps turn a background job from an unexplained spinner into a visible workflow. For an import screen, show the run state and progress metadata; for generated text, stream the output while the task works. Those are different data paths.

Trigger.dev Realtime documentation comparing run updates and streaming output
Trigger.dev Realtime

The Realtime overview distinguishes useRealtimeRun, which follows status and metadata, from useRealtimeStream, which consumes data emitted through defined streams. All Realtime hooks and functions require authentication. A customer should see their import's progress, not gain access to everyone else's runs.

For developers, the dashboard and task logs answer a different question: where did execution stop? Keep user progress messages clear enough to be useful without copying internal error details into the product UI.

Trigger Dev MCP

Trigger.dev's MCP server gives a coding assistant tools to search documentation, initialize projects, trigger tasks, deploy, and inspect runs. MCP, the Model Context Protocol, is the interface through which the assistant calls those tools.

Use it to shorten the edit-and-debug loop, not as a substitute for reviewing the task's behavior. An assistant being able to deploy a workflow says nothing about whether a retry can safely repeat its external actions.

Trigger Dev Pricing: The Production Plan Boundary

Trigger.dev Hobby is the sensible starting point for a small production app whose workload fits its limits: $10/month with $10 of included usage credits, 50 concurrent runs, and 7-day log retention. Free is $0/month with $5 in credits, 20 concurrent runs, and 1-day logs; once those credits are exhausted, you must upgrade to keep tasks running. These are the live pricing page's figures, verified 11 November 2026.

Trigger.dev current pricing page with Free, Hobby and Pro plan allowances
Trigger.dev pricing

The wall below Hobby is not simply usage. Free's schedule restrictions can disqualify it before compute becomes expensive. Realtime connections are another boundary: Free includes 10 concurrent connections, Hobby 150. Pro is $50/month with $50 of credits, 200 included concurrent runs and 30-day logs, making it relevant when concurrency or debugging history requires the upgrade.

For a concrete estimate, assume 10,000 successful jobs per month, each executing for 60 seconds on Small 1x, with no retries. At $0.0000338 per second plus $0.000025 per invocation, usage is:

10,000 × ((60 × $0.0000338) + $0.000025) = $20.53.

On Hobby, the $10 subscription includes $10 of that usage, leaving $10.53 extra: $20.53 total platform cost, or $0.002053 per completed job under these assumptions. This is arithmetic from the published rates, not a measured workload. Model API calls, storage, and other services remain separate bills; retries add execution work.

Buy the plan for the concurrency, scheduling, and history you need. Estimate usage from time spent executing, then include failure and retry headroom rather than treating a successful-run estimate as a spending ceiling.

Limitations That Can Change the Decision

Trigger.dev removes substantial worker infrastructure, but the remaining responsibilities are specific and consequential.

Self-Hosting Does Not Promise Cloud Parity

Trigger.dev's repository identifies the license as Apache-2.0 and links Docker Compose and Kubernetes deployment guides. Its GitHub repository is the source to check for the code and license.

The self-hosting comparison currently lists warm starts, autoscaling, checkpoints, and dedicated support as Cloud-only. Self-hosting also puts the webapp, Redis, Postgres, worker supervisors, updates, and reliability under your ownership.

For approval-heavy workflows, checkpoint behavior is a material reason to prefer Cloud. The latest release also mentions self-hosted microVM snapshot cleanup, so the documented comparison and release details do not establish simple parity. Confirm the supported behavior of your intended configuration and include infrastructure operation in the decision.

No Platform Timeout Does Not Mean No Failure Policy

Trigger.dev lets runs continue without a fixed platform duration ceiling, but your configuration can still impose maxDuration, a compute-time limit. The duration documentation supports overrides and timeout.None for indefinite execution.

It also says cleanup, onSuccess, and onFailure are not called when the maximum duration is exceeded. That is a sharp edge if your application expects a failure hook to release a reservation or mark an import as failed. Keep a way to reconcile unfinished application records rather than making a single hook your only recovery mechanism.

A Retry Cannot Decide Whether a Business Action Is Safe

Trigger.dev cannot infer whether a partially completed refund, email sequence, or data import should be repeated. Even when execution recovery works, the business result can be wrong if a repeated external action has another effect.

Before adopting it, identify the write that must not happen twice and the record that proves it happened. If your workflow has no such boundary, changing task platforms does not fix its correctness.

Cloud Credentials Need a Deliberate Trust Decision

Trigger.dev reported a security incident on 1 November 2026 involving unauthorized access to environment variables through compromised customer root API keys in some environments. Its incident report says affected customers were notified and impacted keys revoked; self-hosted deployments were not affected.

For a new buyer, that makes credential scope and the vendor's remediation part of the evaluation. It does not establish that every customer was affected, or that a self-hosted installation would automatically be safer. Review what credentials your worker would hold and whether the supported identity options fit your services.

Verdict: Pick It When You Want the Worker Managed

Trigger.dev is the strongest fit here for a TypeScript product team that wants background code, execution infrastructure, and a run dashboard delivered together. Start with one painful workload, such as an import or report generator, and define the retry boundary before migrating the rest.

Choose n8n when an operator needs to own and edit the integration flow. Shortlist Inngest for its explicit step model or native Python/Go workflow SDKs. Choose Temporal when a platform team deliberately wants to own durable business-process architecture across services.

If your requirement is mostly moving information between business apps, the Zapier alternatives guide is a better starting point than adopting task infrastructure.

Use the AI Business Workflow Audit Checklist to map the workload, owner, failure path, and handoff before moving it.

Frequently Asked Questions

What is trigger dev for?

Trigger.dev runs background jobs and AI workflows written as TypeScript tasks. It supplies execution, queues, retries, scheduling, and observability so your web app does not have to keep a request open while slow work finishes.

How much is trigger dev?

Trigger.dev has Free, Hobby, Pro, and custom Enterprise options. The pricing section above shows the verified monthly prices and a worked usage estimate. Your bill depends on the plan and usage beyond included credits, with external services billed separately.

Is there a way to deploy AI agents for free?

Trigger.dev's Free plan can cover small agent workloads within its credits and limits. It does not make model-provider usage free, and its newly created schedules have restrictions. Self-hosting is another option, but servers and maintenance still have a cost.

Published
Category
Build
Related Articles
Zapier MCP

Zapier MCP

Connect your AI assistant to Zapier apps, choose safe actions, and start with lead handoffs, CRM-informed replies and email-to-task workflows.Nov 11, 2026Build
MCP vs CLI

MCP vs CLI

Choose MCP or CLI by the job: GitHub, Playwright, and Stripe examples explain context use, permissions, skills, and where each interface fits.Nov 11, 2026Build
Windsurf AI

Windsurf AI

Windsurf AI is now Devin Desktop. Review its agents, editor workflows, models, pricing, enterprise limits and alternatives.Nov 11, 2026Build
Airtable Alternatives in 2026: Baserow, NocoDB, SeaTable, Grist, Smartsheet, Notion and Softr

Airtable Alternatives in 2026: Baserow, NocoDB, SeaTable, Grist, Smartsheet, Notion and Softr

Compare Baserow, NocoDB, SeaTable, Grist, Smartsheet, Notion and Softr by record limits, self-hosting, spreadsheets and app-building needs.Nov 10, 2026Build
Best Proxy Service in 2026: Bright Data, Oxylabs, Decodo, Webshare, ThorData, IPRoyal and NetNut Compared

Best Proxy Service in 2026: Bright Data, Oxylabs, Decodo, Webshare, ThorData, IPRoyal and NetNut Compared

Compare Bright Data, Oxylabs, Decodo, Webshare, ThorData, IPRoyal and NetNut by scraping job, entry offer, trial terms and access rules.Nov 10, 2026Build
CodeRabbit Pricing: Seat Costs, Limits and Add-Ons

CodeRabbit Pricing: Seat Costs, Limits and Add-Ons

CodeRabbit seat costs for 5, 20, and 50 developers, with monthly and annual totals, Free and OSS terms, review limits, and usage add-ons.Nov 9, 2026Build
NVIDIA OpenShell

NVIDIA OpenShell

Run agents inside NVIDIA OpenShell: current OS support, first-agent setup, file and network policies, and the limits to check before production.Nov 8, 2026Build
Best Antivirus for Small Business in 2026: Bitdefender, Microsoft Defender, ESET, Sophos, CrowdStrike and Malwarebytes

Best Antivirus for Small Business in 2026: Bitdefender, Microsoft Defender, ESET, Sophos, CrowdStrike and Malwarebytes

Compare Bitdefender, Microsoft Defender, ESET, Sophos, CrowdStrike and Malwarebytes by device coverage, setup and who handles security alerts.Nov 8, 2026Build
Newsletter

One letter, every Sunday.Working systems, not hot takes.

Weekly. No spam. Unsubscribe anytime.