FrogTalk is built privacy-first. Your messages are encrypted before they leave your device, we run no analytics, and we sell nothing to anyone. This page explains exactly what that means in plain English.
Last updated: 28 April 2026
Plain-English summary
If you only read one section, read this:
Direct messages are end-to-end encrypted with the Signal Protocol (X3DH + Double Ratchet). We can't read them, and neither can anyone with access to our servers.
Voice and video calls are peer-to-peer over WebRTC. Audio and video never touch our server.
We do not run analytics, do not embed third-party trackers, and do not sell or share your data with advertisers.
The only personal information required to sign up is a nickname and password. No email, no phone number.
You can self-host FrogTalk — the source is open and the data is a single SQLite file you fully control.
Who we are
FrogTalk ("we", "us") is the operator of the chat service available at frogtalk.xyz and the official Android, iOS, Linux, Windows, and desktop applications. The service is also available as open-source software you can run on your own infrastructure; this policy describes the version we operate at frogtalk.xyz. Self-hosted instances are governed by the policies of their respective operators.
What we collect
To provide the service we collect the minimum information necessary:
Account information
Nickname — your display handle, chosen by you.
Password hash — stored salted and hashed; we never see your plaintext password.
Public encryption keys — your Signal identity key plus a signed prekey and a pool of one-time prekeys, so other users can start an encrypted DM with you even while you're offline. Your private keys never leave your device.
Optional profile data — avatar, status, bio, pronouns. Whatever you fill in is shown to other users; what you leave blank is never collected.
Message metadata (server-visible)
Sender, recipient, room ID, and timestamp for every message. The contents of DMs are encrypted; the routing envelope is not.
Room and channel messages are end-to-end encrypted with Signal Sender Keys — the server stores only ciphertext. The exception is a channel with an outbound Discord/Telegram bridge enabled by an operator, which intentionally falls back to a shared room key so the bridge can forward readable text; this is clearly indicated in the channel header.
Device & connection data
IP address — recorded at three points and used solely for safety:
At registration the IP that created the account is stored alongside the account row so we can identify and remove bot-farm sign-ups. This value is kept for the life of the account but is never shown to other users.
At login the IP, an approximate user-agent string, and the timestamp are attached to the session record so you can review and revoke active sessions. Session records are deleted when the session ends or expires.
On every request the IP is held in memory by the rate-limiter (slowapi) to enforce per-IP caps on registration, login, federation provisioning, and abuse-prone endpoints. These counters live only in process memory and are not persisted.
Connection access logs (nginx) keep the IP for at most 30 days, then are rotated and discarded. We do not sell, share, or use IPs for advertising or analytics. If you connect through a VPN or Tor, only that exit address is what we ever see.
Device push tokens (FCM on Android, APNs on iOS) when you opt into push notifications. Used only to deliver notifications.
WebRTC ICE candidates are exchanged through our signalling channel during call setup, then call media flows directly between peers.
Content you upload
Avatars, room media, story uploads, and shared files are stored on our server so other users can view them. They are scoped to the audience you choose at upload time.
What we don't collect
No email addresses (registration is nickname-only).
No phone numbers.
No real names or government IDs.
No advertising identifiers, IDFA, or AAID.
No location data — we never request GPS, and IP is not converted to a coarse location for profiling.
No third-party analytics SDKs (no Google Analytics, no Mixpanel, no Sentry, no Firebase Analytics).
No browser fingerprinting.
No contact-list scraping. We will never ask to upload your address book.
End-to-end encryption
FrogTalk uses three different end-to-end cryptosystems depending on the surface, each picked for the threat model of that surface. All encryption happens in your browser, desktop client, or mobile app — the server only ever sees ciphertext.
Direct messages — Signal Protocol
Every DM is encrypted with the Signal Protocol (the same one used by WhatsApp and Signal):
Key agreement: X3DH against the recipient's published prekey bundle (identity key + signed prekey + one-time prekey).
Per-message ratchet: Double Ratchet (Curve25519 DH + HKDF-SHA-256 + AES-256-GCM with HMAC). Every message advances the ratchet so a future device compromise cannot decrypt past messages.
Verification: the in-app Encryption info modal shows a Safety Number (verifiable fingerprint of both identity keys) and a 4-emoji shortcode. A change is announced in-room with a system toast.
Private keys are generated on your device and stored in IndexedDB / iOS Keychain / Android Keystore depending on platform. They never leave.
Room messages — Signal Sender Keys
Group conversations use a Sender-Keys design built on top of the same identity layer:
Each device of yours holds its own sending chain (HMAC-SHA-256 chain-key ratchet → HKDF-SHA-256 → AES-256-GCM with bound additional-authenticated-data).
The chain key is signed with an XEdDSA key derived from your Curve25519 identity so other members can verify authorship even when traffic is fanned out by the server.
When you enter a room, your client distributes a Sender-Key Distribution Message (SKDM) to each member through their Signal DM session. The SKDM itself is ciphertext to the server.
If a member is offline, the SKDM is buffered in an opaque server spool and delivered as soon as that recipient comes back online.
When a member is banned, the remaining members automatically rotate their sender keys so the removed member cannot decrypt future messages.
Voice & video calls — DTLS-fingerprint signing
WebRTC calls already encrypt media end-to-end with DTLS-SRTP, but a hostile signalling server could in principle swap fingerprints during call setup. FrogTalk closes that gap:
Both the offer and answer SDP carry an XEdDSA signature over the DTLS fingerprint, produced by your Signal identity key.
The receiving client verifies the signature against the peer's pinned identity before answering. A mismatch surfaces in-call and the connection is refused.
Once verified, the Safety Number you see for that user in DMs also applies to the call.
What this means in practice: a court order, a server breach, or a rogue admin can reveal the metadata of who messaged whom and when, but cannot reveal the contents of direct messages, room messages, or call media. We have no key to give.
The one explicit exception is a room with an outbound Discord or Telegram bridge enabled. Because the bridge has to forward readable text to a third-party platform, those rooms fall back to a transitional AES key shared between members. This is clearly indicated in the channel header, and DMs are never bridged.
Discord & Telegram bridges
FrogTalk channels can optionally be linked to a Discord channel or Telegram chat. When a bridge is enabled by a room operator:
Messages posted in the FrogTalk room are forwarded as plaintext to Discord / Telegram, and vice versa.
Your nickname and avatar URL are sent to the bridged platform so the message renders with your identity.
Messages crossing the bridge are also subject to Discord's or Telegram's own privacy policies once they leave our infrastructure.
Bridges are only ever activated by room operators and are clearly indicated in the channel header. DMs are never bridged.
Cookies & local storage
We use a small number of strictly-necessary client-side storage items:
Session token (HTTP cookie or localStorage) — keeps you logged in.
Encryption keys & cached messages (IndexedDB) — required for E2E encryption to work offline.
UI preferences (localStorage) — your theme, mute settings, last-opened room.
We do not use any tracking cookies, advertising cookies, or shared third-party cookies.
Third-party services
We rely on a deliberately small set of third parties to run the service. Each is used only for the purpose listed.
Push notification gateways — Google Firebase Cloud Messaging (Android) and Apple Push Notification service (iOS). Receive only the notification metadata required to wake your device. Push payloads do not include DM contents.
STUN/TURN — public Google STUN servers are used for WebRTC NAT traversal. They see network endpoints, never call media.
CDN & DDoS protection — Cloudflare fronts the public website; standard infrastructure logs apply per Cloudflare's own privacy policy.
We do not embed Facebook pixels, Google Analytics, advertising networks, or social-share trackers anywhere on the site or in the apps.
Data retention
Account data is kept until you delete your account.
DMs are kept on the server in encrypted form until you delete them or your account.
Public room messages are kept indefinitely so that history persists for new members; channel admins can purge messages.
Connection logs (IP, user-agent) are retained for at most 30 days, then discarded.
Backups roll over within 30 days; deleted content is unrecoverable thereafter.
You can delete your account at any time from Settings → Account → Delete account. This permanently removes your profile, messages, uploads, friend list, and keys from our servers.
Your rights
Regardless of where you live, you can:
Access the data we hold about you — request an export from settings.
Correct inaccurate data — edit your profile at any time.
Delete your account and associated data.
Object to processing — most processing is essential to providing the service; if you object, deleting your account is the appropriate remedy.
Port your data — exports are provided in a machine-readable format.
If you are in the EU/EEA, UK, California, or another jurisdiction with a data-protection authority, you also have the right to lodge a complaint with that authority.
Children
FrogTalk is not directed at children under 13 (or under 16 in the EU/EEA). We do not knowingly collect personal information from children below those ages. If you believe a child has created an account, please contact us and we will delete it.
Changes to this policy
If we make material changes to this policy, we will post a banner in the app and update the "last updated" date at the top of this page at least 14 days before the changes take effect. Minor clarifications may be made without notice.
Contact
Questions, data requests, or privacy concerns? We answer all of them.