mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-24 22:45:19 +00:00
1e2717f152e5035ae2390e5b2786a71eb0a4a1a4
- Probabilistic flooding: Relay probability adapts to network size (30-100%) - Bloom filter duplicate detection: O(1) lookups with 4096-bit filter - Connection pooling: Reuse connections with exponential backoff - Adaptive TTL: Reduces hops based on network size (2-5) - Message aggregation framework: 100ms batching window - BLE advertisements: Include network size/battery hints These optimizations improve capacity from ~20-30 to ~50-100 users while maintaining privacy (no routing tables) and simplicity. The system now adapts automatically to network conditions without configuration. Trade-offs: Slightly higher CPU for bloom filter, probabilistic relay may miss edge cases, but overall much better scaling behavior.
bitchat
A secure, end-to-end encrypted Bluetooth mesh chat application with an IRC-style interface.
Features
- End-to-end encryption using Curve25519 and AES-GCM
- Bluetooth mesh networking with automatic peer discovery
- Message relay capability (TTL-based flooding)
- IRC-style terminal interface
- Persistent nickname storage
- Universal app (iOS and macOS)
- No internet connection required
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
bitchatdirectory into your project - Update Info.plist with Bluetooth permissions
- Set deployment target to iOS 16.0 / macOS 13.0
Usage
- Launch the app on multiple devices
- Choose or modify your nickname
- The app will automatically discover nearby peers
- Start chatting! Messages are relayed through the mesh network
Security
- All messages are end-to-end encrypted
- Public key exchange happens automatically on connection
- Messages are signed to prevent tampering
- TTL prevents infinite message loops
Protocol
The bitchat protocol uses JSON-encoded packets with the following structure:
- Packet versioning for future compatibility
- Message types: handshake, message, ack, relay, announce, keyExchange
- TTL-based flooding for mesh relay
- Signature verification for authenticity
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
Languages
Swift
99.1%
Shell
0.4%
Rust
0.3%
Just
0.1%