Quickstart
Tomo Streaming is split into independent repositories. Clone only what matches your goal.
| Goal | Clone | Environment |
|---|---|---|
| Inspect the API and run its tests | tomo-streaming-control-plane |
Node.js 22+ and Docker Engine |
| Integrate from TypeScript | tomo-streaming-sdk |
Node.js 18+; API key stays on your backend |
| Run a complete local stream | control plane, stream-server and self-hosted repos | Linux worker with Docker and a capture source |
| Build an emulator experience | add the Tomo Retro stream-server/runtime | Linux worker plus authorized game content |
Evaluate the control plane
Section titled “Evaluate the control plane”git clone https://github.com/Tomo-Social/tomo-streaming-control-plane.gitcd tomo-streaming-control-planenpm cinpm testnpm run buildThis validates authentication, session ownership, runtime state and API behavior without launching capture hardware.
Evaluate the TypeScript SDK
Section titled “Evaluate the TypeScript SDK”Install it in a trusted backend project:
npm install github:Tomo-Social/tomo-streaming-sdkimport { TomoStreamingClient } from "@tomo/streaming-sdk";
const streaming = new TomoStreamingClient({ baseUrl: "https://stream.example.com", apiKey: process.env.TOMO_STREAM_API_KEY!,});
const session = await streaming.createSession({ type: "desktop-stream-server", name: "Shared workspace", config: { display: ":0", width: 1280, height: 720, fps: 30 },});Never put TOMO_STREAM_API_KEY in browser JavaScript. Return only the temporary session.connection object to an authorized player.
Run a complete stream
Section titled “Run a complete stream”Continue with:
- Install all runtimes from source.
- Verify discovery and create a session.
- Join signaling with the SDK.
The shortest camera request after the stack is running is:
curl -X POST http://localhost:8090/api/v1/streams \ -H "content-type: application/json" \ -H "x-api-key: $TOMO_STREAM_API_KEY" \ -d '{ "type": "camera-stream-server", "name": "Local camera", "config": { "videoDevice": "/dev/video0", "width": 1280, "height": 720, "fps": 30, "captureAudio": false } }'Success is a 201 response containing session.id, lifecycle status, runtime activity and a temporary player connection. A running session with connectedCount: 0 is healthy and waiting for a client.