Skip to content

Releases: flwrlabs/flower

Flower 1.20.0

29 Jul 12:19
61e79bc

Choose a tag to compare

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):

Charles Beauville, Chong Shen Ng, Daniel J. Beutel, Daniel Nata Nugraha, Dimitris Stripelis, Heng Pan, Javier, Kumbham Ajay Goud, Robert Steiner, William Lindskog, Yan Gao

What's new?

  • Send/receive arbitrarily large models (#5552, #5550, #5600, #5611, #5614, #5551)

    Flower 1.20 can send and receive arbitrarily large models like LLMs, way beyond the 2GB limit imposed by gRPC. It does so by chunking messages sent and received. The best part? This happens automatically without the user having to do anything.

  • Implement object-based messaging between SuperNode and ClientApp (#5540, #5577, #5581, #5582, #5583, #5584, #5585, #5586, #5587, #5589, #5590, #5592, #5595, #5597, #5598, #5599, #5602, #5604, #5605, #5606, #5607, #5609, #5613, #5616, #5624, #5645)

    Redesigns the messaging system to enable object-based communication between the SuperNode and ClientApp, replacing the previous message-coupled design. Introduces new RPCs and enhances the ClientAppIo and Fleet APIs to faciliate better object storage in SuperNode and decouple ObjectStore from Message, improving maintainability and extensibility. Several refactorings improve modularity, naming consistency, and model weight streaming.

  • Refactor SuperNode to use NodeState exclusively (#5535, #5536, #5537, #5541, #5542, #5610, #5628)

    Refactors SuperNode to rely solely on NodeState for managing all information, decoupling internal components for improved maintainability and clearer state handling. RPCs of the ClientAppIo API have been refactored accordingly, laying the groundwork for future concurrent ClientApps support.

  • Enforce maximum size limit for FAB files (#5493)

    Limits the size of FAB files to a maximum of 10MB to prevent oversized artifacts. Developers can reduce FAB size by excluding unnecessary files via the .gitignore file in the Flower app directory.

  • Add CatBoost federated learning quickstart example (#5564)

    This example shows how to use CatBoost with Flower for federated binary classification on the Adult Census Income dataset. It applies a tree-based bagging aggregation method. View the example for more details.

  • Fix Windows path issue in FAB builds (#5608)

    Updates the way FAB files represent relative paths to their internal files to ensure consistency across different operating systems. This fixes an issue where a FAB built on Windows would fail integrity checks when run on UNIX-based systems (e.g., Ubuntu).

  • Add explainer for pyproject.toml configuration (#5636)

    Adds a guide explaining how to configure a Flower app using its pyproject.toml file. The documentation is available here.

  • Improve flwr new templates with TOML comments and README links (#5635)

    Adds comments to the generated pyproject.toml and a new section in the README.md, both linking to the TOML explainer.

  • Warn when running Ray backend on Windows and update simulation guide (#5579)

    Logs a warning when using the Ray backend for simulation on Windows. Updates the simulation guide to include a corresponding note about limited Windows support.

  • Add Helm deployment guide (#5637)

    The documentation now includes a comprehensive guide for deploying Flower SuperLink and SuperNode using Helm charts. For full instructions, refer to the Helm Guide.

  • Add docs for user authentication and audit logging (#5630, #5643, #5649)

    Introduces documentation for configuring user authentication (User Authentication Guide) and audit logging (Audit Logging Guide) in Flower.

  • Support gRPC health check by default (#5591)

  • Bugfixes (#5567, #5545, #5534)

  • Improve CI/CD (#5560, #5544, #5531, #5532, #5547, #5578)

  • Improve and update documentation (#5558, #5603, #5538, #5626, #5566, #5553, #5588, #5549, #5618, #5612, #5646)

  • General improvements (#5543, #5594, #5623, #5615, #5629, #5571, #5617, #5563, #5620, #5619, #5546, #5601, #5641, #5555, #5533, #5548, #5557, #5565, #5554, #5621, #5644, #5576, #5648)

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

Incompatible changes

  • Remove non-grpc-bidi transport support from deprecated start_client (#5593)

    Drops support for non-grpc-bidi transport in the deprecated start_client API. Pleaes use flower-supernode instead.

Flower 1.19.0

17 Jun 10:19
3981f76

Choose a tag to compare

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):

Adam Tupper, Andrej Jovanović, Charles Beauville, Chong Shen Ng, Daniel J. Beutel, Daniel Nata Nugraha, Dimitris Stripelis, Haoran Jie, Heng Pan, Javier, Kevin Ta, Mohammad Naseri, Ragnar, Robert Steiner, William Lindskog, ashley09, dennis-grinwald, sukrucildirr

What's new?

  • Revamp messaging system with content-addressable object model (#5513, #5477, #5424, #5379, #5353, #5372, #5507, #5364, #5517, #5514, #5342, #5393, #5508, #5504, #5335, #5341, #5430, #5308, #5487, #5509, #5438, #5369, #5354, #5486, #5380, #5496, #5399, #5489, #5446, #5432, #5456, #5442, #5462, #5429, #5497, #5435, #5371, #5450, #5384, #5488, #5434, #5425, #5475, #5458, #5494, #5449, #5492, #5426, #5445, #5467, #5474, #5527)

    Introduces a content-addressable messaging system that breaks messages into a tree of uniquely identified, SHA256-hashed objects. This model allows objects to be pushed and pulled efficiently, avoiding redundant uploads and enabling scalable message streaming and broadcasting. Core enhancements include the new InflatableObject abstraction and ObjectStore for storing and retrieving message content, with Array, Message, and *Record classes now inherit from InflatableObject. New utilities and RPCs facilitate recursive object handling, ID recomputation avoidance, and safe deletion. The framework's servicers, REST, and gRPC layers were refactored to integrate this system, improving real-world deployment scalability and communication efficiency.

  • Improve user authorization and access control (#5428, #5505, #5506, #5422, #5510, #5421, #5420, #5448, #5447, #5503, #5501, #5502, #5511)

    Improves user authorization feature that integrates with the existing authentication protocol. When authentication is enabled, commands like flwr ls, flwr log, and flwr stop are restricted to displaying or affecting only the runs submitted by the authenticated user. This is enforced using the Flower Account ID. Additionally, fine-grained access control can be enforced for CLI operations based on assigned roles (RBAC).

  • Add Floco baseline for personalized federated learning (#4941)

    Introduces Floco, a method that enhances both personalized and global model performance in non-IID cross-silo federated learning. It trains a shared solution simplex across clients, promoting collaboration among similar clients and reducing interference from dissimilar ones. Learn more in Floco Baseline Documentation.

  • Add FEMNIST support to FedProx baseline (#5290)

    Adds FEMNIST dataset to FedProx with preprocessing matching the original paper—subsampling 'a'-'j' and assigning 5 classes per device. More details: FedProx Baseline Documentation

  • Upgrade StatAvg baseline to new Flower App format (#4952)

    The StatAvg baseline is updated to use the new Flower App format. Changes include removing Hydra, switching to pyproject.toml configs, using ClientApp and ServerApp, and saving results via a custom Server class. More details: StatAvg Baseline Documentation.

  • Add guide for running Flower on Google Cloud Platform (#5327)

    The documentation now includes a detailed guide on deploying and running Flower on Google Cloud Platform (GCP). It provides step-by-step instructions for managing Flower workloads in a GCP environment. For more information, refer to the official guide.

  • Implement ServerApp heartbeat monitoring (#5228, #5370, #5358, #5332, #5322, #5324, #5230, #5325)

    Adds heartbeat support to ServerApp processes, enabling the SuperLink to detect crashed or terminated processes and mark them as finished:failed when no final status is received.

  • Extend NodeState to improve SuperNode state management (#5470, #5473, #5402, #5521)

    Extends the NodeState interface and implementation to manage all SuperNode state.

  • Refactor SuperNode for improved robustness and maintainability (#5398, #5397, #5443, #5410, #5411, #5469, #5419)

    Ongoing refactoring of SuperNode improves modularity, simplifies client execution, removes gRPC bidirectional streaming and unused code, and centralizes connection logic. These changes align SuperNode's behavior more closely with SuperLink to make Flower the best platform for robust enterprise deployments..

  • Restructure Flower (#5465, #5476, #5460, #5409, #5408, #5396, #5389, #5392, #5461)

    Reorganizes infrastructure code into dedicated submodules to improve maintainability and clarify the separation from user-facing components.

  • Improve CI/CD workflows (#5498, #5265, #5266, #5328, #5500, #5346, #5318, #5256, #5298, #5257, #5483, #5440, #5304, #5313, [#5381](https://github.com/adap/...

Read more

Flower 1.18.0

23 Apr 09:37
4cb6699

Choose a tag to compare

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, Chunhui XU, Daniel J. Beutel, Daniel Nata Nugraha, Dimitris Stripelis, Guanheng Liu, Gustavo Bertoli, Heng Pan, Javier, Khoa Nguyen, Mohammad Naseri, Pinji Chen, Robert Steiner, Stephane Moroso, Taner Topal, William Lindskog, Yan Gao

What's new?

  • Add support for Python 3.12 (#5238)

    Python 3.12 is officially supported (Python 3.12 was in preview support since Flower 1.6). Python 3.13 support continues to be in preview until all dependencies officially support Python 3.13.

  • Enable TLS connection for flwr CLI using CA certificates (#5227, #5237, #5253, #5254)

    flwr CLI now supports secure TLS connections to SuperLink instances with valid CA certificates. If no root certificates are provided, the CLI automatically uses the default CA certificates bundled with gRPC.

  • Add --version and -V flags to display flwr version (#5236)

    Users can run flwr --version or flwr -V to print the current Flower version. The update also adds -h as a shorthand for CLI help.

  • Use Hugging Face flwrlabs datasets in FlowerTune templates (#5205)

    FlowerTune templates switch to use datasets hosted under the flwrlabs organization on Hugging Face.

  • Upgrade FedBN baseline to support flwr CLI (#5115)

    Refactors the FedBN baseline to use the new Flower CLI, removes Hydra, migrates configs, enables result saving, adds run instructions, and ensures stateful clients.

  • Fix bug in Shamir's secret sharing utilities affecting Secure Aggregation (#5252)

    Refactors Shamir's secret sharing utilities to fix a bug impacting Secure Aggregation. Thanks to Pinji Chen and Guanheng Liu for their contributions.

  • Ensure backward compatibility for RecordDict (#5239, #5270)

    The RecordDict (formerly RecordSet) now maintains full backward compatibility. Legacy usages of RecordSet and its properties are supported, with deprecation warnings logged when outdated references are used. Users are encouraged to transition to the updated RecordDict interface promptly to avoid future issues.

  • Refactor and optimize CI/CD for repository restructuring (#5202, #5176, #5200, #5203, #5210, #5166, #5214, #5212, #5209, #5199, #5204, #5201, #5191, #5167, #5248, #5268, #5251)

    Improves CI/CD workflows to align with repository changes. Updates issue templates, fixes Docker and docs jobs, enhances script compatibility, adds checks, and bumps tool versions to streamline development and deployment.

  • Improve and clean up documentation (#5233, #5179, #5216, #5211, #5217, #5198, #5168, #5215, #5169, #5171, #5240, #5259)

    Removes outdated content, redundant CLI flags, and unnecessary sections; updates Docker READMEs and virtual environment setup guide; and syncs translation source texts.

  • General Improvements (#5241, #5180, #5226, #5173, #5219, #5208, #5158, #5255, #5264, #5272)

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

Incompatible changes

  • Restructure repository (breaking change for contributors only) (#5206, #5194, #5192, #5185, #5184, #5177, #5183, #5207, #5267, #5274)

    Restructures the Flower repository by moving all framework-related code, configs, and dev tools into the framework/ subdirectory. This includes relocating all files under src/, dev scripts, pyproject.toml and other configs. Contributor documentation has been updated to reflect these changes.

Flower 1.17.0

24 Mar 16:56
74caaa8

Choose a tag to compare

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):

Aline Almeida, Charles Beauville, Chong Shen Ng, Daniel Hinjos García, Daniel J. Beutel, Daniel Nata Nugraha, Dimitris Stripelis, Heng Pan, Javier, Robert Steiner, Yan Gao

What's new?

  • Allow registration of functions for custom message types (#5093)

    Enables support for custom message types in ServerApp by allowing the message_type field to be set as "<action_type>.<action_name>", where <action_type> is one of train, evaluate, or query, and <action_name> is a valid Python identifier. Developers can now register handler functions for these custom message types using the decorator @app.<action_type>("<action_name>"). For example, the my_echo_fn function is called when the ServerApp sends a message with message_type set to "query.echo", and the get_mean_value function is called when it's "query.mean":

    app = ClientApp()
    
    @app.query("echo")
    def my_echo_fn(message: Message, context: Context):
        # Echo the incoming message
        return Message(message.content, reply_to=message)
    
    @app.query("mean")
    def get_mean_value(message: Message, context: Context):
        # Calculate the mean value
        mean = ...  # Replace with actual computation
    
        # Wrap the result in a MetricRecord, then in a RecordDict
        metrics = MetricRecord({"mean": mean})
        content = RecordDict({"metrics": metrics})
    
        return Message(content, reply_to=message)
  • Rename core Message API components for clarity and consistency (#5140, #5133, #5139, #5129, #5150, #5151, #5146, #5152)

    To improve clarity and ensure consistency across the Message API, the following renamings have been made:

    • DriverGrid
    • RecordSetRecordDict
    • ParametersRecordArrayRecord
    • MetricsRecordMetricRecord
    • ConfigsRecordConfigRecord

    Backward compatibility is maintained for all the above changes, and deprecation notices have been introduced to support a smooth transition.

  • Enable seamless conversions between ArrayRecord/Array and NumPy/PyTorch types (#4922, #4920)

    One-liner conversions are now supported between Array and numpy.ndarray or torch.Tensor, and between ArrayRecord (formerly ParametersRecord) and PyTorch state_dict or a list of numpy.ndarray. This simplifies workflows involving model parameters and tensor data structures. Example usage includes ArrayRecord(model.state_dict()) and array_record.to_torch_state_dict(). Refer to the ArrayRecord and Array documentation for details.

  • Revamp message creation using Message constructor (#5137, #5153)

    Revamps the Message creation workflow by enabling direct instantiation via the Message(...) constructor. This deprecates the previous APIs and simplifies message creation:

    • Driver.create_message(...)Message(...)
    • <some_message>.create_reply(...)Message(..., reply_to=<some_message>)
  • Stabilize low-level Message API (#5120)

    With all the changes above, the stability of the low-level Message API has been significantly improved. All preview feature warnings have been removed, marking the completion of its transition out of experimental status.

  • Add node availability check to reduce wait time (#4968)

    Adds a node availability check to SuperLink. If the target SuperNode is offline, SuperLink automatically generates an error reply message when the ServerApp attempts to pull the reply. This mechanism helps avoid unnecessary delays in each round caused by waiting for responses from unavailable nodes.

  • Enable extensible event logging for FleetServicer and ExecServicer (#4998, #4997, #4951, #4950, #5108)

    Introduces the necessary hooks and infrastructure to support RPC event logging for FleetServicer and ExecServicer. This enables advanced auditing and observability of RPC calls made by flwr CLI users and SuperNodes, when appropriate event log plugins are available.

  • Add CareQA benchmark for medical LLM evaluation (#4966)

    Adds the CareQA dataset as a new benchmark for evaluating medical knowledge in LLMs. CareQA consists of 5,621 QA pairs from official Spanish healthcare exams (2020–2024), translated to English and covering multiple disciplines. This enhances the diversity of datasets used in the Flower Medical LLM Leaderboard.

  • Fix docstrings and improve handling of Ray nodes without CPU resources (#5155, #5076, #5132)

    Fixes inaccurate or outdated docstrings in RecordDict and the FlowerClient used in FlowerTune templates, improving documentation clarity. Also adds handling for Ray nodes that report zero CPU resources, preventing potential runtime issues.

  • Improve documentation and examples (#5162, #5079, #5123, #5066, #5143, #5118, #5148, #5134, #5080, #5160, #5069, #5032)

  • Update CI/CD (#5125, #5062, #5056, #5048, #5065, #5061, #5057, #5064, #5144)

  • General Improvements (#5074, #5126, #5122, #5149, #5157)

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

Flower 1.16.0

11 Mar 16:31
8ba9db5

Choose a tag to compare

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.

Flower 1.15.2

17 Feb 17:04
63f4ac0

Choose a tag to compare

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):

Charles Beauville, Heng Pan, Javier, Leandro Collier, Stephane Moroso, Yan Gao

What's new?

Free processed messages in LinkState (#4934)

When the ServerApp pulls the replies the SuperNodes sent to the SuperLink, these should be removed from the LinkState. In some situations, these weren't erased, which could lead to high memory utilization by the SuperLink.

Introduce Windows CI tests (#4908)

We continue improving the experience of running Flower on Windows. Now, an automated CI test is run to ensure compatibility.

Update Ray version (Simulation Engine) (#4926)

The Simulation Engine has been upgraded to a version of Ray that is compatible with Python 3.12.

Flower 1.15.1

05 Feb 16:59
01ac3fb

Choose a tag to compare

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):

Dimitris Stripelis, Heng Pan, Javier, Taner Topal, Yan Gao

What's new?

  • Improve time drift compensation in automatic SuperNode authentication (#4899)

    In addition to allowing for a time delay (positive time difference), SuperLink now also accounts for time drift, which might result in negative time differences between timestamps in SuperLink and SuperNode during authentication.

  • Rename constants for gRPC metadata (#4902)

    All metadata keys in gRPC messages that previously used underscores (_) have been replaced with hyphens (-). Using underscores is not recommended in setups where SuperLink may be deployed behind load balancers or reverse proxies.

  • Filtering out non-Fleet API requests at the FleetServicer (#4900)

    The Fleet API endpoint will now reject gRPC requests that are not part of its API.

  • Fix exit handlers mechanism for Windows (#4907)

    The SIGQUIT Python signal is not supported on Windows. This signal is now excluded when Flower is executed on Windows.

  • Updated Examples (#4895, #4158, #4879)

    Examples have been updated to the latest version of Flower. Some examples have also had their dependencies upgraded. The Federated Finetuning of a Whisper model example has been updated to use the new Flower execution method: flwr run.

  • Update FlowerTuneLLM Leaderboard evaluation scripts (#4919)

    We have updated the package versions used in the evaluation scripts. There is still time to participate in the Flower LLM Leaderboard!

  • Update Documentation (#4897, #4896, #4898, #4909)

Flower 1.15.0

31 Jan 11:37
a958a63

Choose a tag to compare

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):

Charles Beauville, Chong Shen Ng, Daniel J. Beutel, Daniel Nata Nugraha, Haoran Jie, Heng Pan, Ivelin Ivanov, Javier, Kevin Patel, Mohammad Naseri, Pavlos Bouzinis, Robert Steiner

What's new?

  • Enhance SuperNode authentication (#4767, #4791, #4765, #4857, #4867)

    Enhances the SuperNode authentication system, making it more efficient and resilient against replay attacks. There's no longer a need to pass --auth-superlink-private-key and --auth-superlink-public-key when running the SuperLink. Additionally, Flower now enables automatic node authentication by default, preventing impersonation even when node authentication is not explicitly used. For more details, see the documentation.

  • Add guide for running Flower with Deployment Engine (#4811, #4733)

    Introduces the How to run Flower with Deployment Engine guide, providing detailed instructions on deploying Federated Learning in production environments using the Flower Deployment Engine.

  • Add Flower Network Communication reference documentation (#4805)

    Introduces the Flower Network Communication documentation, which details the network connections used in a deployed Flower federated AI system.

  • Add LeRobot quickstart example (#4607, #4816)

    Introduces an example demonstrating federated training of a Diffusion policy on the PushT dataset using LeRobot and Flower. The dataset is partitioned with Flower Datasets, and the example runs best with a GPU. More details: Flower LeRobot Example.

  • Add video tutorial to simulation documentation (#4768)

    The Flower AI Simulation 2025 tutorial series is now available on YouTube. You can watch all the videos here or via the embedded previews in the documentation. The accompanying code for the tutorial can be found in the Flower GitHub repository.

  • Introduce StatAvg baseline (#3921)

    StatAvg mitigates non-IID feature distributions in federated learning by sharing and aggregating data statistics before training. It is compatible with any FL aggregation strategy. More details: StatAvg baseline.

  • Allow setting log level via environment variable (#4860, #4880, #4886)

    Log level can now be configured using the FLWR_LOG_LEVEL environment variable. For example, running FLWR_LOG_LEVEL=DEBUG flower-superlink --insecure will set the log level to DEBUG. For more details, see the guide.

  • Enable dynamic overrides for federation configuration in CLI (#4841, #4843, #4838)

    Similar to how the --run-config flag allows overriding the run configuration in flwr run, the new --federation-config flag enables dynamic overrides for federation configurations. This flag is supported in all flwr CLI commands except flwr build, flwr install, and flwr new.

  • Migrate TaskIns/TaskRes to Message-based communication (#4311, #4310, #4849, #4308, #4307, #4800, #4309, #4875, #4874, #4877, #4876)

    The Fleet API and the ServerAppIO API (formerly known as the Driver API) now use message-based communication instead of TaskIns/TaskRes, making interactions more intuitive and better aligned with their Python counterparts. This migration introduces new RPCs, such as PullMessages, PushMessages, and other message-based operations in the gRPC stack.

  • Introduce exit codes (#4801, #4845)

    Improves system error and help messages by introducing a dedicated flwr_exit function with standardized exit codes.

  • Update gRPC-related dependencies (#4833, #4836, #4887)

    Increases the version numbers of gRPC-related dependencies. In rare cases, if you encounter pip warnings about unresolved gRPC dependencies, it may be due to residual dependencies from older Flower versions.

  • Update app-pytorch example (#4842)

    The app-pytorch example is revamped to use the low-level API.

  • Improve CLI-side user authentication (#4862, #4861, #4832, #4850, #4703, #4885)

    User authentication in the CLI is enhanced with better handling, configuration options, and security enforcement.

  • Ensure graceful exit for SuperLink and SuperNode (#4829, #4846, #4798, #4826, #4881, #4797)

    Ensures proper resource cleanup and prevents zombie subprocesses during SuperLink and SuperNode shutdown.

  • Improve documentation (#4380, #4853, #4214, #4215, #4863, #4825, #4759, #4851, #4779, #4813, #4812, #4761, #4859, #4754, #4839, #4216, #4852, #4869)

    Updates PyTorch device selection in the tutorial series notebook and adds two molecular datasets to the recommended-fl-datasets table. Additional improvements include metadata updates, translation updates, and refinements to various documentation sections.

  • Update Docker dependencies and documentation (#4763, #4804, #4762, #4803, #4753)

  • Update CI/CD (#4756, #4834, #4824, #3493, #4096, #4807, #3956, #3168, #4835, #4884)

  • Bugfixes (#4766, #4764, #4795, #4840, #4868, #4872, #4890)

  • General improvements (#4748, #4799, #4645, #4819, #4755, #4789, [#4771](...

Read more

Flower 1.14.0

20 Dec 12:10
6a24e6b

Choose a tag to compare

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):

Adam Narozniak, Charles Beauville, Chong Shen Ng, Daniel Nata Nugraha, Dimitris Stripelis, Heng Pan, Javier, Meng Yan, Mohammad Naseri, Robert Steiner, Taner Topal, Vidit Khandelwal, Yan Gao

What's new?

  • Introduce flwr stop command (#4647, #4629, #4694, #4646, #4634, #4700, #4684, #4642, #4682, #4683, #4639, #4668, #4658, #4693, #4704, #4729)

    The flwr stop command is now available to stop a submitted run. You can use it as follows:

    • flwr stop <run-id>
    • flwr stop <run-id> [<app>] [<federation>]

    This command instructs the SuperLink to terminate the specified run. While the execution of ServerApp and ClientApp processes will not be interrupted instantly, they will be informed of the stopped run and will gracefully terminate when they next communicate with the SuperLink.

  • Add JSON format output for CLI commands (#4610, #4613, #4710, #4621, #4612, #4619, #4611, #4620, #4712, #4633, #4632, #4711, #4714, #4734, #4738)

    The flwr run, flwr ls, and flwr stop commands now support JSON-formatted output using the --format json flag. This makes it easier to parse and integrate CLI output with other tools. Feel free to check the "How to Use CLI JSON output" guide for details!

  • Document Microsoft Azure deployment (#4625)

    A new how-to guide shows a simple Flower deployment for federated learning on Microsoft Azure VM instances.

  • Introduce OIDC user authentication infrastructure (#4630, #4244, #4602, #4618, #4717, #4719, #4745)

    Flower has supported SuperNode authentication since Flower 1.9. This release adds initial extension points for user authentication via OpenID Connect (OIDC).

  • Update FedRep baseline (#4681)

    We have started the process of migrating some baselines from using start_simulation to be launched via flwr run. We chose FedRep as the first baseline to migrate due to its very impressive results. New baselines can be created following a flwr run-compatible format by starting from the flwr new template for baselines. We welcome contributions! Read more in the how to contribute a baseline documentation.

  • Revamp simulation series tutorial (#4663, #4696)

    We have updated the Step-by-step Tutorial Series for Simulations. It now shows how to create and run Flower Apps via flwr run. The videos walk you through the process of creating custom strategies, effectively make use of metrics between ClientApp and ServerApp, create global model checkpoints, log metrics to Weights & Biases, and more.

  • Improve connection reliability (#4649, #4636, #4637)

    Connections between ServerApp<>SuperLink, ClientApp<>SuperNode, and SuperLink<>Simulation are now more robust against network issues.

  • Fix flwr new issue on Windows (#4653)

    The flwr new command now works correctly on Windows by setting UTF-8 encoding, ensuring compatibility across all platforms when creating and transferring files.

  • Update examples and flwr new templates (#4725, #4724, #4589, #4690, #4708, #4689, #4740, #4741, #4744)

    Code examples and flwr new templates have been updated to improve compatibility and usability. Notable changes include removing unnecessary numpy dependencies, upgrading the mlx version, and enhancing the authentication example. A link to previous tutorial versions has also been added for reference.

  • Improve documentation (#4713, #4624, #4606, #4596, #4695, #4654, #4656, #4603, #4727, #4723, #4598, #4661, #4655, #4659)

    Documentation has been improved with updated docstrings, typo fixes, and new contributions guidance. Automated updates ensure source texts for translations stay current.

  • Update infrastructure and CI/CD (#4614, #4686, #4587, #4715, #4728, #4679, #4675, #4680, #4676)

  • Bugfixes (#4677, #4671, #4670, #4674, #4687, #4605, #4736)

  • General improvements (#4631, #4660, #4599, #4672, #4705, #4688, #4691, #4706, #4709, #4623, #4697, #4597, #4721, #4730, #4720, #4747, #4716, #4752)

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

Incompatible changes

  • Remove context property from Client and NumPyClient (#4652)

    Now that Context is available as an argument in client_fn and server_fn, the context property is removed from Client and NumPyClient. This feature has been deprecated for several releases and is now removed.

Flower 1.13.1

27 Nov 08:03
636c24b

Choose a tag to compare

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):

Adam Narozniak, Charles Beauville, Heng Pan, Javier, Robert Steiner

What's new?

  • Fix SimulationEngine Executor for SuperLink (#4563, #4568, #4570)

    Resolved an issue that prevented SuperLink from functioning correctly when using the SimulationEngine executor.

  • Improve FAB build and install (#4571)

    An updated FAB build and install process produces smaller FAB files and doesn't rely on pip install any more. It also resolves an issue where all files were unnecessarily included in the FAB file. The flwr CLI commands now correctly pack only the necessary files, such as .md, .toml and .py, ensuring more efficient and accurate packaging.

  • Update embedded-devices example (#4381)

    The example now uses the flwr run command and the Deployment Engine.

  • Update Documentation (#4566, #4569, #4560, #4556, #4581, #4537, #4562, #4582)

    Enhanced documentation across various aspects, including updates to translation workflows, Docker-related READMEs, and recommended datasets. Improvements also include formatting fixes for dataset partitioning docs and better references to resources in the datasets documentation index.

  • Update Infrastructure and CI/CD (#4577, #4578, #4558, #4551, #3356, #4559, #4575)

  • General improvements (#4557, #4564, #4573, #4561, #4579, #4572)

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