BitChat Mesh Chat App: Review and Verdict
Reach for BitChat if you want a mesh chat app that keeps working when Bluetooth is your only option — mesh routing across up to 7 hops, no sign-up, no server to subpoena for message content. Skip it if you need airtight anonymity: the mesh layer ties your messages to a persistent per-device identifier, and its private messages over Nostr use a proprietary encryption scheme that only talks to other BitChat clients, not any other Nostr app.
When Cell Signal Isn't There — or Isn't Trusted
Cell towers and Wi-Fi go down or aren't trusted — at protests, in disaster zones, in venues with dead spots — and most chat apps just stop working without them, or work fine but tie your identity to a phone number and a company's servers.
Bluetooth Mesh Chat With a Nostr Fallback
BitChat (permissionlesstech/bitchat) is a mesh chat app built in Swift for iOS and macOS, combining two transports: Bluetooth LE mesh networking for offline, local-range chat, and the Nostr protocol for reach when you're online. Messages relay peer-to-peer across up to 7 hops on the mesh side, encrypted with the Noise Protocol; there's no account creation, no phone number, and no company server sitting in the middle.
7-Hop Mesh Relay and Noise Protocol Encryption
- ✓Dual transport routing: tries Bluetooth LE mesh first, falls back to Nostr automatically, with smart queuing so messages aren't dropped mid-handoff
- ✓Multi-hop mesh relay up to 7 hops, letting messages travel node-to-node past direct Bluetooth range
- ✓Noise Protocol encryption on the mesh with forward secrecy for live sessions; store-and-forward "mail" is sealed but explicitly without forward secrecy, per the whitepaper
- ✓Location-based geohash channels over Nostr relays (block/neighborhood/city/province/region granularity) instead of raw GPS coordinates
- ✓Custom private-message encryption over Nostr — kind-1059 events with a BitChat-specific v2-prefixed XChaCha20-Poly1305 construction, not NIP-44, so it only interoperates with other BitChat clients
- ✓IRC-style slash commands (/slap, /msg, /who), LZ4 compression, adaptive battery modes, and a triple-tap emergency wipe
Takedown Demands and a Hash-Verified Build
BitChat picked up real traction (30,106 GitHub stars, nearly 4,700 forks) partly for what it does — no-account Bluetooth mesh chat with a Nostr fallback — and partly for what's happened to it: the README says outright that the repo has faced takedown demands, and that unverified mirrors show up whenever it goes dark. That's pushed the project to document build verification (a per-release hash manifest in docs/VERIFYING-A-BUILD.md) more carefully than most single-platform apps bother to.
Protests, Disaster Zones, and Signal-Free Coordination
- •Coordinating with people nearby when cell service is down or intentionally avoided — protests, festivals, disaster response
- •Location-scoped public channels for a neighborhood or city without broadcasting exact GPS coordinates
- •Ephemeral, no-signup group chat where you don't want a phone number tied to your identity
- •Messages that keep relaying across a mesh of phones instead of needing one continuous connection to a server
App Store Build or Compiling From Source
Two paths per the README: grab it from the App Store (bitchat.free) for a signed build, or build from source. For source builds, either open bitchat.xcodeproj directly in Xcode (copy Configs/Local.xcconfig.example first if you need a signed build), or install `just` (brew install just) and run `just check` then `just run` — the repo notes `just` deliberately never patches your source, project, or config files. If you're building from anything other than the official repo or the App Store, the README pushes you to verify the binary against the per-release hash manifest in docs/VERIFYING-A-BUILD.md before trusting it.
IRC-Style Commands and Geohash Channels
Once it's running, BitChat behaves like an IRC client: /msg and /who work as expected, /slap is there for the memes, and channels can be scoped to a geohash-based location radius instead of a topic name. Messages route to nearby peers over Bluetooth automatically and hop through up to 7 devices to extend range; when no mesh peer is reachable, it drops to Nostr over one of 290+ relays. A triple-tap gesture wipes local data on the spot. For development, tests run via `swift test` or `just test-ios`, and UI strings live in `.xcstrings` files for anyone adding a translation.
What Actually Works Offline
- ✓No account, phone number, or central server — messages route peer-to-peer or through Nostr relays you don't have to trust
- ✓Actually functions offline: Bluetooth mesh with 7-hop relay covers real coverage gaps, not just a bullet point
- ✓Forward secrecy on live mesh sessions via the Noise Protocol
- ✓Takes build integrity seriously — per-release hash verification docs exist because the project has had to deal with takedown-driven mirrors
- ✓Native Swift app for iOS/macOS rather than a cross-platform wrapper, so it behaves like a normal iOS app instead of a webview
Not as Anonymous as 'No Sign-Up' Sounds
- △iOS/macOS only — Swift codebase, no Android or desktop Linux/Windows build, so mesh chat only works if everyone in the group is on Apple hardware
- △Store-and-forward "mail" messages don't get forward secrecy, only live mesh sessions do, per BitChat's own whitepaper
- △Mesh identity isn't anonymous: the whitepaper acknowledges a persistent per-device identifier derived from your identity key, even though geohash keys rotate
- △Private messages over Nostr use a proprietary v2 XChaCha20-Poly1305 construction instead of NIP-44, so they don't interoperate with any other Nostr client — you're locked into BitChat on both ends
- △The repo has faced takedown demands, and the README's own warning about unverifiable mirrors means you need to actually check the hash manifest rather than grabbing any bitchat build you find online
SimpleX Chat, Briar, Meshtastic
Who BitChat Is Really For
Developers and privacy-conscious users on iPhone or Mac who want a working example of a Bluetooth mesh chat app with a Nostr fallback, and who are willing to read the whitepaper's privacy caveats instead of assuming "no accounts" means "fully anonymous." Skip it if your group isn't all on Apple devices, or if you need messages that interoperate with the wider Nostr ecosystem rather than just other BitChat installs.
BitChat Questions, Answered
The mesh side gets Noise Protocol encryption with forward secrecy while you're in a live session, but store-and-forward messages are only sealed, not forward-secret, and the whitepaper flags a persistent per-device identifier as a real, if narrow, de-anonymization risk.
No. It tries Bluetooth LE mesh first and automatically falls back to the Nostr protocol over one of 290+ relays when no mesh peer is in range, so it still works with a normal internet connection.
Only for its public geohash channels, which ride on standard Nostr relays. Private messages use a BitChat-specific encryption scheme rather than NIP-44, so they only work between BitChat clients.
Not based on this repo — it's a Swift codebase targeting iOS and macOS only, with no Android build mentioned.
Install from the App Store (bitchat.free) or build from the verified source repo, then check the binary against the per-release hash manifest in docs/VERIFYING-A-BUILD.md — the project added this specifically because it has faced takedown demands and unverifiable mirrors have appeared claiming to be BitChat.
