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:
| Project | Contents |
|---|---|
Bubble.Core | Crypto, message format, invites, backup, relay client, feed logic |
Bubble.Relay | ASP.NET Core relay with SQLite, stores only encrypted blobs |
Bubble.App | .NET MAUI app for Android, iOS and Windows |
Bubble.Tests | Tests 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.