Every example below is a real, runnable app at examples/<name> in the
Raven repo — not a code snippet. Each has its own README with exact
setup steps.
RTC
video-call— a minimal two-participant call built entirely on@corvidhq/rtc's public API.react-video-call— the same call built with@corvidhq/react: join a room, camera/microphone, screen sharing, device selection.mobile-rtc-chat— a real call on a phone (React Native).flutter-rtc-chat— the same, in Flutter.signaling-demo— a single static HTML file exercising the signaling layer directly, no build step.
video-call boils down to this — mint a client from a server-issued
token, join a room, and publish media:
import { createRTCClient } from '@corvidhq/rtc';
const client = createRTCClient({
token: resp.token,
endpoint: resp.endpoint,
iceServers: resp.iceServers,
});
const room = await client.join('room-123');
await room.enableCamera();
await room.enableMicrophone();See RTC → Quickstart for the token-minting side of this and the full room/track API.
Chat
chat— a working chat client on@corvidhq/chatand@corvidhq/react— every message really is round-tripping through Postgres and a WebSocket.rtc-chat—@corvidhq/rtcand@corvidhq/chaton the same screen, doing separate jobs: a call with a chat panel.
Connecting and sending a message is two calls once you have a token:
import { createChatClient } from '@corvidhq/chat';
const chat = createChatClient({ token: resp.token });
await chat.connect({ room: conversation.publicId });
await chat.sendMessage({ text: 'Hello everyone!' });
chat.on('message', (msg) => console.log(msg.senderId, msg.text));See Chat → Quickstart for conversation setup and the full event catalogue.
Live Streaming
live-streaming-demo— a two-browser demo: one host tab publishing camera/microphone, one viewer tab receiving real media, plus live chat and reactions, built entirely on@corvidhq/client'sLiveStreamAPI.
LiveStream.join() gets you both an RTC room and a chat conversation
in one call — the host side looks like this:
import { LiveStream } from '@corvidhq/client';
const stream = await LiveStream.join({
streamId,
role: 'HOST',
rtc: credentials.rtc,
chat: credentials.chat,
});
await stream.room.enableCamera();
await stream.room.enableMicrophone();
// A Raven Chat conversation comes attached automatically.
await stream.chat.sendMessage({ text: "We're live!" });See Live Streaming → Quickstart for the viewer side and reactions.
Effects
effects-demo— a single-browser demo of@corvidhq/effects: one real camera track, oneEffectsPipeline, "Original" vs "Processed" video side by side. No RTC room or signaling server needed — it exercises the same pipelinecamera.attachEffects()uses internally, directly.
Build a pipeline and attach it to any published camera track:
import { effects } from '@corvidhq/effects';
const pipeline = effects.createPipeline();
pipeline.add(effects.filters.brightness({ value: 0.2 }));
pipeline.add(effects.filters.saturation({ value: 1.2 }));
const camera = await room.enableCamera();
await camera.attachEffects(pipeline);See Effects → Quickstart for presets and the React hook API.
Server SDKs
node-server— a real Express server minting RTC tokens with@corvidhq/server.python-server— the same, withraven-sdkand FastAPI.
RTC + Chat combined
media-demo— a minimal static page proving real WebRTC media through@corvidhq/rtc, backed by a small FastAPI server usingraven-sdk.