May 12, 2026 - langgraph
langgraph v1.2.0 This release adds finer-grained control over node execution (timeouts, error recovery, and graceful shutdown), a new channel type that cuts checkpoint overhead for long-running threads, and a new content-block-centric streaming API (v3) with typed, per-channel projections. DeltaChannel (beta): A new channel type that stores only the incremental delta at each step rather than re-serializing the full accumulated value. Most useful for channels that grow large over time, for example a message list in a long-running thread. Use snapshot_frequency=K to write a full snapshot every K steps and bound read latency. Per-node timeouts: Pass timeout= to add_node to cap how long a single attempt may run. Set a hard wall-clock limit (run_timeout), an idle limit that resets on progress (idle_timeout), or both via TimeoutPolicy. When the limit fires, LangGraph raises NodeTimeoutError, clears writes from that attempt, and hands off to the retry policy. Async nodes only. Node-level error handlers: Pass error_handler= to add_node to run a recovery function after all retries are exhausted. The handler receives a typed NodeError and can return a Command to update state and route to a different node, useful for Saga/compensation patterns. Graceful shutdown: Stop an in-flight run cooperatively after the current superstep completes, and save a resumable checkpoint. Create a RunControl and call request_drain() from any thread; the run raises GraphDrained and can be resumed later with the same config. New event streaming API (beta): Pass version="v3" to stream_events() / astream_events() for a content-block-centric protocol with typed, per-channel projections (run.values, run.messages, run.lifecycle, run.subgraphs) plus opt-in transformers for updates, custom events, checkpoints, tasks, and debug. run.messages yields one ChatModelStream per LLM call with typed sub-projections for text, reasoning, tool calls, and usage. version="v1" and version="v2" are unchanged. Timeouts and error handlers are Python-only; retry policies continue to work in both Python and TypeScript.