# Hatchet vs Restate > Restate scores 73.3 (BB) to Hatchet's 68.3 (B) for human approval. Prices, MCP, x402, uptime and agent notes side by side. - Canonical: https://www.anchorterminal.com/compare/hatchet-vs-restate - Markdown: https://www.anchorterminal.com/compare/hatchet-vs-restate.md (~2,250 tokens) - Slim: https://www.anchorterminal.com/compare/hatchet-vs-restate.min.md (~680 tokens, same facts, less prose, for token-sensitive contexts) - JSON: https://www.anchorterminal.com/compare/hatchet-vs-restate.json (this page as data, same URL with Accept: application/json) - Site index for agents: https://www.anchorterminal.com/llms.txt (full text: https://www.anchorterminal.com/llms-full.txt) - API: https://www.anchorterminal.com/api/v1/index.json - Updated: 2026-10-09 Restate scores 73.3 (BB) on agent readiness against Hatchet's 68.3 (B), and leads in 2 of 7 scored categories. Hatchet leads on transparency & trust. Both do human approval. - Hatchet: grade B, 68.3/100, rank #225 of 950. Markdown https://www.anchorterminal.com/tools/hatchet.md · JSON https://www.anchorterminal.com/api/v1/tools/hatchet.json - Restate: grade BB, 73.3/100, rank #90 of 950. Markdown https://www.anchorterminal.com/tools/restate.md · JSON https://www.anchorterminal.com/api/v1/tools/restate.json - Best human approval and handoff for AI agents: https://www.anchorterminal.com/best/human-in-the-loop/index.md - All 45 human approval comparisons: https://www.anchorterminal.com/compare/human-in-the-loop/index.md ## Which one, for what ### Hatchet (B) Good for: It suits a team already running background jobs or agent loops on Hatchet that wants an approval pause inside the same durable task, in Python, TypeScript, Go or Ruby. Ahead on: - Transparency & trust, 71 against 50 Also in its favour: - A hosted endpoint, with nothing to install - Runs on your own machine - Open source Watch for: No approver inbox, Slack or email channel, routing or reminder. The owner builds the request and the way the answer is pushed ### Restate (BB) Good for: A team that already writes agent steps as durable handlers and wants a long, cheap wait for a human answer in TypeScript, Python, Java, Go or Rust, with the option to self-host. Ahead on: - Reliability, 91 against 66 Also in its favour: - Agent-ready, a grade of BB or better - Free to start without a card Watch for: No reviewer inbox, Slack app or email. The approval request and the reply endpoint are the builder's code ## Score by category | Category | Weight | Hatchet | Restate | Edge | | --- | --- | --- | --- | --- | | Reliability | 16% (20 this run) | 66 | 91 | Restate +25 | | Performance | 10%, pending | pending | pending | not scored in this run | | Schema & documentation | 13% (16.2 this run) | 85 | 85 | even | | Agent ergonomics | 13% (16.2 this run) | 82 | 81 | Hatchet +1 | | Security & auth | 14% (17.5 this run) | 62 | 61 | Hatchet +1 | | Payments & pricing | 10% (12.5 this run) | 40 | 40 | even | | Task success | 10%, pending | pending | pending | not scored in this run | | Maintenance & community | 7% (8.8 this run) | 90 | 92 | Restate +2 | | Transparency & trust | 7% (8.8 this run) | 71 | 50 | Hatchet +21 | | Negative events | ≤15 | -2 | 0 | | | **Total** | | **68.3 · B** | **73.3 · BB** | | ## Facts side by side | Fact | Hatchet | Restate | | --- | --- | --- | | Kind | Model platform | Model platform | | Vendor | Hatchet Technologies, Inc. | Restate GmbH | | Hosted endpoint | `https://cloud.hatchet.run` | no (local only) | | Transports | HTTP, stdio | HTTP | | Auth | API key | API key | | Pricing | Freemium | Freemium | | x402 | no | no | | Licence | MIT | BSL 1.1 converting to Apache-2.0 four years after release (server), MIT (SDKs) | | Tools exposed | 7 | none | | Read-only variant documented | no | no | | llms.txt | yes | yes | | Last release | 2026-10-08 | 2026-10-01 | | Terms last updated | 2025-07-17 | couldn't be read | | Privacy policy last updated | 2026-08-18 | no document linked | | Customer content may train models | not found in the text | couldn't be read | | Terms restrict automated access | not found in the text | couldn't be read | | Terms restrict benchmarking | not found in the text | couldn't be read | | Terms or service can change without notice | not found in the text | couldn't be read | | Arbitration or class-action waiver | not found in the text | couldn't be read | | Popularity | none | 4.5k stars, 329k npm/wk, 76k PyPI/wk | ## Verdicts **Hatchet.** A durable task waits for a keyed event without holding a worker slot, and resumes from its event log after a restart, in Python, TypeScript, Go or Ruby. Hatchet supplies only the pause and resume. It has no approver inbox, notification channel or record of who answered, and its MCP server cannot push the event. **Restate.** An awakeable pauses a handler at no compute cost and resumes it from one HTTP request, with a durable timeout, on a free plan of 100,000 actions a month. Restate sends nothing to the approver, so the Slack message, email or inbox is the builder's code, and the published terms and privacy statement predate the paid plans. ## Before you call either ### Hatchet 1. Put the approval wait in a durable task, and keep API calls, database reads and random values in child tasks, because the code between checkpoints is replayed 2. Add a sleep condition in the same or group as the event condition to set a deadline, and treat the sleep firing first as a timeout 3. Give the event a scope and the wait a lookback window when the answer can arrive before the wait starts. Both must be set together 4. Filter with a CEL expression such as `input.user_id == '1234'` so one approval key cannot resume another request's task 5. Push the answer with the SDK's event push or `POST /api/v1/tenants/{tenant}/events`. The MCP server has no tool for it 6. Grant the MCP server one profile with `hatchet mcp auth --grant `. It refuses profiles that were not granted ### Restate 1. Create the awakeable, send its ID inside `ctx.run`, then await the promise, so a retry doesn't send a second approval request 2. Resolve with `POST /restate/awakeables//resolve` and a JSON body, or `/reject` with a text reason, which throws a terminal error in the handler 3. On Restate Cloud send `Authorization: Bearer key_...` to `https://.env..restate.cloud:8080`. On a self-hosted server put an authenticating proxy in front of port 8080 4. Wrap the wait in `orTimeout` and decide what a timeout means. Without it the handler waits with no limit 5. Retry ingress errors only on 408, 425, 429 or 5xx, and only when `x-restate-error-source` isn't `invocation` ## Questions ### Which is better for AI agents, Hatchet or Restate? Restate scores 73.3 (BB) on agent readiness against Hatchet's 68.3 (B), and leads in 2 of 7 scored categories. Hatchet leads on transparency & trust. ### Are Hatchet and Restate open source? Hatchet is open source (MIT). No open-source release is listed for Restate. ## For agents - This comparison as JSON: https://www.anchorterminal.com/compare/hatchet-vs-restate.json, and with the fewest tokens: https://www.anchorterminal.com/compare/hatchet-vs-restate.min.md - Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {"a": "hatchet", "b": "restate"}`. From a terminal: `anchor compare hatchet restate` - Each listing in full: https://www.anchorterminal.com/api/v1/tools/hatchet.json and https://www.anchorterminal.com/api/v1/tools/restate.json ## Other comparisons with Hatchet or Restate - [gotoHuman vs Hatchet](https://www.anchorterminal.com/compare/gotohuman-vs-hatchet.md) - [gotoHuman vs Restate](https://www.anchorterminal.com/compare/gotohuman-vs-restate.md) - [Hatchet vs Inngest](https://www.anchorterminal.com/compare/hatchet-vs-inngest.md) - [Hatchet vs Orkes Conductor Human tasks](https://www.anchorterminal.com/compare/hatchet-vs-orkes-conductor.md) - [Hatchet vs Permit MCP Gateway](https://www.anchorterminal.com/compare/hatchet-vs-permit-mcp-gateway.md) - [Hatchet vs Pushary](https://www.anchorterminal.com/compare/hatchet-vs-pushary.md) - [Hatchet vs Temporal](https://www.anchorterminal.com/compare/hatchet-vs-temporal.md) - [Hatchet vs Trigger.dev](https://www.anchorterminal.com/compare/hatchet-vs-trigger-dev.md) - [Hatchet vs withHuman](https://www.anchorterminal.com/compare/hatchet-vs-withhuman.md) - [Inngest vs Restate](https://www.anchorterminal.com/compare/inngest-vs-restate.md) - [Orkes Conductor Human tasks vs Restate](https://www.anchorterminal.com/compare/orkes-conductor-vs-restate.md) - [Permit MCP Gateway vs Restate](https://www.anchorterminal.com/compare/permit-mcp-gateway-vs-restate.md) - [Pushary vs Restate](https://www.anchorterminal.com/compare/pushary-vs-restate.md) - [Restate vs Temporal](https://www.anchorterminal.com/compare/restate-vs-temporal.md) - [Restate vs Trigger.dev](https://www.anchorterminal.com/compare/restate-vs-trigger-dev.md) - [Restate vs withHuman](https://www.anchorterminal.com/compare/restate-vs-withhuman.md)