0 Primitive
Durable streams
Append records, read their history, and follow new records as they arrive.
1 Telemetry
Customer-facing telemetry
Give customers live and historical access to their workloads’ telemetry, for people to watch and for code and agents to act on.
Use a stream per run, worker, or serverless invocation. Clients may read it directly with a scoped access token, with no server relaying each record. Keep history as long as you need it, then let streams expire on their own.
Browser telemetry
Kernel serves browser-session events from S2 through its live and historical telemetry API. It also uses OTLP ingest for VM logs.
Kernel telemetry documentationWorker events and logs
Beam collects worker events, container logs, and live resource usage in S2.
Beam’s S2 integrationShared sandbox activity
Autumn uses S2 to let multiple users follow activity in the same agent sandbox. Viewers who join late or reconnect catch up without missing events.
Autumn website
2 Agent I/O
Resumable channels
Give agents, workers, and their callers a durable channel for async messages.
Each invocation gets a mailbox that keeps acknowledged messages while the recipient is offline. When it wakes, it catches up from its cursor and follows live. Clients can read over SSE like any other event stream, except a dropped connection loses nothing.
Realtime Streams v2
Trigger.dev’s Realtime Streams v2 stores task output in S2 streams associated with each run. Clients can reconnect and resume reading output from their last position.
Realtime Streams v2 announcementShared agent session history
Trylle stores human messages, agent responses, and session updates in S2. Teammates joining a shared session can read its earlier messages and updates.
Trylle website
3 Event history
Replayable event history
Capture events as they happen and keep them as long-term history. One read runs from past records into live updates.
Durable acknowledgments hold up through bursts and sustained ingest. The stream itself can be the recording, with no separate store to write.
Voice-agent event history
Phonic stores voice-agent events in S2 so it can investigate calls after the fact, including when audio was received and sent.
Stream-native call recording
Synento records every video call by appending each participant’s camera, mic, and screen frames to S2 streams as they’re relayed. Replay and MP4 export read those same streams.
Synento concepts documentation
4 Agent WAL
Recoverable state
Record agent and application state changes in a high-throughput, durable, strongly consistent log. Replay it to recover after a crash or start a new instance from an earlier state.
S2 Cloud accepts up to 100 MiB/s per stream with ordered pipelining, and conditional appends keep writers from stepping on each other. You decide how state is materialized, snapshotted, and recovered.
Agent session recovery
Trigger.dev loads a transcript snapshot from S3, then replays newer output and pending input from S2. The next run continues with that recovered conversation context.
Trigger.dev session recovery documentationOvereasy: a forkable filesystem
Modal’s experimental Overeasy stores filesystem mutations in S2 and file payloads in S3. Replaying the log reconstructs filesystem state, which can be recovered or forked.
Overeasy repository
5 App sync
Shared application state
Keep application state in sync across clients and services. Every reader applies the same sequence of changes, catches up after a disconnect, and follows along live.
A browser tab, a backend service, and an agent can each follow the same stream at their own pace, straight from S2. Bring your own state model and merge rules, or use a library like Yjs.
Workflow events and project state
Mage’s API proxy reads project events from S2, reduces and deduplicates them into a current view, then streams new document-processing updates to the browser.
txt.box: collaborative documents
AgentMail’s open-source txt.box stores Yjs updates in a stream per document. A snapshotter writes snapshots to R2 and trims the stream. Yjs handles merging document changes.
txt.box
In your application
Bring your own records
Telemetry, messages, events, or state changes: you decide what each record means.
