An Android weather app modelled closely on Apple Weather for iPhone: the same layout, the same cards, the same detail sheets and the same animated skies, built with Kotlin and Jetpack Compose. It uses free, open weather data, so it needs no API keys or accounts.
⬇ Download Stratus.apk · Release notes · ▶ Watch the showcase (0:45)
Screenshots use sample data for New York City.
Get the latest APK from Releases and open it on your phone (allow installing from your browser or file manager when asked). Requires Android 10 or newer.
- Large current temperature, condition, and today's high and low, with a header that collapses as you scroll, like iOS.
- Hourly forecast with a one-line summary ("Cloudy conditions expected around 3PM"), plus sunrise and sunset markers.
- 10-day forecast with temperature range bars and a dot for the current temperature.
- Cards blur the sky behind them, like Apple's frosted glass (Android 12+). Card headers stick under the collapsed title as you scroll.
- Swipe between saved locations; the bottom bar has the map, page dots and the location list.
Air quality, UV index, sunrise/sunset, wind (with compass), precipitation, feels like, humidity, visibility, pressure, moon phase, averages, and a precipitation map. Each card has a short plain-English summary, as on iOS.
Tap a card to open an iOS-style sheet with a 24-hour chart:
- Pick a day from the row of dates, or swipe left/right anywhere outside the chart to move between days.
- Scrub the chart by dragging sideways (or pressing and holding) to read any hour. The header shows the value, the time and a second reading such as "Feels Like 71°", gusts or chance of rain.
- Switch between Conditions, UV Index, Wind, Precipitation, Feels Like, Humidity, Visibility, Pressure and Air Quality from the menu.
- The Conditions chart shows both the actual and the Feels Like temperature.
- Daily summary, comparison with yesterday, and an explanation of each measurement.
- Pull the sheet down to close it.
The background matches the current weather and time of day: a glowing sun with shimmering rays and lens flare, drifting clouds in layers, rain and snow at three depths, fog, twinkling stars with the odd shooting star, warm sunrise and sunset, and thunderstorms with lightning.
With the forecast on top:
Full-screen map with a timeline slider:
- Precipitation: radar for the past two hours, then a 12-hour forecast.
- Temperature, Wind (with direction arrows) and Air Quality layers, each with a legend.
- Markers for your saved locations.
Search for any city, preview it before adding, reorder or swipe to delete, and use your current location. Settings for Celsius/Fahrenheit and units (wind, precipitation, pressure, distance) are in the ⋯ menu, along with About Stratus (version, source code, data sources and open-source licenses).
Official alerts for the United States (NWS), Canada (Environment Canada) and 38 European countries (MeteoAlarm), shown at the top of the page with full details.
Optional, from ⋯ → Notifications:
- Severe weather alerts
- Rain starting within the next hour
- A morning forecast at the time you choose
Four widgets, styled after Apple's: Small, Medium (hourly), Large (hourly and daily), and At a Glance (date and a weather line). Add them from your launcher's widget picker or from ⋯ → Add Widget in the app.
Google doesn't let other apps put weather into the Pixel's built-in At a Glance. The workaround is Smartspacer, a free app that replaces At a Glance and accepts plugins. Stratus includes a Smartspacer plugin.
- Install Smartspacer from the Play Store or its GitHub releases.
- Set it up by following its setup screens. To replace the Pixel's own At a Glance, turn on Smartspacer's native mode, which uses Shizuku. Its setup guide has the details. Without native mode, you can use Smartspacer's own At a Glance widget on your home screen instead.
- Open Stratus once and allow location, so it has weather to show.
- In Smartspacer, open Complications → + → Stratus Weather. This adds the temperature and condition icon next to the date (for example "☁ 58°").
- In Smartspacer, open Targets → + → Stratus Alerts. This adds a card for severe weather alerts or rain starting soon ("Rain starting in 12 min").
- Optional: to avoid seeing the weather twice, turn off Google's own weather in At a Glance (long-press the home screen → Home settings → At a Glance).
Stratus refreshes Smartspacer whenever the weather updates, about every 15 minutes.
Without Smartspacer: add the Stratus · At a Glance widget to the top of your home screen. It looks like the Pixel's At a Glance, with the date and the current weather.
| Data | Source |
|---|---|
| Forecast, hourly and 10-day | Open-Meteo; in the US, temperature, feels-like and chance of precipitation for the next 7 days come from the National Weather Service |
| Air quality | Open-Meteo (CAMS) |
| Averages | Open-Meteo historical weather |
| Radar | RainViewer |
| Map tiles | Esri, HERE, Garmin, OpenStreetMap contributors |
| Alerts | NWS (US), Environment Canada, MeteoAlarm (Europe) |
| City search | Open-Meteo geocoding |
- Font: Apple's SF Pro can't be distributed, so Stratus uses Inter (SIL Open Font License, see
INTER-OFL.txt), which looks very similar. - Icons and animations: SF Symbols and Apple's animations can't be used outside Apple devices. Stratus draws its own in the same style.
- Radar goes back two hours (RainViewer's free limit). Future hours come from forecast model data.
- Alerts are available only where a free official feed exists (US, Canada, most of Europe).
Stratus is free, has no ads and doesn't track you. It's built and maintained in my spare time. If you enjoy it and want to help keep it going, you can buy me a coffee on Ko-fi. Every tip helps, and is never expected.
Requires JDK 17+ and the Android SDK (compile SDK 37).
./gradlew assembleReleaseThe APK is written to app/build/outputs/apk/release/. Release builds are signed with the key described in a keystore.properties file at the project root (storeFile, storePassword, keyAlias, keyPassword). That file is git-ignored; without it, builds fall back to the debug key. Screenshot tests (Robolectric) render the images in this README into app/build/screens/:
./gradlew testDebugUnitTestBuilt with Kotlin, Jetpack Compose, Glance (widgets), WorkManager, Haze (blur), OkHttp, kotlinx.serialization and the Smartspacer plugin SDK.
Bug reports, ideas and pull requests are welcome. See CONTRIBUTING.md for how to build, test and send changes.
Copyright (C) 2026 Yigder
Stratus is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. It is distributed in the hope that it will be useful, but without any warranty; see the license for details.
The license covers Stratus's own code. The libraries and the Inter font it's built with keep their own licenses (listed in the app under ⋯ → About Stratus). Weather data belongs to the services listed above and is used under their terms.
Stratus is an independent project, not affiliated with or endorsed by Apple or Google.




















