The Frosty rounded logo.

Frosty

A mobile Twitch client for iOS and Android with 7TV, BTTV, and FFZ support. Built with Flutter.

Badge showing the CI status. Badge showing the number of open issues. Badge showing the date of the last commit. Badge showing the current license of the repo. Badge showing the version of the latest release.

Apple App Store badge. Google Play Store badge.

Buy Me A Coffee badge.

iOS screenshot of the Followed Streams section. iOS screenshot of xQc's channel with the stream and chat. iOS screenshot of the search section with results from the query "pokelaw".

## Motivation The official Twitch mobile app doesn't support emotes from [7TV](https://chrome.google.com/webstore/detail/7tv/ammjkodgmmoknidbanneddgankgfejfh), [BetterTTV (BTTV)](https://chrome.google.com/webstore/detail/betterttv/ajopnjidmegmdimjlfnijceegpefgped), and [FrankerFaceZ (FFZ)](https://chrome.google.com/webstore/detail/frankerfacez/fadndhdgpmmaapbmfcknlfgcflmmmieb) — third-party services and extensions for Twitch used by millions of viewers and many top channels. This results in a poor mobile chat experience since only emote codes render rather than their image or GIF counterpart. ## Features - Support for 7TV, BetterTTV, and FrankerFaceZ emotes and badges - Browse followed streams, top streams, and top categories - Autocomplete for emotes and user mentions - Light, dark, and black (OLED) themes - Search for channels and categories - See and filter chatters in a channel - Local chat user message history - Theater and fullscreen mode - Watch live streams with chat - Picture-in-picture mode - Block and report users - Emote menu - Sleep timer - And more... For a more detailed overview, visit [frostyapp.io](https://www.frostyapp.io/). ## Development setup 1. Go to the [Twitch dev console](https://dev.twitch.tv/login) and register a new application to retrieve a **Client ID** and **Client Secret**. 2. Clone the repo to a directory (e.g., `git clone https://github.com/tommyxchow/frosty.git`). 3. Navigate to `lib/constants.dart` and replace the `clientId` and `secret` constants with your **client ID** and **client secret** from step 1 (if using VSCode, use `--dart-define` to [define them as environment variables](https://dartcode.org/docs/using-dart-define-in-flutter/)). 4. Run `flutter pub get` to fetch all the dependencies. 5. Choose an emulator or device and run the app! > **Note** > > Frosty uses [MobX](https://mobx.netlify.app/) for state management. Please refer to the documentation about code generation, otherwise your changes within MobX stores may not be applied. > **Warning** > > I built Frosty while learning Flutter, so some of the code may not be optimal. I'm working on refactoring, documenting, and cleaning up various parts as much as I can. ## Feature requests and issues If you have a feature request, found a bug, or have a general issue, you can submit it [here](https://github.com/tommyxchow/frosty/issues/new/choose) on the issues tab. Doing so makes it easier for me to keep track of them and makes it publicly visible for others to review. > **Note** > > I work on Frosty in my free time and take occasional breaks, so I may not respond immediately. ## Donate Downloading Frosty and leaving a review or starring this repository is more than enough to show support. If you're feeling generous and would like to support me with a donation, you can do so through the following: - [Buy Me a Coffee](https://www.buymeacoffee.com/tommychow) - [GitHub Sponsors](https://github.com/sponsors/tommyxchow) - [PayPal](https://www.paypal.com/donate/?business=NF33JDG6KBU6W) - BTC: bc1qzpth6gc3vum764lat6a8ul7cmekwles58070a6 - ETH: 0x317b5930fc2898884f711016dCae79d24910888E If you decide to support me monetarily, it is extremely appreciated and further motivates me to continue improving and maintaining Frosty ❤️. ## License Frosty is licensed under [AGPL-3.0-or-later](LICENSE).