🌦️ Rain

A beautiful, feature-rich weather application built with Flutter

English • Русский

Stars Forks Downloads Play Store Installs GitHub release License

Accurate forecasts, air quality, interactive maps, and a polished Material You UI — in 38 languages.

--- ## ✨ Features - **Weather** — current conditions, hourly and 12-day forecasts, detailed metrics, offline cache, per-location timezones - **Air quality** — European or US AQI, pollutant breakdown, cached with weather data ([Open-Meteo AQ](https://open-meteo.com/en/docs/air-quality-api)) - **Map** — OpenStreetMap with weather markers for saved cities, GPS support - **Cities** — unlimited watchlist, search, drag-to-reorder, pull-to-refresh - **Notifications** — scheduled forecasts; optional persistent status tile on Android - **Widgets (Android)** — three Material You sizes, customizable colors, background refresh - **Design** — Material You, AMOLED theme, light/dark/system, configurable font and units - **Localization** — 38 languages, metric/imperial, 12h/24h time --- ## 📸 Screenshots --- ## 📥 Download [![Play Store](https://img.shields.io/badge/Google_Play-414141?style=for-the-badge&logo=google-play&logoColor=white)](https://play.google.com/store/apps/details?id=com.yoshi.rain) [![IzzyOnDroid](https://img.shields.io/endpoint?url=https://apt.izzysoft.de/fdroid/api/v1/shield/com.yoshi.rain&style=for-the-badge&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAA4VBMVEXn9cuv7wDB9iGp4x2k5gKh3B6k3SyAxAGd4ASo6gCv5SCW2gHA7UTB6V+EwiOw3lK36zC+422d1yO78SWs3kfR7JhQiw2751G7+QCz8gCKzgGq3zay5DSm2jrF9jZLfwmNyiC77zXO7oaYzjW37CLj9Lze8LLA43uz3mK19ACR1QBcnRO78R6ExBek1kbE8FLI6nSPu0jH5YJxtQ2b1RiAmz53uwF7pitZkAeX1w7I72TY8KTO8HXD7La+0pKizWBzhExqjytpmR+UzSTA5Ctzy3uv1nOv3gyF3UuCsDRHcEx7M2pHAAAAS3RSTlP//////////////////////////////////////////////////////////////////////////////////////////////////wDLGfCsAAAB9ElEQVRIx72W53biMBCFhY0L7g0bTAktQEwgdMhuerbO+z/Q2sBiY0uKcvacnX8a3Y/R8YyuQPDJQP8KoExcro6ZC6C4TQXQx/oLABV3cfozgBgL/AWY9ScAsR7oBCD2AmSAoD8A+J3cWYECdBEaVm2z+U1hAuDx4fr6a08PGuuf6cmys5QvMEz0c12zhPWaAYBq9emp9/DlTrMUXsBOaw5Yjl5elrG+u9tYAxbAtjeL+Z3Wdl83Ovfr3BQyYAZBoLXbHDfQ2hykTSEAAIu+2LRcl4tD6UCm67jPCvD4/ON5YRhGpzOdrlar74fT5IcvOxDD0Xg0nvU7hjGVttv+0vYyAgyQdNgeey3Hce5DSZqN9GZmvzh8UO0F3thsiY4gqGoUtuL2AeaKpom5brVMryEKvCyXZVX0urd0wOxy4qwh8jxfLlcqZafpYoH0MzQGnNI/6CulOASFc/NWlZ17ADEG3oWjvn5TEvjbfJuyrnFaSfdyrK/f1Gp1tTAHF750aqgUJUCsr5UizFUv3EeQwmOFekmVmABDCiNVlqNwOwEqcM75vp+s/asrKpAmdxM/Gbnfuz0j8OYnPw2v9AqZ5Nt+f7hikwkw2T3Fc2l2jzdcst3DpwGCnvQ+EPUEu8c/STSAqMfZPeX5IQK0J+a//zn5MP4Am7ISN/4mSV8AAAAASUVORK5CYII=)](https://apt.izzysoft.de/packages/com.yoshi.rain) APK and other builds: [Releases](https://github.com/darkmoonight/Rain/releases/latest) --- ## 🛠️ Build **Requirements:** Flutter 3.44+, Dart 3.12+ (see `pubspec.yaml`) ```bash git clone https://github.com/darkmoonight/Rain.git && cd Rain flutter pub get dart run slang dart run build_runner build --delete-conflicting-outputs flutter run # Android default flavor: gms flutter run --flavor floss # FOSS build without Play Services ``` Release APK scripts (`gms` / `floss`), reproducible FOSS builds, and flavor details — see [`scripts/`](scripts/) and [CONTRIBUTING.md](./CONTRIBUTING.md). **Stack:** Flutter, Riverpod, Go Router, Isar, Open-Meteo, flutter_map, home_widget, Workmanager. **Tests:** 496 tests — run `flutter test` and `flutter analyze`. Details in [CONTRIBUTING.md](./CONTRIBUTING.md). --- ## 🌐 Data Sources Free APIs, no key required: - [Open-Meteo Weather](https://open-meteo.com/en/docs) · [Air Quality](https://open-meteo.com/en/docs/air-quality-api) · [Geocoding](https://open-meteo.com/en/docs/geocoding-api) - [OpenStreetMap](https://www.openstreetmap.org/) map tiles --- ## 🤝 Contributing See [CONTRIBUTING.md](./CONTRIBUTING.md). Bug reports and feature requests: use the [issue templates](.github/ISSUE_TEMPLATE/). --- ## 💰 Support [![ЮMoney](https://img.shields.io/badge/ЮMoney-violet?style=for-the-badge)](https://yoomoney.ru/to/4100117672775961) --- ## 📃 License [MIT License](./LICENSE) --- ## 👨‍💻 Contributors ---

Made with ❤️ using Flutter