Last updated: 2026-07-09
Relayium is MIT-licensed and open source, and the server is one self-contained image — no external database, no third-party storage bucket, nothing to sign up for. If you'd rather run the whole thing yourself than rely on relayium.com, this guide gets a server up with Docker and points the CLI at it.
Self-hosting gives you full control over where your data lives, your own domain and TLS certificate, and no dependency on anyone else's infrastructure. Everything below is grounded in the files that ship in the repo — `docker-compose.yml`, `server/.env.example`, and `docs/DEPLOYMENT.md` — so nothing here is a flag or setting that doesn't actually exist.
Relayium's realtime transfers are already peer-to-peer and end-to-end encrypted, so the server never sees your file bytes there. But it does hold your account, and — for stored/link-based transfers — ciphertext blobs and a small SQLite database. Self-hosting means that data lives on infrastructure you control, under your own domain, with nobody else's operational decisions in the loop.
Because the project is MIT-licensed and open source (github.com/relayium/relayium), you can read exactly what the server does before you trust it with anything, and fork or modify it freely.
The repo root ships a `Dockerfile` and a `docker-compose.yml` that build one self-contained image — a static Go binary that serves the prebuilt web app, so there is no separate Node, Go toolchain, or nginx required just to run it:
docker compose up -d --build
Same-network (LAN) transfers and SSH-based push/pull work with nothing extra. Cross-network realtime transfers (two devices behind different NATs) sometimes need a TURN relay to establish a path — the relay only ever sees ciphertext, never your file contents.
docker-compose.yml has an optional relay profile that starts coturn (the TURN server) and a small Redis instance for relay-byte metering, alongside the main server:
RELAYIUM_TURN_SECRET=$(openssl rand -hex 32) docker compose --profile relay up -d --build
The Relayium CLI defaults to relayium.com's rendezvous server for cross-network send/receive. Pass --server to use your own instead:
relayium send ./report.pdf --server https://your-domain
relayium receive --server https://your-domain
Only if you want cross-network realtime transfers to work through strict NATs. Same-network transfers, SSH-based push/pull, and daemon-direct all work without it — TURN is purely for NAT traversal on the cross-network pairing-code path.
Yes. The CLI is completely free and needs no account whether it talks to relayium.com or a server you run yourself — --server just points it at your instance.
Yes. The Docker image listens on plain HTTP on :8080; put nginx or Caddy in front with your own domain and certificate (e.g. via certbot/Let's Encrypt). docs/DEPLOYMENT.md has a complete nginx config to copy.
A SQLite database (accounts, sessions) at RELAYIUM_DB and, for stored/link-based transfers, encrypted blobs at RELAYIUM_BLOB_DIR that the server itself cannot decrypt. Realtime peer-to-peer transfers aren't stored anywhere — the server only relays the signaling handshake.
Install the free Relayium CLI and point it at your own server with --server.
Get the CLI