Windows Twitch browser for Streamlink. Log in, see who’s live, start the stream in your player, and keep chat next to the video.
The window title, installer, and executable are Rillmux.
mpv on the left, Chatterino7 on the right:
Settings is split into sections rather than one long page:
About includes View changelog and a setup check once Streamlink, mpv, and Chatterino have been found:
- Twitch login (OAuth Device Code); normal app OAuth tokens live in the OS keyring
- Website auth for Streamlink playback; the website token stays in the OS credential manager and is supplied to Streamlink through a randomized ephemeral config only for the launched process. Rillmux does not persist it in the user's
config.twitch - Experimental Channel Points HUD and farming: live balance, passive watch credit, automatic +50 bonus claims, reward catalog/redemption (including Twitch prompt text), polls, and predictions when enabled in Settings; bonus claims use a separate read-only Twitch TV device session
- Followed (list or grid, search, pins, hide mature), top streams, categories with viewer counts, search, channel pages, teams
- Language filter on top/category streams
- Follow outgoing raids from a prompt over mpv or Chatterino when the raid starts
- Streamlink launch (bundled in release builds, or the system install)
- Watching list with Streamlink status; choose Independent, Seamless, or Multistream opening behavior
- Embedded chat by default, or Chatterino7 / a browser; the docked Chatterino uses an isolated Rillmux-owned profile so unrelated user windows are left alone
- Quality, low latency, ad filter, player, hotkeys, per-channel overrides, tray
- Desktop notifications when followed channels go live (global off switch + per-channel mute)
- First-run setup wizard (Streamlink → player → optional login)
- Auto-updater and
stg://deep links - Optional Sentry crash reports (opt-out in Settings)
- Optional category-filtered local Debug Mode diagnostics with bounded
rillmux.logrotation and local crash files
Release notes: CHANGELOG.md.
| Need | Notes |
|---|---|
| Windows 10/11 | Only supported desktop target |
| WebView2 | Usually already installed |
| Node.js 20+ | Develop / CI |
| Rust stable | Tauri backend |
| mpv (recommended) | No official Windows installer. In PowerShell: winget install -e --id shinchiro.mpv. Or Scoop. Or portable: download mpv-x86_64-….7z from shinchiro builds, extract, point Settings at mpv.exe (keep ffmpeg.exe / DLLs beside it). |
| Streamlink | Bundled in release installers. For local unsigned builds use a system install or npm run streamlink:fetch |
| Chatterino7 | Optional external chat. Stock Chatterino 2 still launches if found. Chatterino7 is the one that gets 7TV name paints, personal emotes, animated avatars, and 4× 7TV/FFZ images. winget install -e --id SevenTV.Chatterino7 or releases. |
- Open Releases.
- Download the NSIS (
.exe) or MSI installer. - If SmartScreen warns (“Unknown publisher”), that is expected until an Authenticode certificate is configured — More info → Run anyway, or ship builds signed with your own OV/EV cert (see below).
- On first launch, finish the setup wizard (Streamlink / player / optional login).
Deep links: stg://watch/<channel-login>.
npm install
npm run tauri:devnpm run tauri:dev— desktop app (Vite + Tauri). Use this for login and Streamlink.npm run dev— Vite only in a browser; no Tauri APIs, so Followed/Helix stay empty.npm test— unit testsnpm run doctor— full React Doctor scan (CI fails on any finding)npm run streamlink:fetch— download a Windows Streamlink build intosrc-tauri/resources/streamlink/(gitignored binaries)
Twitch Client ID for local builds: set TWITCH_CLIENT_ID / VITE_TWITCH_CLIENT_ID, or use the documented env fallback for tryouts. Production releases need your own public Twitch application (Device Code / public client).
Keep the version in sync in package.json, src-tauri/Cargo.toml, and src-tauri/tauri.conf.json (currently 0.5.11).
Pushes to main or master expect a PR with green CI (frontend, rust, and react-doctor). A local pre-push hook runs npm run ci. Skip it only with SKIP_CI_HOOK=1. The Release workflow runs the frontend and rust checks again before building installers.
git tag v0.5.11
git push origin v0.5.11That runs .github/workflows/release.yml: fetch Streamlink → tauri build (NSIS + MSI + updater signatures) → GitHub Release with auto-generated notes. Keep the narrative in CHANGELOG.md in sync when you cut a version.
You can also run the workflow by hand (Actions → Release → Run workflow). From main or master that creates tag v{version} (from package.json) and publishes the GitHub Release. From any other branch it only uploads artifacts.
| Secret | Purpose |
|---|---|
TAURI_SIGNING_PRIVATE_KEY |
Contents of src-tauri/gen/updater.key (updater signing; never commit) |
TAURI_SIGNING_PRIVATE_KEY_PASSWORD |
Password used when generating that key (empty if none) |
TWITCH_CLIENT_ID |
Twitch public client id |
VITE_TWITCH_CLIENT_ID |
Same value for the Vite frontend |
SENTRY_DSN |
Optional; Rust crash reporting |
VITE_SENTRY_DSN |
Optional; same DSN for React |
Updater public key lives in src-tauri/tauri.conf.json → plugins.updater.pubkey.
SmartScreen warnings go away only with a real code-signing certificate (OV/EV from a public CA, or Azure Trusted Signing). Self-signed certs do not fix SmartScreen.
When you have a .pfx:
- Encode it:
certutil -encode certificate.pfx base64cert.txt(use the base64 body as the secret value). - Add repo secrets:
WINDOWS_CERTIFICATE— base64 PFXWINDOWS_CERTIFICATE_PASSWORD— PFX passwordWINDOWS_CERTIFICATE_THUMBPRINT— SHA1 thumbprint of the cert (no spaces)
- Release CI imports the PFX into the runner store and sets Tauri’s
bundle.windowssigning fields for that build only.
Without those secrets, releases still build; installers are unsigned.
Timestamp server used when signing: http://timestamp.digicert.com.
This is the Tauri rewrite that used to live at Wibias/streamlink-twitch-gui (archived). The original NW.js app is streamlink/streamlink-twitch-gui.
MIT — see LICENSE.