Delay-tolerant mesh transport

The network that finds a way.

Encrypted datagrams hop device to device, over BLE, Wi-Fi, and the internet, until they reach the person or service you meant. No tower required. Held until they land or expire, not dropped for a missing network.

More than one path, always. Hop sprays copies across independent routes, the first to arrive delivers, and a dead link just means another copy wins.
delivered in transit held link down

Your browser is running the real Hop protocol: every node above is the actual hop-core, compiled to WebAssembly, carrying real encrypted messages. Only the devices and their radios are simulated.

A dark valley at night, a distant town glowing, scattered figures carrying faint signal across the expanse
Delay-tolerant by design

When the path disappears, the message keeps moving.

Held on the devices around you, re-offered at every encounter, delivered the moment a way opens. No tower. No server required.

Why one protocol covers all of it

One layer. Every offline app.

Disaster, off-grid sensors, a region cut off, a phone with no plan, same problem: no reliable path, right now. Most offline products rebuild that transport and weld it to a single app. Hop is that layer, done once, a sealed, store-and-forward datagram. The narrow waist for intermittent networks: many apps above, many bearers below. The core only moves bytes, a thin per-platform driver runs the radios.

Where Hop runs

Where the network can't be assumed.

The same fabric, wherever coordination outruns connectivity.

Drop it into your app

One core. iOS, Android, Rust.

A pure-Rust core with native bindings via UniFFI. Open a node from a key, address a sealed payload, drain your inbox, the mesh handles relaying, custody, and delivery.

// open a node from your 32-byte secret, storage is managed for you
let node = HopNode::open(secret)?;

// reach a device by its address (its public key), sealed, store-and-forward
node.send(peer, Payload::message("on my way"))?;

// drain the inbox: sealed bundles addressed to you
for msg in node.receive()? { handle(msg.open()?); }
// open a node from your 32-byte secret, storage is managed for you
let node = try HopNode(secret: secret)

// reach a device by its address (its public key), sealed, store-and-forward
try node.send(to: peer, payload: .message("on my way"))

// drain the inbox: sealed bundles addressed to you
for msg in try node.receive() { handle(try msg.open()) }
// open a node from your 32-byte secret, storage is managed for you
val node = HopNode.open(secret)

// reach a device by its address (its public key), sealed, store-and-forward
node.send(peer, Payload.message("on my way"))

// drain the inbox: sealed bundles addressed to you
for (msg in node.receive()) handle(msg.open())
The model

The library is free. The cloud is the product.

The device does the work, so the SDK is open and free. The cloud backbone costs money to run, so that's what you pay for, only when you use it.

Layer 0

Open SDK

Embed hop-core on iOS & Android. Source-available, free forever.

Free
Layer 2

Commercial license

Terms beyond the FSL non-compete, for products that need them.

Enterprise
Layer 3

Private & mission

On-prem fleets, private backbones, and support for field operations.

Solutions

Build for where the network goes dark.

Embed the free SDK today. Add the cloud backbone when you need to reach across the world.