Overview
Streaming lets your application receive execution updates while work is still running. Instead of waiting for the final result, you can render LLM tokens, tool activity, Flow lifecycle events, and conversation messages as they happen. CrewAI has two streaming surfaces:
For new runtime integrations, UIs, terminal apps, service bridges, and conversational surfaces, use frame streaming. It provides one stable event envelope across the runtime.
StreamFrame
AStreamFrame is the common object emitted by streamable runtimes:
Channels
Frames are grouped into high-level channels:
The stream itself remains one ordered timeline. Channel projections let consumers focus on only part of that timeline.
Stream Sessions
Frame streaming returns a stream session:stream.result. Reading the result too early raises an error because the runtime may still be producing frames.
Channel Projections
Use channel projections when you only need one kind of frame:Entrypoints
Use the entrypoint that matches the runtime you are streaming:
Direct
llm.call(...) still returns the final assembled LLM result. Use llm.stream_events(...) when you want to iterate over LLM chunks as they arrive.
