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

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