Same API surface
# Before (LangGraph)
from langgraph.graph import StateGraph, START, END
# After (Agentmatic) — one line changes
from agentmatic import StateGraph, START, END
add_node, add_edge, add_conditional_edges, compile, invoke, stream, astream — every method is identical. TypedDict state, Annotated reducers, MemorySaver, SqliteSaver, PostgresSaver — same names, same semantics.
Performance
| Workload | LangGraph | Agentmatic | Δ |
|---|---|---|---|
| Graph traversal | baseline | 10–15× faster | 10–15× |
| Channel throughput | baseline | 70–80× faster | 70–80× |
| Memory | baseline | 50–80% less | 50–80% |
| Cold start | baseline | 78% faster | 4.5× |
| End-to-end (multi-agent, 30 LLM calls) | baseline | 8–12× faster p95 | 8–12× |
Full methodology: /benchmarks.
What you get that LangGraph platform-tier ships
| Feature | LangGraph OSS | LangGraph Platform | Agentmatic |
|---|---|---|---|
| StateGraph runtime | ✓ | ✓ | ✓ |
| Memory checkpointer | ✓ | ✓ | ✓ |
| SQLite checkpointer | ✓ | ✓ | ✓ |
| Postgres checkpointer | ✓ | ✓ | ✓ |
| Redis / S3 checkpointer | ✗ | partial | ✓ |
| Retry with backoff | ✗ | ✓ | ✓ |
| Dead-letter queue | ✗ | ✓ | ✓ |
| Circuit breakers | ✗ | ✗ | ✓ |
| Distributed execution | ✗ | ✓ | ✓ |
| Multi-language SDKs | Python, JS | Python, JS | Python, TS, Rust, Go, Java |
| Visual debugger | ✗ (separate) | ✓ | ✓ |
| License | MIT | proprietary | MIT |
Migration
See /migrate for the step-by-step. The TL;DR is: change one import, optionally adopt resilience primitives, ship.