Give your Twitch chat
something to play.

Looking for Twitch chat games your viewers have never played? You found them. Overlabels makes small games your Twitch chat plays live on your stream, and nobody else has them.

Free. One click to install. One link to paste into OBS. Works with the Twitch account you already have.

Chat Tower, live in OBS
Products

Pick one. Your Twitch chat plays it tonight.

Every product installs in one click and shows up on your Twitch stream as one browser source in OBS. Made by Overlabels, free, and not available anywhere else. Every demo below runs the product's own rules, with made-up Twitch viewers.

01 Chat Checkin
Chat Checkin, live in OBS
pixelmoth: !checkin Lisbon
overlabels: pixelmoth checked in from Lisbon, PT! That is 16,606.4 km away.
quietfox: !checkin Austin
overlabels: quietfox checked in from Austin, US! That is 8,755.4 km away.
kettle_: !checkin Cape Town
overlabels: kettle_ checked in from Cape Town, ZA! That is 13,881.6 km away.
sunroof: !checkin Osaka
overlabels: sunroof checked in from Osaka, JP! That is 9,232.1 km away.
Twitch chat types !checkin

Chat Checkin

Viewers type !checkin and their city lands as a pin on a spinning globe in your overlay, with a count of checkins and countries and who checked in from farthest away.

Get Chat Checkin
02 Chat Emote Bubbles
Chat Emote Bubbles, live in OBS
no bot needed

Chat Emote Bubbles

Every emote your chat types floats across your stream in a soap bubble.

Get Chat Emote Bubbles
03 Chat Tower
Chat Tower, live in OBS
Twitch chat types !stack

Chat Tower

One shared tower your whole chat builds with !stack.

Get Chat Tower
04 Follower Bowling
Follower Bowling, live in OBS
Twitch chat types !bowl

Follower Bowling

Your ten newest followers get racked as pins.

Get Follower Bowling
05 Twitch Chat Overlay
Twitch Chat Overlay, live in OBS
no bot needed

Twitch Chat Overlay

Your chat on stream, with badges and emotes, read straight from Twitch.

Get Twitch Chat Overlay

More are coming, and the next one comes from what Twitch streamers ask for. See everything on the products page.

How it works

Three clicks. No setup night.

Logging in with Twitch is the whole account setup. There is no wizard, no theme to configure and nothing to download.

  1. 01

    Pick a product

    Open its page, read what your Twitch chat gets to do, and press Install. The product page keeps count of the two or three things left to do, and every one of them is listed on that same page.

  2. 02

    Paste one link into OBS

    Every product is one browser source. Add it, size it, done. The page shows you the link and the settings that go with it.

  3. 03

    Your Twitch chat plays

    Games run through the Overlabels bot in your Twitch chat. Mod it once and every viewer's command reaches your overlay. Alerts and the chat overlay need no bot at all.

Alerts

Your tips land on your Twitch stream, whoever sends them.

Connect the service you already use and every tip shows up on your overlay with a sound, a spoken line and a message in your Twitch chat. Five services, one alert each, all in one place.

  • Buy Me a Coffee Alerts

  • Fourthwall Alerts

  • Ko-fi Alerts

  • Streamlabs Alerts

  • Throne Alerts

Overlabels is an independent product and is not affiliated with, endorsed by or sponsored by Twitch, Ko-fi, Streamlabs, Fourthwall, Buy Me a Coffee or Throne. Their names and marks belong to them.

Why Overlabels

Things your current overlay pack does not do.

Games your Twitch chat plays

A tower, a bowling lane, a globe. Your Twitch chat plays them live on your stream, and they exist only here.

Free, no tiers, no watermark

Nothing is paywalled and nothing is limited. Everything you install is yours, and the whole thing is open source.

Every integration in one place

Twitch events and tips from five services come through one door and land on one overlay. No second dashboard to keep open.

One browser source in OBS

A product is a link. Add it as a browser source in OBS, Streamlabs Desktop or anything else that renders a web page, and it just runs.

Build your own

Want something nobody has made yet?

Every product above is a normal Overlabels overlay: a web page with live Twitch data in it. You can copy one and change it, or start from nothing. Everything below this line is for that.

You do not have to write it yourself. Give Claude or ChatGPT the link overlabels.com/llms.txt, describe the overlay you want in plain words, and paste what it gives you into your account. The guide is complete, so the assistant already knows every tag, control and rule.

Tags

Simple tags. That’s it.

Use a simple tag format to pull in live Twitch data. It works in HTML, in CSS, and inside show/hide rules. Easy to read, easy to scan.

Overlay example — subscriber bar
<div class="sub-bar">
  <span>[[[subscribers_total]]] subs</span>
  <span>Latest: [[[subscribers_latest_user_name]]]</span>
  <span>[[[channel_game]]] | [[[channel_title]]]</span>
</div>

Tags cover your channel, followers, subs, goals, and more. Browse all template tags →

Controls

Typed, mutable overlay state.

Controls are named, typed values you define per template and update from your dashboard while the overlay is live in OBS. Change a value and your overlay re-renders the new data near-instantly. All without page reloads, of course!

Reference any control with [[[c:key]]] — in HTML, in CSS, and in conditional blocks. Full controls reference →

text

Strings up to 1000 chars. HTML stripped on save.

[[[c:myname]]] → JasperDiscovers
number

Numeric values. Safely coerced, defaults to 0.

[[[c:goal_target]]] → 500
counter

Integer counter. Increment or decrement from the dashboard.

[[[c:kill_count]]] → 14
timer

Countup or countdown at 250ms resolution. State broadcast over WebSocket.

[[[c:round_timer]]] → 4:32
datetime

ISO 8601 datetime. For scheduled events, stream start times.

[[[c:next_event]]] → 2026-03-01T20:00:00Z
boolean

Stores "1" or "0". Toggle overlay sections live from your dashboard.

[[[if:c:show_goal]]] → show or hide
Power combo — boolean control + countdown timer + conditional class binding
// "show_timer" → boolean → "1"    "round_timer" → timer → countdown, 300s base
[[[if:c:show_timer]]]
  <div class="timer [[[if:c:round_timer <= 10]]]danger[[[endif]]]">
    [[[c:round_timer]]]
  </div>
[[[endif]]]

The timer ticks at 250ms resolution. The danger class applies automatically when the countdown reaches 10 seconds. Flip the boolean from the dashboard to show or hide the block, with near-live updates.

Conditional Rendering

A comparison engine in your template.

Any tag (Twitch data, control value, or event payload) can drive a conditional block. Evaluated client-side in the overlay with no server round-trips and no eval(). Nesting supported up to 10 levels deep. Full syntax reference →

Syntax

[[[if:variable operator value]]]
  ...
[[[elseif:variable operator value]]]
  ...
[[[else]]]
  ...
[[[endif]]]

Operators

= Equal
!= Not equal
> Greater than
< Less than
>= Greater than or equal
<= Less than or equal

Numeric comparisons are numeric. Truthy check treats "0", "false", and empty string as false.

Language-aware overlay + milestone block
[[[if:channel_language = en]]]
  <p>Welcome to the stream</p>
[[[elseif:channel_language = es]]]
  <p>Bienvenidos al stream</p>
[[[else]]]
  <p>Welcome</p>
[[[endif]]]
[[[if:followers_total >= 10000]]]
  <div class="tenk-badge">10K club</div>
[[[endif]]]
Event Alerts

Every Twitch event. One syntax.

Assign an alert template to any EventSub event. When the event fires, Overlabels renders the template with the payload merged into the tag context, broadcasts the compiled alert to your overlay over WebSocket, and displays it with a configured transition and duration — all without any interaction from you.

New Follower
channel.follow
[[[event.user_name]]]
New Subscription
channel.subscribe
[[[event.tier]]]
Gift Subscriptions
channel.subscription.gift
[[[event.total]]]
Resubscription
channel.subscription.message
[[[event.message.text]]]
Bits Cheer
channel.cheer
[[[event.bits]]]
Incoming Raid
channel.raid
[[[event.viewers]]]
Channel Points
channel.channel_[...]_redemption.add
[[[event.reward.title]]]
Stream Online
stream.online
[[[event.type]]]
Stream Offline
stream.offline
no payload
What happens when a raid fires
01 Twitch sends a webhook POST to /api/twitch/webhook
02 HMAC-SHA256 signature validated against your per-user webhook secret
03 Mapping lookup finds the template assigned to the event type for your account
04 Current overlay data merged with the event payload (event.viewers, event.user_name, etc.)
05 Compiled alert broadcast to Pusher channel alerts.{twitch_id}
06 Overlay receives the payload, renders into the alert DOM node, plays transition
07 Auto-dismisses after configured duration. Static overlay continues uninterrupted.
Integrations

Show donations from different sources.

Connect your Ko-fi, Fourthwall, Buy Me a Coffee, Streamlabs or NEW: Throne account and Overlabels automatically tracks every donation in real time. Counters update, alerts fire, and your overlay stays current - all without touching a single line of code after setup.

Ko-fi

Donations, subscriptions, shop orders

Paste your Ko-fi verification token, set your webhook URL, done. Every Ko-fi event flows through the same alert pipeline as Twitch events.

Six auto-provisioned controls, identical shape across every service:

[[[c:kofi:total_received]]]
[[[c:kofi:latest_donor_name]]]
[[[c:kofi:donations_received]]]
[[[c:kofi:latest_donation_amount]]]
[[[c:kofi:latest_donation_message]]]
[[[c:kofi:latest_donation_currency]]]
One alert template works for all connected external donation services
<div class="donation-alert">
  <h2>[[[event.from_name]]] donated [[[event.formatted_amount]]]</h2>
  [[[if:event.message]]]
    <p>[[[event.message]]]</p>
  [[[endif]]]
  <small>via [[[event.source]]]</small>
</div>

Ko-fi, Fourthwall, Buy Me a Coffee, Streamlabs and Throne expose the same normalized event tags. Write your donation alert once and it works for all of them - [[[event.source]]] tells your overlay which platform it came from.

No vendor lock-in

Five donation services plus Twitch bits. One latest().

Every other overlay tool on the market is owned by a donation platform. Streamlabs' overlays show Streamlabs donations. StreamElements' overlays show StreamElements donations. Ko-fi's overlays show Ko-fi donations. That's not a bug, it's the business model.

Overlabels doesn't sell donation ingest, so we don't care which service the money came through. Pass all five donation services plus Twitch bits into a single latest() function and you get the actual most-recent supporter across any of your connected revenue streams. One name, one amount, five pipes.

Two expression controls. The whole cross-service story.
// c:latest_donator
latest(
  c.kofi.latest_donor_name_at, c.kofi.latest_donor_name,
  c.fourthwall.latest_donor_name_at, c.fourthwall.latest_donor_name,
  c.bmac.latest_donor_name_at, c.bmac.latest_donor_name,
  c.streamlabs.latest_donor_name_at, c.streamlabs.latest_donor_name,
  c.throne.latest_donor_name_at, c.throne.latest_donor_name,
  c.twitch.latest_cheerer_name_at, c.twitch.latest_cheerer_name
)
// c:last_donation_amount
latest(
  c.kofi.latest_donation_amount_at, c.kofi.latest_donation_amount,
  c.fourthwall.latest_donation_amount_at, c.fourthwall.latest_donation_amount,
  c.bmac.latest_donation_amount_at, c.bmac.latest_donation_amount,
  c.streamlabs.latest_donation_amount_at, c.streamlabs.latest_donation_amount,
  c.throne.latest_donation_amount_at, c.throne.latest_donation_amount,
  c.twitch.latest_cheer_amount_at, c.twitch.latest_cheer_amount
)

latest() takes pairs of (timestamp, label) arguments, picks the highest timestamp, and returns its paired label. Every control in Overlabels automatically exposes an _at companion holding its last-update time in seconds - every timestamp on the platform is normalized that way - so the same pattern works for totals, counters, or anything else you want to rank by recency. Reactive, so your overlay catches up the instant a new donation lands on any pipe.

Case study

Here's how to do a reverse subathon.

A reverse subathon is the evil twin of the classic. The clock starts at some big number and every donation subtracts time. When it hits zero, the stream ends. It is the chaos engine of audience-participation streaming, and it's three controls and one expression in Overlabels.

Create three number controls: c.donathon_timer (starting seconds), c.deduction_per_donation (seconds to strip per donation), and c.total_donations (a counter your alert template increments on every donation across every service). Then a single expression control does the rest:

One expression. The whole show.
// c:time_remaining
clamp(
  c.donathon_timer - (c.deduction_per_donation * c.total_donations),
  0,
  c.donathon_timer
)

clamp() keeps the result between zero and the original timer so the clock can't go negative or somehow inflate. Pipe it through |duration:hh:mm:ss and you have a broadcast-ready countdown that reacts the instant any donation lands on any service.

Btw: if you want a classic subathon that adds time on every donation, just swap the - for a +. That's it. You're welcome <3

Kits & Copying

Good design compounds.

Any public template or kit can be copied. One click, one copy, fully yours to modify, extend, or break. An Overlay Kit is a collection of templates - a static overlay, a follower alert, a subscription alert, a raid alert - designed as a cohesive visual system. Copy the kit, get everything at once - including all Controls and their values.

Copy anything public

Every public template is a starting point. Copy it, own it, ship it. The original is always untouched.

Overlay Kits

Collections of templates sharing a visual language. Copy the kit, get the whole system. No assembly required.

Controls carry over

Copying a template with controls opens the Import Wizard. Pick which controls come with the copy.

Getting started

Your account sets itself up.

Sign in with Twitch and that is the setup. A few seconds later a background job leaves you with a working account: your webhook signing secret, the starter kit copied in - one overlay plus a set of alert templates - and those alerts already mapped to the Twitch events that fire them. There is no wizard to click through.

Template tags need no setup at all. Every account gets the same complete catalogue from the start, with nothing generated per account and nothing locked behind your Twitch tier. A tag your channel has no data for simply renders nothing.

Automated on signup

  • 01 Webhook signing secret generated
  • 02 Starter kit copied into your account
  • 03 Alerts mapped to events automatically
  • 04 Every template tag available immediately

Personalised testing page

The /testing page generates ready-to-run Twitch CLI commands for your account. Trigger events locally and verify your overlay without going live.

Example: simulate a new follower event

$ twitch event trigger channel.follow \
  --transport=webhook \
  -F https://overlabels.com/api/twitch/webhook \
  -s your_webhook_secret \
  --to-user your_twitch_id
  --from-user another_twitch_id

You'll need to have Twitch CLI installed for this to work.

Your Twitch chat is waiting.
Free. Forever.

Log in with Twitch, pick a product, paste one link into OBS. No paywalls, no tiers, no limits. Everything you install is yours, and the whole thing is open source.

Connect

Connect with Twitch to log in to Overlabels. Revoke access anytime from your Twitch settings.