Skip to main content
Event Streaming is the recommended in-process streaming model for most LangGraph application code. It returns a run stream object that can be consumed in multiple ways at the same time.
Check out the streaming cookbook for runnable examples and links to detailed reference documentation.
The version="v3" flag is temporarily required to opt in to this stream behavior. The new behavior will become the default stream version in the next major LangGraph release.

What Event Streaming provides

The run stream exposes typed projections over one underlying event flow: Multiple consumers can read these projections concurrently. Reading run.messages does not consume events needed by run.values, run.subgraphs, or run.output.

Stream protocol events

Use the run object itself when you want the raw protocol event stream:
Each protocol event has a channel-like method, a monotonic seq number, and params containing namespace, timestamp, optional node, and channel-specific data.
Core channels include: The messages channel models output as content blocks. This makes token streaming, reasoning blocks, tool-call blocks, and multimodal content explicit without requiring provider-specific formats in application code.

Add custom transformers

Stream transformers are the projection layer in Event Streaming. They observe protocol events, keep their own state, and expose derived views of a run such as progress events, artifacts, token totals, tool activity, or third-party protocol messages. A transformer creates a projection in init(), observes each event in process(), and finalizes or fails the projection when the run completes.
Pass transformers when you start the event stream:

Use StreamChannel

StreamChannel is the projection primitive for custom streaming data. It gives in-process consumers an iterable stream, and it can also forward pushed values to remote SDK clients when the channel has a protocol name. Named channel payloads must be serializable because they are also emitted as custom:<name> protocol events. Keep promises, async iterables, class instances, and other in-process handles local.