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
andArray
for improved usability (#4963, #4980, #4918)RecordSet
now supports dictionary-like access, allowing interactions similar to built-in Python dictionaries. For example, instead ofrecordset.parameters_records["model"]
, users can simply userecordset["model"]
. This enhancement maintains backward compatibility with existingrecordset.*_records
properties.Additionally, the
Array
class now acceptsnumpy.ndarray
instances directly in its constructor, enabling instantiation with a NumPy array viaArray(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
andClientApp
now support@app.lifespan()
, enabling custom enter/exit handlers for resource setup and cleanup. Throughout the entire FL training, these handlers inClientApp
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
, usingClientApp
andServerApp
, integratingflwr-datasets
withDistributionPartitioner
, enabling result saving, and updatingREADME.md
. This baseline now supportsflwr 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 aMessage
-based system, aligning with the user-facingMessage
class. This includes adding validator functions forMessage
, introducingLinkState
methods that operate onMessage
, updatingLinkState
to useMessage
-only methods, and removing theTask
-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 theClientApp
. -
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)
-
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
, andflower-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.