Reactor serves real-time video models over WebRTC: you open a session, send
the model commands, and receive its video and audio as they are generated. reactor-effect is an
Effect SDK for building applications on it, from a page that plays one
clip to a channel that renews its sessions to stay on air.
It is built for the parts of a Reactor application that outlive a single request. A session bills
until it ends, its token expires, its connection drops, its owner process crashes, and the session
itself has a maximum length. reactor-effect makes each of those an explicit, typed, tested part of
the API, so an application keeps its picture on air and is told of any session that may still be
billing.
Sessions and tokens, the H3 provider, Playout, and ReactorTest, Reactor simulated in memory. Portable: it loads no native code.
Node, Bun and browsers
reactor-effect-browser
The session’s transport on the browser’s own RTCPeerConnection, and playback of its tracks in DOM media elements.
Browsers
reactor-effect-native
The session’s transport on Reactor’s reactor-webrtc crate (libwebrtc) through Node-API: decoded frames and PCM in your process, with an optional child process per connection under Node.
Node and Bun
The client owns every contract. A host package only carries the connection, so the same application
runs in a browser, on a server, or on ReactorTest with no transport at all.
Playout is a keyed schedule of clips in priority lanes, with filler that holds a runway,
deadlines, cues and edits. It renews sessions before their cap and switches between them at a
clip boundary, and reports what actually aired.
Decoded media without a browser
Reactor’s JavaScript SDK targets a browser context. On a server, reactor-effect-native
complements it: Node and Bun receive the session’s decoded frames and PCM directly, with no
browser in between.
Reactor, offline
ReactorTest speaks the real wire protocol in memory, with H3’s timing measured on paid runs
and faults you can inject. With TestClock, an hour of programme runs in seconds and costs
nothing.
Failures that say what reached Reactor
Every failed command carries its dispatch evidence: never sent, answered, or unknown. The SDK
never sends an unknown command again, so a lost reply cannot play a clip twice.
Reactor publishes official SDKs for JavaScript, Python, C++, Swift and Java, and generated packages
per model. Use them when you want Reactor’s own client in a browser, a game engine or a native app.
reactor-effect is independent and complementary. It is for TypeScript applications that are
written with Effect, or that need what Effect’s structure gives a long-running media service:
resources tied to scopes, errors in the type, streams with back-pressure, and a clock you can
control in tests. It speaks Reactor’s public coordinator API and wire protocol, and the requests
that create and connect a session carry its own sdk_type, so Reactor can tell its sessions apart.
Every change runs the client, browser and hosted-rehearsal suites on Node and on Bun, real
Chrome against the native host, and the examples. None of it allocates a paid session.
Hosted Reactor is exercised by paid checks the maintainer runs with a budget: 22 runs from
2026-09-24 to 2026-10-01, on the 0.3.0-rc.0 to 0.9.0 libraries. Each run records its evidence:
frames, seams, timings, and every session confirmed ended. On 0.9.0 only the showreel check has
run; 0.9.0’s other checks, its published client packages, the browser package and the in-process
native host under Node have not run there yet.
Hosted evidence lists every run.