What “offline mesh messaging” needs
Two phones that can see each other over a radio can exchange messages with nothing more than a direct link. Messaging across a crowd, a building, or a site needs more: each phone must also pass messages on for others, so a message reaches a phone that is out of direct range. That is the difference between a peer-to-peer link and a mesh.
An SDK for this job usually handles discovery of nearby phones, connections over Bluetooth Low Energy and sometimes Wi-Fi, relaying with a hop limit and duplicate suppression, holding messages until a path appears, and encryption so relaying phones cannot read what they carry. Some also provide device identity, groups, file transfer, or shared data.
The options
Bridgefy. A commercial SDK for adding mesh messaging to a mobile app, with SDK repositories for iOS, Android, React Native, and Flutter on GitHub. Its documentation describes it as letting people use an app without internet access by using mesh networks. Pricing is per monthly active user, set out on its pricing page.
Ditto. An offline-first database whose devices sync through a peer-to-peer mesh. Ditto’s documentation says a phone can use Bluetooth LE, LAN, peer-to-peer Wi-Fi, and WebSockets, and that devices with the same database ID form a mesh automatically. Messages in Ditto are data: you write documents, and they replicate to devices whose subscriptions match. Its documentation includes a chat example built this way.
Offline Protocol. An SDK for React Native, with a Rust core on crates.io, for messages, shared documents, and service calls between devices. It relays across several hops (8 by default in version 0.27.0), encrypts application messages and groups with MLS (RFC 9420), and gives each device an Ed25519 identity. Bluetooth LE is the default phone transport. The mesh SDK is free under AGPL-3.0-only, with a commercial license for proprietary and App Store apps, and local traffic is never metered.
Google Nearby Connections. A free Google API for advertising, discovering, connecting to, and exchanging data with nearby devices without internet access, with libraries for Android and for Swift on iOS. It links devices in range of each other rather than relaying across hops.
Apple Multipeer Connectivity. Free and built into Apple’s platforms, for discovering and exchanging data with nearby Apple devices. It does not reach Android, and Apple’s technote TN3213 says Xcode 27 deprecates the framework in favour of the Network framework.
Two names often come up that are not SDKs for this. Bitchat is an app with public source code, not a library for other apps. Meshtastic is an open-source project for LoRa radios, so phones message through a radio rather than directly with each other.
Questions that separate them
| Question | Why it matters |
|---|---|
| Does it run on every platform you ship? | Multipeer is Apple only; check React Native, Flutter, and native support against your app. |
| Do messages hop across phones? | Direct-link APIs reach only phones in range. A mesh relays. |
| What encryption, and between whom? | End-to-end encryption on a published standard lets relays carry what they cannot read. |
| How is it licensed and priced? | Per-user fees, copyleft licenses, and commercial licenses each cost something different. |
| What happens offline for a long time? | Look for documented outbox limits, retries, and expiry. |
| Is it maintained? | Check recent releases and how security issues are handled. |
A useful exercise is to write down your hardest case, such as “an iPhone and an Android phone, three hops apart, in a stadium, with the app in the background”, and ask each vendor how it behaves there.
How to evaluate in practice
- Test on real phones. A simulator build checks the app’s integration, not radio delivery. Test mixed iOS and Android pairs, several manufacturers, and the app in the background.
- Test the crowd, not the pair. Behaviour with two phones on a desk says little about a hall full of them.
- Read the security documentation. Look for a threat model, a disclosure policy, and whether the encryption design has been reviewed.
- Price the whole thing. Add per-user fees, license terms, hosted services you would use, and the engineering you would still own.
- Check how agents and docs help. Good docs, examples, and an MCP server for coding agents, where one exists, help the first integration.