{"id":35235047,"url":"https://github.com/makgyver/fluke","last_synced_at":"2026-03-11T06:01:30.862Z","repository":{"id":240072543,"uuid":"576200820","full_name":"makgyver/fluke","owner":"makgyver","description":"Federated learning framework made by researchers for researchers :)","archived":false,"fork":false,"pushed_at":"2026-03-10T08:09:32.000Z","size":6838,"stargazers_count":52,"open_issues_count":4,"forks_count":11,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-03-10T12:45:39.963Z","etag":null,"topics":["federated-learning","machine-learning-library","pypi-packages"],"latest_commit_sha":null,"homepage":"https://makgyver.github.io/fluke/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/makgyver.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-12-09T08:46:32.000Z","updated_at":"2026-03-10T08:09:36.000Z","dependencies_parsed_at":"2024-05-16T15:56:36.023Z","dependency_job_id":"6b073f4f-1798-4321-a493-b73bf9dad753","html_url":"https://github.com/makgyver/fluke","commit_stats":null,"previous_names":["makgyver/fluke"],"tags_count":21,"template":false,"template_full_name":null,"purl":"pkg:github/makgyver/fluke","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makgyver%2Ffluke","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makgyver%2Ffluke/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makgyver%2Ffluke/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makgyver%2Ffluke/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/makgyver","download_url":"https://codeload.github.com/makgyver/fluke/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/makgyver%2Ffluke/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30372534,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-10T21:41:54.280Z","status":"online","status_checked_at":"2026-03-11T02:00:07.027Z","response_time":84,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["federated-learning","machine-learning-library","pypi-packages"],"created_at":"2025-12-30T03:39:53.697Z","updated_at":"2026-03-11T06:01:30.856Z","avatar_url":"https://github.com/makgyver.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Coveralls](https://img.shields.io/coverallsCoverage/github/makgyver/fluke?style=for-the-badge\u0026logo=coveralls)\n\u003ca href=\"https://makgyver.github.io/fluke\"\u003e\u003cimg src=\"https://img.shields.io/github/actions/workflow/status/makgyver/fluke/doc-publish.yml?style=for-the-badge\u0026label=DOCUMENTATION\"/\u003e\u003c/a\u003e\n![PyPI - Python Version](https://img.shields.io/pypi/pyversions/fluke-fl?style=for-the-badge\u0026logo=python\u0026logoColor=yellow)\n![GitHub License](https://img.shields.io/github/license/makgyver/fluke?style=for-the-badge)\n\u003c!-- [![arXiv](https://img.shields.io/badge/arxiv-2412.15728-b31b1b.svg?style=for-the-badge\u0026logo=arxiv\u0026logoColor=red)](https://arxiv.org/abs/2412.15728) --\u003e\n[![FGCS](https://img.shields.io/badge/-Elsevier-FF6C00?style=for-the-badge\u0026logo=elsevier\u0026logoColor=white)](https://www.sciencedirect.com/science/article/pii/S0167739X25005357)\n![Docker](https://img.shields.io/badge/docker-%230db7ed.svg?style=for-the-badge\u0026logo=docker\u0026logoColor=white)\n\n# **fluke**: **f**ederated **l**earning **u**tility framewor**k** for **e**xperimentation and research\n\n``fluke`` is a Python package that provides a framework for federated learning research. It is designed to be modular and extensible, allowing researchers to easily implement and test new federated learning algorithms. ``fluke`` provides a set of pre-implemented state-of-the-art federated learning algorithms that can be used as a starting point for research or as a benchmark for comparison.\n\n## Installation\n\n### Pypi\n\n``fluke`` is a Python package that can be installed via pip. To install it, you can run the following command:\n\n```bash\npip install fluke-fl\n```\n\n### Clone the repository\n\nYou can also install ``fluke`` by cloning the repository and installing it in editable mode. This is useful if you want to contribute to the development of ``fluke`` or if you want to use the latest version of the code.\n\n```bash\ngit clone https://github.com/makgyver/fluke.git\ncd fluke\npip install -e .\n```\n\n\u003e [!WARNING]\n\u003e Due to a recent repository tree refactoring, if you cloned the repository before June 2025, you need to reclone it to get the latest version of the code.\n\n### 🐳 Docker\n\nYou can use this library directly inside a Docker container — no installation needed on your local machine.\n\n```bash\ndocker build -t fluke_container .\n```\n\nThen, you can run an interactive session with\n\n```bash\ndocker run --rm fluke_container fluke [ARGS]\n```\n\nwhere `ARGS` are the arguments you want to pass to the `fluke` command as described in the next section.\n\n## Run a federated algorithm\n\nTo run an algorithm in ``fluke`` you need to create two configuration files:\n- `EXP_CONFIG`: the experiment configuration file (independent from the algorithm);\n- `ALG_CONFIG`: the algorithm configuration file;\n\nThen, you can run the following command:\n\n```bash\nfluke federation EXP_CONFIG ALG_CONFIG\n```\n\nYou can find some examples of these files in the [configs](https://github.com/makgyver/fluke/tree/main/configs) folder of the repository.\n\n### Example\nLet say you want to run the classic `FedAvg` algorithm on the `MNIST` dataset. Then, using the configuration files [exp.yaml](https://github.com/makgyver/fluke/blob/main/configs/exp.yaml) and [fedavg.yaml](https://github.com/makgyver/fluke/blob/main/configs/fedavg.yaml), you can run the following command:\n\n```bash\nfluke federation path_to_folder/exp.yaml path_to_folder/fedavg.yaml\n```\n\nwhere `path_to_folder` is the path to the folder containing the configuration files.\n\n\n## Documentation\n\nThe documentation for ``fluke`` can be found [here](https://makgyver.github.io/fluke). It contains detailed information about the package, including how to install it, how to run an experiment, and how to implement new algorithms.\n\n## Tutorials\n\nTutorials on how to use ``fluke`` can be found [here](https://makgyver.github.io/fluke/tutorials.html). In the following, you can find some quick tutorials to get started with ``fluke``:\n\n- Getting started with `fluke` API [![Open in Colab](https://img.shields.io/badge/Open_in_Colab-blue?style=flat-square\u0026logo=google-colab\u0026logoColor=yellow\u0026labelColor=gray)\n](https://colab.research.google.com/github/makgyver/fluke/blob/main/tutorials/fluke_quick_api.ipynb)\n- Run your algorithm in ``fluke`` [![Open in Colab](https://img.shields.io/badge/Open_in_Colab-blue?style=flat-square\u0026logo=google-colab\u0026logoColor=yellow\u0026labelColor=gray)\n](https://colab.research.google.com/github/makgyver/fluke/blob/main/tutorials/fluke_custom_alg.ipynb)\n- Use your own model with `fluke` [![Open in Colab](https://img.shields.io/badge/Open_in_Colab-blue?style=flat-square\u0026logo=google-colab\u0026logoColor=yellow\u0026labelColor=gray)\n](https://colab.research.google.com/github/makgyver/fluke/blob/main/tutorials/fluke_custom_nn.ipynb)\n- Add your dataset and use it with ``fluke`` [![Open in Colab](https://img.shields.io/badge/Open_in_Colab-blue?style=flat-square\u0026logo=google-colab\u0026logoColor=yellow\u0026labelColor=gray)\n](https://colab.research.google.com/github/makgyver/fluke/blob/main/tutorials/fluke_custom_dataset.ipynb)\n- Add your custom evaluation metric in ``fluke`` [![Open in Colab](https://img.shields.io/badge/Open_in_Colab-blue?style=flat-square\u0026logo=google-colab\u0026logoColor=yellow\u0026labelColor=gray)\n](https://colab.research.google.com/github/makgyver/fluke/blob/main/tutorials/fluke_custom_eval.ipynb)\n\n## Contributing\n\nIf you have suggestions for how ``fluke`` could be improved, or want to report a bug, open an issue! We'd love all and any contributions.\n\nFor more, check out the [Contributing Guide](CONTRIBUTING.md).\n\n## `fluke` @ ECML-PKDD 2024\n\n`fluke` has been presented at the [ECML-PKDD 2024](https://ecmlpkdd2024.org/) conference in the [Workshop on Advancements in Federated Learning](https://wafl2024.di.unito.it). The slides of the presentation are available [here](slides/fluke_ecmlpkdd2024.pdf).\n\n## `fluke` @ ECAI 2025\nOn 25th October, we will deliver a tutorial on `fluke` at the 28th European Conference on Artificial Intelligence (ECAI). [Here](https://sites.google.com/view/fluketutorialecai25/home) the website of the tutorial. \n\n## Citing `fluke`\n``fluke`` is a research tool, and we kindly ask you to cite it in your research papers if you use it. You can use the following BibTeX entry:\n\n```bibtex\n@article{fluke2025fgcs,\n\ttitle = {Fluke: Federated learning utility framework for experimentation and research},\n\tjournal = {Future Generation Computer Systems},\n\tvolume = {177},\n\tpages = {108241},\n\tyear = {2026},\n\tissn = {0167-739X},\n\tdoi = {https://doi.org/10.1016/j.future.2025.108241},\n\turl = {https://www.sciencedirect.com/science/article/pii/S0167739X25005357},\n\tauthor = {Mirko Polato}\n}\n```\n\n## Authors and main contributors\n\n- [**Mirko Polato**](https://makgyver.github.io) - *Idealization*, *Design*, *Development*, *Testing*, *Tutorial*, and *Documentation*\n- [**Roberto Esposito**](https://github.com/boborbt) - *Testing*\n- [**Samuele Fonio**](https://github.com/samuelefonio) - *Testing*, *Tutorial*\n- [**Edoardo Oglietti**](https://github.com/00-uno-00) - *Testing*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmakgyver%2Ffluke","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmakgyver%2Ffluke","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmakgyver%2Ffluke/lists"}