Open source · self-hosted · v0.1.7

Watch together, on a server you own.

Openlive is a private alternative to Discord for groups of friends: rooms with screen streams, voice, text and cameras. Each group runs its own instance on its own Cloudflare account, so the rooms, the members, the messages and the bandwidth bill are theirs.

Viewers need only a browser. Streams up to 4K60, about a tenth of a second behind.

Watching a movie in a room: the player with its quality menu open, the others’ cameras in a strip below

Why Openlive

Your group, your rules, your bill.

Privacy

Accounts, rooms, chat and usage live in your group’s own Cloudflare account. Nothing is recorded, there are no ads and nothing scans your content.

Ownership and control

Sign-up is by invite, and the group sets its own roles, room rules and bans. No platform decides what your group can do or whether it exists. The code is AGPL-3.0 and you host it yourself.

Quality without a subscription

Streams up to 4K60 (1080p120 and 1440p120 if the admin allows), about 100 ms behind the streamer’s screen, for everyone in the group.

A tour

Everything a room needs, nothing it doesn’t.

All screenshots are from the real app on a local instance with made-up people.

Watch together

The stream and the cameras share one stage, with the chat beside. Someone clicks Go live and everyone else watches in the browser, with nothing to install.

  • Any recent browser, on desktop or phone. No account on a third-party service.
  • First frame in about 0.4 s: the player connects while you look at the room.
  • Automatic quality with a manual override, theater mode, picture in picture, full screen and stats for nerds.
  • A full stream has a queue, members first.
A room as a video call: the live movie and four cameras on the stage, two people in voice only in a strip, the chat on the right

Go live from the web

Pick a screen, then quality and sound. A small native helper captures a screen or a single window with that app’s sound and sits in the tray.

  • Linux: GStreamer and PipeWire, encoding on the GPU (NVENC, VA-API) or with x264. macOS: ScreenCaptureKit and VideoToolbox.
  • Start, pause (a privacy curtain), change quality and stop from the web.
  • Presets from text and code (1080p30) to native (up to 4K60), plus 1080p120 and 1440p120 when the admin allows.
  • Sent as simulcast layers, so each viewer gets what their connection holds.
The Go live panel listing the helper’s screen with a live preview

Voice and cameras

A voice channel is a video call, with whoever is speaking ringed.

  • Mute, deafen, push-to-talk, input and output devices, and a volume per person.
  • Up to 12 people in voice by default; owners and admins can server-mute.
  • Cameras off by default: 360p and 180p layers, 6 per room by default.
  • On a bad network the camera steps down before the voice does.
A voice channel with six people, five on camera, the one speaking ringed

Text chat

Every room can have its own chat, and in a text channel the page is the chat.

  • Mentions, edit and delete, unread badges and links.
  • History kept for none, 7, 30 or 90 days, as the room chooses.
  • Each room picks what it has: streams, voice (with or without cameras), text, or any mix.
A text channel: the page is the chat

An admin panel that watches the bill

The platform overview shows the month’s bandwidth, its projection and the cost per space, plus how streams played.

  • A first-run wizard checks every secret and service and opens the first space.
  • A monthly bandwidth limit in plain tiers; near it, economy mode caps the quality, and at it new streams are blocked.
  • Ceilings for resolution, frame rate, bitrate and viewers, which spaces and rooms can only lower.
  • Invite links with roles, optional approval and expiry; restricted rooms, bans and an audit log.
The platform overview with the month’s bandwidth, cost and spaces

On the phone, too

The web app is installable and works on phones: the stage, the chat as a bottom sheet, voice and cameras. An Android app (beta, Android 7 or later) adds voice that keeps running in the background, with the screen locked.

  • A room on a phone: the stream and the cameras on the stage, your own camera small, the controls at the bottom
  • The chat as a bottom sheet over the room on a phone
  • Watching the movie on a phone, the cameras in a strip below
  • A voice channel on a phone, the cameras filling the screen

How it works

Media never touches the server.

Someone clicks Go live, the helper on their computer captures and encodes the screen with the app’s sound, Cloudflare Realtime carries it, and everyone else in the room watches in the browser.

Helperstreamer’s PCRealtime SFUCloudflareBrowserBrowserBrowserWorker · Durable Objects · D1 · R2rooms, accounts, chat (no media)Helperstreamer’s PCRealtime SFUCloudflareBrowserBrowserBrowserWorker · Durable Objects · D1 · R2rooms, accounts, chat (no media)
  1. The helper captures

    On the streamer’s computer, it encodes the screen or window on the GPU and publishes it as simulcast layers.

  2. Cloudflare Realtime carries

    The Realtime SFU fans the stream out from the Cloudflare location nearest to each person.

  3. Browsers watch

    Each viewer pulls one layer, the one their connection holds. Nothing to install.

One Cloudflare Worker serves the web app, the REST API and the room WebSockets. Each room is a Durable Object that knows who is here, who is live and who holds a viewer slot; D1 keeps the accounts, spaces and usage; R2 keeps the stream thumbnails.

Why it is all on Cloudflare

Numbers

Measured, not promised.

Glass-to-glass latency
~100ms
Median 102 ms at 1080p60, 91 ms at 1440p60
First frame
~0.4s
Median 363 ms, pulling on hover
Native quality
4K60
1080p60 and 1440p60 presets; native up to 4K60
High frame rate
120fps
1080p120 and 1440p120, off by default
Free bandwidth a month
1,000GB
Per instance (Cloudflare Realtime), about 19 full hours

Measured on one machine; there is no measured side-by-side test against Discord.

Openlive vs Discord

How it compares.

OpenliveDiscord
Screen streamsUp to 4K60, 120 fps up to 1440p (opt-in), ~100 ms, no subscriptionHD streaming is a Nitro perk
VoicePer room: mute, deafen, push-to-talk, per-person volumeYes
TextPer room: mentions, unread, retention you choose (none to 90 d)Yes
CamerasIn voice, 360p and 180p layers, 6 per room by defaultYes
Who holds the dataYour group, in your Cloudflare accountDiscord
Who sets the rulesYour group’s adminsDiscord’s terms, then the server’s admins
CostFree within Cloudflare’s 1,000 GB a month; brakes at your limitFree, with paid Nitro tiers
DMs, bots, push notificationsNot yetYes

Discord’s public Go Live tiers list HD streaming as a Nitro perk. Measured on one machine; there is no measured side-by-side test against Discord.

Honest limits

What it is not, yet.

“Free” has a ceiling

Free means within Cloudflare’s free tier, 1,000 GB of egress a month. Above it Cloudflare bills US$ 0.05 per GB, and the app warns and brakes at the monthly limit the admin picks.

It depends on Cloudflare

That is a much smaller dependency than a social network: the account, the code and the data are yours, and the code is portable.

Not there yet

Direct messages, bots and integrations, push notifications. Openlive is for private groups, not large public communities. The Windows helper comes last.

Self-host

Your own instance in a few steps.

Each group deploys to its own Cloudflare account, on its own domain or a free workers.dev address, without editing any file. The setup checks the toolchain and the account, helps with the Discord and Resend keys, creates what is missing, deploys, and prints the install code that makes you the admin. It is safe to run again.

  1. A Cloudflare account

    The free plan is enough. R2 asks for a payment method once, even though it costs $0 within its free tier.

  2. Node 26 and pnpm 12.15

    Install Node, run corepack enable, then clone the repository and install.

  3. Log in twice

    Wrangler for D1, R2 and the deploy; the cf CLI for the Realtime app and TURN key.

  4. Check the plan, then run it

    A dry run calls nothing and writes nothing. Use your own domain or a free workers.dev name.

  5. Sign in and open your space

    The install code makes you the admin; the wizard walks through the ceilings and the monthly limit.

Terminal
git clone https://github.com/henriquefps/openlive.git && cd openlive
pnpm install
pnpm --filter @openlive/api exec wrangler login
pnpm --filter @openlive/setup exec cf auth login
# checks and plan; calls nothing
pnpm run setup -- --domain live.example.com --dry-run
# or: --workers-dev <name>
pnpm run setup -- --domain live.example.com
The full checklist, with costs and troubleshooting

Download

Watching needs a browser. Streaming needs the helper.

The official builds are on GitHub Releases. A self-hosted server also offers them to its members from its own Download page, with the pairing command filled in.

Linux

Wayland (KDE tested; GNOME, Hyprland, Sway expected) through the portal and PipeWire. A tarball and a Flatpak.

Helper releases

macOS

macOS 13 or later, ScreenCaptureKit and VideoToolbox. A signed, notarized disk image.

Helper releases

Android (beta)

Android 7 or later. Watch, chat and talk, with voice in the background. Not on the Play Store: install the APK.

Android releases

Windows

The Windows helper comes last. Watching already works in any recent browser.

Then pair the helper with your server:

openlive-helper pair --instance https://live.example.com