Bitchat – A decentralized messaging app that works over Bluetooth mesh networks
bitchat
A secure, decentralized, peer-to-peer messaging app that works over Bluetooth mesh networks. No internet required, no servers, no phone numbers - just pure encrypted communication.
License
This project is released into the public domain. See the LICENSE file for details.
Features
- Decentralized Mesh Network: Automatic peer discovery and multi-hop message relay over Bluetooth LE
- End-to-End Encryption: X25519 key exchange + AES-256-GCM for private messages
- Room-Based Chats: Topic-based group messaging with optional password protection
- Store & Forward: Messages cached for offline peers and delivered when they reconnect
- Privacy First: No accounts, no phone numbers, no persistent identifiers
- IRC-Style Commands: Familiar
/join
,/msg
,/who
style interface - Message Retention: Optional room-wide message saving controlled by room owners
- Universal App: Native support for iOS and macOS
- Cover Traffic: Timing obfuscation and dummy messages for enhanced privacy
- Emergency Wipe: Triple-tap to instantly clear all data
- Performance Optimizations: LZ4 message compression, adaptive battery modes, and optimized networking
Setup
Option 1: Using XcodeGen (Recommended)
-
Install XcodeGen if you haven't already:
brew install xcodegen
-
Generate the Xcode project:
cd bitchat xcodegen generate
-
Open the generated project:
open bitchat.xcodeproj
Option 2: Using Swift Package Manager
-
Open the project in Xcode:
cd bitchat open Package.swift
-
Select your target device and run
Option 3: Manual Xcode Project
- Open Xcode and create a new iOS/macOS App
- Copy all Swift files from the
bitchat
directory into your project - Update Info.plist with Bluetooth permissions
- Set deployment target to iOS 16.0 / macOS 13.0
Usage
Basic Commands
/j #room
- Join or create a room/m @user message
- Send a private message/w
- List online users/rooms
- Show all discovered rooms/clear
- Clear chat messages/pass [password]
- Set/change room password (owner only)/transfer @user
- Transfer room ownership/save
- Toggle message retention for room (owner only)
Getting Started
- Launch bitchat on your device
- Set your nickname (or use the auto-generated one)
- You'll automatically connect to nearby peers
- Join a room with
/j #general
or start chatting in public - Messages relay through the mesh network to reach distant peers
Room Features
- Password Protection: Room owners can set passwords with
/pass
- Message Retention: Owners can enable mandatory message saving with
/save
- @ Mentions: Use
@nickname
to mention users (with autocomplete) - Ownership Transfer: Pass control to trusted users with
/transfer
Security & Privacy
Encryption
- Private Messages: X25519 key exchange + AES-256-GCM encryption
- Room Messages: Argon2id password derivation + AES-256-GCM
- Digital Signatures: Ed25519 for message authenticity
- Forward Secrecy: New key pairs generated each session
Privacy Features
- No Registration: No accounts, emails, or phone numbers required
- Ephemeral by Default: Messages exist only in device memory
- Cover Traffic: Random delays and dummy messages prevent traffic analysis
- Emergency Wipe: Triple-tap logo to instantly clear all data
- Local-First: Works completely offline, no servers involved
Performance & Efficiency
Message Compression
- LZ4 Compression: Automatic compression for messages >100 bytes
- 30-70% bandwidth savings on typical text messages
- Smart compression: Skips already-compressed data
Battery Optimization
- Adaptive Power Modes: Automatically adjusts based on battery level
- Performance mode: Full features when charging or >60% battery
- Balanced mode: Default operation (30-60% battery)
- Power saver: Reduced scanning when <30% battery
- Ultra-low power: Emergency mode when <10% battery
- Background efficiency: Automatic power saving when app backgrounded
- Configurable scanning: Duty cycle adapts to battery state
Network Efficiency
- Optimized Bloom filters: Faster duplicate detection with less memory
- Message aggregation: Batches small messages to reduce transmissions
- Adaptive connection limits: Adjusts peer connections based on power mode
Technical Architecture
Binary Protocol
bitchat uses an efficient binary protocol optimized for Bluetooth LE:
- Compact packet format with 1-byte type field
- TTL-based message routing (max 7 hops)
- Automatic fragmentation for large messages
- Message deduplication via unique IDs
Mesh Networking
- Each device acts as both client and peripheral
- Automatic peer discovery and connection management
- Store-and-forward for offline message delivery
- Adaptive duty cycling for battery optimization
For detailed protocol documentation, see the Technical Whitepaper.
Building for Production
- Set your development team in project settings
- Configure code signing
- Archive and distribute through App Store or TestFlight
Android Compatibility
The protocol is designed to be platform-agnostic. An Android client can be built using:
- Bluetooth LE APIs
- Same packet structure and encryption
- Compatible service/characteristic UUIDs
What's Your Reaction?






