540e1c86a4
Input streams enable sending typed data to executing tasks from external
callers — backends, frontends, or other tasks. This unlocks interactive
use cases like approval UIs, cancel buttons, chat interfaces, and
human-in-the-loop AI workflows where the task needs to receive data
while running.
Three consumption patterns inside a task:
* `.wait()` — Suspend the task until data arrives (process freed, most
efficient)
* `.once()` — Wait for the next message (process stays alive)
* `.on()` — Subscribe to a continuous stream of messages
One send pattern from outside:
* `.send(runId, data)` — Send typed data to a specific run's input
stream
## User-facing API
### Define a typed input stream
```ts
import { streams, task } from "@trigger.dev/sdk";
const approval = streams.input<{ approved: boolean; reviewer: string }>({ id: "approval" });
```
### Consume inside a task
```ts
export const myTask = task({
id: "my-task",
run: async () => {
// Pattern 1: Suspend until data arrives (most efficient — frees the process)
const result = await approval.wait({ timeout: "5m" });
// Pattern 2: Wait for next message (process stays alive)
const data = await approval.once().unwrap();
// Pattern 3: Subscribe to multiple messages
approval.on((data) => { /* handle each message */ });
},
});
```
### Send from outside
```ts
// From a backend (using secret API key)
await approval.send(runId, { approved: true, reviewer: "alice" });
// From a frontend (using public JWT token from trigger response)
const { send } = useInputStreamSend("approval", runId, { accessToken });
send({ approved: true, reviewer: "alice" });
```
---------
Co-authored-by: Claude <noreply@anthropic.com>
646 B
646 B
@trigger.dev/sdk, @trigger.dev/react-hooks
| @trigger.dev/sdk | @trigger.dev/react-hooks |
|---|---|
| patch | patch |
Add input streams for bidirectional communication with running tasks. Define typed input streams with streams.input<T>({ id }), then consume inside tasks via .wait() (suspends the process), .once() (waits for next message), or .on() (subscribes to a continuous stream). Send data from backends with .send(runId, data) or from frontends with the new useInputStreamSend React hook.
Upgrade S2 SDK from 0.17 to 0.22 with support for custom endpoints (s2-lite) via the new endpoints configuration, AppendRecord.string() API, and maxInflightBytes session option.