A relay doesn't need to read
a message to forward it
MeshWhisper is messaging infrastructure built on this observation. Encrypted on the device. Forwarded as an opaque blob. Decrypted on the other end. The relay never holds a key. It doesn't need to.
The backbone
One Docker container. Packet relay, store-and-forward, push notifications, media storage, and a prekey directory. Always on. Always connectable. Never holds a decryption key.
How the node works →The mesh
Every device running any SDK-embedded app is a potential relay for every other. The relay infrastructure is shared across all participating applications. The relay mesh is shared. The application namespaces are isolated.
Read more →Foundation node live
The relay is running at relay.meshwhisper.org.
Prudence — the reference PWA — is being built on the SDK.
Developer adoption
Other developers deploy nodes. Multi-node privacy routing becomes real. No single operator sees both ends of a conversation.
Mesh density
Device-layer relay becomes meaningful. Privacy strengthens automatically as a side effect of adoption — the inverse of centralised messaging.
Integrate the SDK
Use the relay at wss://relay.meshwhisper.org during development.
Deploy your own node in production.
const mw = await MeshWhisper.init(({
namespace: 'com.example.myapp',
node: 'wss://relay.meshwhisper.org',
onMessage: (msg) => display(msg),
});
// PQXDH key exchange happens automatically on first contact
await MeshWhisper.send(contactId, payload);
-v meshwhisper_data:/data \
-e BASE_URL=https://relay.myapp.com \
ghcr.io/meshwhisper/node:latest