Welcome to P2P Messenger
Select a conversation or start a new chat
The page loaded but the app script didn't start. Hard-refresh (Ctrl+Shift+R). If it persists, open DevTools → Console and send the red error text. You can also reset offline cache: DevTools → Application → Service Workers → Unregister, then reload.
A modern messaging platform built for direct, private, real-time communication. Messages deliver live over WebRTC DataChannels with server relay fallback, and your history persists across refresh and reconnect.
Focused on direct conversation — not feeds, not noise. Every feature is built around live, peer-to-peer exchange.
Messages appear instantly. Typing indicators, read receipts, and delivery states are relayed live while both peers are connected.
WS signaling + WebRTC DataChannelMessages are stored so your history survives refresh and reconnect, and offline messages wait for you. No feeds, no noise — just your conversations.
Persisted · Synced across sessionsWebRTC DataChannel is tried first for direct transport. If a direct path isn't available, a live server relay delivers without storing.
P2P first, relay fallbackPer-device JWT sessions with revoke and logout-everywhere, bcrypt passwords, and honest session visibility in Settings.
JWT · bcrypt · per-device revokeVanilla JavaScript, no heavy framework. The interface stays responsive on low-end devices and slow networks.
~30 KB shell · instant first paintNo download required. Installable PWA, responsive layout, and voice/video calls right in the browser.
PWA · mobile & desktopSign up with email and a password. Your identity key is generated locally and never leaves your device.
Search for a user, send a friend request, and get notified live when they accept.
Open a direct chat. The app negotiates a peer connection; media and messages flow peer-to-peer when possible.
Reactions, replies, edits, files, voice notes, and calls — all live. Nothing is kept after you leave.
No inflated claims. The platform is honest about what it does, what it protects, and what is still being improved.
Bcrypt hashing, HTTP-only cookies with Bearer fallback, per-device session records and explicit revoke.
Signaling coordinates peers; content flows peer-to-peer when possible, with live server relay and offline queue as fallback.
Accounts, friendships, and conversation membership are stored. Messages are not. Push notifications carry titles only.
Block enforcement tears down P2P and relay paths, mutes, pins, and report flows are built in.
The app implements ECDH P-256 + HKDF + AES-GCM with keys in IndexedDB. Public bundles are exchanged over authenticated signaling.
Honest status: encryption is active when a session exists and is shown live in Settings. Without a session the app sends plaintext over the P2P/relay path. There are no safety numbers yet, so peer identity is not independently verified.
See docs/encryption.md for the full threat model and verification steps.
Screenshots from the running application — not illustrations. Every panel below reflects a real view.
Friend requests are realtime. Blocking tears down any active P2P connection and drops further relay frames for that peer.
Displayed verbatim in Settings. No hidden fallback — plaintext is shown when no session exists.
Not a critique of other tools — just a clear description of this one's philosophy.
ECDH P-256 + HKDF-SHA256 + AES-GCM; keys live only in your browser's IndexedDB. Without a session the transport is plaintext over the P2P/relay path — the Security panel in Settings shows the live state. Peer identity is not yet verified with safety numbers.docs/known-limitations.md for the full scope.Create your account and experience a simpler approach to real-time communication — direct, persistent, and honest about its limits.
Secure peer-to-peer messaging
Free · No install · Works on mobile & desktop · History that persists