Announcing Flower 1.16.0

Just 15 days away from the Flower AI Summit 2025, the Flower team is excited to announce the release of Flower 1.16 stable, packed with new updates!
Flower is a friendly framework for collaborative AI and data science.
It makes novel approaches such as federated learning, federated evaluation,
federated analytics, and fleet learning accessible to a wide audience of researchers and engineers.

Thanks to our contributors

We would like to give our special thanks to all the contributors who made the new version of Flower possible (in git shortlog order):

Alan Silva, Andrej Jovanović, Charles Beauville, Chong Shen Ng, Daniel J. Beutel, Dimitris Stripelis, Heng Pan, Javier, Kevin Ta, Li Shaoyu, Mohammad Naseri, Taner Topal, Yan Gao

What’s new?

  • Enhance RecordSet and Array for improved usability (#4963, #4980, #4918)

    RecordSet now supports dictionary-like access, allowing interactions similar to built-in Python dictionaries. For example, instead of recordset.parameters_records["model"], users can simply use recordset["model"]. This enhancement maintains backward compatibility with existing recordset.*_records properties.

    Additionally, the Array class now accepts numpy.ndarray instances directly in its constructor, enabling instantiation with a NumPy array via Array(your_numpy_ndarray).

  • Support function-specific Flower Mods for ClientApp (#4954, #4962)

    Flower Mods can now be applied to individual functions within the ClientApp rather than affecting the entire application. This allows for more granular control. The documentation has been updated to reflect these changes — please refer to How to Use Built-in Mods for details.

  • Introduce @app.lifespan() for lifecycle management (#4929, #4986)

    ServerApp and ClientApp now support @app.lifespan(), enabling custom enter/exit handlers for resource setup and cleanup. Throughout the entire FL training, these handlers in ClientApp may run multiple times as instances are dynamically managed.

  • Add FedRAG example (#4955, #5036, #5042)

    Adds a FedRAG example, integrating Federated Learning with Retrieval Augmented Generation (RAG). This approach allows Large Language Models (LLMs) to query distributed data silos without centrally aggregating the corpora, enhancing performance while preserving data privacy.

  • Upgrade FedProx baseline to a Flower App (#4937)

    Updates FedProx to the a Flower App by removing Hydra, migrating configs to pyproject.toml, using ClientApp and ServerApp, integrating flwr-datasets with DistributionPartitioner, enabling result saving, and updating README.md. This baseline now supports flwr run.

  • Migrate framework to Message-based system (#4959, #4993, #4979, #4999)

    The Flower framework has been fully migrated from a TaskIns/TaskRes-based system to a Message-based system, aligning with the user-facing Message class. This includes adding validator functions for Message, introducing LinkState methods that operate on Message, updating LinkState to use Message-only methods, and removing the Task-related code entirely.

  • Introduce event logging extension points (#4948, #5013)

    Begins implementing an event logging system for SuperLink, allowing RPC calls to be logged when enabled. These changes introduce initial extension points.

  • Increase default TTL and message size (#5011, #5028)

    The default TTL for messages is now 12 hours (up from 1 hour), and the gRPC message size limit has increased from 512MB to 2GB. TTL sets a hard limit on the time between the ServerApp sending an instruction and receiving a reply from the ClientApp.

  • Improve documentation (#4945, #4965, #4994, #4964, #4991, #5014, #4970, #4990, #4978, #4944, #5022, #5007, #4988, #5053)

  • Update CI/CD (#4943, #4942, #4953, #4985, #4984, #5025, #4987, #4912, #5049)

  • Bugfixes (#4969, #4974, #5017, #4995, #4971, #5037, #5038)

  • General Improvements (#4947, #4972, #4992, #5020, #5018, #4989, #4957, #5000, #5012, #5001)

    As always, many parts of the Flower framework and quality infrastructure were improved and updated.

Incompatible changes

  • Remove deprecated CLI commands (#4855)

    Removes deprecated CLI commands: flower-server-app, flower-superexec, and flower-client-app. These commands are no longer available in the framework.

  • Bump minimum Python and cryptography versions (#4946)

    Bumps the minimum Python version from 3.9 to 3.9.2 and updates the cryptography package from 43.0.1 to 44.0.1. This change ensures compatibility with the latest security updates and features.

3 Likes