Durable Execution Engines Arena
Durable Execution Engines — procurement report
ProductArena · rankings as of 2026-09-16 · evidence as of 2026-09-16 · 6 products · 53 judged requirements · 318 judged cells
Methodology: Every product is judged against a shared taxonomy of user stories using cited evidence — hands-on probes > repository code > independent community sources > vendor claims — never opinion. Full writeup: https://ultrametric.ai/productarena/methodology
Leaderboard
| # | Product | PA Score | Coverage score | Applicable cells | Confidence |
|---|---|---|---|---|---|
| 1 | Temporal | 42.7 | 49.6 | 49/53 | B |
| 2 | DBOS | 40.5 | 47.7 | 51/53 | B |
| 3 | Trigger.dev | 39.4 | 43.8 | 53/53 | A |
| 4 | Inngest | 38.5 | 50.1 | 52/53 | B |
| 5 | Hatchet | 37.4 | 32.2 | 50/53 | B |
| 6 | Restate | 33.4 | 43.4 | 51/53 | C |
PA Score = agent-readiness blend (see methodology). Coverage score = weighted share of judged requirements met. Confidence = how much of the score rests on tested vs claimed evidence (A–D).
Uncertainty note
The current #1/#2 gap in this arena is not close enough to qualify for the multi-judge uncertainty pass (or the pass has not covered it yet) — no extra caveat applies beyond the per-product confidence grades above.
Buyer checklist (RFP)
The arena's 53 judged user stories as requirements, grouped by theme. Priorities mirror the story weights our scoring uses (3 = must-have, 2 = should-have, 1 = nice-to-have). Interactive version with per-requirement verdicts for the top products: /arena/durable-workflows/checklist
Agent workloads — stories about agent workloads in this arenaAgent workloads
Stories about agent workloads in this arena
- agent builderI run LLM agent loops as durable workflows — model and tool calls as checkpointed, retried steps that survive crashes mid-runmust-have
- agent builderFirst-party integrations wrap my AI stack — AI SDKs, agent frameworks, model providers — so agent steps get durability without glue codeshould-have
- ai-native userI stream live progress — step updates or model tokens — from a running workflow into my frontend as it executesshould-have
Agenticness — how well agents can access and operate the productAgenticness
How well agents can access and operate the product
- ai-native userPlug MCP servers into this product so it can use their toolsmust-have
- ai-native userConnect an agent via an official MCP servermust-have
- ai-native userDrive the product through a documented public APImust-have
- ai-native userDelegate tasks to a built-in AI assistant inside the productmust-have
- ai-native userPoint an agent at llms.txt or agent-oriented docsshould-have
- ai-native userRun the product headlessly / in CI for automationshould-have
- ai-native userUse an official CLIshould-have
- ai-native userIssue scoped/least-privilege API credentials for an agentshould-have
- ai-native userBuild against official SDKsshould-have
- ai-native userSubscribe to events via webhooksshould-have
- ai-native userGet AI-generated insights and suggestions from my data inside the productshould-have
- ai-native userSet up automations that run autonomously in the backgroundshould-have
- ai-native userOperate the product with natural-language commandsshould-have
- ai-native userExplore an interactive API reference with runnable examplesshould-have
- ai-native userDownload a machine-readable API spec (OpenAPI or equivalent)should-have
- ai-native userRely on versioned APIs with a documented deprecation policyshould-have
- ai-native userTest against a sandbox environment without touching production datanice-to-have
Automation depth — how much of the product can run unattendedAutomation depth
How much of the product can run unattended
- ai-native userDefine rules that trigger actions automatically on eventsmust-have
- ai-native userPerform bulk operations across many items at onceshould-have
- ai-native userSchedule recurring jobs or workflowsshould-have
- ai-native userVersion, review, and roll back my automationsnice-to-have
Developer experience — stories about developer experience in this arenaDeveloper experience
Stories about developer experience in this arena
- backend developerOne command runs the whole engine locally, and testing utilities let me unit-test workflows with time skipping and mocked stepsshould-have
Human in the loop — stories about human in the loop in this arenaHuman in the loop
Stories about human in the loop in this arena
- backend developerA workflow pauses for human approval or input for hours or days and resumes the moment the response arrivesmust-have
- backend developerI send signals, events, or messages into a specific running workflow from outside — an API call, webhook, or another workflowshould-have
Observability debugging — stories about observability debugging in this arenaObservability debugging
Stories about observability debugging in this arena
- platform engineerEvery run has a step-by-step timeline — inputs, outputs, retries, and errors per step — in a dashboard my team can search and filtermust-have
- platform engineerI replay or rerun a failed workflow from its recorded history — optionally from a specific step — to debug and recovershould-have
- platform engineerFailure rates, latencies, and queue depths export to my observability stack, and alerts fire when workflows misbehavenice-to-have
Openness — open source, data portability, and self-hosting storiesOpenness
Open source, data portability, and self-hosting stories
- ai-native userExport all of my data in open formats and leavemust-have
- ai-native userSelf-host the core productmust-have
- ai-native userDo everything through the API that I can do in the UIshould-have
- ai-native userRead the product's source under an open licenseshould-have
Operations hosting — stories about operations hosting in this arenaOperations hosting
Stories about operations hosting in this arena
- platform engineerI run workers in my own infrastructure while the vendor manages the orchestration control plane — code and data stay inside my networkshould-have
Performance scale — stories about performance scale in this arenaPerformance scale
Stories about performance scale in this arena
- platform engineerI cap concurrency and set rate limits per workflow, per key, or per tenant so one hot customer can't starve the restshould-have
- platform engineerThroughput scales by adding workers — the platform load-balances tasks across the fleet and tolerates worker lossshould-have
- platform engineerI assign priorities to runs and get fair scheduling across tenants instead of a single FIFO queuenice-to-have
Privacy posture — data-handling and privacy storiesPrivacy posture
Data-handling and privacy stories
- ai-native userPrevent my data from being used to train AI modelsmust-have
- ai-native userChoose where my data is stored (region/residency)should-have
- ai-native userControl data retention and deletionshould-have
- ai-native userOpt out of telemetry and usage trackingshould-have
Reliability recovery — stories about reliability recovery in this arenaReliability recovery
Stories about reliability recovery in this arena
- backend developerA workflow interrupted by a process crash, deploy, or infrastructure failure resumes from its last completed step with state intactmust-have
- backend developerEvery step retries automatically with configurable backoff, timeouts, and failure policies — no try/catch scaffoldingmust-have
- backend developerIdempotency keys and exactly-once step semantics stop duplicate triggers from double-charging or double-sendingshould-have
- backend developerA workflow can sleep or wait for days to months without holding a server, connection, or billable computeshould-have
Triggers scheduling — stories about triggers scheduling in this arenaTriggers scheduling
Stories about triggers scheduling in this arena
- backend developerEvents from my app, webhooks, or queues trigger workflows declaratively, and one event can fan out to many functionsshould-have
- backend developerI schedule workflows on cron expressions with overlap policies, pause/resume, and visibility into upcoming runsshould-have
- backend developerI debounce, batch, or delay triggers so noisy event streams collapse into the runs I actually wantnice-to-have
Versioning deployment — stories about versioning deployment in this arenaVersioning deployment
Stories about versioning deployment in this arena
- platform engineerI deploy new workflow code while in-flight runs finish on the version they started with — versioning without breaking determinismmust-have
Workflow authoring — stories about workflow authoring in this arenaWorkflow authoring
Stories about workflow authoring in this arena
- backend developerI write workflows as ordinary code in my language — steps with automatic checkpointing — not YAML or a proprietary DSLmust-have
- backend developerI compose workflows from parallel steps, fan-out/fan-in over dynamic batches, and child workflows without hand-rolling coordinationshould-have
- backend developerI author workflows in the language my team already uses — TypeScript, Python, Go, or more — with real feature parity across SDKsshould-have
Appendix: recorded probes
Hands-on probe recordings — transcripts/videos a human can replay, the strongest evidence tier. Watch them at https://ultrametric.ai/productarena/proofs
- DBOS
uvx --from dbos dbos --help | head -12terminal · recorded 2026-09-10 · exit 0 - DBOS
curl -s https://cloud.dbos.dev/conductor/v2/openapi.json | head -c 400terminal · recorded 2026-09-10 · exit 0 - DBOS
echo '<jsonrpc initialize>' | uvx dbos-mcpterminal · recorded 2026-09-10 · exit 0 - DBOS
curl -s https://docs.dbos.dev/llms.txt | head -6terminal · recorded 2026-09-10 · exit 0 - DBOS
curl -sL https://docs.dbos.dev/architecture.md | head -8terminal · recorded 2026-09-10 · exit 0 - Hatchet
curl -si https://cloud.onhatchet.run/api/v1/tenants | head -10terminal · recorded 2026-09-10 · exit 0 - Hatchet
curl -fsSL https://install.hatchet.run/install.sh | head -8terminal · recorded 2026-09-10 · exit 0 - Hatchet
curl -s https://docs.hatchet.run/llms.txt | head -6terminal · recorded 2026-09-10 · exit 0 - Hatchet
curl -sL https://docs.hatchet.run/cookbooks/hatchet-and-mcp.md | head -8terminal · recorded 2026-09-10 · exit 0 - Hatchet
uvx --from hatchet-sdk python -c 'import importlib.metadata; print("hatchet-sdk", importlib.metadata.version("hatchet-sdk"))'terminal · recorded 2026-09-10 · exit 0 - Inngest
curl -si https://api.inngest.com/v1/eventsterminal · recorded 2026-09-10 · exit 0 - Inngest
npx -y inngest-cli@latest --versionterminal · recorded 2026-09-10 · exit 0 - Inngest
curl -si -X POST https://api.inngest.com/mcp -H 'Content-Type: application/json' -d '<jsonrpc initialize>'terminal · recorded 2026-09-10 · exit 0 - Inngest
curl -sL https://www.inngest.com/docs-markdown/learn/how-functions-are-executed | head -8terminal · recorded 2026-09-10 · exit 0 - Inngest
curl -s https://www.inngest.com/llms.txt | head -6terminal · recorded 2026-09-10 · exit 0 - Restate
npx -y @restatedev/restate --versionterminal · recorded 2026-09-10 · exit 0 - Restate
curl -s -X POST https://docs.restate.dev/mcp -H 'Content-Type: application/json' -d '<jsonrpc initialize>' # FULL keyless handshake, no auth wallterminal · recorded 2026-09-10 · exit 0 - Restate
curl -s https://docs.restate.dev/llms.txt | head -6terminal · recorded 2026-09-10 · exit 0 - Restate
curl -s https://docs.restate.dev/hosting/overview.md | head -8terminal · recorded 2026-09-10 · exit 0 - Temporal
temporal --versionterminal · recorded 2026-09-10 · exit 0 - Temporal
curl -si -X POST https://temporal.mcp.kapa.ai -H 'Content-Type: application/json' -d '<jsonrpc initialize>' # the docs MCP advertised in Temporal's own llms.txtterminal · recorded 2026-09-10 · exit 0 - Temporal
curl -s https://docs.temporal.io/llms.txt | head -6terminal · recorded 2026-09-10 · exit 0 - Temporal
curl -sL https://docs.temporal.io/workflows.md | head -8terminal · recorded 2026-09-10 · exit 0 - Trigger.dev
curl -si https://api.trigger.dev/api/v1/projectsterminal · recorded 2026-09-10 · exit 0 - Trigger.dev
npx -y trigger.dev@latest --versionterminal · recorded 2026-09-10 · exit 0 - Trigger.dev
echo '<jsonrpc initialize>' | npx -y trigger.dev@latest mcpterminal · recorded 2026-09-10 · exit 0 - Trigger.dev
curl -s https://trigger.dev/docs/llms.txt | head -6terminal · recorded 2026-09-10 · exit 0 - Trigger.dev
curl -sL https://trigger.dev/docs/how-it-works.md | head -8terminal · recorded 2026-09-10 · exit 0
Cite as: ProductArena by Ultrametric Inc, Durable Execution Engines arena, rankings as of 2026-09-16 — https://ultrametric.ai/productarena/arena/durable-workflows
License: © 2026 Ultrametric Inc. Brief quotation of individual verdicts, scores, or evidence excerpts is permitted with attribution to "ProductArena by Ultrametric Inc (ultrametric.ai/productarena)", as is use of the data to evaluate, contest, or contribute corrections. Bulk copying, redistribution, or use to build competing datasets requires prior written permission (see DATA-LICENSE in the repository).
No liability: rankings, verdicts, and scores are research outputs derived from the cited evidence at a point in time, provided "as is", without warranties. Ultrametric Inc accepts no responsibility for procurement, purchasing, or other decisions made in reliance on them — verify against the cited evidence before acting (https://ultrametric.ai/productarena/terms).