A Twitch client for iOS and Android with BTTV, FFZ, and 7TV support. Built with Flutter.
- Browse followed streams, top streams, and top categories
- Search for channels and categories
- Watch live streams with chat
- Support for BTTV, FFZ, and 7TV emotes/badges
- Emote menu and autocomplete
- Local chat user message history
- Chatters list with filter
- Theater and full-screen mode
- Picture-in-picture mode (iOS only)
- Sleep timer
- Block and report users
- Light, dark, and black (OLED) themes
- Customizable settings
A major problem with the official Twitch app for many users is that emotes from services such as BetterTTV (BTTV), FrankerFaceZ (FFZ), and 7TV are not officially supported. Twitch is unaffiliated with these services, hence why they haven't been integrated officially.
As a result, the millions of users of these services have an unideal viewing experience on the official Twitch app. In the stream chat, only text is positioned where emotes should be (imagine only being able to see :emoji_code: rather than the emojis themselves).
Frosty aims to bring these emotes and other general quality of life features to both iOS and Android.
-
Go to the Twitch dev console and register a new application to retrieve a client ID and client secret and add a OAuth redirect URL.
-
Clone the repo to a directory.
-
Navigate to
lib/constants/constants.dart
and replace theclientId
andsecret
constants with your client ID and client secret (or better yet, if using VSCode use--dart-define
to define them as environment variables). -
Navigate to
android/app/src/main/AndroidManifest.xml
and under theflutter_web_auth
intent filter replace the value ofandroid:scheme
to the scheme in your OAuth redirect URL. -
Run
flutter pub get
to fetch all the dependencies. -
Choose an emulator or device and run the app!
On Android, you can change the stream quality by turning off the custom stream overlay in the settings and tapping the gear icon on the bottom right.
On iOS, sadly quality options aren't available through the native player and rely on an "auto" setting. There is no official API for getting the live stream URLs so specific quality options are not possible at this time.
Due to the Flutter framework, there may be some stutter and jank on the first installation and launch. After using and moving around the app for a bit the jank will be mitigated through shader warmup/caching and should be minimal on subsequent launches. Watching a stream with a relatively fast chat for a couple of minutes usually resolves it.
Even if you've logged in to the app, you'll still have to log in to the WebView so that you can be identified when the stream plays. You can do so by going to the settings and then under the "Account" section tap the "Log in to WebView" button.
On Android, the delay should be minimal. Try refreshing the player if you have a delay.
On iOS, there seems to be delays up to 15 seconds due to the native player so unfortunately it's out of my control. The best you can do for now is refreshing or pausing/playing the stream until the delay is minimized.
UPDATE: Starting with version 1.4.0, there is a new message delay option that lets you set the delay (in seconds) before each message is rendered.
This seems to be caused by the Flutter framework itself (see here and here).
This is caused by the Flutter framework and is being worked on (see here).
UPDATE: With Flutter 3 and version 1.3.0 of the app, ProMotion should be working.
I'm limited to what is available in the Twitch API, so certain features from the Twitch web or mobile app (e.g., voting on predictions and category viewer count) are sadly not available at the moment.
Other features related to ad-blocking or utilizing private APIs will likely not be implemented officially because they would violate Twitch's terms of service. My highest priority currently is staying on the app stores and focusing on making features for those builds.
I'll try to add as many features as possible but occasionally I may take a break or be limited in time due to studies and personal reasons.
You can open a new issue here with the appropriate labels (e.g., "bug" or "feature request") and I'll take a look at it.
Frosty is licensed under AGPL-3.0-or-later.