What is bitchat?
bitchat is a decentralized P2P instant messaging app with its coolest feature being: zero internet dependency. Through Bluetooth Low Energy (BLE) Mesh networking, nearby devices can automatically form a network and relay messages across multiple hops — enabling truly offline communication.
The project has already surpassed 28,000 stars on GitHub, making it one of the hottest open-source communication projects recently. It's released under the Unlicense (public domain) license, completely free to use.
Core Features at a Glance
| Feature | Description |
|---|---|
| 🔌 Dual Transport Architecture | Bluetooth Mesh (local offline) + Nostr protocol (internet-based global communication) |
| 🔒 End-to-End Encryption | Noise Protocol for Bluetooth, NIP-17 for Nostr |
| 📡 Auto Networking | Automatic device discovery, multi-hop message relay (up to 7 hops) |
| 🕵️ Fully Anonymous | No account, no phone number, no persistent identifiers |
| 🌍 Geographic Channels | Location-based chat rooms using geohash |
| 🚨 Emergency Wipe | Triple-tap the screen to instantly erase all data |
| 📱 Cross-Platform | Native iOS + macOS support |
How does it differ from traditional chat apps?
WeChat/Telegram/Signal:
User → Internet → Central Server → Internet → User
bitchat (Bluetooth mode):
Device A → Device B → Device C → Device D (multi-hop Mesh, no internet needed)
bitchat (Nostr mode):
User → Nostr Relay Network (decentralized) → User
The key difference: when cell towers go down, the network crashes, or you're deep in the mountains — bitchat still works.
Deep Dive into the Technical Architecture
The brilliance of bitchat lies in its dual-transport hybrid architecture — Bluetooth handles local communication, Nostr handles global connectivity, and the two switch seamlessly.
Bluetooth Mesh Network Layer
Bluetooth Mesh is bitchat's core innovation. It uses Bluetooth Low Energy (BLE) for direct device-to-device communication:
- Automatic Discovery: Devices automatically identify nearby nodes when they come within range
- Multi-hop Relay: Messages can hop between devices, up to 7 hops, significantly extending communication range
- Noise Protocol Encryption: End-to-end encryption with forward secrecy — even if keys are compromised, past messages remain unreadable
- Binary Protocol: Compact packet format optimized for BLE bandwidth constraints
- Adaptive Power Management: Smart duty-cycle adjustment to extend battery life
Nostr Protocol Layer
When Bluetooth is unavailable, bitchat automatically switches to the Nostr protocol for internet-based communication:
- 290+ Global Relay Nodes: A distributed network ensuring reliability
- Geographic Channels: Local community chat based on geohash coordinates
- NIP-17 Encryption: Gift-wrapped private messages protecting internet privacy
- Ephemeral Keys: Each geohash area uses a fresh cryptographic identity
Smart Message Routing
bitchat's message routing strategy is clever:
Priority 1: Bluetooth Direct (fastest, most private)
↓ Unavailable
Priority 2: Nostr Relay (global coverage)
↓ Unavailable
Priority 3: Message Queue (auto-deliver when connection is restored)
Installation & Getting Started
iOS / macOS Installation
bitchat is a native Apple ecosystem app, available directly from the App Store:
Search "Bitchat Mesh" on the App Store to install
Building from Source (For Developers)
If you want to compile it yourself or contribute:
# Clone the repository
git clone https://github.com/permissionlesstech/bitchat.git
cd bitchat
# One-command run for macOS users
brew install just
just run
# Or open with Xcode
open bitchat.xcodeproj
There are a few configuration steps to keep in mind when building from source:
# 1. Copy the local config template
cp Configs/Local.xcconfig.example Configs/Local.xcconfig
# 2. Add your Developer Team ID to Local.xcconfig
# 3. Manually update Entitlements:
# Replace group.chat.bitchat with group.<YourTeamID>
First-Time Use
When you open bitchat, you'll see an IRC-style terminal interface — which is its signature look:
╔══════════════════════════════════╗
║ bitchat v2.0 ║
║ bluetooth mesh chat ║
╠══════════════════════════════════╣
║ [mesh] Welcome to the mesh! ║
║ [mesh] 3 nearby devices found ║
║ ║
║ <alice> Hey, anyone here? ║
║ <bob> Yep! Signal's great ║
║ <you> Test message, works offline too ║
║ ║
║ > /help to see all commands ║
╚══════════════════════════════════╝
Quick Reference: IRC-Style Commands
bitchat uses classic IRC-style commands — old-school internet folks will feel right at home:
# Basic commands
/msg <username> <message> # Send a private message
/who # See who's online
/slap <username> # Classic IRC interaction (slap someone)
/help # See all available commands
# Channels & Location
/join <channel> # Join a channel
/geo # View your current geographic channel
/location <precision> # Set geographic channel precision
# block = block level
# neighborhood = neighborhood level
# city = city level
# province = province/state level
# region = country/large region
# Security
/wipe # Emergency wipe all data (also triggered by triple-tap)
Advanced Usage
Configuring Geographic Channels
Geographic channels are one of bitchat's killer features — you can automatically chat with other bitchat users in the same area without adding each other as contacts:
# Set to city level (everyone within a few kilometers can see you)
/location city
# Set to block level (only people very close by)
/location block
# View your current geographic channel
/geo
Geographic channels are based on geohash encoding, with precision from coarse to fine:
| Precision | Geohash Length | Coverage | Use Case |
|---|---|---|---|
| region | 2 chars | Country-level | Nationwide discussions |
| province | 4 chars | Province/state-level | In-state communication |
| city | 5 chars | City-level | City community |
| neighborhood | 6 chars | Neighborhood-level | Neighborhood chat |
| block | 7 chars | Block-level | Face-to-face events |
Private Chat Encryption
bitchat's private chat encryption automatically selects the best protocol based on the transport method:
Bluetooth Mode (Noise Protocol):
1. Both parties establish a BLE connection
2. Perform Noise Protocol handshake
3. Generate session keys (forward secrecy)
4. All messages transmitted end-to-end encrypted
Nostr Mode (NIP-17 Gift Wrap):
1. Obtain the other party's Nostr public key
2. Encrypt the message with their public key
3. Wrap with an ephemeral key (gift wrap)
4. Deliver through Nostr relays — relays cannot decrypt the content
Emergency Security Mechanisms
In sensitive scenarios (such as protests or disaster sites), bitchat provides a quick-wipe feature:
- Triple-Tap Wipe: Tap the screen three times consecutively to instantly erase all chat data, keys, and identity information
- No Persistent Identity: Each connection uses a temporary identity, leaving no trace
- Local-Only Storage: All data stays on the device — nothing is uploaded to any server
Real-World Use Cases
Scenario 1: Outdoor Activities / Hiking
When there's no cell signal in the mountains, bitchat keeps your team connected:
# Everyone on the team opens bitchat
# Devices automatically discover each other, forming a Mesh network
# Messages relay across hops so the team stays connected even when spread out
# Set to city-level channel to reach nearby hikers
/location city
Scenario 2: Large Events / Music Festivals
Cell towers often get overloaded at concerts and festivals — bitchat is completely unaffected:
# Set to block-level channel
/location block
# Chat with people nearby and share locations
/msg friend I'm on the left side of the stage, found me?
Scenario 3: Disaster Emergency Communication
When earthquakes, floods, or other disasters knock out cell towers, bitchat can be a lifesaver:
# Works completely offline — no infrastructure needed
# Multi-hop Mesh extends message reach
# End-to-end encryption keeps distress information private
Scenario 4: Privacy-Sensitive Scenarios
When you need communication that can't be monitored:
# Fully anonymous — no phone number registration needed
# Bluetooth mode bypasses all servers
# Triple-tap wipe for quick evidence removal
Comparison with Other Decentralized Communication Tools
| Feature | bitchat | Briar | Bridgefy | Meshtastic |
|---|---|---|---|---|
| Bluetooth Mesh | ✅ | ✅ | ✅ | ✅ (LoRa) |
| Internet Fallback | ✅ Nostr | ✅ Tor | ❌ | ❌ |
| End-to-End Encryption | ✅ | ✅ | ✅ | ✅ |
| Anonymous, No Registration | ✅ | ✅ | ❌ | ✅ |
| iOS Support | ✅ | ❌ | ✅ | ❌ |
| Geographic Channels | ✅ | ❌ | ❌ | ❌ |
| Open Source License | Unlicense | GPL | Partially Open | GPL |
| GitHub Stars | 28K+ | 5K+ | 3K+ | 4K+ |
bitchat's unique advantage is its Bluetooth + Nostr dual-mode architecture and geographic channel feature — something no other tool in this space offers.
Summary
bitchat is an elegantly designed decentralized communication tool that proves one thing: even when infrastructure fails, we can still stay connected.
Who is it for? - 🏕️ Outdoor enthusiasts (hiking, camping, exploring) - 🎪 Event-goers (music festivals, conventions, sports events) - 🔐 Privacy geeks (seeking fully anonymous communication) - 🆘 Emergency communication needs (disaster relief, emergency preparedness) - 👨💻 Developers (interested in Mesh networking and decentralized protocols)
Project Page: github.com/permissionlesstech/bitchat
Download: Search "Bitchat Mesh" on the App Store for iOS/macOS
In an era where all communication depends on centralized servers, bitchat reminds us: true communication freedom means never needing anyone's permission.