Streaming
Windmill supports streaming data from jobs in several ways. Runnables can return streams (any AsyncGenerator<string> in TypeScript, iter in Python, or an AI agent step), and Windmill provides multiple ways to consume them.
Job result streaming
Scripts in Python and TypeScript can stream back results as a text stream. The stream exists while the job is running, and the full content becomes the result once the job completes.
AI agent streaming
AI agent steps support streaming token deltas, tool calls and tool results as structured JSON payloads.
Consuming a stream
Webhook SSE stream
Runnables are associated with SSE stream webhook endpoints that trigger the job and return a Server-Sent Events stream.
HTTP trigger SSE stream
HTTP routes can be configured in Sync SSE mode to return a Server-Sent Events stream when the bound runnable returns a stream.