Released 2026-06-12. Streams (preview) — realtime rooms for games and live apps.
Added
- Streams. A new artifact alongside workflows, forms, and playgrounds: create a stream, define channels (named pipes like
state,chat,eventswith rules for who may publish), and connect clients over WebSocket. Players join rooms, publish messages on channels, and receive everything happening in the room — presence (who's here, who joined, who left) is built in. Identity is bring-your-own: your game sends its own player id; FlowFn never stores player accounts. - Live view. The stream's dashboard page shows connected rooms, occupancy, and connection counts in real time.
- Limits that scale with your plan. Streams per team, concurrent connections, concurrent rooms, and per-connection message rates are plan-based, with per-channel rate limits you control.
- AI agents in your game (preview). A new streaming agent type can be bound to a channel so it answers your rooms as an in-game character — an NPC, a referee, a hint-giver. Each room gets the agent's own memory, replies land on a channel players hear (typically a FlowFn-only channel they can't post to), and a per-room cooldown keeps a busy room from running up cost. If your agent replies with JSON, it's delivered as structured data your game can act on directly.
- Channel bindings + stream code. Every stream gets its own Code editor — write backend functions right on the stream, no other artifact needed — and a channel can trigger them (or a workflow) for every player/server message. Bound code replies into the room with
ctx.streams.publish(...)— including on FlowFn-only channels players can hear but never write — and FlowFn-side messages can never re-trigger bindings, so loops are impossible by design. Playground server code keeps working unchanged: both now run on one shared execution core. - Signed player tokens. Your game server mints short-lived signed tokens asserting who a player is — and optionally which rooms they may join — using the stream's server key. FlowFn verifies them instantly with no callback to your server and no player accounts stored. Leave "open identity" off and only token-holders get in; rotate the key to invalidate every outstanding token at once. A "generate test token" button on the stream page lets you try the gateway without standing up a server.
- Workflow results back in the room. A workflow binding can set a reply channel: when the run finishes, the room hears a
workflow_runevent with the result (or the error) on that channel — your game reacts to the outcome without polling. Leave it unset for fire-and-forget. - Recent activity feed. Every stream page now shows what just happened: connections and disconnections (with close codes), room joins, kicks, each binding firing — including your stream functions' own
console.logoutput and errors — and workflow completion events. Entries expire automatically after 3 days. Message contents are never logged; what your code prints is the window you control. - Unity SDK (preview). A single C# MonoBehaviour for Unity 2021.3+ — rooms, presence, publish, selective subscription, signed tokens, main-thread events, and automatic reconnect with room re-join. See the Streams user guide.
- Godot SDK (preview). A single GDScript file for Godot 4.x wrapping the whole protocol — rooms, presence, publish, selective subscription, signed tokens, and automatic reconnect with room re-join. See the Streams user guide.
- Subscribe to just the channels you need.
joinaccepts a channel list — a spectator can skip the chattystatechannel, a bot can read onlyevents. Presence still arrives; bandwidth drops. - Usage at a glance. Each stream page now shows daily messages and peak concurrent connections for the last two weeks (kept 90 days).
- Changes apply to live connections. Disabling a stream or rotating its server key now disconnects affected sockets immediately (players on open identity stay connected through a key rotation), channel and binding edits reach already-connected clients without a reconnect, and a client that keeps publishing past its rate limit is disconnected. See the close codes in the protocol reference.
Coming next
- An optional binary frame mode for high-frequency state sync.