// secure transport layer

Privacy is not a policy. It is mathematics.

End-to-end encrypted messaging on a relay you run yourself. Messages are encrypted on your phone before they leave it, and the relay passes on ciphertext it holds no keys for.

01 / architecture

The relay carries ciphertext.

Messages are encrypted with the Double Ratchet on your phone. The relay you run routes them between devices without the keys to read them. It is not blind to who talks to whom, and the security model says exactly what it can see.

ciphertext = XChaCha20Poly1305(key=k_ratchet, msg=plaintext)
01 / key generation

Strictly on-device.

Secret keys are generated on your phone and never sent anywhere. Each account signs its public keys, so the relay cannot swap in keys of its own.

02 / metadata

Thin logs, stated limits.

While running, the relay sees which accounts are connected, when and from which IP address, and which two have a conversation open. It does not write this to its logs. Messages for someone offline are held in memory for up to 72 hours, filed under the recipient, with the sender inside the encryption.

03 / transport

TLS 1.3 only.

All traffic is WebSocket inside TLS 1.3, terminated by the relay itself. The app pins the relay’s identity after the first connection, and every message is padded to a size bucket.

02 / self-hosting

Not a service. Software you run.

There is no rChat cloud, no sign-up and no subscription. You deploy the relay on a server you control and point the app at it. Whoever runs a relay is its operator, and decides where it runs and who may use it.

Who can see what The relay operator can see connection metadata, never message content. What the relay logs and stores
03 / comparison

How it compares.

rChat trades a hosted service for one you control. It is younger and smaller, and it does not have everything the large messengers have.

Feature rChat Signal Telegram
Who runs the server You Signal Telegram
End-to-end encrypted by default Yes Yes No (secret chats only)
Run your own server with the official app Yes No No
Contact key verification Safety numbers and QR Safety numbers Secret chats only
04 / ownership

Don’t trust us. Run your own node.

You should not have to trust whoever runs a server. rChat is open source: audit the code, build the relay and run it on a host you control.

The relay terminates TLS itself and obtains and renews its own certificate over TLS-ALPN-01 on port 443. No port 80, and no TLS-terminating proxy in front.

cargo build --release --bin rchat-server
# point an A/AAAA record for relay.example.com at this host
sudo install -m 0755 target/release/rchat-server /usr/local/bin/
sudo useradd --system --home /var/lib/rchat --shell /usr/sbin/nologin rchat
# /etc/rchat/server.toml
[server]
bind_addr = "0.0.0.0:443"
websocket_path = "/a-long-random-path"
relay_identity_path = "/var/lib/rchat/relay_identity.key"
[server.acme]
enabled  = true
domains  = ["relay.example.com"]
contacts = ["mailto:[email protected]"]
cache_dir = "/var/lib/rchat/acme"
# once, as the service user: create the relay identity (prints its pin)
sudo install -d -m 0700 -o rchat -g rchat /var/lib/rchat
sudo -u rchat rchat-server --config /etc/rchat/server.toml --init-relay-identity
sudo systemctl enable --now rchat-server
technical whitepaper · v2.0 · october 2026

End-to-end encrypted messaging on a relay you run

Abstract

How rChat’s protocol version 2 works: key bundles signed and bound to the TLS session, conversations that open only when both people ask, safety numbers, relay identity pinning and size padding. It also states what a self-hosted relay still learns, and what rChat does not protect against.

  • Protocol v2
  • Signed keys
  • Message requests
  • Safety numbers
  • Padding
  • What the relay still sees
05 / about

Who makes rChat.

The developer

rChat is developed by PDG Global Limited, a company based in Hong Kong, outside the jurisdiction of the Five Eyes intelligence alliance.

Jurisdiction

Because rChat is self-hosted, the law that governs a relay is the law where its operator runs it, not where the developer is based. Message content is protected by end-to-end encryption, which does not depend on any jurisdiction.

No hosted service

PDG Global Limited does not run relays for users and holds no accounts or messages. For what a relay can see, read the security model.

Run rChat.

Set up a relay on your own server, then connect the iOS app to it.