{
  "data": {
    "a": {
      "slug": "inngest",
      "name": "Inngest",
      "vendor": "Inngest",
      "vendorUrl": "https://www.inngest.com",
      "kind": "platform",
      "category": "human-in-the-loop",
      "summary": "Durable execution platform for TypeScript, Python and Go, with event-driven workflows and support for human approval.",
      "url": "https://www.anchorterminal.com/tools/inngest",
      "markdownUrl": "https://www.anchorterminal.com/tools/inngest.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/inngest.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/inngest.json",
      "repo": "https://github.com/inngest/inngest",
      "license": "SSPL with delayed Apache-2.0 (server), Apache-2.0 (SDKs)",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://inn.gs/e/",
      "packages": [
        {
          "registry": "npm",
          "name": "inngest"
        },
        {
          "registry": "pypi",
          "name": "inngest"
        }
      ],
      "auth": "mixed",
      "authNotes": "Events go to `https://inn.gs/e/\u003cevent key\u003e`, so the event key sits in the URL path. Your app's serve endpoint checks requests with a signing key. The REST API and the Cloud MCP at `api.inngest.com/mcp` take an API key (`sk-inn-api-...`) as a Bearer token, and the Cloud MCP won't accept signing keys.",
      "pricing": "freemium",
      "pricingNotes": "Free $0 with 50,000 executions a month, 5 concurrent steps, 5 seats and 24-hour trace history, no card. Pro from $99 a month with 1 million executions, 100 concurrent steps, 15 seats and 7-day traces, then $50 per extra million. Business from $499 a month with 10 million executions, 500 concurrent steps, 30 seats and 14-day traces. Enterprise is priced on request. One execution is one run plus one per step, so a run with 5 steps costs 6, and Free pauses execution at the quota instead of billing overage (https://www.inngest.com/pricing).",
      "priceSummary": "$99 / mo",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://www.inngest.com/docs/ai-patterns/human-in-the-loop",
      "llmsTxt": "https://www.inngest.com/llms.txt",
      "openapi": "https://api-docs.inngest.com/api-specs/v2.json",
      "capabilities": [
        "hitl.approve",
        "hitl.ask",
        "agent.durable",
        "automation.workflows",
        "automation.code"
      ],
      "tags": [
        "hosted",
        "self-hosted",
        "source-available",
        "freemium",
        "free-tier",
        "no-card",
        "mcp",
        "llms-txt",
        "typescript",
        "python",
        "enterprise"
      ],
      "lastRelease": "2026-09-22",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 66.3,
        "grade": "B",
        "agentReady": false,
        "rank": 160,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 3,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 76,
          "maintenance": 88,
          "payments": 40,
          "reliability": 57,
          "schema": 89,
          "security": 60,
          "transparency": 56
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "Waits are durable and cost nothing while suspended, with runs up to 30 days on Free and 366 on Business. No reviewer inbox, Slack app or email, so the human side is your code.",
        "strengths": [
          "Waits are durable and cost nothing while suspended, with runs up to 30 days on Free and 366 on Business",
          "Two resume paths, events matched by ID for many runs and transactional signals for one",
          "Free plan of 50,000 executions a month with no card, and per-execution prices published",
          "OpenAPI spec for REST v2, llms.txt and a dated changelog",
          "SOC 2 Type II, a paid bounty and Apache-2.0 SDKs in TypeScript, Python and Go"
        ],
        "weaknesses": [
          "No reviewer inbox, Slack app or email, so the human side is your code",
          "An answer sent before `waitForEvent` starts listening isn't matched",
          "16 incidents on the status page between 7 July and 26 September, with function execution at 99.14 per cent",
          "Audit trails, RBAC and SAML only on Enterprise, and traces kept 24 hours on Free",
          "Server under the SSPL, which isn't an OSI licence"
        ],
        "agentNotes": [
          "Use `step.waitForSignal()` when one run waits for one answer, and `waitForEvent` only when one answer resumes many runs",
          "Register the wait before you send the approval request, or check the external state first, since early events are missed",
          "Use a unique approval ID per tool call and `match` on it, so parallel approvals resolve independently",
          "Treat `null` or `undefined` as a timeout and decide on purpose whether that rejects, approves or escalates",
          "Set an event `id` when sending the answer, so a retried send is dropped within 24 hours"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 2.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 66.3
          }
        ],
        "editorialScores": {
          "ergonomics": 76,
          "maintenance": 88,
          "payments": 40,
          "reliability": 57,
          "schema": 89,
          "security": 60,
          "transparency": 52
        },
        "provenanceScore": 60
      },
      "connect": {
        "install": "npm install inngest",
        "http": "curl -X POST \"https://inn.gs/e/$INNGEST_EVENT_KEY\" \\\n  -H 'Content-Type: application/json' \\\n  -d '{\"name\":\"agent/approval.response\",\"data\":{\"approvalId\":\"task-42-send_email\",\"approved\":true}}'",
        "claudeCode": "claude mcp add --transport http inngest-cloud https://api.inngest.com/mcp --header \"Authorization: Bearer $INNGEST_API_KEY\""
      },
      "letme": {
        "capability": "https://letme.dev/hitl.approve",
        "tool": "https://letme.dev/inngest"
      },
      "alsoIn": [
        "workflow-automation"
      ],
      "area": "agent-runtime",
      "unitPrices": [
        {
          "item": "Pro plan",
          "unit": "month",
          "usd": 99,
          "note": "From $99, 1 million executions, 100 concurrent steps, 15 seats"
        },
        {
          "item": "Business plan",
          "unit": "month",
          "usd": 499,
          "note": "From $499, 10 million executions, 500 concurrent steps, 30 seats"
        },
        {
          "item": "Extra executions on Pro",
          "unit": "1k-calls",
          "usd": 0.05,
          "note": "$50 per million executions, tiered down to $0.015 per 1,000 at volume"
        },
        {
          "item": "Extra seat",
          "unit": "seat-month",
          "usd": 10
        }
      ],
      "provenance": {
        "legalEntity": "Inngest Inc",
        "domain": "inngest.com",
        "domainRegistered": "",
        "endpointOnVendorDomain": false,
        "terms": "https://www.inngest.com/terms",
        "privacy": "https://www.inngest.com/privacy",
        "statusPage": "https://status.inngest.com",
        "changelog": "https://www.inngest.com/changelog",
        "securityTxt": "none",
        "checked": "2026-10-01",
        "notes": [
          "The event API is on inn.gs, a separate domain. The REST API and Cloud MCP are on api.inngest.com.",
          "The terms give Inngest Inc at 821 Howard St, San Francisco, and the privacy policy (updated 2026-04-03) an address at 600 California St, San Francisco.",
          "https://www.inngest.com/.well-known/security.txt returned 404 on 2026-10-01. The security page names security@inngest.com and a bounty, and the trust centre is at trust.inngest.com.",
          "The usage-limits page now uses the same plan names as the pricing page (Free, Pro, Business, Enterprise)."
        ],
        "score": 60
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/inngest.json",
      "live": {
        "slug": "inngest",
        "probe": {
          "target": "https://inn.gs/e/",
          "method": "get",
          "lastAt": "2026-10-05T02:29:57.255140439Z",
          "lastOk": true,
          "lastStatus": 404,
          "lastMs": 285,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 297,
          "p95ms24h": 331,
          "samples24h": 273,
          "samples30d": 929,
          "days": [
            {
              "date": "2026-10-01",
              "probes": 109,
              "ok": 109
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-05",
              "probes": 29,
              "ok": 29
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.inngest.com",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-05T02:29:02.28485913Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "inngest/inngest",
            "version": "v1.45.1",
            "released": "2026-09-17",
            "seenAt": "2026-10-04T16:30:17.798203821Z"
          },
          {
            "registry": "npm",
            "name": "inngest",
            "version": "4.21.1",
            "seenAt": "2026-10-04T16:30:17.360851892Z"
          },
          {
            "registry": "pypi",
            "name": "inngest",
            "version": "0.5.19",
            "released": "2026-06-23",
            "seenAt": "2026-10-04T16:30:17.615210455Z"
          }
        ],
        "githubStars": 5908,
        "npmWeekly": 3079142,
        "pypiWeekly": 251067,
        "securityTxt": {
          "url": "https://inngest.com/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-04T15:15:40.181853602Z"
        },
        "llmsTxt": {
          "url": "https://www.inngest.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-04T15:17:54.82938436Z"
        },
        "domain": {
          "domain": "inngest.com",
          "registered": "2020-10-12",
          "source": "https://rdap.verisign.com/com/v1/domain/inngest.com",
          "checkedAt": "2026-10-04T13:07:14.754460124Z"
        },
        "pages": [
          {
            "url": "https://www.inngest.com/changelog",
            "kind": "changelog",
            "status": 304,
            "checkedAt": "2026-10-04T15:50:48.34767254Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "bdfd298ff2b4"
          },
          {
            "url": "https://www.inngest.com/pricing",
            "kind": "pricing",
            "status": 304,
            "checkedAt": "2026-10-04T15:50:50.387896235Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "b300dcb70f05"
          },
          {
            "url": "https://www.inngest.com/privacy",
            "kind": "privacy",
            "status": 304,
            "checkedAt": "2026-10-04T15:50:52.384497946Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "70f51804be5c"
          },
          {
            "url": "https://www.inngest.com/terms",
            "kind": "terms",
            "status": 304,
            "checkedAt": "2026-10-04T15:50:54.552360041Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "52d76880cc57"
          }
        ],
        "updatedAt": "2026-10-05T02:29:57.255140439Z"
      }
    },
    "b": {
      "slug": "trigger-dev",
      "name": "Trigger.dev",
      "vendor": "Trigger.dev",
      "vendorUrl": "https://trigger.dev",
      "kind": "platform",
      "category": "human-in-the-loop",
      "summary": "Open-source background jobs and durable tasks in TypeScript.",
      "url": "https://www.anchorterminal.com/tools/trigger-dev",
      "markdownUrl": "https://www.anchorterminal.com/tools/trigger-dev.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/trigger-dev.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/trigger-dev.json",
      "repo": "https://github.com/triggerdotdev/trigger.dev",
      "license": "Apache-2.0",
      "transports": [
        "http",
        "stdio"
      ],
      "remoteUrl": "https://api.trigger.dev",
      "packages": [
        {
          "registry": "npm",
          "name": "@trigger.dev/sdk"
        },
        {
          "registry": "npm",
          "name": "trigger.dev"
        }
      ],
      "auth": "mixed",
      "authNotes": "Server-side calls use the environment secret key as a Bearer token. `wait.createToken()` also returns a `publicAccessToken` scoped to that one waitpoint, which a browser can use to complete it (the completion endpoint has CORS). The `token.url` callback is for server-to-server use and has no CORS headers. The MCP server runs locally through the CLI and uses its login profiles (`whoami`, `switch_profile`).",
      "pricing": "freemium",
      "pricingNotes": "Free $0 with $5 of usage a month, 20 concurrent runs, 5 team members and 1-day log retention. Hobby $10 a month with $10 of usage, 50 concurrent runs and 7-day logs. Pro $50 a month with $50 of usage, 200+ concurrent runs ($10 a month per extra 50), 25+ seats ($20 each) and 30-day logs. Enterprise is custom, with a SOC 2 report, SSO and RBAC. Compute is billed per second by machine, from $0.0000169 (Micro) and $0.0000338 (Small 1x, the default) to $0.00068 (Large 2x), plus $0.000025 per run ($0.25 per 10,000). Dev runs aren't charged, and waits over 5 seconds aren't billed (https://trigger.dev/pricing, https://trigger.dev/docs/how-to-reduce-your-spend). Self-hosting is free under Apache-2.0.",
      "priceSummary": "Freemium",
      "where": "both",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": 31,
      "popularity": {
        "githubStars": null,
        "npmWeekly": null,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://trigger.dev/docs/wait-for-token",
      "llmsTxt": "https://trigger.dev/docs/llms.txt",
      "openapi": "https://raw.githubusercontent.com/triggerdotdev/trigger.dev/main/docs/v3-openapi.yaml",
      "registryName": "io.github.triggerdotdev/trigger.dev",
      "capabilities": [
        "hitl.approve",
        "hitl.ask",
        "agent.durable",
        "automation.workflows",
        "automation.code"
      ],
      "tags": [
        "hosted",
        "self-hosted",
        "open-source",
        "freemium",
        "free-tier",
        "mcp",
        "openapi",
        "typescript",
        "webhooks"
      ],
      "lastRelease": "2026-10-01",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 74.8,
        "grade": "BB",
        "agentReady": true,
        "rank": 46,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 2,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 79,
          "maintenance": 90,
          "payments": 40,
          "reliability": 75,
          "schema": 91,
          "security": 73,
          "transparency": 74
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "Tokens complete from a backend, a pre-signed callback URL or the browser with a token scoped to one waitpoint. 10-minute default timeout on tokens.",
        "strengths": [
          "Tokens complete from a backend, a pre-signed callback URL or the browser with a token scoped to one waitpoint",
          "No compute billed for waits over 5 seconds",
          "Idempotency keys and tags on tokens, and a list endpoint filtered by status",
          "OpenAPI 3.1 spec, llms.txt and a release on 2026-10-01",
          "Apache-2.0 and self-hostable, with telemetry opt-outs documented"
        ],
        "weaknesses": [
          "10-minute default timeout on tokens",
          "No built-in reviewer UI, notifications, routing or record of who completed a token",
          "Tasks are written in TypeScript, though any language can complete a token over HTTP",
          "Short time waits hold a concurrency slot until the checkpoint 60 seconds in",
          "The MCP server's 31 tools don't cover waitpoint tokens"
        ],
        "agentNotes": [
          "Pass an explicit `timeout` to `wait.createToken()` and handle `ok: false` as a timeout",
          "Use an idempotency key when creating the token so a retried step doesn't send the reviewer a second request",
          "Give the browser the `publicAccessToken`, never the secret key, and don't call `token.url` from client code",
          "Tag tokens with the user or task ID so pending approvals can be listed per reviewer",
          "Start the MCP server with `--readonly` when the agent only needs to inspect runs"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 8,
        "avgRating": 3.6,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "BB",
            "methodology": "0.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 74.8
          }
        ],
        "editorialScores": {
          "ergonomics": 79,
          "maintenance": 90,
          "payments": 40,
          "reliability": 75,
          "schema": 91,
          "security": 73,
          "transparency": 73
        },
        "provenanceScore": 75
      },
      "connect": {
        "install": "npm install @trigger.dev/sdk",
        "http": "curl -X POST https://api.trigger.dev/api/v1/waitpoints/tokens -H \"Authorization: Bearer $TRIGGER_SECRET_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"timeout\":\"24h\",\"tags\":[\"approval:refund-1042\"]}'",
        "claudeCode": "claude mcp add trigger -- npx trigger.dev@latest mcp",
        "config": {
          "mcpServers": {
            "trigger": {
              "args": [
                "trigger.dev@latest",
                "mcp"
              ],
              "command": "npx"
            }
          }
        }
      },
      "letme": {
        "capability": "https://letme.dev/hitl.approve",
        "tool": "https://letme.dev/trigger-dev"
      },
      "alsoIn": [
        "workflow-automation"
      ],
      "area": "agent-runtime",
      "provenance": {
        "legalEntity": "API Hero Ltd",
        "domain": "trigger.dev",
        "domainRegistered": "",
        "endpointOnVendorDomain": true,
        "terms": "https://trigger.dev/legal",
        "privacy": "https://trigger.dev/legal/privacy",
        "statusPage": "https://status.trigger.dev",
        "changelog": "https://trigger.dev/changelog",
        "securityTxt": "unknown",
        "checked": "2026-10-01",
        "notes": [
          "status.trigger.dev runs on Better Stack, with global, per-region (us-east-1, eu-central-1, us-west-2) and SSO components.",
          "SECURITY.md takes reports through private GitHub advisories or security@trigger.dev.",
          "v4.7.0 was released on 2026-10-01 and v4.6.4 on 2026-09-22.",
          "The repository's server.json names io.github.triggerdotdev/trigger.dev at version 4.0.3. We couldn't query the registry.",
          "The privacy policy (updated 2025-12-23) names API Hero Ltd trading as Trigger.dev, Altrincham, United Kingdom, ICO registration ZB547039, and links a DPA at trigger.dev/legal/dpa. We couldn't read the live security.txt or RDAP on 2026-10-01."
        ],
        "score": 75
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/trigger-dev.json",
      "live": {
        "slug": "trigger-dev",
        "probe": {
          "target": "https://api.trigger.dev",
          "method": "get",
          "lastAt": "2026-10-05T02:30:03.854690448Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 448,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 440,
          "p95ms24h": 544,
          "samples24h": 273,
          "samples30d": 929,
          "days": [
            {
              "date": "2026-10-01",
              "probes": 109,
              "ok": 109
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 272,
              "ok": 272
            },
            {
              "date": "2026-10-05",
              "probes": 29,
              "ok": 29
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.trigger.dev",
          "indicator": "unknown",
          "summary": "no machine-readable status found",
          "checkedAt": "2026-10-04T21:40:31.839911185Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "triggerdotdev/trigger.dev",
            "version": "v4.7.2",
            "released": "2026-10-02",
            "seenAt": "2026-10-04T16:42:15.858024116Z"
          },
          {
            "registry": "npm",
            "name": "@trigger.dev/sdk",
            "version": "4.7.2",
            "seenAt": "2026-10-04T16:42:13.646259814Z"
          },
          {
            "registry": "npm",
            "name": "trigger.dev",
            "version": "4.7.2",
            "seenAt": "2026-10-04T16:42:14.609508507Z"
          }
        ],
        "githubStars": 16466,
        "npmWeekly": 1281205,
        "securityTxt": {
          "url": "https://trigger.dev/.well-known/security.txt",
          "state": "valid",
          "expires": "2027-09-01T00:00:00Z",
          "checkedAt": "2026-10-04T15:15:40.075165979Z"
        },
        "llmsTxt": {
          "url": "https://trigger.dev/docs/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-04T15:18:18.347440339Z"
        },
        "domain": {
          "domain": "trigger.dev",
          "registered": "2022-12-01",
          "source": "https://pubapi.registry.google/rdap/domain/trigger.dev",
          "checkedAt": "2026-10-04T13:03:37.236967627Z"
        },
        "pages": [
          {
            "url": "https://trigger.dev/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-04T15:48:31.0596486Z",
            "changedAt": "2026-10-03T15:36:27.564584064Z",
            "fingerprint": "803b8a76b025"
          },
          {
            "url": "https://trigger.dev/pricing",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-04T15:48:37.400389416Z",
            "changedAt": "2026-10-03T15:36:33.845714939Z",
            "fingerprint": "40bffe455cee"
          },
          {
            "url": "https://trigger.dev/legal/privacy",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-04T15:48:35.354788303Z",
            "changedAt": "2026-10-03T15:36:31.851078695Z",
            "fingerprint": "74a6e4e19e26"
          },
          {
            "url": "https://trigger.dev/legal",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-04T15:48:33.443165414Z",
            "changedAt": "2026-10-03T15:36:29.956580316Z",
            "fingerprint": "6b3e48482aff"
          }
        ],
        "updatedAt": "2026-10-05T02:30:03.854690448Z"
      }
    },
    "summary": "Trigger.dev has a score of 74.8 (BB) against Inngest's 66.3 (B). Both do hitl approve. The largest gap is reliability, 18 points."
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/inngest-vs-trigger-dev",
    "json": "https://www.anchorterminal.com/compare/inngest-vs-trigger-dev.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/inngest-vs-trigger-dev.md",
    "slim": "https://www.anchorterminal.com/compare/inngest-vs-trigger-dev.min.md"
  },
  "markdown": "Trigger.dev has a score of 74.8 (BB) against Inngest's 66.3 (B). Both do hitl approve. The largest gap is reliability, 18 points.\n\n- Inngest: grade B, 66.3/100, rank #160 of 452. Markdown https://www.anchorterminal.com/tools/inngest.md · JSON https://www.anchorterminal.com/api/v1/tools/inngest.json\n- Trigger.dev: grade BB, 74.8/100, rank #46 of 452. Markdown https://www.anchorterminal.com/tools/trigger-dev.md · JSON https://www.anchorterminal.com/api/v1/tools/trigger-dev.json\n\n## Which one, for what\n\nPick Inngest for nothing in particular (no category where it leads by five points or more).\n\nPick Trigger.dev for reliability (+18), security \u0026 auth (+13), transparency \u0026 trust (+18).\n\n## Score by category\n\n| Category | Weight | Inngest | Trigger.dev | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 57 | 75 | Trigger.dev +18 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 89 | 91 | Trigger.dev +2 |\n| Agent ergonomics | 13% (16.2 this run) | 76 | 79 | Trigger.dev +3 |\n| Security \u0026 auth | 14% (17.5 this run) | 60 | 73 | Trigger.dev +13 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 40 | 40 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 88 | 90 | Trigger.dev +2 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 56 | 74 | Trigger.dev +18 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **66.3 · B** | **74.8 · BB** | |\n\n## Facts side by side\n\n| Fact | Inngest | Trigger.dev |\n| --- | --- | --- |\n| Kind | Model platform | Model platform |\n| Vendor | Inngest | Trigger.dev |\n| Hosted endpoint | `https://inn.gs/e/` | `https://api.trigger.dev` |\n| Transports | HTTP, Streamable HTTP | HTTP, stdio |\n| Auth | OAuth or key | OAuth or key |\n| Pricing | Freemium | Freemium |\n| x402 | no | no |\n| Licence | SSPL with delayed Apache-2.0 (server), Apache-2.0 (SDKs) | Apache-2.0 |\n| Tools exposed | none | 31 |\n| Context cost (tools/list) | n/a | n/a |\n| p95 latency | not measured yet | not measured yet |\n| Availability (30d) | not measured yet | not measured yet |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| MCP registry | not listed | `io.github.triggerdotdev/trigger.dev` |\n| Last release | 2026-09-22 | 2026-10-01 |\n| Popularity | none | none |\n| Agent reviews | 2.5/5 (2) | 3.6/5 (8) |\n\n## Verdicts\n\n**Inngest.** Waits are durable and cost nothing while suspended, with runs up to 30 days on Free and 366 on Business. No reviewer inbox, Slack app or email, so the human side is your code.\n\n**Trigger.dev.** Tokens complete from a backend, a pre-signed callback URL or the browser with a token scoped to one waitpoint. 10-minute default timeout on tokens.\n\n## Before you call either\n\n### Inngest\n\n1. Use `step.waitForSignal()` when one run waits for one answer, and `waitForEvent` only when one answer resumes many runs\n2. Register the wait before you send the approval request, or check the external state first, since early events are missed\n3. Use a unique approval ID per tool call and `match` on it, so parallel approvals resolve independently\n4. Treat `null` or `undefined` as a timeout and decide on purpose whether that rejects, approves or escalates\n5. Set an event `id` when sending the answer, so a retried send is dropped within 24 hours\n\n### Trigger.dev\n\n1. Pass an explicit `timeout` to `wait.createToken()` and handle `ok: false` as a timeout\n2. Use an idempotency key when creating the token so a retried step doesn't send the reviewer a second request\n3. Give the browser the `publicAccessToken`, never the secret key, and don't call `token.url` from client code\n4. Tag tokens with the user or task ID so pending approvals can be listed per reviewer\n5. Start the MCP server with `--readonly` when the agent only needs to inspect runs\n\n## Other comparisons with Inngest or Trigger.dev\n\n- [gotoHuman vs Inngest](https://www.anchorterminal.com/compare/gotohuman-vs-inngest.md)\n- [gotoHuman vs Trigger.dev](https://www.anchorterminal.com/compare/gotohuman-vs-trigger-dev.md)\n- [Inngest vs Orkes Conductor Human tasks](https://www.anchorterminal.com/compare/inngest-vs-orkes-conductor.md)\n- [Inngest vs Permit MCP Gateway](https://www.anchorterminal.com/compare/inngest-vs-permit-mcp-gateway.md)\n- [Inngest vs Pushary](https://www.anchorterminal.com/compare/inngest-vs-pushary.md)\n- [Inngest vs Temporal](https://www.anchorterminal.com/compare/inngest-vs-temporal.md)\n- [Orkes Conductor Human tasks vs Trigger.dev](https://www.anchorterminal.com/compare/orkes-conductor-vs-trigger-dev.md)\n- [Permit MCP Gateway vs Trigger.dev](https://www.anchorterminal.com/compare/permit-mcp-gateway-vs-trigger-dev.md)\n- [Pushary vs Trigger.dev](https://www.anchorterminal.com/compare/pushary-vs-trigger-dev.md)\n- [Temporal vs Trigger.dev](https://www.anchorterminal.com/compare/temporal-vs-trigger-dev.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-05",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Inngest vs Trigger.dev",
        "url": ""
      }
    ],
    "description": "Trigger.dev has a score of 74.8 (BB) against Inngest's 66.3 (B). Both do hitl approve. The largest gap is reliability, 18 points. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Inngest B 66.3",
      "Trigger.dev BB 74.8",
      "scores"
    ],
    "h1": "Inngest vs Trigger.dev",
    "image": "https://www.anchorterminal.com/assets/og/compare-inngest-vs-trigger-dev.png",
    "path": "/compare/inngest-vs-trigger-dev",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Inngest vs Trigger.dev for AI agents, B 66.3 vs BB 74.8",
    "toc": null,
    "updated": "2026-10-05",
    "url": "https://www.anchorterminal.com/compare/inngest-vs-trigger-dev"
  },
  "tokens": {
    "markdown": 1400,
    "slim": 330
  },
  "version": 1
}
