Cha0s Stream sits between Twitch and everything else you use while live: OBS, your music player, your overlays, your chat commands.
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.
browser source · localhost:3000/overlay/nowplaying
why this one
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.
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.
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.
features
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
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.
Queue
History
Download wishlist
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 exampleHidelocalhost:3000/overlay/events
Copy URLlocalhost:3000/overlay/chat
Serving a blank pagelocalhost:3000/overlay/nowplaying
Copy URLlocalhost:3000/overlay/combined
Copy URLEvents, 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 exampleHideAccent 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
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 exampleHideSide, 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.alert-card {
border-radius: 18px;
--accent: #e879f9;
}
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
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
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"Chaos Inc says the vod starts in five"
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 exampleHideRedeems 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 exampleHideStream 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 exampleHidedice-roller.js
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.
overlay editor
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.css file directly.
commands
Every one can be renamed, re-permissioned, restricted to certain sources, or switched off.
| Command | What it does | Default |
|---|---|---|
| !song | Says what is playing. | everyone |
| !sr <query> | Requests a song. | everyone |
| !play | Resumes playback. | moderator |
| !pause | Pauses playback. | moderator |
| !skip | Next track. | moderator |
| !prev | Previous track. | moderator |
| !scene <name> | Switches OBS scene. | moderator |
| !source <name> on|off | Toggles an OBS source. | moderator |
| !sound <name> | Plays a sound. | moderator |
| !record start|stop | Starts or stops recording. | moderator |
| !tts <message> | Speaks a message. | everyone |
| !run <url> | Runs a script from an allowlisted domain. | broadcaster, off by default |
| !killswitch | Stops 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.
dashboard
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.
the other half
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.xyzdownload
Builds come from GitHub Releases. The app checks for updates itself and verifies what it downloads.
Pick your platform. macOS is Apple Silicon only.
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.
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.