One overlay. Every platform.
Combine chat from Twitch, YouTube, Kick, TikTok, and Discord into a single, beautiful streaming overlay — with full support for 7TV, BTTV, and FFZ emotes.
Try it free at allch.at · Discord · Report a Bug
All-Chat is a free, open-source overlay for streamers who broadcast to more than one platform — or just want a cleaner chat experience. Add it as a browser source in OBS, Streamlabs, or any streaming software and see every message from every platform in one place.
No bots. No IRC tokens. No complicated setup. Just sign in, create an overlay, and go live.
- Multi-Platform — Twitch, YouTube, Kick, TikTok, and Discord in a single feed
- Full Emote Support — 7TV, BTTV, FFZ, plus native Twitch and YouTube emotes render correctly
- Real-Time — Messages arrive via WebSocket in under 500 ms
- Customizable — 12 built-in themes, full CSS editor, Google Fonts, show/hide badges, avatars, timestamps
- Shareable — Give viewers a link so they can follow chat outside of OBS
- Smart Polling — Listeners only run when your overlay is actually visible (see How it works)
- 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 — use it from your browser.
The All-Chat Browser Extension replaces the native site chat on Twitch, YouTube, Kick, and TikTok with a unified All-Chat panel. Read and send messages across platforms without leaving the page.
Install:
- Chrome / Edge
- Firefox
- GitHub Releases (gets updates first)
What it does:
- Swaps the site's native chat with All-Chat automatically
- Uses browser-native OAuth — no tokens leave your machine
- Connects to shared chat sources the streamer configured
- Zero extra setup — works out of the box
| 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 |
| 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.
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
Made with love for the streaming community