# Announcing Flower 1.11

**URL:** https://discuss.flower.ai/t/announcing-flower-1-11/318
**Category:** General
**Created:** [August 30, 2024, 1:05pm UTC](https://discuss.flower.ai/t/announcing-flower-1-11/318 "2024-08-30T13:05:45Z")
**Posts on this page:** 9
**Page:** 1

<div class="post-metadata">

### Author: ![danielnata](https://dub1.discourse-cdn.com/flex013/user_avatar/discuss.flower.ai/danielnata/32/22_2.png) [@danielnata](https://discuss.flower.ai/u/danielnata)
#### Post date: [August 30, 2024, 1:05pm UTC](https://discuss.flower.ai/t/announcing-flower-1-11/318/1 "2024-08-30T13:05:45Z")

</div>

![flower-1110](https://europe1.discourse-cdn.com/flex013/uploads/flower/original/1X/2ba22ddfbcab0736cc78f416ad05915d357253bf.jpeg)

The Flower Team is excited to announce the release of Flower 1.11 stable and it’s packed with 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):

`Adam Narozniak`, `Charles Beauville`, `Chong Shen Ng`, `Daniel J. Beutel`, `Daniel Nata Nugraha`, `Danny`, `Edoardo Gabrielli`, `Heng Pan`, `Javier`, `Meng Yan`, `Michal Danilowski`, `Mohammad Naseri`, `Robert Steiner`, `Steve Laskaridis`, `Taner Topal`, `Yan Gao`

### What’s new?

- **Deliver Flower App Bundle (FAB) to SuperLink and SuperNodes** ([#4006](https://github.com/adap/flower/pull/4006), [#3945](https://github.com/adap/flower/pull/3945), [#3999](https://github.com/adap/flower/pull/3999), [#4027](https://github.com/adap/flower/pull/4027), [#3851](https://github.com/adap/flower/pull/3851), [#3946](https://github.com/adap/flower/pull/3946), [#4003](https://github.com/adap/flower/pull/4003), [#4029](https://github.com/adap/flower/pull/4029), [#3942](https://github.com/adap/flower/pull/3942), [#3957](https://github.com/adap/flower/pull/3957), [#4020](https://github.com/adap/flower/pull/4020), [#4044](https://github.com/adap/flower/pull/4044), [#3852](https://github.com/adap/flower/pull/3852), [#4019](https://github.com/adap/flower/pull/4019), [#4031](https://github.com/adap/flower/pull/4031), [#4036](https://github.com/adap/flower/pull/4036), [#4049](https://github.com/adap/flower/pull/4049), [#4017](https://github.com/adap/flower/pull/4017), [#3943](https://github.com/adap/flower/pull/3943), [#3944](https://github.com/adap/flower/pull/3944), [#4011](https://github.com/adap/flower/pull/4011), [#3619](https://github.com/adap/flower/pull/3619))

- **Introduce isolated** `ClientApp` **execution** ([#3970](https://github.com/adap/flower/pull/3970), [#3976](https://github.com/adap/flower/pull/3976), [#4002](https://github.com/adap/flower/pull/4002), [#4001](https://github.com/adap/flower/pull/4001), [#4034](https://github.com/adap/flower/pull/4034), [#4037](https://github.com/adap/flower/pull/4037), [#3977](https://github.com/adap/flower/pull/3977), [#4042](https://github.com/adap/flower/pull/4042), [#3978](https://github.com/adap/flower/pull/3978), [#4039](https://github.com/adap/flower/pull/4039), [#4033](https://github.com/adap/flower/pull/4033), [#3971](https://github.com/adap/flower/pull/3971), [#4035](https://github.com/adap/flower/pull/4035), [#3973](https://github.com/adap/flower/pull/3973), [#4032](https://github.com/adap/flower/pull/4032))

- **Improve Docker support for enterprise deployments** ([#4050](https://github.com/adap/flower/pull/4050), [#4090](https://github.com/adap/flower/pull/4090), [#3784](https://github.com/adap/flower/pull/3784), [#3998](https://github.com/adap/flower/pull/3998), [#4094](https://github.com/adap/flower/pull/4094), [#3722](https://github.com/adap/flower/pull/3722))

- **Improve SuperNode authentication** ([#4043](https://github.com/adap/flower/pull/4043), [#4047](https://github.com/adap/flower/pull/4047), [#4074](https://github.com/adap/flower/pull/4074))

- **Update** `flwr new` **templates** ([#3933](https://github.com/adap/flower/pull/3933), [#3894](https://github.com/adap/flower/pull/3894), [#3930](https://github.com/adap/flower/pull/3930), [#3931](https://github.com/adap/flower/pull/3931), [#3997](https://github.com/adap/flower/pull/3997), [#3979](https://github.com/adap/flower/pull/3979), [#3965](https://github.com/adap/flower/pull/3965), [#4013](https://github.com/adap/flower/pull/4013), [#4064](https://github.com/adap/flower/pull/4064))

- **Improve Simulation Engine** ([#4095](https://github.com/adap/flower/pull/4095), [#3913](https://github.com/adap/flower/pull/3913), [#4059](https://github.com/adap/flower/pull/4059), [#3954](https://github.com/adap/flower/pull/3954), [#4071](https://github.com/adap/flower/pull/4071), [#3985](https://github.com/adap/flower/pull/3985), [#3988](https://github.com/adap/flower/pull/3988))

- **Improve** `RecordSet` ([#4052](https://github.com/adap/flower/pull/4052), [#3218](https://github.com/adap/flower/pull/3218), [#4016](https://github.com/adap/flower/pull/4016))

- **Update documentation** ([#3972](https://github.com/adap/flower/pull/3972), [#3925](https://github.com/adap/flower/pull/3925), [#4061](https://github.com/adap/flower/pull/4061), [#3984](https://github.com/adap/flower/pull/3984), [#3917](https://github.com/adap/flower/pull/3917), [#3900](https://github.com/adap/flower/pull/3900), [#4066](https://github.com/adap/flower/pull/4066), [#3765](https://github.com/adap/flower/pull/3765), [#4021](https://github.com/adap/flower/pull/4021), [#3906](https://github.com/adap/flower/pull/3906), [#4063](https://github.com/adap/flower/pull/4063), [#4076](https://github.com/adap/flower/pull/4076), [#3920](https://github.com/adap/flower/pull/3920), [#3916](https://github.com/adap/flower/pull/3916))

- **Migrate code example to use new Flower APIs** ([#3758](https://github.com/adap/flower/pull/3758), [#3701](https://github.com/adap/flower/pull/3701), [#3919](https://github.com/adap/flower/pull/3919), [#3918](https://github.com/adap/flower/pull/3918), [#3934](https://github.com/adap/flower/pull/3934), [#3893](https://github.com/adap/flower/pull/3893), [#3833](https://github.com/adap/flower/pull/3833), [#3922](https://github.com/adap/flower/pull/3922), [#3846](https://github.com/adap/flower/pull/3846), [#3777](https://github.com/adap/flower/pull/3777), [#3874](https://github.com/adap/flower/pull/3874), [#3873](https://github.com/adap/flower/pull/3873), [#3935](https://github.com/adap/flower/pull/3935), [#3754](https://github.com/adap/flower/pull/3754), [#3980](https://github.com/adap/flower/pull/3980), [#4089](https://github.com/adap/flower/pull/4089), [#4046](https://github.com/adap/flower/pull/4046), [#3314](https://github.com/adap/flower/pull/3314), [#3316](https://github.com/adap/flower/pull/3316), [#3295](https://github.com/adap/flower/pull/3295), [#3313](https://github.com/adap/flower/pull/3313))

- **Update Flower framework, framework internals and quality infrastructure** ([#4018](https://github.com/adap/flower/pull/4018), [#4053](https://github.com/adap/flower/pull/4053), [#4098](https://github.com/adap/flower/pull/4098), [#4067](https://github.com/adap/flower/pull/4067), [#4105](https://github.com/adap/flower/pull/4105), [#4048](https://github.com/adap/flower/pull/4048), [#4107](https://github.com/adap/flower/pull/4107), [#4069](https://github.com/adap/flower/pull/4069), [#3915](https://github.com/adap/flower/pull/3915), [#4101](https://github.com/adap/flower/pull/4101), [#4108](https://github.com/adap/flower/pull/4108), [#3914](https://github.com/adap/flower/pull/3914), [#4068](https://github.com/adap/flower/pull/4068), [#4041](https://github.com/adap/flower/pull/4041), [#4040](https://github.com/adap/flower/pull/4040), [#3986](https://github.com/adap/flower/pull/3986), [#4026](https://github.com/adap/flower/pull/4026), [#3961](https://github.com/adap/flower/pull/3961), [#3975](https://github.com/adap/flower/pull/3975), [#3983](https://github.com/adap/flower/pull/3983), [#4091](https://github.com/adap/flower/pull/4091), [#3982](https://github.com/adap/flower/pull/3982), [#4079](https://github.com/adap/flower/pull/4079), [#4073](https://github.com/adap/flower/pull/4073), [#4060](https://github.com/adap/flower/pull/4060), [#4106](https://github.com/adap/flower/pull/4106), [#4080](https://github.com/adap/flower/pull/4080), [#3974](https://github.com/adap/flower/pull/3974), [#3996](https://github.com/adap/flower/pull/3996), [#3991](https://github.com/adap/flower/pull/3991), [#3981](https://github.com/adap/flower/pull/3981), [#4093](https://github.com/adap/flower/pull/4093), [#4100](https://github.com/adap/flower/pull/4100), [#3939](https://github.com/adap/flower/pull/3939), [#3955](https://github.com/adap/flower/pull/3955), [#3940](https://github.com/adap/flower/pull/3940), [#4038](https://github.com/adap/flower/pull/4038))

### Deprecations

- **Deprecate accessing `Context` via `Client.context`** ([#3797](https://github.com/adap/flower/pull/3797))

### Incompatible changes

- **Update CLIs to accept an app directory instead of** `ClientApp` **and** `ServerApp` ([#3952](https://github.com/adap/flower/pull/3952), [#4077](https://github.com/adap/flower/pull/4077), [#3850](https://github.com/adap/flower/pull/3850))

- **Disable** `flower-client-app` **CLI command** ([#4022](https://github.com/adap/flower/pull/4022))

- **Use spaces instead of commas for separating config args** ([#4000](https://github.com/adap/flower/pull/4000))

- **Remove** `flwr example` **CLI command** ([#4084](https://github.com/adap/flower/pull/4084))

---

<div class="post-metadata">

### Author: ![johanrubak](https://avatars.discourse-cdn.com/v4/letter/j/f07891/32.png) [@johanrubak](https://discuss.flower.ai/u/johanrubak)
#### Post date: [October 8, 2024, 9:49pm UTC](https://discuss.flower.ai/t/announcing-flower-1-11/318/2 "2024-10-08T21:49:54Z")

</div>

Hi  
I was wondering, when will the advanced pytorch example be updated with how to run with the Deployment Engine Deployment Engine and TLS certificates, or with Docker? I would really find this usefull!

Kind Regards  
Johan

---

<div class="post-metadata">

### Author: ![robert](https://dub1.discourse-cdn.com/flex013/user_avatar/discuss.flower.ai/robert/32/138_2.png) [@robert](https://discuss.flower.ai/u/robert)
#### Post date: [October 9, 2024, 10:03am UTC](https://discuss.flower.ai/t/announcing-flower-1-11/318/3 "2024-10-09T10:03:30Z")

</div>

Hello @johanrubak,

You can find instructions on how to run our quickstart examples with our Docker Compose setup here: [Run Flower Quickstart Examples with Docker Compose - Flower Framework](https://flower.ai/docs/framework/docker/run-quickstart-examples-docker-compose.html)

These instructions also work for the `advanced-pytorch` example. The only changes you need to make are in **Step 1** , where you clone `advanced-pytorch` instead of `quickstart-pytorch`:

```bash
git clone --depth=1 https://github.com/adap/flower.git \
    && mv flower/examples/advanced-pytorch . \
    && rm -rf flower && cd advanced-pytorch

```

## Run without W&B

You might also want to disable W&B if you don’t have an api key. In the `advanced-pytorch` directory, run the following command to disable W&B:

```bash
flwr run . local-deployment --run-config use-wandb=false

```

If you have an W&B api key you can set the `WANDB_API_KEY` environment variable in the `compose.yml` file:

```yaml
services:
  # ...
  # create a SuperExec service
  superexec:
    # ...
    environment: # <- add
      WANDB_API_KEY: <YOUR_API_KEY>. # <- add
  # ...

```

## Run with TLS

To run the example with TLS, you will need to download the `with_tls.yml` and `certs.yml` files in the `advanced-pytorch` directory:

```bash
curl https://raw.githubusercontent.com/adap/flower/refs/heads/main/src/docker/complete/with-tls.yml -o with-tls.yml
curl https://raw.githubusercontent.com/adap/flower/refs/heads/main/src/docker/complete/certs.yml -o certs.yml

```

Then, follow the steps described in [Quickstart with Docker Compose - Flower Framework](https://flower.ai/docs/framework/docker/tutorial-quickstart-docker-compose.html#step-6-run-flower-with-tls).

However, the path of the `root-certificate` is different from what’s shown in the tutorial, as it assumes a different directory structure.

Instead, use `root-certificates = "superexec-certificates/ca.crt"`.

## Run with using Docker

If you want to run it with just Docker, you can follow the steps on [Quickstart with Docker - Flower Framework](https://flower.ai/docs/framework/docker/tutorial-quickstart-docker.html).

However, instead of setting up a new project, navigate to the `advanced-pytorch` directory and follow the instructions in the tutorial.

I hope that helps!  
If you have any further questions, feel free to ask.

---

<div class="post-metadata">

### Author: ![paula-delgadodesanto](https://avatars.discourse-cdn.com/v4/letter/p/a3d4f5/32.png) [@paula-delgadodesanto](https://discuss.flower.ai/u/paula-delgadodesanto)
#### Post date: [October 10, 2024, 7:19am UTC](https://discuss.flower.ai/t/announcing-flower-1-11/318/4 "2024-10-10T07:19:11Z")

</div>

Hi, this is great! But I also wonder how we can run the deployment engine directly in the terminal with the commands `flower-supernode`, `flower-superexec`, `flower-server-app`, `flower-superlink`, and `flwr run` for example with 1 server on one terminal and 2 clients on 2 other terminals. Thank you.

---

<div class="post-metadata">

### Author: ![robert](https://dub1.discourse-cdn.com/flex013/user_avatar/discuss.flower.ai/robert/32/138_2.png) [@robert](https://discuss.flower.ai/u/robert)
#### Post date: [October 11, 2024, 3:12pm UTC](https://discuss.flower.ai/t/announcing-flower-1-11/318/5 "2024-10-11T15:12:54Z")

</div>

Hey @paula-delgadodesanto,  
you can run the deployment engine directly in the terminal with the following commands:

**Terminal 1: Start the SuperLink**

```bash
flower-superlink --insecure

```

**Terminal 2 and 3: Start two SuperNodes**

```bash
flower-supernode --superlink 127.0.0.1:9092 --insecure

```

**Terminal 4: Start the SuperExec**

```bash
flower-superexec --executor flwr.superexec.deployment:executor \
    --executor-config 'superlink="127.0.0.1:9091"' --insecure 

```

Before you can run your project, you need to add the following configuration to your `pyproject.toml` file:

```toml
[tool.flwr.federations.local-deployment]
address = "127.0.0.1:9093"
insecure = true

```

This configuration tells the flwr CLI where to run your project.

**Important:** The commands above start the SuperLink, SuperNodes, and SuperExec in insecure mode (without TLS).

**Terminal 5: Run the project**

```bash
flwr run . local-deployment

```

You can then follow the ServerApp logs in Terminal 4 (SuperExec).

* * *

**Additional note**

If your ClientApp needs to access the `node_config` like `context.node_config["partition-id"]`, you will need to set the config values when starting the SuperNode.

For example:

```bash
flower-supernode --superlink 127.0.0.1:9092 --insecure \
    --node-config "partition-id=1"

```

If you have any further questions, please let me know.

---

<div class="post-metadata">

### Author: ![paula-delgadodesanto](https://avatars.discourse-cdn.com/v4/letter/p/a3d4f5/32.png) [@paula-delgadodesanto](https://discuss.flower.ai/u/paula-delgadodesanto)
#### Post date: [October 14, 2024, 7:14am UTC](https://discuss.flower.ai/t/announcing-flower-1-11/318/6 "2024-10-14T07:14:01Z")

</div>

Hi Robert, thanks for your answer! It works perfectly 🙂  
If I want to run it now from one server and two Jetson as clients, do I need to change something such as `pyproject.toml`?:

```auto
[tool.flwr.federations.local-deployment]
address = "127.0.0.1:9093"
insecure = true

```

Thank you again,  
Paula

---

<div class="post-metadata">

### Author: ![robert](https://dub1.discourse-cdn.com/flex013/user_avatar/discuss.flower.ai/robert/32/138_2.png) [@robert](https://discuss.flower.ai/u/robert)
#### Post date: [October 14, 2024, 12:41pm UTC](https://discuss.flower.ai/t/announcing-flower-1-11/318/7 "2024-10-14T12:41:07Z")

</div>

Hi @paula-delgadodesanto, glad to hear it worked for you!

To run the server components (SuperLink and SuperExec) on a separate server, you can use the same commands as above. However, you’ll need to update the `pyproject.toml` file and the SuperNode command.

Specifically, you’ll need to update the `address` in the `[tool.flwr.federations.local-deployment]` section to the IP address of the server and also update the `--superlink` flag when starting the SuperNode to the same IP address.

For example, if the server has the IP address `192.168.2.100`, you would start the SuperNode with:

```bash
flower-supernode --superlink 192.168.2.100:9092 --insecure

```

And update the `pyproject.toml` file to:

```toml
[tool.flwr.federations.local-deployment]
address = "192.168.2.100:9093"
insecure = true

```

If you encounter any issues, feel free to let me know!

---

<div class="post-metadata">

### Author: ![paula-delgadodesanto](https://avatars.discourse-cdn.com/v4/letter/p/a3d4f5/32.png) [@paula-delgadodesanto](https://discuss.flower.ai/u/paula-delgadodesanto)
#### Post date: [October 17, 2024, 6:55am UTC](https://discuss.flower.ai/t/announcing-flower-1-11/318/8 "2024-10-17T06:55:20Z")

</div>

Hi Robert, so whee I try to run the [opacus example](https://github.com/adap/flower/tree/6fc6780ba1a43a9aef5467e456b8764b8f6cfca3/examples/opacus) following your steps, I am facing the next ERROR:

```auto
ERROR : ClientApp raised an exception
...
File"/home/opacus_fl/client_app.py", line 81, in client_fn
    partition_id=partition_id, num_partitions=context.node_config["num-partitions"]
KeyError: 'num-partitions'

```

So I think when we are in simulation there is no problem to pass `context.node_config[‘num-partitions’]`, but when we do it with the deployment engine directly we face the previous error.

Please, how can I solve this?

Thank you so much again,  
Paula

---

<div class="post-metadata">

### Author: ![robert](https://dub1.discourse-cdn.com/flex013/user_avatar/discuss.flower.ai/robert/32/138_2.png) [@robert](https://discuss.flower.ai/u/robert)
#### Post date: [October 17, 2024, 8:47pm UTC](https://discuss.flower.ai/t/announcing-flower-1-11/318/9 "2024-10-17T20:47:49Z")

</div>

Hi Paula,

It looks like the issue arises when using the deployment engine because the node config isn’t being set correctly.

In simulation, the engine knows how many nodes will exist and can set `partition-id` and `num-partitions` automatically, but with the deployment engine, these need to be manually configured.

You’ll need to set the node config using the `--node-config` flag when starting the SuperNode.

For example, if you have two nodes, you can start the first one with:

```bash
flower-supernode --superlink <SUPERLINK_IP>:9092 --insecure \
    --node-config "partition-id=1 num-partitions=2"

```

And the second one with:

```bash
flower-supernode --superlink <SUPERLINK_IP>:9092 --insecure \
    --node-config "partition-id=2 num-partitions=2"

```

Let me know if that helps!
