Bitchat is a decentralized, peer-to-peer messaging app for iOS and macOS that requires no accounts, no phone numbers, and no central servers — ever. Instead of routing messages through a company’s infrastructure, Bitchat builds an ad-hoc network from the devices around you using Bluetooth Low Energy, and bridges to the wider world over the Nostr protocol when internet is available. You install it, pick a nickname, and start talking. Nothing is stored on a server, nothing is tied to your identity, and the app works in places where the internet does not.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/permissionlesstech/bitchat/llms.txt
Use this file to discover all available pages before exploring further.
Bluetooth Mesh
Nearby devices automatically discover each other and form a local mesh network. Messages relay hop-by-hop through intermediate devices — up to 7 hops — so users out of direct radio range can still communicate. No internet, no infrastructure, no pairing required.
Nostr Protocol
When internet is available, Bitchat connects to a distributed network of 290+ Nostr relays worldwide. This powers location-based channels scoped to a city block, neighborhood, or country, and provides a private message fallback for mutual favorites who are out of Bluetooth range.
Why Bitchat?
Most messaging apps are built around the assumption that a permanent internet connection and a registered identity are available. Bitchat starts from the opposite premise: communication should be possible even when those things are gone, and it should not require you to hand your identity to a third party to make it work. That design makes Bitchat especially useful in situations where conventional apps fail:- Protests and civil unrest — mesh communication continues even when mobile networks are congested, throttled, or deliberately disrupted.
- Natural disasters — earthquake, flood, or wildfire can knock out cell towers and internet infrastructure simultaneously. A Bluetooth mesh of nearby survivors remains operational.
- Remote areas — hiking groups, festivals in fields, ships at sea, or anywhere else outside cellular coverage can still coordinate over the local mesh.
- Censorship resistance — there is no central service to block, no domain to ban, and no account database to demand. The repository has already been the target of takedown demands; that history is part of why verifying your build matters.
How It Works
Bitchat uses a dual-transport architecture. The two layers operate independently and the app routes each message over whichever path is best. Bluetooth mesh (offline). Every device running Bitchat is simultaneously a sender, receiver, and relay. When you send a message it is broadcast over Bluetooth LE and any nearby device that receives it automatically relays it onward, up to a maximum of 7 hops. This controlled flood uses TTL limits, deduplication, and random jitter to avoid redundant traffic. No internet connection is involved at any point — the mesh is entirely local and operates on battery-optimized duty cycling. Nostr protocol (internet). When an internet connection is present, Bitchat connects to a global network of Nostr relays. This enables location-based channels keyed to geohash coordinates — a city block (block #dr5rsj7), a neighborhood (neighborhood #dr5rs), or a whole country (country #dr) — so users in the same area can find each other without knowing each other’s identifiers. For private messages, Bitchat uses its own proprietary encrypted envelope format (a BitChat-specific XChaCha20-Poly1305 construction carried inside kind-1059 events — not NIP-44 or NIP-59 compatible) to deliver messages to mutual favorites when Bluetooth cannot reach them directly. Optional Tor support routes Nostr traffic through the Tor network.
A layered store-and-forward stack — a sender outbox, opportunistic courier envelopes, gossip-synced public history, and Nostr relay mailboxes — means messages to out-of-range peers are still eventually delivered when a path opens up.
Bluetooth mesh behavior requires physical Bluetooth-capable devices. Running Bitchat in the iOS Simulator or as a macOS build on a machine with Bluetooth disabled will show the full app UI but will not discover peers or relay messages. Test mesh features on real hardware.
Privacy by Design
Bitchat does not ask for an account, an email address, a phone number, or any persistent identifier you provide. Your identity is a Curve25519 key pair generated on first launch and stored in your device’s Keychain — it never leaves your device.- No registration. Open the app, set a nickname, and you are done. The nickname is a human-readable label; it is not an account and is not verified by any service.
- End-to-end encryption. Private messages over the mesh use the Noise
XXprotocol (Curve25519 / ChaCha20-Poly1305 / SHA-256) with forward secrecy for live sessions. Private messages over Nostr use Bitchat’s proprietary sealed-envelope format. - Keys in the Keychain. Both your Noise static key and your Ed25519 signing key live in the iOS/macOS Keychain. The sealed outbox that queues undelivered messages is encrypted under a key that also never leaves the Keychain, so queued mail survives an app restart without ever writing plaintext to disk.
- Panic wipe. Triple-tap the emergency control to instantly erase identity keys, favorites, courier mail, the outbox, archived public history, and all metrics. After a panic wipe the device appears as a brand-new installation.
- Metadata awareness. The whitepaper is explicit about what radio-layer metadata is visible to a passive observer in Bluetooth range: the 8-byte sender ID is stable across sessions, and announcements publish your static public keys and nickname in cleartext. Unlinkable presence is listed as future work; read the whitepaper before using Bitchat in high-risk situations.
Quickstart
Install Bitchat, set your nickname, and send your first mesh message in minutes.
Architecture
Deep-dive into the dual-transport design, Noise encryption, store-and-forward stack, and protocol details.