FENRIS: Federated Extensible Norwegian Research Interface for Synthetic data
Example Pipelines | CLI Reference | Extension Guide | Contributing | Changelog
FENRIS is an extensible benchmarking framework for federated synthetic tabular data generators. Built on Flower, it provides a reproducible pipeline covering dataset preparation, client partitioning, federated training, multi-dimensional evaluation, and artifact generation.
The framework is designed to be extended with new algorithms, partitioning strategies and evaluation metrics through a plugin system that allows new components to be added without modifying the core system. Algorithms are conceptualized as a combination of a synthesizer (the generative model) and a coordinator (the federated training strategy), allowing for flexible combinations and comparisons.
FENRIS ships with two literature-based reference implementations (Fed-TGAN and FedTabDiff) and evaluates algorithms across fidelity, utility, privacy, fairness, and scalability.
This framework was initially developed during Spring 2026 as part of a bachelor thesis at OsloMet in collaboration with the Norwegian Institute of Public Health (Folkehelseinstituttet, FHI) and the Cancer Registry of Norway (Kreftregisteret).
The following sections provide a quickstart guide to using the framework, including prerequisites, setting up the environment, verifying the installation, and running a benchmarking pipeline. For more detailed documentation and examples, please refer to the links at the top of this README.
Quickstart Guide
Prerequisites
FENRIS v0.1.0 supports Python 3.12 and 3.13. Linux and macOS are the recommended platforms; Windows support is on a best-effort basis due to constraints imposed by Flower's Ray backend. WSL may be used as a workaround.
Installation
The recommended installation method is pipx, which installs FENRIS into an isolated environment and exposes the fenris command globally without requiring a virtual environment:
pipx install fenris
To install pipx itself, follow the official installation instructions.
Alternatively, FENRIS can be installed into a virtual environment via pip:
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install fenris
To verify a successful installation:
fenris --version
Acquiring the reference datasets
The reference datasets used in the examples are available at the following URLs, pinned to a stable commit:
- https://raw.githubusercontent.com/Gubbeklubben/FENRIS/6aac5c5/datasets/breast_cancer.csv
- https://raw.githubusercontent.com/Gubbeklubben/FENRIS/6aac5c5/datasets/heart_disease.csv
- https://raw.githubusercontent.com/Gubbeklubben/FENRIS/6aac5c5/datasets/lung_cancer.csv
Executing a pipeline
The following command runs a complete end-to-end benchmark pipeline on the Breast Cancer dataset using FedTabDiff, with the default seed of 42:
fenris run fedtabdiff fedavg iid_partitioner datasets/breast_cancer.csv
Once the run completes, FENRIS creates a timestamped output directory, for example:
out/2026-05-01-14-11-26-fedtabdiff-breast_cancer-<uuid>/
This directory contains the following artifacts:
| File | Description |
|---|---|
synthetic.csv |
The synthetic dataset sampled from the final global model state, with the same columns as the input. |
metrics.centralized.json |
Metric values computed in centralized mode, where the synthetic data is evaluated against the global holdout set on the server. |
metrics.federated.json |
Metric values computed in federated mode, where each client evaluates the synthetic data against its local partitions and the results are aggregated server-side. |
config_snapshot.json |
A complete snapshot of the resolved configuration used for the run, including all default values and derived seeds. |
schema.json |
The resolved column schema, classifying each column by kind (continuous, categorical, binary, integer). |
components.json |
Metadata for each component used in the run, including plugin name, entry point, and version. |
platform_info.json |
A snapshot of the hardware and software environment, including OS, CPU, Python version, and relevant library versions. |
A successful run produces non-null fidelity metric values in both metrics files. Utility, fairness, and attribute inference metrics require --target-col and/or --sensitive-cols to be specified and will evaluate to null otherwise, as in this minimal example.
Further documentation
Example Pipelines | CLI Reference | Extension Guide | Contributing | Changelog
Metadata
Release files for fenris 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| fenris-0.1.0.tar.gz | 91.7 kB | With provenance | Details for fenris-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| fenris-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for fenris-0.1.0-py3-none-any.whl |
Total release size: 218.6 kB
Release files / fenris-0.1.0.tar.gz
| Download URL | fenris-0.1.0.tar.gz |
|---|---|
| Size | 91.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b53de7fecd383aa641b904902c558d40e449ddd3d563ad689ff489a13c635089
|
|
BLAKE2b-256 checksum How to use checksums |
8e09a870d0e22f2181bb9eabd9619b16aa40567ce763560425eb781e7d37d386
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 18, 2026.
Transparency logRelease files / fenris-0.1.0-py3-none-any.whl
| Download URL | fenris-0.1.0-py3-none-any.whl |
|---|---|
| Size | 127.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e46443d3ce3e3dfb45344a9586019c04a90559ca5af7e16f5b8061086b8ba0fb
|
|
BLAKE2b-256 checksum How to use checksums |
5d26194a4400f3052b1db7506448384bd6a7a53f8d6f1dd8673d76bbddacdcc0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 18, 2026.
Transparency logSecurity for fenris 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for fenris-0.1.0.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 18, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.