# Breezy Weather: a 50-source Android forecast app built on Kotlin and Jetpack Compose

> Breezy Weather is an LGPL-3.0 Android weather app that aggregates more than 50 forecast and observation sources behind a Material 3 Expressive interface. It is aimed at Android users who want to choose their own data sources, and it installs from GitHub, F-Droid or Obtainium rather than Google Play.

**breezy-weather/breezy-weather** — A feature-rich weather app with good visualizations and more than 50 sources.

- Repository: https://github.com/breezy-weather/breezy-weather
- Stars: 11,491 · Forks: 404
- Language: Kotlin
- License: LGPL-3.0
- Published: 2026-09-21 · Updated: 2026-09-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/breezy-weather-breezy-weather

## The problem Breezy Weather solves: one app, many forecast providers

Most Android weather apps pick a provider for you and hide the choice. If that provider models your valley badly, you have no recourse beyond installing something else. Breezy Weather inverts this. The README describes it as a "feature-rich free and open source Material 3 Expressive weather app" supporting "forecast, observations, nowcasting, air quality, pollen, alerts, from more than 50 weather sources." The source list is a first-class part of the product, with a dedicated comparison document at docs/SOURCES.md.

The audience follows from that design. This is for people who want to compare how two providers describe the same afternoon, or who live somewhere that only one regional service models correctly. It is also for users who object to trackers: the README states there are "no trackers/automatic crash reporters" and that current location is optional and not added by default. The app targets Android API 21 and above, which covers a wide range of older hardware.

The cost of that flexibility is real. A user who does not want to think about providers will find the source picker to be work rather than a feature.

## How the multi-source model is structured in the repository

The repository layout shows a modular Kotlin project rather than a single monolithic app module. Alongside app/ there are separate Gradle modules named domain/, data/, ui-weather-view/, weather-unit/, maps-utils/ and work/, plus buildSrc/ and two configuration directories, config/ and config-fork/. That split is consistent with the README's claim of a separate flavor containing only sources hosted on FOSS networks: the flavor-specific configuration lives outside the main app module, so the same codebase can be built with different source sets.

The build uses Jetpack Compose and Material 3 Expressive, per the badges at the top of the README, and the primary language is Kotlin. The README also states that releases are generated by GitHub actions, "guaranteeing it matches the source code," and publishes a SHA-256 hash of the signing certificate plus per-file SHA-256 checksums on the releases page. For a project distributed outside an app store, those hashes are the practical verification mechanism.

What the README does not document is the internal data flow between the source adapters and the UI layer. There is no architecture diagram in the repository documentation, so anyone wanting to add a source should read the code in data/ and the contribution notes in CONTRIBUTING.md rather than expect a written specification.

## Installing Breezy Weather on Android from F-Droid, GitHub or Obtainium

The README does not put install commands in the body text. It links to INSTALL.md, which it labels "All installation methods," and offers three download badges: GitHub releases, the IzzyOnDroid F-Droid repository, and the F-Droid default repository. Obtainium is listed as a fourth route, with its own anchor in INSTALL.md. There is no Google Play listing in the README.

If you already have the F-Droid client, the package identifier is org.breezyweather, which appears in the IzzyOnDroid and F-Droid badge URLs. Adding the IzzyOnDroid repository is the usual way to get faster releases than the default F-Droid repo, since the badges point at two distinct indexes for the same package.

For a manual install from a release asset, download the APK for your flavor and compare it against the checksum published on the GitHub releases page. The README also gives a single signing certificate hash to check against: 29d435f70aa9aec3c1faff7f7ffa6e15785088d87f06ecfcab9c3cc62dc269d8. If the certificate hash of the installed app does not match, you are not running a build signed by the project's key.

Once installed, the first real task is choosing a source. The README points to docs/SOURCES.md as the weather sources comparison, and the app ships a sources screen (visible in the screenshot list as 06-sources.png). Open that screen, pick a provider that covers your region, and only then add a location, since the README states current location is optional and not added by default.

## Where Breezy Weather is the wrong tool

The most concrete limitation is platform. This is an Android application written in Kotlin with Jetpack Compose, targeting API 21 and above. There is no iOS build, no web interface and no desktop client in the repository layout. If your household is mixed-platform, Breezy Weather covers only the Android half.

Distribution is the second constraint. Because the app is not on Google Play according to the README, updates arrive through F-Droid, IzzyOnDroid, Obtainium or manual APK downloads. That means the user carries the update path. Someone who expects the Play Store to handle refresh and signature continuity will find this friction, not a bug.

The third issue is source selection itself. With more than 50 supported sources, the app does not decide for you which one is authoritative. The README links a comparison document rather than declaring a default, apart from noting that the app "fully works with Open-Meteo (FOSS source)." A user who wants one answer, not a menu, is better served by an app with a single provider.

Finally, accessibility has documented gaps. The README's accessibility section states that navigation with screen readers should mostly work, but "features depending on drag & drop not yet supported," and custom display settings have only "basic support." Anyone relying on those interactions should test before committing.

## Breezy Weather compared with a single-source weather client

The natural alternative is a weather app that ships one provider and no source picker. The difference is architectural, not cosmetic. A single-source app has one adapter, one data schema and one set of failure modes; when that provider is down or wrong for your area, the app has nothing to fall back on. Breezy Weather's data/ module instead has to normalize output from more than 50 services into a common model, which is why the README advertises a shared feature list (daily and hourly forecasts up to 16 days, precipitation in the next hour, air quality, pollen and mold, UV index, visibility, pressure, sun and moon) that no single source necessarily provides in full.

The trade-off runs the other way too. Normalization means the app shows what a source exposes and no more, so the quality of a given field depends on the provider you selected. A single-source app can tune its entire interface around one provider's strengths. Breezy Weather cannot, which is why the sources comparison document exists and why the README describes the choice as the user's.

Within Breezy Weather itself there is a second comparison worth noting: the standard build versus the flavor limited to sources on FOSS networks. The README describes the latter as a "separate flavor with only sources hosted on FOSS networks." Choosing between them changes which providers are available, so it is a decision to make before installing, not after.

## Licence, maintenance and what an upgrade actually costs

Breezy Weather is licensed under LGPL-3.0, per the badge and the LICENSE file at the repository root. There is also a LICENSE_ADDITIONAL file, which suggests terms beyond the base licence; read it before redistributing a modified build. LGPL-3.0 is a copyleft licence, so if you fork the app and ship it, the obligations differ from those of a permissive licence. This is a description of the licence identifier, not legal advice; consult the licence text and, if you plan to distribute, a lawyer.

On maintenance, the repository is not archived and the last push was on 2026-09-19. The most recent release in the README is v6.2.2 from 2026-08-23, following v6.2.1 on 2026-06-07 and v6.2.0 on 2026-05-01. That cadence suggests a project that ships point releases between larger ones, though the README does not state a release policy or a support window for older versions.

The upgrade cost for a user is low but not zero: because distribution is via F-Droid, IzzyOnDroid, Obtainium or manual APK, an upgrade means either letting your client handle it or re-downloading and re-verifying the checksum. For a contributor, the cost is higher. The project asks that pull requests be opened against issues labeled "Open to contributions," and that other changes start as an issue first. Adding a weather source means working inside the module split described above without a written architecture guide.

## Conclusion

Breezy Weather suits Android users who care which weather provider answers their query and who are willing to install outside Google Play. It is a poor fit for anyone who wants a single curated forecast with no source selection, and for devices below API 21. Before adopting it, check three things: which sources your region actually covers in docs/SOURCES.md, whether your chosen build is the standard or freenet flavor, and that the signing certificate hash matches 29d435f70aa9aec3c1faff7f7ffa6e15785088d87f06ecfcab9c3cc62dc269d8.

## FAQ

### What is Breezy Weather?

It is a free and open source Android weather app, licensed LGPL-3.0 and written in Kotlin with Jetpack Compose and Material 3 Expressive. The README describes it as supporting forecast, observations, nowcasting, air quality, pollen and alerts from more than 50 weather sources.

### How do I install Breezy Weather on Android?

The README links to INSTALL.md for all installation methods and offers download badges for GitHub releases, the IzzyOnDroid F-Droid repository and the F-Droid default repository, plus Obtainium. The package identifier is org.breezyweather, and the README publishes a signing certificate hash to verify the build.

### What is the difference between the Breezy Weather freenet and standard builds?

The README describes a separate flavor with only sources hosted on FOSS networks. The repository has two configuration directories, config/ and config-fork/, which is consistent with building the same codebase against different source sets. Which providers are available differs between the two.

## Sources

- [breezy-weather/breezy-weather on GitHub](https://github.com/breezy-weather/breezy-weather)
- [Issues](https://github.com/breezy-weather/breezy-weather/issues)
- [License: LGPL-3.0](https://github.com/breezy-weather/breezy-weather/blob/main/LICENSE)
- [README](https://github.com/breezy-weather/breezy-weather/blob/main/README.md)
- [Releases](https://github.com/breezy-weather/breezy-weather/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/breezy-weather-breezy-weather
