Run the app (Android uses flavor gms by default; see pubspec default-flavor)
June 2, 2026 · View on GitHub
🌦️ Rain
A beautiful, feature-rich weather application built with Flutter
Tired of unpredictable weather? Rain keeps you prepared with accurate forecasts, interactive maps, and beautiful design. 🌦️📱🗺️
🌍 Available in 37 languages • 🎨 Material You & AMOLED • 🗺️ Interactive weather map • 📱 Home widget
✨ Features
🌡️ Comprehensive Weather Data
- Real-time conditions with feels-like temperature • Hourly forecasts (12+ days) • 7+ day daily outlooks
- Detailed metrics: UV index, humidity, wind speed/direction, precipitation, visibility, pressure, dew point
- Day/night-aware weather icons • Sunrise/sunset times • Expandable hourly variable details
🗺️ Interactive Weather Map
- OpenStreetMap-based interactive map • Weather markers for all saved cities
- Tap markers for quick weather preview • Long-press to add new locations
- Visual city selection with GPS support • Map tile caching (30 days) • Dark mode styling
🏙️ Multi-City Management
- Save unlimited cities to your watchlist • Drag-to-reorder • Pull-to-refresh all
- City search with autocomplete • Manual coordinate entry • GPS auto-detection
- Edit or remove saved cities • View timezone for each location
🔔 Smart Notifications
- Scheduled weather forecasts (1-5 hour intervals) • Custom time window (start/end)
- Weather-condition-specific icons • Silent notifications (no sound/vibration)
- Automatic cancellation when disabled • Background scheduling
📱 Home Screen Widget (Android)
- Resizable widget with layouts that adapt to size:
- 1 row — weather icon, temperature, and date/time in one line
- 2+ rows (wide) — icon on the left, temperature with date/time underneath
- Square — icon, temperature, and date/time stacked vertically
- Very narrow — icon and temperature only
- Respects app 12h/24h time format and rounded temperature setting
- Background refresh (Workmanager, ~15 min minimum) • Custom background and text colors (HSV picker)
- Updates when the app loads cached weather and after fresh fetches
🎨 Beautiful Design
- Material You dynamic theming (wallpaper colors) • Pure AMOLED black theme
- Light/Dark/System modes • Large element mode toggle • Edge-to-edge display
- Google Fonts (Ubuntu) • Smooth animations • Shimmer loading states
🌍 Extensive Localization
- 37 languages including: English, Русский, 中文, العربية, हिन्दी, Español, Français, Deutsch, Português, 한국어, 日本語, Türkçe, and many more
- Regional preferences • 12h/24h time format support
🧮 Customization Options
- Temperature: Celsius/Fahrenheit • Measurement system: Metric/Imperial
- Wind speed: kph/m/s • Pressure: hPa/mmHg • Rounded temperatures (app + widget)
- 12h/24h time format (app, pickers, notifications, and widget)
- Widget color customization with HSV color picker
📸 Screenshots

📥 Download
Android
Other Platforms
Get the latest APK or builds for other platforms from the Releases Section.
🛠️ Building from Source
Prerequisites
- Flutter SDK 3.44 or higher (see
pubspec.yaml) - Dart SDK 3.12 or higher
- Android Studio / Xcode for platform-specific builds
Steps
# Clone the repository
git clone https://github.com/darkmoonight/Rain.git
cd Rain
# Install dependencies
flutter pub get
# Generate code (Isar, Freezed, JSON, translations)
dart run slang
dart run build_runner build
# Run the app (Android uses flavor gms by default; see pubspec `default-flavor`)
flutter run
# floss on device/emulator: flutter run --flavor floss
# Build for production
flutter build appbundle --release # Android App Bundle (Play Store)
flutter build ios --release # iOS
Android APK
Gradle flavors gms (default, Play Store deps) and floss (no Play Services, IzzyOnDroid). Output names match GitHub Releases.
| Variant | Files |
|---|---|
| gms | rain-release-gms.apk, rain-arm64-v8a-release-gms.apk, rain-armeabi-v7a-release-gms.apk, rain-x86_64-release-gms.apk |
| floss | rain-release-floss.apk, rain-arm64-v8a-release-floss.apk, rain-armeabi-v7a-release-floss.apk, rain-x86_64-release-floss.apk |
All APKs land in build/app/outputs/flutter-apk/ after ./scripts/rename_apk_outputs.sh.
Single APK (one ABI)
chmod +x scripts/*.sh
./scripts/build_apk.sh gms --target-platform android-arm64
./scripts/build_apk.sh floss --target-platform android-arm64
Full release set (8 APKs, both variants)
Per variant: first split APKs (--split-per-abi), then universal (no extra flags). Four builds total:
./scripts/build_release_apks.sh
Runs four builds and then ./scripts/restore_pub_default.sh (FOSS overrides must not stay in pubspec.lock for normal dev).
Same steps manually:
./scripts/build_apk.sh gms --split-per-abi
./scripts/build_apk.sh gms
./scripts/build_apk.sh floss --split-per-abi
./scripts/build_apk.sh floss
./scripts/restore_pub_default.sh
Manual FOSS build (e.g. reproducible / IzzyOnDroid)
pubspec_overrides.yaml must exist before flutter pub get. After pub get, patch the jni package so libdartjni.so is reproducible (same step as IzzyOnDroid RB):
cp tool/pubspec_overrides.floss.yaml pubspec_overrides.yaml
flutter pub get
./scripts/patch_jni_reproducible_build.sh
dart run slang && dart run build_runner build
flutter build apk --release --flavor floss --target-platform android-arm64
./scripts/rename_apk_outputs.sh floss
Equivalent one-liner for the jni patch (idempotent; set PUB_CACHE in CI):
sed -i -E 's|target_link_options\(jni PRIVATE "-Wl,[^"]*max-page-size=16384"\)|target_link_options(jni PRIVATE "-Wl,--build-id=none,-z,max-page-size=16384")|' \
"${PUB_CACHE:-$HOME/.pub-cache}"/hosted/*/jni-*/src/CMakeLists.txt
pubspec_overrides.yaml is gitignored; pubspec.lock in the repo targets gms.
Code Generation
The project uses code generation for:
- Isar Community — local database schemas
- Freezed — immutable API models
- JSON Serializable — JSON serialization
- Slang — translations from
assets/i18n/*.i18n.json
After changing models or locale files:
dart run slang
dart run build_runner build
Tech Stack (highlights)
- Flutter + Riverpod 3 • Go Router • Isar Community
- home_widget + Workmanager (Android widget) • flutter_local_notifications
- Open-Meteo API • flutter_map + OSM tiles
🌐 Data Sources
Rain uses free, open weather APIs with no API key required:
- Weather Data: Open-Meteo Weather API - Free, open-source weather API
- Geocoding: Open-Meteo Geocoding API - City search and coordinates
- Map Tiles: OpenStreetMap - Collaborative mapping project
🤝 Contributing
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
💰 Support the Project
If Rain has become an indispensable part of your daily routine, consider supporting development:
📃 License
This project is licensed under the MIT License.
👨💻 Contributors
Thanks to all our amazing contributors!
Made with ❤️ using Flutter