Installation
Install the core runtime, your framework binding if needed, and one adapter. Provider SDKs are peer dependencies: install them alongside their adapters. Packages are ESM and include TypeScript declarations.
Frameworks
| Application | Packages | Supported peer version |
|---|---|---|
| Plain JavaScript or TypeScript | @priemskiyyy/simulcast | No framework dependency |
| React | @priemskiyyy/simulcast @priemskiyyy/simulcast-react | React >=19.2 <20 |
| Vue | @priemskiyyy/simulcast @priemskiyyy/simulcast-vue | Vue >=3.5 <4 |
| Solid | @priemskiyyy/simulcast @priemskiyyy/simulcast-solid | Solid >=1.8 <2 |
| Svelte | @priemskiyyy/simulcast @priemskiyyy/simulcast-svelte | Svelte >=5 <6 |
| Expo / React Native | @priemskiyyy/simulcast @priemskiyyy/simulcast-react | Compatible React and native provider SDK |
Use one framework binding for your application. The core does not depend on React. For native setup, see React Native and Expo.
Adapters
Add @priemskiyyy/simulcast alongside the packages below if it is not installed already.
| Provider | Packages to install | Channel means |
|---|---|---|
| Centrifugo | @priemskiyyy/simulcast-centrifugo centrifuge | Subscription channel |
| Pusher Channels | @priemskiyyy/simulcast-pusher pusher-js | Public, private, or presence channel |
| Ably | @priemskiyyy/simulcast-ably ably | Realtime channel |
| Supabase | @priemskiyyy/simulcast-supabase @supabase/realtime-js | Broadcast topic |
| Socket.IO | @priemskiyyy/simulcast-socketio socket.io-client | Event name |
| Phoenix | @priemskiyyy/simulcast-phoenix phoenix | Channel topic |
| MQTT | @priemskiyyy/simulcast-mqtt mqtt | Topic filter, including wildcards |
| PartyKit | @priemskiyyy/simulcast-partykit partysocket | Room |
| WebSocket | @priemskiyyy/simulcast-websocket | Your protocol's channel identifier |
| Server-Sent Events | @priemskiyyy/simulcast-sse | One EventSource URL |
| BroadcastChannel | @priemskiyyy/simulcast-broadcast-channel | Same-origin channel name |
For example, React with Pusher:
npm install @priemskiyyy/simulcast @priemskiyyy/simulcast-react @priemskiyyy/simulcast-pusher pusher-jspnpm add @priemskiyyy/simulcast @priemskiyyy/simulcast-react @priemskiyyy/simulcast-pusher pusher-jsyarn add @priemskiyyy/simulcast @priemskiyyy/simulcast-react @priemskiyyy/simulcast-pusher pusher-jsbun add @priemskiyyy/simulcast @priemskiyyy/simulcast-react @priemskiyyy/simulcast-pusher pusher-jsAdapter setup explains configuration and state mappings. A shared subscription API does not make providers interchangeable at the protocol level: channel names, authentication, payload formats, and recovery remain provider-specific.
Optional packages
pnpm add -D @priemskiyyy/simulcast-devtools @priemskiyyy/simulcast-codegen typescript- Devtools mounts a browser inspector. Framework wrappers are separate imports such as
@priemskiyyy/simulcast-devtools/react. The Svelte devtools wrapper requires Svelte>=5.29 <6, while the framework binding itself supports>=5 <6. - Code generation generates framework hooks from your event map.
- Application testing uses
@priemskiyyy/simulcast/mock, included in the core.
Runtime requirements
WebSocket, SSE, and BroadcastChannel adapters use runtime APIs. Browser availability and native SDK support depend on the environment you target. Node-based SSE clients need an EventSource implementation; the SSE adapter accepts it through its options. Do not mount the DOM-based devtools in React Native.
Developing this repository requires Node 22.18 or newer and the pnpm version in package.json. That tooling requirement is separate from the published runtime's framework peer requirements.