End-to-End Encryption
Noise Protocol XX with X25519 + ChaChaPoly. The server never sees plaintext, only opaque encrypted blobs.
Relayly is a self-hosted WebSocket relay that syncs your own devices using end-to-end encryption, run it anywhere you own, no accounts, no cloud, no third party ever sees your data.
# Start the relay server with Docker
$ docker compose up --build -d
# Register your first device
$ docker exec relayly /relayly pair "My Phone"
✓ Device registered
Pairing code: 483 921
QR code displayed in terminal
Relay running at ws://localhost:8080/ws▊Relayly is built on a radical premise: your relay server should be dumb, tiny, and trustless.
Noise Protocol XX with X25519 + ChaChaPoly. The server never sees plaintext, only opaque encrypted blobs.
6-digit short code or QR code. Pair devices in seconds with no accounts, emails, or cloud registration.
Low-latency WebSocket relaying with minimal server overhead. Built for local-first architectures.
Exponential-backoff reconnection built into both Go and TypeScript SDKs. Never drop a connection silently.
Embedded SQLite, no PostgreSQL, no Redis. A single portable binary with no external dependencies.
Pre-built Docker images and a single portable binary. Deploy with one command on any Linux host.
HTMX-powered live dashboard for device management, connection monitoring, and one-click revocation.
Public Key Locking prevents server-side impersonation. Even a compromised relay can't swap device keys.
No accounts. No configuration files to wrestle. Just a server you control and devices that trust only each other.
One Docker command. Runs on your VPS, Raspberry Pi, or any machine you own. No sign-up, no cloud account, no configuration required to get started.
$ docker compose up --build -d
✓ Relay running at ws://localhost:8080/wsGenerate a 6-digit code or QR scan from any paired device. The code expires in 5 minutes, no long-lived secrets, no manual key exchange.
$ docker exec relayly /relayly pair "My Phone"
✓ Pairing code: 483 921 | Expires in 5 minEvery message is end-to-end encrypted before it leaves your device. The relay server sees only opaque ciphertext, so even a compromised relay learns nothing.
// Relay sees: [0xc3 0x4f 0x8a ... 48 bytes]
// Device B decrypts: "Hello from My Phone"Relayly was built on a radical premise: your relay server should know nothing about your data. No accounts, no tracking, no analytics. The server is just a dumb pipe that forwards encrypted bytes it cannot read.
Both devices verify each other's static public keys via Noise Protocol XX.
Session keys are ephemeral and discarded after each use. Past sessions cannot be decrypted.
Once connected, the server locks a device to its public key. Even a compromised relay can't swap keys.
Relayly is open-source and community-funded. Your support helps us maintain the infrastructure and continue developing a private, decentralized future.
Direct support via GitHub
Support us monthly or with a one-time donation through our GitHub organization.
Transparent funding
Contribute to our collective and help us fund specific features and maintenance.
Want to contribute code instead?
Join our DiscordSelf-host your own relay server with Docker. No cloud provider, no subscription, no lock-in. Your data, your infrastructure.
MIT licensed · No telemetry · Go + TypeScript SDKs included