Releases: MikePfunk28/theo_chat
Release list
TheoChat v1.4.2
TheoChat v1.4.2 — Real-time moderation
Removes the mandatory 30-second chat delay that v1.3.0 introduced. YouTube messages
now render into Twitch chat in ~100-200ms instead of being held for half a minute.
Changed
- Messages render immediately. The 30s pre-render hold is gone. Mod delete and
ban events continue to remove messages in real time via gRPC tombstones. - Popup redesign. The disabled-slider "MOD SAFETY WINDOW" section is now a
static "DELIVERY MODE: LIVE" readout. TheBUFFEREDtelemetry cell is nowMODE.
Removed
DEFAULT_DELAY_MS,MIN_SAFE_DELAY_MS,DELAY_MSconstants in content.jspendingQueue,queueOrInject(),flushPendingQueue()theochat.setDelaymessage handler- Delay slider in popup.html
Rationale
The 30s buffer was a defensive workaround that duplicated what gRPC tombstones
already solve. The real-time tombstone path delivers mod deletions in ~50-200ms,
and the existing reconcile sweep catches anything missed. The forced 30s hold
just made Twitch viewers see YouTube chat half a minute late with no added
moderation safety.
Full Changelog: v1.4.1...v1.4.2
TheoChat v1.4.1
What's Changed
- Fix/grpc lifecycle and observability by @MikePfunk28 in #2
- chore(deps): bump protobufjs from 7.5.4 to 7.5.5 in /service in the npm_and_yarn group across 1 directory by @dependabot[bot] in #1
- merge main into branch by @MikePfunk28 in #3
- Fix/grpc lifecycle and observability by @MikePfunk28 in #4
- fix(stats): round recent message rate for improved readability in ins… by @MikePfunk28 in #5
- fix(manifest): update version to 1.4.1 for release by @MikePfunk28 in #6
New Contributors
- @MikePfunk28 made their first contribution in #2
- @dependabot[bot] made their first contribution in #1
Full Changelog: v1.3.1...v1.4.1
TheoChat 1.4.0
What's Changed
- Fix/grpc lifecycle and observability by @MikePfunk28 in #2
- chore(deps): bump protobufjs from 7.5.4 to 7.5.5 in /service in the npm_and_yarn group across 1 directory by @dependabot[bot] in #1
New Contributors
- @dependabot[bot] made their first contribution in #1
Full Changelog: v1.3.1...v1.4.0
TheoChat 1.3.1
v1.3.1 — Theo-only hardening and mod-safety lockdown
- Extension hard-gated to twitch.tv/theo (and popout chat); inert on
every other page - Streamer target channel is now fetched from the first-party config
endpoint (t3yt.mikepfunk.com/api/config), not hardcoded - Mod safety window locked at 30 seconds: every injected YouTube
message passes through one full server-side moderation
reconciliation sweep before rendering. Mod deletions, timeouts,
and bans are respected even if the real-time event is delayed
or missed. - Navigation away from the streamer's channel cleanly tears down the
WebSocket and resets reconnect backoff - Popup coordinates with the background script so health polling only
runs when the user is actively viewing the target channel or has
the popup open - Service side (deployed separately): SDK-only channel-scoped live
detection, zero YouTube API quota while offline, strict
snippet.channelId rejection at every layer
TheoChat 1.3.0
TheoChat 1.3.0
Changes in this version:
- Locked the add-on to Theo’s Twitch page only (
twitch.tv/theoand Theo popout chat) - Locked YouTube verification to Theo’s configured YouTube channel ID
- Live-only detection: ignores non-live videos
- Improved moderator sync:
- real-time delete/retract/ban handling
- delayed messages deleted during the mod buffer never render
- 30-second fallback reconciliation sweep while live
- Added safer reconnect/watchdog behavior for stale stream and websocket recovery
- Reduced unnecessary background activity:
- YouTube API work only starts when a client is actively using the bridge
- background polling is limited to relevant Theo tabs / popup-open cases
- Moved runtime endpoint/channel config to hosted config instead of hardcoded worker values
- Updated advanced page copy to make clear the add-on is Theo-only and endpoint override is for testing/debugging only
- Updated docs and operator-facing text to match actual behavior
Full Changelog: v1.2.0...v1.3.0
TheoChat 1.2.0
v1.2.0
Moderation sync:
- All YouTube mod actions reflected in Twitch: Remove, Timeout, Hide User, Blocked Words
- Reconciliation poll every 90s compares live state with YouTube API — catches any missed events
- MESSAGE_RETRACTED_EVENT (type 11) now handled alongside standard delete/tombstone types
Live detection:
- Background script shows red LIVE badge on toolbar icon when streaming
- Browser notifications on stream start/end
- Connects during YouTube waiting room (upcoming), not just live broadcast
- AutoHeal fallback with exponential backoff (5min → 60min max) — zero quota when idle
- PubSub subscription retries every 5 min if initial attempt fails
- gRPC auto-reconnects on transient errors (5s retry)
Display:
- Custom YouTube channel emojis rendered as images (scraped from live_chat page, zero quota)
- Verified badge now rendered (gray checkmark)
- Username colors, avatars, Owner/Mod/Member/SuperChat badges
Reliability:
- Heartbeat watchdog — force reconnect after 90s silence
- Exponential backoff on WebSocket reconnect (3s → 30s max)
- Defensive error isolation — event handler failures cannot affect native Twitch chat
- Popup alert strip with manual RECONNECT button
Observability:
- /health returns quota usage, uptime, message counts
- /metrics returns full operational metrics (gated behind METRICS_TOKEN)
- Quota budget enforcement — reconcile auto-skips near daily ceiling
- Per-IP WebSocket connection cap (default 5)
Full Changelog: v1.0.0...v1.2.0
Theo Chat 1.0.0
Merges YouTube live chat into your Twitch chat view. YouTube messages appear inline in the native Twitch chat panel with a red YT badge. When YouTube mods delete a message or ban a user, those actions sync to the Twitch view instantly. Built for theo.gg — but works for any streamer who simulcasts to YouTube + Twitch.
Live site: t3yt.mikepfunk.com
How It Works
YouTube goes live
│
▼
YouTube PubSub push ───► [Railway service] ──(videos.list, 1 quota)──► gRPC stream
│
▼ (WebSocket)
[Browser extension]
│
▼ (DOM injection)
Twitch chat panel ─── YT messages + mod sync
Architecture
Three deployable surfaces:
| Surface | Stack | Hosted on | Purpose |
|---|---|---|---|
| Service | Node.js + gRPC + ws | Railway | Connects to YouTube, relays chat via WebSocket, serves /overlay |
| Landing + API | Cloudflare Worker | Cloudflare | t3yt.mikepfunk.com landing, /api/config, /privacy |
| Extension | WebExtension MV3 | Firefox/Zen/Chrome | Injects YouTube messages into Twitch DOM, popup control rig |
Key features
- Zero-delay by default — messages appear instant
- Opt-in mod buffer — slider in popup lets Theo hold messages 0–30s so mods can delete on YouTube before viewers ever see them; deleted-while-buffered messages never render
- Instant mod sync — deletions and bans from YouTube mods reflect in the Twitch view immediately
- Super chats, member badges, owner badges pass through with proper styling
- Auto-reconnect on both the gRPC and WebSocket layers
- PubSub auto-renewal every 4 days (subscription lease is 5 days)
- Zero-config extension — fetches WS URL from
t3yt.mikepfunk.com/api/configat startup; Theo never types a URL
Full Changelog: https://github.com/MikePfunk28/theo_chat/commits/v1.0.0