Realtime protocol · transport-neutral
A realtime layer for
creative coding.
Sessions, presence, pub/sub, and shared state for networked performance, multiplayer sketches, installations, and distributed browser artworks — over WebSocket, with peer-to-peer WebRTC when you need it.
session · 3 peers · rtt 12ms
// sdks
Multi-language SDKs
TypeScript, Python, Go, Swift, and JVM/Kotlin clients with a consistent API across every language.
// servers
Multiple servers
Server implementations in TypeScript, Python, and Go. Pick the runtime that fits your stack.
// adapters
Framework adapters
Ready-made integrations for p5.js, Three.js, and TouchDesigner.
// transport
WebSocket + WebRTC
A WebSocket control plane with an optional peer-to-peer WebRTC data plane.
// bridges
Bridge the physical world
A protocol translator on one side, a starfish session on the other. The signal bridge CLI proxies external sources into topics; the Matter bridge drives IoT lights, sensors, and actuators from any client.
Signal bridge →MIDI → starfish topic
starfish-bridge midi \ --server ws://localhost:8080/starfish \ --session jam \ --topic midi-in \ --device "Launchpad Pro"
Six lines to first frame
Connect, join, publish.
The SDK handles connection management, reconnection, clock sync, and transport selection. You work in terms of sessions and topics.
cursor-share.ts
import { StarfishClient } from "@starfish/client";
const client = new StarfishClient({ server });
await client.connect();
await client.join("my-session");
client.publish("cursor", { x: 100, y: 200 });