Twitch on your phone, without the shit you didn’t come for.
HexStream is a custom Android Twitch client by TripleSix, built on Xtra. Browse without the same streamer coming back for an encore, filter the tags you don’t care about, keep your accounts handy, and get back to watching the damn game.
Xtra supplies the foundation: playback, chat, browsing and much more. Credit belongs to Andrey Asadchy, crackededed, and Xtra’s contributors. HexStream extends that work under the GNU Affero General Public License v3. See credits and provenance.
Download the APK from Releases. The current release is 1.0.0-beta.1, built locally with Gradle and the Android SDK. Android 7.0 or newer is required. No GitHub Actions build is used.
Fresh installations start with empty filter lists. Language restrictions and emoji blocking are off; you choose the rules. Upgrading preserves existing saved rules, accounts and proxy settings. See installation and builds for signing and package details.
| Feature | What you get |
|---|---|
| Stable category browsing | An append-only browsing session, broadcaster deduplication, cursor-loop protection and internal recovery from thin pages. Visible rows keep their order and viewer counts until refresh. |
| Full supplied-tag filtering | Filter every tag returned for a stream, including tags outside a card’s visible chips. Channel, category and title rules are separate. |
| Global filtering controls | Exact, contains and regex rules; narrow allow lists; optional language and emoji checks; import/export compatible with Unwanted Twitch. |
| “Why blocked?” | Inspect recent hidden items and the precise rules or language/emoji evidence that hid them. Edit the rule or add a narrow exception. |
| Multiple saved accounts | One active account at a time, encrypted saved credentials, and notifications scoped to that active account. Global filters and proxies survive switches. |
| Six playback proxy presets | Ordered Luminous and PerfProd endpoints, editable custom proxies, and the existing player’s fallback behavior. Shared by all accounts. |
| Lower live delay | ExoPlayer starts closer to the live edge by default, with bounded speed adjustment and live-specific buffering. Network and source conditions still matter. |
| Swipe controls | Left-side brightness and right-side volume, independently configurable, alongside the existing minimize/miniplayer gestures. |
| Channel points | Claim an available bonus chest and redeem available channel rewards, with balance, input and confirmation handling. |
| HexStream identity | Custom launcher/adaptive/monochrome icon, About credits, and a HexStream release feed. |
The existing Xtra player, chat/emotes, VODs, clips, downloads, picture-in-picture, themes and other settings remain part of the foundation. A desktop edition is not included.
Scroll down. Same streamer. Scroll farther. Same streamer again. Apparently “next page” needed a damn explanation.
Twitch’s live directory changes while you scroll. Its own API documentation warns that changing viewer counts can produce duplicate or missing streams across pages. Simply appending those responses can repeat creators; a client also needs to defend against thin pages and cursors that stop advancing.
HexStream keeps one client-side snapshot for the current category query:
- Fetch metadata in batches of 100, independently of the 30-row Android Paging page size.
- Apply the current content rules to the full supplied metadata.
- Deduplicate by broadcaster identity, with channel login and stream ID as additional aliases/fallbacks.
- Buffer genuinely new rows. Consume duplicate-heavy or empty pages internally while looking for enough new rows.
- Append accepted rows without moving or rewriting rows already shown.
Recovery is bounded: at most 6 upstream requests per load, with a 3-page no-progress limit per API path. Repeated cursors trigger a compatible fallback rather than an endless loop. The normal GraphQL → persisted GraphQL → eligible Helix ordering is retained; Helix is excluded when it cannot preserve the selected tags, language or sort.
Manual refresh, category, sort, tag and language changes create a new snapshot. Ordinary scrolling and back navigation keep the session while its ViewModel survives. Thumbnails remain lazy. Read the design, limits, counters and test cases →
This is a native Android implementation inspired by the workflow and JSON format of Unwanted Twitch, not a bundled browser extension.
Ever opened Twitch for a game and landed in a tag war between MyTeamIsPerfect and EveryoneElseIsWrong? Cool. I don’t give a fuck. I’m here for the game.
Pick whichever camp you’re tired of seeing. Pick both. Pick neither. HexStream lets you filter the tags and get on with watching. These are fictional examples; there is no preloaded list telling you which side to like.
The filter engine checks the entire tag list supplied by the selected Twitch API, not just the first few visible tags. It also checks channel identity, title and category where that metadata is available. It does not invent missing tags or maintain a complete catalog of every Twitch tag.
Rules are global across saved accounts. Long-press a supported stream card to block or allow a channel, title, tag or emoji. Open the content-filter settings for full lists, optional language controls, imports/exports and recent blocking explanations. Creator allow rules and the optional followed-channel exception take precedence; field and word exceptions stay narrow.
No preselected channels, tags, categories or titles are blocked. Optional language and emoji controls are user choices. Read matching rules, precedence, metadata coverage and import/export limits →
The preset order is EU2 Luminous → EU Luminous → PerfProd North America → PerfProd Europe → PerfProd Europe 2 → PerfProd Asia. The list is seeded once globally, so switching accounts does not restore deleted presets or replace custom edits. Proxy availability and delay depend on independent operators.
The player preserves the first working custom endpoint for the playback session and can move through configured endpoints on supported failures. This is not a background proxy benchmark. Low-delay mode is enabled by default for live ExoPlayer streams; it is a tuning target, not a promise of a fixed end-to-end delay.
Saved accounts share browsing filters and proxy configuration. Account credentials and account data are separate; the notification worker checks which account is active before posting. Rewards and bonus claims use the active account, with confirmation and duplicate-submit protection. Playback, presets, gestures and account behavior →
Pagination, filtering, concurrent filter caching, proxy seeding, update parsing, reward submission gates and player compatibility have automated coverage. Local release builds, Android lint and physical-device smoke checks supplement those tests. See verification and known limits.
When reporting a problem, include the app version, Android version, steps and relevant settings. Remove account details, tokens, cookies and personal filter exports before attaching logs.
HexStream is independent of Twitch and is not affiliated with or endorsed by Twitch, Xtra’s maintainers, or the listed proxy operators. Twitch services and internal APIs can change.