Skip to main content

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.