// the find
flwrlabs/flower
Flower: A Friendly Federated AI Framework
Flower is a federated learning framework that lets you train models across distributed devices without centralizing data. It originated from Oxford research and has grown into the most mature open-source option for federated ML, supporting every major framework from PyTorch to XGBoost to raw NumPy. The target audience is ML researchers and engineers who need to train on data that legally or practically can't leave the device.
The framework-agnostic design is genuine — the same server/strategy code works whether clients are running PyTorch, TFLite on Android, CoreML on iOS, or scikit-learn, which is rare. The baselines collection is unusually honest: each one reproduces a specific paper's experiments with its own pyproject.toml, so you can actually verify the claims rather than trust a benchmark table. gRPC transport with protobuf serialization means the communication layer handles heterogeneous clients at scale without custom serialization code. The simulation mode lets you run hundreds of virtual clients on a single machine for research, then deploy the same code to real edge devices with minimal changes.
Production deployment guidance is thin — the docs cover simulation and local testing well, but getting a reliable server that handles client dropouts, stragglers, and partial rounds in a real deployment requires reading research papers, not the docs. Privacy guarantees (differential privacy, secure aggregation) are present but opt-in and not well-integrated; you can bolt on Opacus but the framework doesn't push you toward it or make it obvious what you're giving up by skipping it. The versioning situation is messy: the codebase has gone through multiple API generations (the old NumPyClient vs the newer ClientApp model), and you'll hit deprecated patterns in tutorials and examples that don't match current code. Async federated learning — where clients train and report back asynchronously rather than waiting for a synchronization round — is not natively supported, which rules Flower out for scenarios where client availability is highly variable.