Hoppr, encrypted peer-to-peer mesh messenger
_ _ _
| |_ ___ _ __ _ __ _ _ __| |_ __ _| |_
| ' \/ _ \ '_ \ '_ \ '_|/ _| ' \/ _` | _|
|_||_\___/ .__/ .__/_|(_)__|_||_\__,_|\__|
|_| |_|
Encrypted peer-to-peer messaging over Bluetooth mesh networks.
No internet. No servers. No carrier. No account. Just radios talking to radios.
Overview
Hoppr is a messaging platform engineered for environments where internet access is unavailable, degraded, or untrusted. Messages propagate device-to-device through a Bluetooth Low Energy mesh, requiring no centralized infrastructure, accounts, or identifiers.
Vision
Decentralisation has come in layers. Each one removed a dependency.
- 2009Bitcoinmoney without banks
- 2022Nostrspeech without platforms
- 2026Hopprmessaging without the internet
Bitcoin freed value from custodians. Nostr freed identity and publication from centralised hosts. Hoppr removes the last assumption: that a network has to exist at all. A phone without service, a city under blackout, a protest, a festival, a desert. The mesh still carries.
The same Bluetooth radio your device already has, used the way radios were always meant to be used: direct, local, and unowned.
Architecture
- Devices within Bluetooth range establish peer sessions automatically.
- Messages are relayed hop-by-hop through intermediate nodes toward the recipient.
- All traffic is end-to-end encrypted using the Noise XX handshake pattern with Curve25519, ChaCha20-Poly1305, and Ed25519 signatures.
Reach Analysis
In a mesh of N devices with average node degree d, a gossip packet propagates to all peers in expected O(logd N) hops. Under an asynchronous flood at uniform density, the expected number of devices reached after h hops is bounded by:
E[R(h)] = min( N , d · (d−1)h−1 )
Field example. Five peers on average within Bluetooth Low Energy range (d = 5), default TTL of seven hops (h = 7):
E[R] = min( N , 5 · 46 ) = 20 480 devices
Duplicate packets are suppressed per device by a bounded LRU cache of 1000 recent message identifiers with a five-minute expiry. Lookups are O(1) and deterministic. To reconcile missed messages between peers on reconnection, each node exchanges a 400-byte Golomb-Coded Set summarising what it has seen. For a GCS encoding n elements at target false-positive rate p, the expected bits per element is:
bits / element ≈ log2( 1 / p ) + 1 / ln 2
Field example. With n = 200 recent identifiers and p = 0.01, each device advertises roughly 200 · 8 ≈ 1600 bits of state, or about 200 B encoded. Under 1% false-positive pressure, a 400-byte summary carries on the order of 400 message identifiers before a peer must ask for the full set.
In practical terms: a packet released into a moderately dense mesh reaches thousands of devices within seconds of radio time, while each individual device rejects duplicates exactly, and missed messages are healed on reconnection through a sync envelope smaller than a single TCP segment.
Capabilities
- Mesh-first architecture. Built on the transport layer. Social graphs, feeds, and recommendation systems are absent by design.
- End-to-end encryption. 1:1 direct messages use a Noise XX handshake. Mesh broadcasts are signed packets. Nostr fallback uses NIP-17 gift-wrap.
- Dual transport. Automatic fallback to Nostr relays routed over the Tor network (via Arti) when mesh connectivity is unavailable.
- Adaptive relay control. Seven-hop default TTL with probabilistic forwarding at elevated peer density to conserve battery without reducing reach.
- GCS gossip sync. A 400-byte Golomb-Coded Set reconciles missed messages between peers on reconnection at a 1% false-positive rate.
- QR peer verification. On-device live-camera scan compares Ed25519 and Noise identity fingerprints before a session is trusted.
- Geohash channels. Location-scoped public rooms and location notes ride the Nostr transport.
- Panic wipe. A single gesture destroys keys, message caches, and identity state on the device.
- Slash commands. IRC-style controls:
/who,/fav,/block,/unblock,/me,/slap,/help. - Payment chip detection. Lightning bolt11, LNURL, and Cashu tokens are recognised inline and tappable to open a wallet. Sending is not yet implemented.
- iOS Share Extension. Share text and links from Safari or any app directly into the mesh.
- Native macOS app. Same codebase. Shipping since v1.5.
- Efficient runtime. Approximately 12 MB installed footprint. Cold launch under 400 ms on iPhone 12.
- Data minimization. No telemetry, crash reports, or advertising identifiers are transmitted from client devices.
Blog
Signed, long-form notes published by the Hoppr team on protocol design, mesh research, and release notes. Readable without an account, verifiable on any Nostr client.
Open the blog launching soon
Roadmap
- v1.6Settings screen with opt-in light mode and Tor-enforce toggle.2 to 3 days
- v1.7Reactions via NIP-25 and a new Noise payload type.1 week
- v1.8Reply threads. Groundwork for moderated groups.1 to 2 weeks
- v1.9Disappearing DMs with per-peer TTL and NIP-40 support.1 week
- v2.0NIP-57 zaps, receive path first.1 to 2 weeks
- v2.1Voice notes and images in Nostr DMs and geohash channels.2 to 3 weeks
- v2.2NIP-47 Nostr Wallet Connect for Lightning send.2 to 3 weeks
Every release is signed. Pre-release builds are not distributed outside of closed testing programmes.
Technical Specifications
- Transport
- Bluetooth Low Energy mesh
- 1:1 DMs
- Noise XX handshake
- Mesh packets
- Signed broadcast
- Key agreement
- X25519 (Curve25519)
- Encryption
- ChaCha20-Poly1305
- Signing
- Ed25519. secp256k1 Schnorr for Nostr
- Hashing
- SHA-256
- TTL
- 7 hops default. Fragment-relay cap 5
- Dedup cache
- LRU 1000 entries. 5 min expiry
- Gossip sync
- 400 B Golomb-Coded Set. 1% FPR
- Voice codec
- AAC. M4A. 16 kHz mono 16 kbps
- Online relay
- Nostr via Tor (Arti)
Availability
In final testing. Public downloads open soon.
- iOS
- coming soon
- macOS
- coming soon
- Android
- coming soon
- Linux
- coming soon
- Windows
- coming soon