# Tidebase vs LangGraph checkpointers

The short answer: **LangGraph checkpointers persist the state of a LangGraph graph; Tidebase checkpoints any code, in any framework or none.** If you're all-in on LangGraph, its Postgres checkpointer is the native choice. If your agent is plain TypeScript — or a mix of frameworks — Tidebase gives you checkpoint/resume without adopting a graph abstraction.

Tidebase is an open-source checkpoint layer for AI agents: wrap your steps, and failed runs resume from the last safe point — in your own Postgres, without moving execution into a new runtime.

## The structural difference

**LangGraph checkpointers are a persistence backend for LangGraph.** You model your agent as a graph of nodes; the checkpointer (e.g. Postgres-backed) saves channel state at each super-step, enabling resume, time travel, and human-in-the-loop interrupts — *within the graph runtime*.

**Tidebase is framework-agnostic.** You keep ordinary async functions and wrap meaningful units in `run.step()`. No graph model, no framework migration. It also covers operational ground a graph checkpointer doesn't try to: run/step leases (two workers can't grab the same run; zombie workers are fenced), resume contracts with failure classification (`manual_review` for unkeyed side effects), durable approval gates deliverable over webhooks, parent/child run trees, a live-state SSE API for your product UI, an append-only event log, a usage/cost ledger, and a Studio dashboard.

## Side by side

| | Tidebase | LangGraph checkpointer |
|---|---|---|
| Requires a framework | No — plain functions | Yes — LangGraph graphs |
| Language | TypeScript + Python SDKs | Python + JS |
| Resume granularity | Named steps with input hashes | Graph super-steps |
| Replay safety analysis | Resume contracts: side effects, idempotency keys, failure classification | Up to your node code |
| Worker leases / zombie fencing | Built in | Out of scope |
| Approval gates | Durable, exactly-once, webhook channels | `interrupt()` within the graph |
| Product-UI live state | SSE + versioned state streams | Read checkpointed state yourself |
| Dashboard | Studio included | LangSmith (separate, hosted) |
| Maturity | Self-hosted alpha, opt-in auth | Mature within LangChain ecosystem |

## Choose LangGraph checkpointers if

- Your agent is already a LangGraph graph — native persistence beats an external layer.

## Choose Tidebase if

- Your agent is plain code (or spans frameworks) and you don't want to restructure it into a graph to get checkpointing.
- You need the operational layer around the checkpoint: leases, replay classification, gates your product UI can render, run trees, cost tracking.

Repo: <https://github.com/BlueprintLabIO/tidebase> · See also: [The replay contract](../replay-contract-is-it-safe-to-rerun.md)