Twitch alerts, chat, now-playing and goal widgets for OBS, in one Windows app.
Hibiki signs in to your own Twitch application, listens on EventSub, and serves the overlay from a local HTTP server. OBS points a Browser Source at that address; everything you change in the app restyles the running overlay without a refresh.
- Windows 10 or 11
- OBS, or anything else that can load a Browser Source
- A Twitch application of your own (see below)
- Register an application at dev.twitch.tv/console/apps with OAuth Client Type Public.
- Set its redirect URI to exactly
http://localhost:3982/auth/callback. Twitch rejects127.0.0.1here; it has to belocalhost. If you change the port in Settings, change it here too. - Paste the Client ID into Settings, then Connect Twitch.
- Copy the overlay URL from the Overlay page into an OBS Browser Source at 1920x1080. Each widget also has its own URL, so OBS can place and scale them independently.
| Page | What it puts on stream |
|---|---|
| Alerts | Follow, subscription, gifted subs, raid, cheer and channel point cards |
| Music | Whatever is playing in any player Windows knows about |
| Goal | Progress towards a follow, subscription or bits target |
| Chat | Your channel's chat, filtered for the stream |
Every one of them takes an image or a looping video as its backdrop, and its padding is set separately for height and width. One alert's look can be copied onto the others from its own page.
Presets keep a whole look under a name and swap it in one click. A preset
travels between machines as a .rbn file, which carries its images, sounds
and backdrops inside it rather than pointing at files only one install has.
Several Twitch accounts can be signed in at once; the one on stream is chosen from a dropdown in Settings, and alerts and chat follow it.
pnpm install
pnpm tauri devChecks, the same ones CI runs:
pnpm build # tsc, then vite
node --experimental-strip-types src/lib/time.check.ts
node --experimental-strip-types src/lib/overlay-style.check.ts
node --experimental-strip-types src/types/chat.check.ts
cargo clippy --manifest-path src-tauri/Cargo.toml --all-targets -- -D warnings
cargo test --manifest-path src-tauri/Cargo.toml -- --skip nowplaying::The nowplaying:: tests read this machine's live media session, so they are
skipped where there is not one.
Pushing to main publishes a dev prerelease. A vX.Y.Z tag publishes a real
release, and the tag has to match version in src-tauri/tauri.conf.json.
Installed copies check the releases page at startup and can install a newer
build over themselves. That needs the update signing key: keep
TAURI_SIGNING_PRIVATE_KEY and TAURI_SIGNING_PRIVATE_KEY_PASSWORD in the
repository secrets, and keep the private key itself somewhere safe. Losing it
means every installed copy has to be reinstalled by hand.
Copyright (c) 2026 Reborn Esport, under the PolyForm Noncommercial License 1.0.0.
Use it, change it and share it for any noncommercial purpose, and keep the
notice in LICENSE with it so the work stays credited to Reborn Esport.
Selling it, or selling a product built on it, is not permitted. Ask us if you
want a commercial licence.
src/ app window (React)
src/overlay/ what OBS renders
src-tauri/src/ Tauri commands, sqlite, the local server, Twitch
The alert catalogue lives in src-tauri/src/alerts/registry.rs: one row per
alert kind carries its scope, subscription, parser, default style and preview
payload. Adding an alert type is a variant plus a row.