One overlay. Every platform.
Merge chat from Twitch, YouTube, Kick, TikTok, and Discord into a single feed for OBS — with full 7TV, BTTV, and FFZ emote support.
Try it free at allch.at · Discord · Report a Bug
All-Chat is a free, open-source chat overlay that merges Twitch, YouTube, Kick, TikTok, and Discord into a single feed for OBS. Sign in, drop a URL into a Browser Source, go live.
No bots. No IRC tokens. No complicated setup.
- 5 Platforms, One Feed — Twitch, YouTube, Kick, TikTok, and Discord messages in a single overlay
- No Setup Required — Sign in, create an overlay, paste the URL into OBS. That's it.
- Every Emote Works — 7TV, BTTV, FFZ, plus native Twitch and YouTube emotes all render correctly
- 12 Themes + Full CSS — Built-in themes from Win98 retro to cyberpunk neon, or write your own CSS
- Real-Time Delivery — Messages arrive via WebSocket — no 5-second delay
- Smart Polling — Listeners only run when your overlay is actually visible (see How it works)
- Browser Extension — Replace native site chat with All-Chat on Twitch, YouTube, and Kick
- Open Source — AGPL 3.0 licensed, fully self-hostable
- Visit allch.at and sign in with Twitch
- Create a new overlay
- Add chat sources — Twitch channels, YouTube streams, Kick channels, etc.
- Tweak display settings (font, message duration, animations)
- In OBS, add a Browser Source
- Set the URL to
https://allch.at/overlay/YOUR_OVERLAY_ID - Set dimensions to something sensible for a chat panel — e.g. 400 × 800 (adjust to taste)
- Optional: Check "Shutdown source when not visible" — this tells All-Chat nobody is watching, so the backend stops polling platforms until you make the source visible again. Great for saving resources when you switch scenes.
- Done!
Tip: The overlay has a transparent background by default, so it layers cleanly over your stream.
All-Chat ships with 12 ready-made themes you can paste into your OBS Browser Source custom CSS:
| Theme | Vibe |
|---|---|
| Win98 | Nostalgic retro windows |
| Cyberpunk | Neon-soaked sci-fi |
| Minecraft | Blocky pixel style |
| Neon Glass | Frosted glass with glow |
| Vaporwave | A E S T H E T I C |
| Terminal Hacker | Green-on-black terminal |
| Pastel Cute | Soft & friendly |
| High Contrast | Accessibility-first |
| Modern Dark | Clean dark mode |
| Minimal | Just the text |
| Minimal Icon | Text + platform icons |
| Noita Minimal | Inspired by Noita |
Want to build your own? See the CSS Customization Guide or the Theme Gallery & Creation Guide.
Don't just watch chat in OBS — give your viewers unified chat too.
The All-Chat Browser Extension replaces native site chat on Twitch, YouTube, and Kick with your All-Chat feed. Your community can read and send messages across platforms without leaving the page they're watching.
Install:
- Chrome / Edge / Brave
- Firefox
- GitHub Releases (gets updates first)
Why it's great:
- Replaces native chat automatically — no configuration needed
- Send messages with your existing platform account
- Full emote autocomplete (7TV, BTTV, FFZ) with
:prefix - Auto-reconnects if your connection drops — never miss a message
| Platform | How it works | What you get |
|---|---|---|
| Twitch | IRC + EventSub webhooks | Chat, emotes (native + 7TV/BTTV/FFZ), badges, colors, channel points, raids, follows |
| YouTube | HTTP polling + InnerTube API | Chat, Super Chat, member badges, multi-stream selection (public, currently live streams only) |
| Kick | Pusher WebSocket | Chat, emotes, badges, message deletion |
| TikTok | Unofficial live connector library | Chat messages, username-based display |
| Discord | Bot gateway + webhook relay | Channel chat relay to overlay |
YouTube has two listener modes: the official YouTube Data API (quota-tracked with reserve-confirm-rollback) and an InnerTube poller that costs zero quota. Both are production-ready.
Note: Only public, currently live YouTube streams are supported. Unlisted streams, private streams, and scheduled (upcoming) streams do not work. Stream discovery relies on YouTube's public search API (
search.listwitheventType=live), which only returns streams that are both public and actively broadcasting.
All-Chat doesn't poll platforms 24/7. The system tracks WebSocket connections from your overlay:
- Overlay visible in OBS → WebSocket connects → backend starts listening to your configured platforms
- Overlay hidden / OBS closed → WebSocket disconnects → after a 60-second grace period, listeners stop polling
- Overlay visible again → listeners spin back up instantly
This means zero wasted API calls when nobody is watching. It's also why "Shutdown source when not visible" in OBS works so well — it's not just an OBS optimization, it tells All-Chat to stand down.
Everything below is for contributors and self-hosters. If you're a streamer, you don't need any of this — just use allch.at.
All-Chat is a Go microservices platform with a React/Next.js frontend. Services communicate through Redis Streams (raw messages) and Redis Pub/Sub (overlay-specific delivery).
Platform Listeners (Twitch IRC, YouTube API, Kick Pusher, TikTok WS, Discord Bot)
│
▼ publish raw messages
Redis Streams (chat:raw)
│
▼ consume via XREADGROUP
Message Processor
├── Normalize to unified format
├── Enrich with emotes (7TV, BTTV, FFZ)
└── Route to overlay channels
│
▼ Redis Pub/Sub (overlay:{id})
API Gateway (WebSocket server)
│
▼ broadcast
Frontend Overlay (React)
Services (all in services/):
| Service | Role |
|---|---|
api-gateway |
WebSocket server for overlays, HTTP routing, OAuth callbacks |
auth-service |
Authentication, sessions, OAuth flows (Twitch, YouTube, Kick, Discord) |
emote-service |
7TV, BTTV, FFZ, and native emote resolution |
twitch-listener |
Twitch IRC chat ingestion |
twitch-eventsub-listener |
Twitch EventSub webhooks (channel points, moderation, raids) |
youtube-listener |
YouTube Data API polling with quota tracking |
youtube-listener-innertube |
YouTube InnerTube API polling (zero quota cost) |
kick-listener |
Kick chat via Pusher WebSocket |
tiktok-listener |
TikTok live chat via unofficial connector |
discord-listener |
Discord channel chat relay |
message-processor |
Message normalization, emote enrichment, overlay routing |
overlay-manager |
Overlay CRUD, source configuration, settings |
source-manager |
Leader election, active source tracking, demand coordination |
share-service |
Shareable overlay link generation |
token-refresh-service |
OAuth token refresh on schedule |
- Backend: Go 1.25+, Gin framework, pgx/v5 (PostgreSQL), go-redis/v9, Zap logging
- Frontend: React 19, Next.js 16 (App Router), TypeScript, Tailwind CSS, Zustand
- Database: PostgreSQL 16
- Messaging: Redis 7 (Streams + Pub/Sub)
- Infrastructure: Docker Compose (local dev), Kubernetes + CloudNativePG (production)
# Full environment
make docker-up # Start PostgreSQL, Redis, and all services
make test # Run tests
make migrate-up # Apply database migrations
# Frontend-only (minimal backend)
make frontend-dev # Start only what the frontend needs
make frontend-seed # Create test overlay with mock sources
make frontend-messages # Generate fake chat messages
cd frontend && npm run devFirst time? See GETTING_STARTED.md for the full onboarding guide, or FRONTEND_QUICK_START.md if you're only touching the frontend.
Want to run your own instance?
git clone https://github.com/caesarakalaeii/all-chat.git
cd all-chat
cp .env.example .env
# Edit .env with your Twitch/YouTube/etc. credentials
make docker-upVisit http://localhost:8080 — you're live.
Prerequisites:
- Docker & Docker Compose
- Twitch Developer application (for OAuth)
- Optional: YouTube API credentials, Kick OAuth, Discord bot token
For production Kubernetes deployment, see the Deployment Guide.
Architecture decisions are documented as ADRs in docs/adr/:
- ADR-0001: Standard Go Layout (not hexagonal/ports-adapters)
- ADR-0002: Redis Streams + Pub/Sub hybrid messaging
- ADR-0003: CloudNativePG for PostgreSQL in Kubernetes
- ADR-0006: YouTube quota reserve-confirm-rollback pattern
- ADR-0007: Leadership rebalancing for auto-scaling listeners
- ADR-0008: Feature gate infrastructure for premium capabilities
| Topic | Link |
|---|---|
| Onboarding | GETTING_STARTED.md |
| Frontend dev | FRONTEND_QUICK_START.md |
| CSS customization | CSS_CUSTOMIZATION.md |
| Deployment | DEPLOYMENT.md |
| Architecture overview | docs/architecture/ |
| Data flow | 01-DATA-FLOW.md |
| Troubleshooting | Decision Tree |
| LLM quick-ref guides | docs/llm-guides/ |
We welcome contributions from everyone!
Non-developers:
- Create and share themes (CSS)
- Report bugs
- Suggest features
Developers:
- Fork the repository
- Create a feature branch
- Make your changes and write tests
- Open a Pull Request
See CONTRIBUTING.md for the full process.
Built on the shoulders of:
- gempir/go-twitch-irc — Twitch IRC client
- Gin — Go HTTP framework
- Next.js — React framework
- 7TV, BTTV, FFZ — Emote providers
Free. Open source. Built for streamers who refuse to pick just one platform.
