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.
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.
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.
| Platform | Minimum settings |
|---|---|
| YouTube | YT_API_KEYS + YT_CHANNEL_ID |
| Twitch | TWITCH_NICK + TWITCH_CHANNEL + TWITCH_TOKEN_URL or TWITCH_IRC_OAUTH |
| Kick | KICK_CLIENT_ID + KICK_CLIENT_SECRET + KICK_CHANNEL_SLUG |
| Discord | DISCORD_BOT_TOKEN + DISCORD_CHANNEL_IDS |
| Rumble | RUMBLE_API_URL |
| Trovo | TROVO_CLIENT_ID + TROVO_CHANNEL_ID |
| DLive | DLIVE_USERNAME + DLIVE_ACCESS_TOKEN |
FB_PAGE_ID + FB_PAGE_TOKEN |
.env.example documents where to get every credential.
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.
http://YOUR-SERVER-IP:8088/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.
YT_API_KEYS — the app rotates to the next key when one
runs dry. Keep MIN_YT_POLL_MS at 10000 or above.
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.
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.
It's free and stays free. Donations help cover hosting and build time — but to be clear, a donation is a voluntary gift, not a purchase. It buys no support, no warranty and no priority, and it's non-refundable. Only give what you're happy to give away.
Donate via Stripe