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.

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

  1. Devices within Bluetooth range establish peer sessions automatically.
  2. Messages are relayed hop-by-hop through intermediate nodes toward the recipient.
  3. 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

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

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