Your stream's back end, running on your machine.

Cha0s Stream sits between Twitch and everything else you use while live: OBS, your music player, your overlays, your chat commands.

… Made with Electron macOS · Windows · Linux

Everything else in this category is a cloud service that wants your Twitch token and a monthly fee. This one keeps its credentials on your machine by default, and the overlays are just pages your own computer serves to OBS.

Neon Drift
Velvet Antenna
Slow Antenna
1:123:05

browser source · localhost:3000/overlay/nowplaying

It runs on your machine

Your Twitch token, your Spotify token and your OBS password stay on the computer you are streaming from. Nothing is hosted for you and there is no account to make. The one exception is the Cha0s Guard relay, which is off unless you turn it on.

It controls a real player

Song requests land in the queue of the app you are actually listening to, not a separate web player nobody hears. Cascade, Cider, Spotify, Jellyfin or the OS media keys.

Every part is switchable

Each settings category has a master switch and each overlay has its own. Turning something off actually turns it off, right down to the page OBS is pointed at.

Everything between Twitch and OBS, and none of it in the cloud

Thirteen things it does while you are live. Open one to see the actual thing working.

Any player, one app

Controls Cascade, Cider, Spotify, Jellyfin or plain OS media keys. Pick one, and the settings panel only ever shows that player's fields.

See an exampleHide
Settings · Media
Cascade Cider Spotify Jellyfin Media keys
Cider address127.0.0.1:10767
Cider API token••••••••
Poll now playing
Queue as play next

Five backends. Cascade and Cider are local apps talked to directly over loopback, Spotify and Jellyfin are their web APIs, and OS media keys drive the system transport: Apple Music and Spotify on macOS, the Windows media transport, playerctl on Linux. Switching mode repaints the settings, so a Cider user never sees a Jellyfin field, and only the modes whose app has been seen running appear at all.

Requests that queue

Viewers request with !sr or a channel point redemption. Approve each one first, or let them queue straight through.

See an exampleHide
Requests approval on

Queue

Midnight Static maple · !sr Approve Queued
Low Orbit rell · redemption Waiting

History

Grainsoupspoon · played
Nine Voltmaple · played

Download wishlist

Halfway Homenot in library
Tape Hissnot in library

A request resolves against your library and goes to the player as play next. Approved requests retire out of the Queue on their own once the player moves past them, into History, which is the record of who asked for what. A request that matches nothing in the library goes to the Download Wishlist instead of being dropped. Mods get their own approval page on its own port, reached by a link that carries its own token and can be regenerated.

Four browser sources

Events, chat, now playing, or one combined source. Each has its own switch and its own URL, copied straight into OBS.

See an exampleHide
Events

localhost:3000/overlay/events

Copy URL
Chat

localhost:3000/overlay/chat

Serving a blank page
Now Playing

localhost:3000/overlay/nowplaying

Copy URL
Combined

localhost:3000/overlay/combined

Copy URL

Events, Chat, Now Playing, and a Combined source that layers events and chat for anyone who would rather add one browser source than two. Switching an overlay off does not just hide it in settings: its address serves a blank transparent page, so the browser source already sitting in OBS goes dark.

Seven layouts

Card, minimal, label, vinyl, banner, frosted or edge. Each moves the pieces, it is not one layout in seven colors.

See an exampleHide
Midnight Static
Vector Lanes
1:422:08 left
requested by maple
Midnight Static
Vector Lanes
Midnight Static
Vector Lanes
card minimal label vinyl banner frosted edge

Accent color pulls itself from the album art each track, or pin it. Width, text size and corner radius are yours; album art, album name, progress bar, elapsed and remaining times each toggle off. It credits the requester when the track came in through song requests, and leaves the line out entirely when it did not. The settings panel previews the real overlay in an iframe, not a mockup of it, so what you see is what OBS renders.

Alerts you can style

Follows, cheers, subs, resubs and gift subs, each with its own color, message template and sound.

See an exampleHide
maple just followed
rell cheered 500 bits
soupspoon gifted 5 subs
follow cheer sub resub gift sub

Corner, animation, on screen duration and how many stack at once are all settings. Message templates take {user}, {bits}, {tier}, {months}, {count} and {message} depending on the event. Alerts can fire as a browser source, as a flash of a named OBS source, or both. Custom CSS overrides any of it, with the class names listed right there in the panel.

Chat with real emotes

7TV, BetterTTV and native Twitch emotes, badge pills, and messages that age out on your schedule.

See an exampleHide
mod kira keep it in one channel please
sub 14 maple that transition was clean POGGERS
rell !sr midnight static

Side, max visible messages, message lifetime, font size, bubble color and opacity, badges on or off, timestamps on or off. Custom CSS here too, and the emotes are the real ones: 7TV, BetterTTV and native Twitch.

Style it in the browser

A visual editor on this site. Upload your config, restyle the overlay live, then paste the CSS back into the app.

See an exampleHide
Editor · alerts tab
Corner radius
Font size
Accent
Tabsalertschat
App · custom CSS

.alert-card {
  border-radius: 18px;
  --accent: #e879f9;
}

Class names listed beside the box

The editor lives on this site, not in the app, so it is one link away: open the overlay editor. It has tabs for the alert overlay and the chat overlay. The app has a Custom CSS field for each and lists the exact class names right beside the box, so the round trip is upload, style, paste. Alerts can also import a .css file directly.

OBS from the dashboard

Scene switching, source toggles, and stream and recording control, either from the dashboard or from chat.

See an exampleHide
OBS connected
Streaming 01:42:07 Recording off
Starting soon Gameplay Just chatting BRB
Webcam
Alert box
Now playing
Chat box

Live scene list and per source toggles, streaming and recording status with elapsed timecode. An optional third column puts the OBS controls next to the chat and events feeds, so you are not switching tabs mid stream. !scene, !source and !record do the same from chat, moderator only by default.

Commands, per person

Thirteen built in, plus your own. Every one has its own permission level and its own allowed sources.

See an exampleHide
Settings · Commands
!skip permission
chat whisper redemption
Custom command matchstarts with

Permission levels are everyone, subscribers and up, VIPs and up, moderators and up, and broadcaster only. Sources are chat, whisper, and channel point redemption input, set per command. Custom commands match three ways: !trigger, contains, or starts with, and take {user}. Built in responses also take {song}, {result} and {query} where they apply. !run and !killswitch ship disabled.

TTS that knows names

Reads chat, cheers, redemptions or alerts aloud, and says awkward usernames the way a person would.

See an exampleHide
Chat
Cha0s_1nc now
!tts the vod starts in five
Spoken

"Chaos Inc says the vod starts in five"

AliasCha0s_1nc → Chaos Inc
Botsignored

System voice and rate. Chat TTS has its own permission gate and a max length. Bits above a threshold get read, named channel point redemptions get read, and alerts can be read. Bots are ignored by default, including this app's own replies, which is the thing that makes TTS usable at all. Name aliases map a screen name to how it should be pronounced.

Redeems and triggers

Point a channel point redemption at a sound, an OBS scene, an OBS source or a script. Fire the same on follows, cheers, subs, resubs and gift subs.

See an exampleHide
Redeems
Reward name Airhorn of shame
Event triggers
Followchat message + soundTest
CheersoundTest
Gift subscriptTest

Redeems match on the exact reward name and do one of four things: run a script, play a sound, switch an OBS scene, toggle an OBS source. Event triggers are per event type and can send a chat message, play a sound and run a script, each with a Test button so you are not going live to find out. Scripts only run from domains on an allowlist you set.

Works with Cha0s Guardin development

Guard will forward Twitch chat commands straight to this app, so your Discord bot and your stream stop being two separate problems. This one is still being built and is not in the current release.

See an exampleHide
Cha0s Guard
Sees !song in Twitch chat
Defer to Stream
Cha0s Stream
Answers once: Midnight Static by Vector Lanes
Outbound onlyno open port

Stream dials out to the relay, so there is no inbound port and nothing to forward on your router. The relay only carries an enumerated list of actions, it is not a general proxy. A defer switch decides which side answers, so you never get the same command answered twice. This will be the one part of the app that is not local: the relay authenticates you with your Twitch token, so switching it on means handing that token to whichever relay you point at. It stays off until you turn it on, and the relay address is a setting, so you can run your own instead of ours.

Drop in a .js file

Add commands, react to events, and render your own panel in the dashboard, without touching the app.

See an exampleHide
Plugins tab

dice-roller.js

Dropped inloaded
Its own panel
Registered!roll
Listeningcheer, redemption
Last roll17

A plugin registers commands, subscribes to events, and can render live content into its own dashboard panel. External clients can also send commands over the dashboard's WebSocket, which is how a stream deck triggers something without going through Twitch chat at all.

Restyle the overlay here, paste the CSS back into the app

The one part of Cha0s Stream that runs on this website. Upload your config, drag the controls until the alert or chat overlay looks the way you want it, and copy the generated CSS into the app's Custom CSS box.

Open the overlay editor
Upload your config It starts from the styling you already have, not from a blank slate.
Two tabs, alerts and chat Both overlays have a Custom CSS field in the app, and both are editable here.
Paste it back, or import a file The app lists the exact class names beside the box, and alerts can import a .css file directly.

Thirteen commands, and none of them locked to you

Every one can be renamed, re-permissioned, restricted to certain sources, or switched off.

CommandWhat it doesDefault
!songSays what is playing.everyone
!sr <query>Requests a song.everyone
!playResumes playback.moderator
!pausePauses playback.moderator
!skipNext track.moderator
!prevPrevious track.moderator
!scene <name>Switches OBS scene.moderator
!source <name> on|offToggles an OBS source.moderator
!sound <name>Plays a sound.moderator
!record start|stopStarts or stops recording.moderator
!tts <message>Speaks a message.everyone
!run <url>Runs a script from an allowlisted domain.broadcaster, off by default
!killswitchStops stream and recording immediately.broadcaster, off by default

Plus any command you write yourself. Custom commands match on !trigger, contains, or starts with, and fill in {user} when they run.

A local page, not a hosted control panel

It opens on localhost:3000 on the machine running the app. Every action the app takes lands in the Verbose log, tagged by source and filterable, so a request that went wrong is one click from the reason.

Cha0s Stream
VerboseTwitch StreamOBS Controls
AllOBSMediaSoundSystemErrors
21:14:02MediaqueuePlayed: Velvet Antenna - Neon Drift✓
21:13:41MediaqueueApproved: Velvet Antenna - Neon Drift✓
21:13:38Modrelay:srpixelgremlin via Guard✓
21:13:38System!srPending approval: Velvet Antenna - Neon Drift✓
21:13:37System!srpixelgremlin requested: neon drift✓
21:11:04OBS!sceneScene switched to Gameplay✓
21:10:52Soundredeemmothlamp redeemed Airhorn of shame, played airhorn.wav✓
21:09:15System!songmothlamp → Low Orbit Choir - Paper Ghosts [Cider]✓
21:08:23SystemchatEmote fetch returned 0 results, serving cached data (110 emotes)✕
21:08:01SystemtwitchEventSub connected✓
OBS Media Twitch Mode: Cider ♪ Low Orbit Choir - Paper Ghosts 20 cmd  3 err

Guard runs the moderation, Stream runs the broadcast

Cha0s Guard is the Discord and Twitch moderation half of the same toolkit: automod, warnings, raid protection, appeals, and Twitch bans that travel into Discord. The two apps talk to each other, so a chat command can be answered by exactly one of them.

guard.chaosinc.xyz
Guard forwards the command A Twitch chat command Guard sees can be handed straight to this app.
Outbound only Stream dials out to the relay. No inbound port, nothing to forward on your router.
One answer, not two A defer switch decides which side replies, so nothing gets answered twice.

One install, and it keeps itself current

Builds come from GitHub Releases. The app checks for updates itself and verifies what it downloads.

Latest release …

Pick your platform. macOS is Apple Silicon only.

All releases →

macOS is Apple Silicon only. There is no Intel build, since macOS 27 drops Intel support. The app is not signed with an Apple Developer ID either, so the first launch gives you the unidentified developer prompt: open System Settings, go to Privacy and Security, and allow it once.

Updates are built in. It checks GitHub itself, verifies the download against the published sha256 where there is one, and has an opt in beta channel. On macOS it downloads the dmg and opens it, so you still drag the app to Applications yourself.

No subscription, no monthly fee

Install it, connect Twitch and OBS once, and the whole thing runs on the machine you are already streaming from.

Uninstalling takes your settings with it. There is no account to close.