StreamHelpers.com

Unified Chat

Merges live chat from YouTube, Twitch, Kick, Discord, Rumble, Trovo, DLive and Facebook into one scrolling dashboard, pushed to your browser over Server-Sent Events. Includes a YouTube live-title editor so you can rename a running stream without opening Studio.

What you need

A Docker host — Unraid, a NAS, a VPS, anything.
API credentials for at least one platform (see the table below).
That's it. No database, no reverse proxy required, no build tooling.

Install

Download this folder to your Docker host, then run:

cd unified-chat
cp .env.example .env
nano .env                 # fill in at least one platform + AUTH_USER/AUTH_PASS
docker compose up -d
docker compose logs -f    # confirm your platforms loaded

Compose builds the image from the files in the folder, so you don't need a Docker Hub account or a prebuilt image. If you edited .env on Windows, run sed -i 's/\r$//' .env first or every value gets a trailing carriage return.

Configure

Every platform is optional. Fill in only the ones you use — the rest are skipped and logged as disabled. The startup log ends with a Platforms enabled: line so you can see exactly what loaded. A platform with bad credentials logs an error and drops out; it can't stop the others or prevent the app from starting.

PlatformMinimum settings
YouTubeYT_API_KEYS + YT_CHANNEL_ID
TwitchTWITCH_NICK + TWITCH_CHANNEL + TWITCH_TOKEN_URL or TWITCH_IRC_OAUTH
KickKICK_CLIENT_ID + KICK_CLIENT_SECRET + KICK_CHANNEL_SLUG
DiscordDISCORD_BOT_TOKEN + DISCORD_CHANNEL_IDS
RumbleRUMBLE_API_URL
TrovoTROVO_CLIENT_ID + TROVO_CHANNEL_ID
DLiveDLIVE_USERNAME + DLIVE_ACCESS_TOKEN
FacebookFB_PAGE_ID + FB_PAGE_TOKEN

.env.example documents where to get every credential.

Set a password. Add AUTH_USER and AUTH_PASS to your .env. Without them there is no login, and anyone who can reach port 8088 can read your chat, see your stream status, and rename your live YouTube broadcast. The app prints a warning at boot when auth is off. Basic auth is base64, not encrypted — on an untrusted network, put it behind a reverse proxy with TLS.

Run it

1 Open the dashboard: http://YOUR-SERVER-IP:8088/
2 Press Start. Adapters are idle until you do — this keeps the container from burning YouTube API quota while you're offline. Done.

Optional: YouTube title editor

To rename a running livestream from the dashboard, set YT_OAUTH_CLIENT_ID, YT_OAUTH_CLIENT_SECRET and YT_OAUTH_REDIRECT, then visit /auth/youtube/start once to authorize. The refresh token is saved to the mounted tokens/ folder and survives rebuilds. Chat relay works fine without this.

The redirect URI must match what you registered in Google Cloud exactly — same scheme, host and port — and your browser has to be able to reach it.

YouTube quota is the usual failure point. Each Google Cloud project gets 10,000 units/day and live chat polling eats it fast. Create API keys in separate projects and list them comma-separated in YT_API_KEYS — the app rotates to the next key when one runs dry. Keep MIN_YT_POLL_MS at 10000 or above.
Discord needs the Message Content intent. In the Discord Developer Portal, under Bot → Privileged Gateway Intents, enable Message Content Intent. Without it the bot connects fine but every message arrives with an empty body.

Unraid

unified-chat.xml is a Community Applications template, and it needs no Docker Hub account and no published image — it runs the official node:20 image and downloads the app files from this site into your appdata folder on start. Drop the XML in /boot/config/plugins/dockerMan/templates-user/, fill in your platform variables, set AUTH_USER/AUTH_PASS, and leave the app data path at /mnt/user/appdata/unified-chat.

First boot takes a minute or two while npm install runs — watch the container log. Restarting re-downloads the latest version. This path runs as root without the healthcheck or privilege-dropping entrypoint; for those on Unraid, use the Docker Compose Manager plugin with the install above.

Files

README.md  ·  install.txt  ·  .env.example  ·  docker-compose.yml  ·  Dockerfile  ·  unified-chat.js  ·  unified-chat.xml

X / Twitter is not supported — the adapter was never written, and any X_* variables are ignored.

Provided as-is, with no warranty and no support. This tool connects to your live broadcast and your platform accounts, and it can fail. There is no help desk and no obligation on anyone to answer a question or fix a bug. You are responsible for securing your installation and for testing before you rely on it. See the disclaimer.
Free and as-is — no warranty and no support, donations included.
StreamHelpers.com  ·  tooling for multi-platform streamers
Another fine product of Blue Soup Enterprises