Skip to content

RTCstackDrop-in real-time communication

Self-hosted video conferencing with built-in live transcription. Video, audio, chat, recording, screen share — all yours.

RTCstack

What is RTCstack?

RTCstack is a self-hosted real-time communication platform that gives you everything you'd normally pay a SaaS provider for — without sending a byte of audio, video, or transcript to anyone else.

It wraps LiveKit (an open-source WebRTC SFU) with:

  • A thin REST API for token signing, room/participant/recording/transcription management
  • A TypeScript SDK (createCall()connect() → events) that abstracts the entire session
  • Live and post-call transcription via faster-whisper — included, not optional
  • UI kits for React, Vue 3, and Vanilla JS — every component is usable standalone
bash
# Start the full stack including live transcription
cd docker && docker compose --profile stt-live up

# Request a token
POST /v1/token  { token, url }

# Connect and display everything in React
tsx
import { createCall } from '@rtcstack/sdk'
import { VideoConference } from '@rtcstack/ui-react'

const call = createCall({ token, url })
await call.connect()

// Full conference: video, controls, chat, screen share, reactions, transcription
<VideoConference call={call} showTranscript />
ts
// Or wire up every feature from raw SDK events
call.on('participantJoined',    (p) => console.log(p.name, 'joined'))
call.on('messageReceived',      (m) => appendChat(m.fromName, m.text))
call.on('speakingStarted',      (id, name) => showIndicator(name))
call.on('transcriptReceived',   (seg) => appendTranscript(seg.speaker, seg.text))
call.on('recordingStarted',     () => showRecordingBadge())
call.on('screenShareStarted',   (p) => showScreenTile(p))
call.on('activeSpeakerChanged', (speakers) => highlightSpeaker(speakers[0]))

Why not just use LiveKit directly?

LiveKit is excellent but low-level. You still need to:

  • Write a token server (and secure it)
  • Handle room/participant metadata and webhooks
  • Build media controls, chat, screen share, device selection, reactions
  • Add transcription (LiveKit has no STT — that's entirely on you)
  • Build and style all the UI

RTCstack does all of that. You focus on your product.