Durable Execution Engines arenaDurable Execution Engines
Durable execution engines — the checkpointing workflow runtimes that make long-running, failure-prone code reliable by persisting every step and resuming exactly where a crash, deploy, or week-long pause left off — judged on code-first workflow authoring in real languages, automatic retries with backoff, crash recovery and compute-free long sleeps, cron schedules and event triggers, human-in-the-loop approval waits and external signals, per-run timeline observability and replay debugging, safe versioned deploys while old runs finish, worker fleet scaling with concurrency and rate controls, and the agent-era heart of the arena: durable agent loops — LLM and tool calls as retried, checkpointed steps in multi-day agent runs, first-party AI-framework integrations, and realtime run streaming. Temporal anchors the battle-tested end; DBOS argues the whole control plane can live in Postgres; Inngest, Trigger.dev, Restate, and Hatchet fight over the agent-backend developer.
53 user stories · 318 judged cells · updated 2026-09-16 · Evidence as of 2026-09-16
Leaderboard — every product ranked by evidenceLeaderboard
| 1 | free-tier vs DBOS ↗ | 60/100 | 27/100 | 10/100 | 56/100 | 51/100 | ★ 23k▲ 3.3k/yrnpm 2M/wkpypi 8.8M/wk | 15/41 verified | 50/100 integrity | ||
| 2 | DBOS free-tier vs Temporal ↗ | 50/100 | 35/100 | 9/100 | 58/100 | 47/100 | ★ 1.6k▲ 730/yrnpm 143.4k/wkpypi 529k/wk | 27/41 verified | 67/100 integrity | ||
| 3 | Trigger.dev free-tier vs Temporal ↗ | 55/100 | 26/100 | 9/100 | 51/100 | 47/100 | ★ 16.3k▲ 4.3k/yrnpm 539.2k/wk | 20/42 verified · 1 disputed | 50/100 integrity | ||
| 4 | Inngest free-tier vs Temporal ↗ | 57/100 | 28/100 | 4/100 | 36/100 | 62/100 | ★ 5.8k▲ 1.1k/yrnpm 1.1M/wkpypi 235.9k/wk | 23/43 verified · 1 disputed | 44/100 integrity | ||
| 5 | Hatchet free-tier vs Temporal ↗ | 48/100 | 40/100 | 3/100 | 41/100 | 54/100 | ★ 7.9k▲ 2.9k/yrnpm 215.3k/wkpypi 248.7k/wk | 11/36 verified | 36/100 integrity | ||
| 6 | Restate free-tier vs Temporal ↗ | 55/100 | 20/100 | 10/100 | 40/100 | 26/100 | ★ 4.4k▲ 1.2k/yrnpm 103.8k/wkpypi 65.3k/wk | 12/39 verified · 1 disputed | 47/100 integrity |
Best by user type — persona-weighted winnersBest by user type
Per persona, the product with the highest persona-weighted coverage over just that persona's stories — not the same ranking as the overall PA Score leaderboard above.
Best for backend-developer
Inngest
68/100
Runner-up:
Temporal (64/100)
13 backend-developer stories scored
Story matrix — every product × every judged storyStory matrix
Agent workloads — stories about agent workloads in this arenaAgent workloads
Agent loops
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Agent workloads — stories about agent workloads in this arenaI run LLM agent loops as durable workflows — model and tool calls as checkpointed, retried steps that survive crashes mid-run | agent-builder | fullX 9/10 | fullX 9/10 | fullX 8/10 | fullX 9/10 | fullC 7/10 | fullX 9/10 |
Ai integrations
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Agent workloads — stories about agent workloads in this arenaFirst-party integrations wrap my AI stack — AI SDKs, agent frameworks, model providers — so agent steps get durability without glue code | agent-builder | partialC 6/10 | partialC 6/10 | partialC 5/10 | partialC 7/10 | partialC 6/10 | partialT 7/10 |
Streaming
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Agent workloads — stories about agent workloads in this arenaI stream live progress — step updates or model tokens — from a running workflow into my frontend as it executes | ai-native | partialC 4/10 | none 0/10 | fullX 8/10 | none 0/10 | none 0/10 | fullC 8/10 |
Agenticness — how well agents can access and operate the productAgenticness
Agent access
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Agenticness — how well agents can access and operate the productPoint an agent at llms.txt or agent-oriented docs | ai-native | fullT 9/10 | partialT 6/10 | fullT 8/10 | fullT 9/10 | fullT 9/10 | fullT 9/10 |
| Agenticness — how well agents can access and operate the productRun the product headlessly / in CI for automation | ai-native | fullC 8/10 | fullX 8/10 | fullX 8/10 | fullC 8/10 | fullC 8/10 | fullC 8/10 |
| Agenticness — how well agents can access and operate the productPlug MCP servers into this product so it can use their tools | ai-native | n/a | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productConnect an agent via an official MCP server | ai-native | n/a | fullT 8/10 | fullT 8/10 | partialT 6/10 | fullC 7/10 | fullT 8/10 |
| Agenticness — how well agents can access and operate the productUse an official CLI | ai-native | fullT 8/10 | fullT 8/10 | fullT 8/10 | fullT 8/10 | fullT 8/10 | fullT 8/10 |
| Agenticness — how well agents can access and operate the productDrive the product through a documented public API | ai-native | fullT 7/10 | fullT 8/10 | fullT 7/10 | fullT 8/10 | partialT 6/10 | partialT 6/10 |
| Agenticness — how well agents can access and operate the productIssue scoped/least-privilege API credentials for an agent | ai-native | partialC 4/10 | none 0/10 | partialC 6/10 | none 0/10 | none 0/10 | partialC 3/10 |
| Agenticness — how well agents can access and operate the productBuild against official SDKs | ai-native | fullC 7/10 | fullT 8/10 | fullT 8/10 | fullX 8/10 | fullX 8/10 | fullX 8/10 |
| Agenticness — how well agents can access and operate the productSubscribe to events via webhooks | ai-native | none 0/10 | fullC 8/10 | none 0/10 | fullC 7/10 | partialC 3/10 | none 0/10 |
Agentic features
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Agenticness — how well agents can access and operate the productGet AI-generated insights and suggestions from my data inside the product | ai-native | none 0/10 | none 0/10 | none 0/10 | n/a | n/a | none 0/10 |
| Agenticness — how well agents can access and operate the productSet up automations that run autonomously in the background | ai-native | fullX 8/10 | fullX 9/10 | fullX 8/10 | fullC 7/10 | fullX 8/10 | fullX 8/10 |
| Agenticness — how well agents can access and operate the productDelegate tasks to a built-in AI assistant inside the product | ai-native | n/a | none 0/10 | none 0/10 | none 0/10 | n/a | n/a |
| Agenticness — how well agents can access and operate the productOperate the product with natural-language commands | ai-native | none 0/10 | partialT 6/10 | partialT 6/10 | none 0/10 | none 0/10 | partialT 4/10 |
Api quality
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Agenticness — how well agents can access and operate the productExplore an interactive API reference with runnable examples | ai-native | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productDownload a machine-readable API spec (OpenAPI or equivalent) | ai-native | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | partialT 5/10 |
| Agenticness — how well agents can access and operate the productTest against a sandbox environment without touching production data | ai-native | fullC 7/10 | partialX 5/10 | partialX 6/10 | partialC 6/10 | partialC 4/10 | none 0/10 |
| Agenticness — how well agents can access and operate the productRely on versioned APIs with a documented deprecation policy | ai-native | none 0/10 | none 0/10 | disputedD 4/10 | partialC 3/10 | none 0/10 | none 0/10 |
Automation depth — how much of the product can run unattendedAutomation depth
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Automation depth — how much of the product can run unattendedPerform bulk operations across many items at once | ai-native | partialC 6/10 | partialC 4/10 | partialC 5/10 | none 0/10 | partialC 5/10 | partialX 6/10 |
| Automation depth — how much of the product can run unattendedDefine rules that trigger actions automatically on events | ai-native | partialC 7/10 | fullX 8/10 | partialC 6/10 | partialC 6/10 | fullC 7/10 | partialC 5/10 |
| Automation depth — how much of the product can run unattendedSchedule recurring jobs or workflows | ai-native | fullC 9/10 | fullX 9/10 | fullX 9/10 | partialC 5/10 | fullC 8/10 | fullC 9/10 |
| Automation depth — how much of the product can run unattendedVersion, review, and roll back my automations | ai-native | partialC 5/10 | partialC 4/10 | partialC 4/10 | partialC 6/10 | none 0/10 | partialX 6/10 |
Developer experience — stories about developer experience in this arenaDeveloper experience
Local dev
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Developer experience — stories about developer experience in this arenaOne command runs the whole engine locally, and testing utilities let me unit-test workflows with time skipping and mocked steps | backend-developer | fullC 8/10 | partialX 6/10 | partialT 4/10 | partialC 5/10 | partialC 3/10 | partialC 4/10 |
Human in the loop — stories about human in the loop in this arenaHuman in the loop
Approvals
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Human in the loop — stories about human in the loop in this arenaA workflow pauses for human approval or input for hours or days and resumes the moment the response arrives | backend-developer | fullX 8/10 | fullC 9/10 | fullC 8/10 | fullC 8/10 | none 0/10 | fullX 9/10 |
Signals
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Human in the loop — stories about human in the loop in this arenaI send signals, events, or messages into a specific running workflow from outside — an API call, webhook, or another workflow | backend-developer | fullC 8/10 | fullC 9/10 | fullC 8/10 | fullC 8/10 | partialC 3/10 | fullC 9/10 |
Observability debugging — stories about observability debugging in this arenaObservability debugging
Metrics
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Observability debugging — stories about observability debugging in this arenaFailure rates, latencies, and queue depths export to my observability stack, and alerts fire when workflows misbehave | platform-engineer | partialC 6/10 | partialC 5/10 | partialT 4/10 | partialC 4/10 | partialC 4/10 | partialX 4/10 |
Replay
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Observability debugging — stories about observability debugging in this arenaI replay or rerun a failed workflow from its recorded history — optionally from a specific step — to debug and recover | platform-engineer | partialC 4/10 | partialC 5/10 | partialC 4/10 | partialC 5/10 | none 0/10 | fullC 9/10 |
Run visibility
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Observability debugging — stories about observability debugging in this arenaEvery run has a step-by-step timeline — inputs, outputs, retries, and errors per step — in a dashboard my team can search and filter | platform-engineer | partialX 5/10 | fullX 8/10 | fullC 8/10 | partialX 5/10 | partialX 5/10 | partialX 6/10 |
Openness — open source, data portability, and self-hosting storiesOpenness
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Openness — open source, data portability, and self-hosting storiesDo everything through the API that I can do in the UI | ai-native | partialT 6/10 | partialT 5/10 | partialT 6/10 | fullC 7/10 | partialT 5/10 | fullT 8/10 |
| Openness — open source, data portability, and self-hosting storiesExport all of my data in open formats and leave | ai-native | partialC 3/10 | partialX 4/10 | partialC 5/10 | none 0/10 | partialC 4/10 | partialX 6/10 |
| Openness — open source, data portability, and self-hosting storiesRead the product's source under an open license | ai-native | fullC 8/10 | disputedD 3/10 | fullC 7/10 | disputedD 4/10 | partialC 3/10 | partialX 6/10 |
| Openness — open source, data portability, and self-hosting storiesSelf-host the core product | ai-native | fullC 9/10 | fullX 7/10 | fullC 7/10 | fullX 8/10 | fullC 8/10 | fullX 8/10 |
Operations hosting — stories about operations hosting in this arenaOperations hosting
Deployment model
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Operations hosting — stories about operations hosting in this arenaI run workers in my own infrastructure while the vendor manages the orchestration control plane — code and data stay inside my network | platform-engineer | fullC 7/10 | fullC 7/10 | none 0/10 | fullX 7/10 | partialC 4/10 | fullX 8/10 |
Performance scale — stories about performance scale in this arenaPerformance scale
Flow control
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Performance scale — stories about performance scale in this arenaI cap concurrency and set rate limits per workflow, per key, or per tenant so one hot customer can't starve the rest | platform-engineer | partialC 4/10 | fullC 8/10 | partialC 6/10 | partialC 6/10 | fullC 8/10 | partialX 5/10 |
Prioritization
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Performance scale — stories about performance scale in this arenaI assign priorities to runs and get fair scheduling across tenants instead of a single FIFO queue | platform-engineer | none 0/10 | partialC 3/10 | partialC 4/10 | partialC 3/10 | partialC 4/10 | none 0/10 |
Scaling
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Performance scale — stories about performance scale in this arenaThroughput scales by adding workers — the platform load-balances tasks across the fleet and tolerates worker loss | platform-engineer | fullX 7/10 | partialC 5/10 | partialX 6/10 | partialX 5/10 | partialX 6/10 | partialX 6/10 |
Privacy posture — data-handling and privacy storiesPrivacy posture
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Privacy posture — data-handling and privacy storiesChoose where my data is stored (region/residency) | ai-native | partialC 4/10 | partialC 3/10 | none 0/10 | partialC 5/10 | partialC 3/10 | none 0/10 |
| Privacy posture — data-handling and privacy storiesPrevent my data from being used to train AI models | ai-native | n/a | n/a | none 0/10 | n/a | n/a | n/a |
| Privacy posture — data-handling and privacy storiesControl data retention and deletion | ai-native | partialC 3/10 | partialC 3/10 | none 0/10 | none 0/10 | partialC 3/10 | none 0/10 |
| Privacy posture — data-handling and privacy storiesOpt out of telemetry and usage tracking | ai-native | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 | none 0/10 |
Reliability recovery — stories about reliability recovery in this arenaReliability recovery
Exactly once
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Reliability recovery — stories about reliability recovery in this arenaIdempotency keys and exactly-once step semantics stop duplicate triggers from double-charging or double-sending | backend-developer | partialX 5/10 | partialC 5/10 | partialC 4/10 | fullC 8/10 | none 0/10 | partialX 6/10 |
Long running
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Reliability recovery — stories about reliability recovery in this arenaA workflow can sleep or wait for days to months without holding a server, connection, or billable compute | backend-developer | fullC 8/10 | fullX 9/10 | fullC 7/10 | fullC 8/10 | partialC 4/10 | fullC 8/10 |
Recovery
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Reliability recovery — stories about reliability recovery in this arenaA workflow interrupted by a process crash, deploy, or infrastructure failure resumes from its last completed step with state intact | backend-developer | fullX 9/10 | fullX 9/10 | fullX 7/10 | fullX 9/10 | partialC 6/10 | fullX 9/10 |
Retries
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Reliability recovery — stories about reliability recovery in this arenaEvery step retries automatically with configurable backoff, timeouts, and failure policies — no try/catch scaffolding | backend-developer | fullX 8/10 | fullX 9/10 | fullC 8/10 | fullC 8/10 | partialX 6/10 | partialC 5/10 |
Triggers scheduling — stories about triggers scheduling in this arenaTriggers scheduling
Events
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Triggers scheduling — stories about triggers scheduling in this arenaEvents from my app, webhooks, or queues trigger workflows declaratively, and one event can fan out to many functions | backend-developer | partialC 6/10 | fullX 9/10 | partialX 6/10 | partialC 6/10 | partialC 6/10 | partialX 6/10 |
Flow shaping
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Triggers scheduling — stories about triggers scheduling in this arenaI debounce, batch, or delay triggers so noisy event streams collapse into the runs I actually want | backend-developer | partialC 5/10 | partialC 4/10 | partialC 3/10 | partialC 4/10 | partialC 4/10 | partialC 3/10 |
Schedules
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Triggers scheduling — stories about triggers scheduling in this arenaI schedule workflows on cron expressions with overlap policies, pause/resume, and visibility into upcoming runs | backend-developer | partialC 5/10 | partialC 5/10 | partialX 6/10 | none 0/10 | partialC 5/10 | partialC 6/10 |
Versioning deployment — stories about versioning deployment in this arenaVersioning deployment
Versioning
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Versioning deployment — stories about versioning deployment in this arenaI deploy new workflow code while in-flight runs finish on the version they started with — versioning without breaking determinism | platform-engineer | fullX 8/10 | fullC 8/10 | fullC 8/10 | fullC 8/10 | none 0/10 | fullC 7/10 |
Workflow authoring — stories about workflow authoring in this arenaWorkflow authoring
Authoring
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Workflow authoring — stories about workflow authoring in this arenaI write workflows as ordinary code in my language — steps with automatic checkpointing — not YAML or a proprietary DSL | backend-developer | fullX 9/10 | fullX 9/10 | fullX 8/10 | fullC 8/10 | partialX 6/10 | fullX 9/10 |
Composition
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Workflow authoring — stories about workflow authoring in this arenaI compose workflows from parallel steps, fan-out/fan-in over dynamic batches, and child workflows without hand-rolling coordination | backend-developer | partialC 6/10 | partialC 6/10 | partialC 4/10 | partialC 3/10 | none 0/10 | partialC 6/10 |
Language coverage
| Story | Persona | Inngest | Trigger.dev | Restate | Hatchet | DBOS | |
|---|---|---|---|---|---|---|---|
| Workflow authoring — stories about workflow authoring in this arenaI author workflows in the language my team already uses — TypeScript, Python, Go, or more — with real feature parity across SDKs | backend-developer | partialX 5/10 | partialX 5/10 | partialC 2/10 | partialX 6/10 | partialX 6/10 | partialX 5/10 |
Adjacent arenas — categories often shopped togetherAdjacent arenas
Shopping this category often means shopping these too.
Workflow Automation arenaWorkflow Automation
6 products · leader: Windmill
Serverless & Developer Databases arenaServerless & Developer Databases
5 products · leader: ClickHouse
Agent Frameworks & SDKs arenaAgent Frameworks & SDKs
9 products · leader: Claude Agent SDK
Agent Sandboxes & Code Execution arenaAgent Sandboxes & Code Execution
8 products · leader: E2B
shares: Performance scale