Skip to content
BLE Relay
Bluetooth Low Energy · Relayed

Share a BLE device
over the network.

No physical proximity required. One device holds the real Bluetooth connection to a peripheral; another reads, writes and subscribes to it remotely, through a relay server you control.

Run your own relayComing to Google Play
How it works
BLEPERIPHERALbleHOST DEVICEowns the real BLE connectionwss://RELAYDroutes frames, both directionswss://CLIENT DEVICEreads / writes / subscribesbleBLEOTHER DEVICES(ANDROID / LINUX)SELF-HOSTED, OR OUR TEST RELAY AT BLERELAY.OVERKILL.CC

The host device holds the real Bluetooth Low Energy connection to a peripheral. The client device connects to it remotely through relayd, and can read, write and subscribe to that peripheral exactly as if it were connected locally. relayd itself never parses BLE data — it just moves frames between the two ends.

Useful for testing a BLE peripheral from another room, letting a teammate interact with your device remotely, or bridging a BLE-only device onto a network for more than one client. On Android and Linux, a client can go one step further and re-advertise the connection as its own local BLE peripheral — ordinary BLE devices nearby can then connect to it directly, no app needed on that end.

Features

What you get

Host or client

Either role from the same app — hold the real BLE connection, or reach one remotely.

QR-code pairing

Scan a code to join a session instantly, or type the username/password manually.

Optional TLS

Run the relay over wss:// for an encrypted connection end to end.

Stays connected

A foreground notification keeps the relay alive while hosting, even with the screen off.

Self-hosted relay

Point the app at your own relayd instance — you control where your data goes.

Open wire protocol

The relay protocol is documented well enough to reimplement a client in any language.

Bridges back out

On Android and Linux, a client can re-expose the relay as a real local BLE peripheral — any nearby BLE device can find and connect to it directly, no app required.

The project

Two parts, one system

The app and the relay server live in separate repositories and can be built and deployed independently.

BLE Relay

Flutter app · Android, Linux, WindowsClosed source

The client-facing app. Runs as a host — holding the real Bluetooth Low Energy connection to a peripheral — or as a client, reading, writing and subscribing to that peripheral over the network as if it were connected locally.

flutterdartbleandroid

relayd

Go server · Linux, macOS, WindowsOpen source · GPL-3.0

The WebSocket relay server that backs the app. It pairs one host with N clients and routes GATT frames between them — it has no idea what a peripheral is, that stays entirely in the apps on both ends.

gowebsocketsystemd
Try it now

Use our test relay

Host
blerelay.overkill.cc
Port
443
TLS
on

Testing only. This is a shared instance for trying the app out — it can be restarted, rate-limited, or wiped without notice, and comes with no uptime guarantee. Don't depend on it for anything real; self-host relayd instead →

Run relayd

Self-host the relay

./relayd -addr :8443 \
  -tls-cert /path/cert.pem \
  -tls-key /path/key.pem

Prebuilt binaries for Linux, macOS and Windows ship with every release, plus a systemd deploy script. This is what we run ourselves.