The Hosted Relay
If you pair a phone without changing anything, your desktop connects to wss://relay.kangentic.com. Kangentic operates that server. This page is about that specific instance: who runs it, what it can see, where it runs, and what it keeps.
What the Official badge marks
Section titled “What the Official badge marks”In Settings > Mobile Devices, the Relay row offers Kangentic Relay and Custom Relay. The Official badge appears beside the first one, and only the first one. Pointing the row at your own address removes it. The badge means one thing: this is the instance Kangentic runs, at a published address.
It does not mean an account, a login, sync, backup, or storage. The relay holds nothing of yours. It was called “Kangentic Cloud” until that name kept implying a service that keeps your data, which is the opposite of what it does.
What it can and cannot see
Section titled “What it can and cannot see”The relay forwards opaque ciphertext between your phone and your desktop. It holds no keys, terminates no encryption, and has no code path that could decrypt a frame. The encryption is negotiated directly between your two devices, inside the tunnel the relay forwards, and the relay’s own source cannot even link the library that would parse it. The blind-relay guarantee explains how that is enforced rather than promised, and Security & Encryption covers the handshake itself.
So the honest question is not what it decrypts, which is nothing. It is what carrying your traffic reveals anyway.
What a relay operator can still see
Section titled “What a relay operator can still see”Being blind to content is not being invisible. Anyone operating a relay instance, including Kangentic’s own hosted one, can still observe:
- Source and destination IP addresses of both peers.
- Connection timing: when each peer connects, disconnects, and reconnects.
- Frame sizes and frequency, which is traffic shape rather than content.
- The pairing graph: which slot identifiers co-occur, meaning which two connections were rendezvoused together.
Two further points are specific to how this instance is run:
- TLS is terminated at Cloudflare, which therefore sees the full request URL, including the slot identifier. That identifier is a derived routing label, not key material: the pairing token stays in the QR code and never travels to the relay, so seeing a slot does not let anyone read a session or impersonate a device. What it does expose is the same pairing-graph visibility the relay itself has, one layer earlier. Running your own without Cloudflare removes that party.
- The reconnect slot identifier is stable for the life of a pairing, so an operator can correlate one device’s reconnects over time.
None of this is specific to this implementation. It is inherent in operating any relay. Running your own moves every line above from Kangentic to you.
Where it runs
Section titled “Where it runs”One instance, behind Cloudflare’s proxy, which terminates TLS and absorbs volumetric traffic before anything reaches the origin.
A single instance is deliberate rather than a stage yet to be outgrown. The table matching two peers to a slot lives in the relay process’s memory, so both peers must reach the same process. Replicas behind an ordinary load balancer would simply fail to pair.
It runs ghcr.io/kangentic/relay, the same published image you get if you self-host. Only tagged releases are deployed, behind a health gate that rolls back to the previous image automatically if the new one does not come up healthy.
What it retains
Section titled “What it retains”Nothing.
- No database and no disk. The relay source imports no filesystem module at all. The slot table lives in process memory and is gone when the process restarts.
- No store and forward. A connection waiting for its partner may buffer at most 1 MiB, for at most 60 seconds, and is then closed. There is no queue, no waiting list, and no retry later.
- Nothing waits for an offline phone. When your phone is not connected there is no relay-side mailbox, because the relay has nowhere to put one. The offline path is an encrypted push notification, which travels through Expo and then APNs or FCM and never touches the relay at all. See Push Notifications.
- Logs carry no slot identifiers and no client IP addresses. The relay logs very little, and no logging call site passes a slot in any form.
test/logging.test.tsfails the build if one ever does. - Metrics are aggregate counters only, with no slot identifiers, IP addresses, or per-slot labels, and they require a token before they answer at all.
What it costs
Section titled “What it costs”Nothing, and there is no account to make. There is no signup, no sign-in, and no device registration with Kangentic. Your desktop dials a WebSocket, your phone dials the same one, and they find each other.
The relay does ship an admission hook that a separate control plane could use to gate access to a hosted instance. The shipped binary never constructs it, and this instance runs the shipped binary, so nothing is gated today. Because the relay is AGPL-3.0-only, any such control plane would have to attach from outside the process rather than being linked into it, which is what keeps the relay itself open regardless.
If you would rather Kangentic saw none of it
Section titled “If you would rather Kangentic saw none of it”Run your own. It is a container, a hostname, and TLS, and every line under what a relay operator can still see then describes you instead of Kangentic.
In Settings > Mobile Devices, set Relay to Custom Relay, enter your address, and use Test connection to confirm it responds. Self-Hosting the Relay has the rest.
Reporting a vulnerability
Section titled “Reporting a vulnerability”Use GitHub’s private vulnerability reporting on the relay repository, or email hello@kangentic.com with “SECURITY” in the subject line. Issues in this specific hosted deployment go to Kangentic directly rather than to the public repository.
Next steps
Section titled “Next steps”See also:
- Relay Security Model - what the relay guarantees, and the risks it accepts
- Self-Hosting the Relay - take Kangentic out of the picture
- Security & Encryption - the encryption this relay carries but cannot read
- Privacy Policy - the same disclosure in policy form
Kangentic is free and open source. A star helps other people find it.
Star on GitHub