Skip to content

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
Terminal window
git clone https://github.com/Tomo-Social/tomo-streaming-control-plane.git
cd tomo-streaming-control-plane
npm ci
npm test
npm run build

This validates authentication, session ownership, runtime state and API behavior without launching capture hardware.

Install it in a trusted backend project:

Terminal window
npm install github:Tomo-Social/tomo-streaming-sdk
import { 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.

Continue with:

  1. Install all runtimes from source.
  2. Verify discovery and create a session.
  3. Join signaling with the SDK.

The shortest camera request after the stack is running is:

Terminal window
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.