LangGraph, in depth

Updated 2 min read index source
On this page4
  1. Read in order
  2. The five answers worth having cold
  3. The senior framing
  4. Related

LangGraph, in depth

The nine-note deep dive. LangChain and LangGraph is the one-page overview — read that if you want the summary, read this if you want to build one.

Verified against LangGraph 1.3.x / LangChain 1.3.x as of 2026-08.

Read in order

# File Covers
01 Why LangGraph what problem it solves, and when not to use it
02 State and reducers TypedDict state, Annotated reducers, add_messages
03 Nodes, edges and routing edges, conditional routing, Command, loops, fan-out
04 create_agent and middleware the prebuilt loop, and middleware as the 1.0 idea
05 Persistence and threads checkpointers, thread_id, state history, time travel
06 Human in the loop interrupt(), Command(resume=), the replay rules
07 Streaming stream modes, token vs step, wiring SSE
08 Multi-agent and subgraphs composition, supervisor, call vs handoff
09 Production and debugging durability modes, testing, tracing, failure modes

The five answers worth having cold

It is a runtime, not a chain library. You declare state, nodes and edges; the runtime owns execution. That indirection is what makes checkpointing, resumption, streaming and time travel possible at all — a node never calls the next node, so the runtime can pause between any two.

create_agent, not create_react_agent. The 1.0 front door is from langchain.agents import create_agent. The old name dates you to before October 2025, and it comes up because so much published material predates the rename.

Reducers are how parallel writes work. By default an update replaces a key. Annotated[list, add] makes it accumulate — and without a reducer, two parallel branches writing the same key is a runtime conflict. Fan-out forces the merge question.

The checkpointer buys four things at once. Conversation memory, crash resumption, human-in-the-loop, and time-travel debugging all come from the same mechanism: state written after every superstep, keyed by thread_id.

Resuming replays the node from its start. So anything before an interrupt() runs twice. Side effects go after the pause or become idempotent — this is the rule that catches people, and it applies to crash recovery as much as to approvals.

The senior framing

“A chain is an order I wrote. An agent is an order the model picks. LangGraph is the runtime under both, which lets me put control flow anywhere on that spectrum — and most production agents are a graph with explicit edges and one routing decision, not a free-running loop.”

Contents 9