TomatoRTC

Voice and video that belong in your product — not in a vendor black box.

Publish, route, relay, and recover — the full call lifecycle on your infrastructure, with diagnostics you can actually show to support teams.

Mesh & SFU Simulcast / SVC TURN relay Smart reconnect
Publish

Camera, mic, screen share, detached video file — same room API.

Subscribe

Remote tracks with simulcast layer preference and mute/hold semantics.

Connect

ICE, STUN/TURN, relay-only policy.

Recover

Resume tokens, message replay, ICE restart, SFU transport rebuild.

Room topology

Mesh for small groups. SFU when fan-out demands it.

Topology is selected by server policy at join (RTC_TOPOLOGY) — not an automatic silent failover. Mesh peers negotiate directly; SFU mode routes tracks through mediasoup (production default).

Mesh
Best for 1:1 and small groups — lowest server media load, highest client uplink.
SFU
Scales participant count — each publisher sends once; subscribers receive independent layers.
Cascade
Regional SFU links for large-room topologies (see large-room-topology example).
Server policy At join

Same SDK integration — topology comes back in room.joined.

Simulcast / SVC Adaptive video

Layer preference and bandwidth-aware subscription in SFU mode.

Production SFU Default engine

Server-side RTP forwarding — production-ready today.

First-party SFU Evaluation / pilot

Integrated UDP path — active hardening, not universal GA yet.

Publishing

One SDK surface for every capture source.

Integrators call the same room methods for webcam, screen share, or a pre-recorded clip. Detaching a file track triggers renegotiation like any other publisher change — no special-case product code.

  • publishCamera() / publishMicrophone() Device selection helpers in browser SDK.
  • publishScreen() Display capture with browser permission UX.
  • Video file attach Kitchen-sink demo validates publish/detach/renegotiate flow.
  • Effects pipeline Optional blur, noise suppression, insertable streams on supported Chromium builds.
Browser capture

getUserMedia · getDisplayMedia · file track

SDK media helpers

Device pickers · fake tracks for tests

Publish path Room publish Mesh peer conn · or SFU producer
Mesh peer connection SFU producer
Remote subscribe

<video> elements · worker track tap

Stats

RTT · loss · FPS · outbound/inbound bitrate

Connectivity

ICE, STUN, and first-party TURN — built for enterprise networks.

Dynamic TURN credentials are minted at join — short-lived, tenant-scoped, bandwidth-metered. Enforce relay-only for strict corporate networks via RTC_ICE_POLICY. IPv6 and regional credential routing supported.

Credential rotation

Fresh ICE servers on reconnect — no static TURN passwords in client bundles.

Relay verification

Built-in test harness proves UDP relay path locally and in CI — no external dependency.

Metering

CPU and bandwidth accounting on relay — capacity planning inputs for ops.

Diagnostics

Candidate types, selected pair, relay vs host — visible in kitchen-sink stats panel.

Note
Note Slide context
TURN-heavy relay-only deployments can 2–4× egress costs. Size using the capacity planning guide; see the ICE/STUN/TURN and relay testing guides for validation.

Reconnection

Calls that survive tab sleep, Wi‑Fi handoff, and brief outages.

The browser SDK exposes an observable reconnect pipeline: Detect → Reconnect → Resume → Replay → Repair → Confirm → Restored. Participants rejoin with resume tokens; missed chat messages replay from server cursor.

  • reconnectStageChanged Show accurate UI during each recovery phase.
  • messageReplayed Chat continuity after signaling reconnect.
  • mediaRecovered Emitted only after quality sampling confirms healthy FPS/loss.
  • Guardrails Resume requires matching JWT subject; duplicate tabs get PARTICIPANT_ID_CONFLICT.
Note
Note Slide context
In-memory message replay (1,000 msgs) is single-process recovery — multi-node deployments need a MessageStorageAdapter. See the reconnection guide for full detail.

Observability

See what users experience — not just "connected: true".

Live quality scoring, session topology graphs, RTC inspector overlays, exportable redacted support bundles, and OpenTelemetry hooks give your support and engineering teams the same visibility TomatoRTC uses internally.

Live stats

Per-track RTT, jitter, packet loss, FPS, bandwidth — mesh and SFU paths.

Topology graph

Visual mesh/SFU/cascade layout — who connects to whom.

Support bundle

Redacted JSON export for ticket attachment — no raw media.

SFU probe

Kitchen-sink tool validates publish/subscribe through SFU path in two tabs.

Prove it

Two tabs. One afternoon. Full media path validated.

basic-call port 5173

Minimal two-tab camera + mic demo — fastest A/V smoke test.

kitchen-sink port 5175 · HTTPS for SFU

Screen share, video file, SFU probe, stats, chaos/reconnect lab, TURN relay indicators.

large-room-topology examples/large-room-topology

Cascaded SFU visualization and regional routing concepts.

Quick start Getting started

Run dev:server:sfu:https then dev:kitchen-sink:https to test the full SFU path locally.

Ship calls your team can support — then add AI in the same room.

  1. Two-tab kitchen-sink

    Publish A/V, screen, file — check stats and topology

  2. TURN relay test

    Run the relay test harness locally — confirms UDP traversal before prod deployment.

  3. Voice AI deck

    Agents as service participants · Technical architecture

Own the media path Own diagnostics Own reconnect UX