With Docker

Get the code and start the relay with Docker Compose. The image builds for amd64 and arm64, and the database lives in the relay-data volume.

git clone https://github.com/harryneufeld/bubble.git
cd bubble
docker compose up -d --build

The relay then listens on port 5080. In the app, enter the address during setup or later under “Server”, for example 192.168.1.20:5080.

On a Raspberry Pi

On a Pi with a 64-bit operating system, scripts/setup-pi.sh sets everything up: it installs Git and Docker if needed, fetches the code and starts the relay. Running it again updates it.

scp scripts/setup-pi.sh pi@192.168.1.20:/tmp/bubble-setup.sh
ssh -t pi@192.168.1.20 "bash /tmp/bubble-setup.sh"

The first build on the Pi takes a few minutes.

Reachable from the internet

The relay only speaks HTTP. For access from outside, put an HTTPS proxy in front of it, for example Caddy, nginx or Traefik.

You can run the live tests against a running relay:

BUBBLE_RELAY_URL=http://<server>:5080/ dotnet test --filter LiveRelayTests

Develop it yourself

Bubble is built on .NET 10. The code is split into four projects:

ProjectContents
Bubble.CoreCrypto, message format, invites, backup, relay client, feed logic
Bubble.RelayASP.NET Core relay with SQLite, stores only encrypted blobs
Bubble.App.NET MAUI app for Android, iOS and Windows
Bubble.TestsTests for Core and Relay, including end-to-end through an in-memory relay
dotnet test
dotnet run --project src/Bubble.Relay

The relay then runs on http://localhost:5080. The Android emulator reaches it at 10.0.2.2:5080.