PrivaMesh is a private messenger with no servers and no accounts. Messages are encrypted end to end and travel as padded ciphertext on Solana, to a fresh one-time address each time. There is no phone number, no email and no database holding who talks to whom: your identity is a 12-word recovery phrase generated on the machine.
Keys, contacts and message history stay on the computer, sealed with a key held by Windows DPAPI. Nothing is uploaded, and nothing can be restored from us, because we hold nothing.
The installer and a portable zip are on the releases page. Windows 10 or 11, 64-bit. A Java runtime is bundled; nothing else is needed.
The build is not code-signed yet, so SmartScreen will warn you. Check the file
against SHA256SUMS.txt in the release if you would rather verify it than trust
the click-through.
The desktop client is its own identity with its own recovery phrase. It does not sync with an iPhone account and cannot import one: there is no server to sync through. Add your phone as a contact if you want to message yourself.
Each message is a Solana transaction and costs about 10,600 lamports, roughly $0.0008. The app creates a fee wallet on first run and shows you its address; you fund it, and every message spends from it. No subscription, no relay in the path, no account with us to bill. When the wallet is empty, sending stops until you top it up.
An optional passcode locks the app, with an escalating cooldown after five wrong entries, a lock button and an auto-lock after inactivity.
You can set a second code. Entering it erases every message, contact and key on the machine and returns the app to its first-run state, with nothing on screen to show which code was typed. It cannot be undone, and it cannot reach the chain: ciphertext already published stays there, unreadable.
./gradlew :app-desktop:run
JDK 17 or newer. The app is Kotlin and Compose Multiplatform, and it builds and runs on Windows, macOS and Linux; only the installers are Windows-specific.
The protocol layers are not in this repository. core-crypto, core-chain and
core-messaging are consumed from
privamesh-android as a composite
build, so the two clients cannot drift apart. Clone both into the same parent
directory - settings.gradle.kts expects to find ../privamesh-android.
./gradlew test
packaging/README.md has the detail. In short: the self-extracting installer and
the portable zip build anywhere, an MSI needs a Windows machine with WiX, and
packaging/build-release.ps1 runs the tests, builds both installers, proves the
packaged app starts, signs each binary and writes the checksums.
| Path | What it holds |
|---|---|
app-desktop |
The Compose Desktop app: window, panels, settings, installer tasks |
core-desktop-data |
SQLDelight store, DPAPI-backed secrets, the local vault |
packaging |
Installer scripts, icon, the self-extracting stub |
reference/ |
A read-only snapshot of the iOS source, which is the protocol specification |
Report vulnerabilities to privamesh@proton.me with security in the subject,
not as a public issue. Confirmed findings are paid; the policy, the scope and the
list of issues already reported and fixed are in
SECURITY.md.
There has been no independent security audit. The primitives are well studied, this implementation of them is not. What PrivaMesh does not protect you from is listed at privamesh.org/limitations.
This distribution includes cryptographic software. The country you are in may restrict the import, possession, use or re-export of encryption software. Check your own laws before using or redistributing it.
MIT. Use it, fork it, ship it, sell it. Keep the copyright notice.
The licence covers the code here. It is not permission to use the name PrivaMesh
or the logo for a fork. reference/swift-core/ is a snapshot of the
iOS client, under the same licence.
One file is not ours: packaging/sfx/7z.sfx is the self-extracting stub from the
official 7-Zip release, redistributed under its own terms and documented, with
its hash, in packaging/sfx/README.md.