Bugünün yıldızı: 2,346 ⭐ | Toplam: 32,558 ⭐ | Forks: 5,096
Neden BitChat Trending'de?
28 Temmuz 2026'da GitHub Trending'in zirvesine oturan BitChat, merkeziyetsiz P2P mesajlaşma alanında çığır açan bir proje. Bluetooth mesh networking ve Nostr protokolünü birleştiren bu Swift uygulaması, internet olmadan iletişim kurmayı mümkün kılıyor.
Teknik Derinlik: Dual Transport Architecture
BitChat'in en etkileyici özelliği hibrit mesajlaşma mimarisi:
1. Bluetooth Mesh Network (Local Communication)
- Multi-hop relay: Mesajlar 7 hop'a kadar cihazdan cihaza iletiliyor
- Noise Protocol: End-to-end encryption, forward secrecy
- Binary protocol: Bluetooth LE'nin bant genişliği kısıtlamalarına optimize edilmiş kompakt paket formatı
- Adaptive power: Pil ömrünü uzatmak için duty cycling
- Automatic discovery: Peer keşfi ve bağlantı yönetimi tamamen otomatik
2. Nostr Protocol (Global Reach)
- 290+ relay network: Dünya genelinde dağıtık relay ağı
- Location-based channels: Geohash koordinatlarıyla coğrafi sohbet odaları
- BitChat Private Envelopes: XChaCha20-Poly1305 ile app-specific şifreleme
- Ephemeral keys: Her geohash bölgesi için taze kriptografik kimlik
Kod Analizi: Swift ile P2P Implementasyonu
// Bluetooth LE service tanımlaması
let serviceUUID = CBUUID(string: "0000FE3C-0000-1000-8000-00805F9B34FB")
let characteristicUUID = CBUUID(string: "0000FE3D-0000-1000-8000-00805F9B34FB")
// Mesh routing algoritması
func routeMessage(_ message: Message, maxHops: Int = 7) {
guard message.hopCount < maxHops else { return }
let nearbyPeers = peerDiscovery.discoverPeers()
for peer in nearbyPeers {
let encryptedPayload = noiseProtocol.encrypt(message.payload)
peer.send(encryptedPayload, hopCount: message.hopCount + 1)
}
}
Intelligent Transport Selection:
func sendMessage(_ content: String, to recipient: PeerID) {
if bluetoothTransport.isAvailable && recipient.isNearby {
// Bluetooth first (en hızlı ve en özel)
bluetoothTransport.send(content, to: recipient)
} else if nostrTransport.isConnected {
// Nostr fallback (global erişim)
let envelope = BitChatEnvelope.encrypt(content, for: recipient.publicKey)
nostrTransport.publish(envelope)
} else {
// Smart queuing
messageQueue.enqueue(content, for: recipient)
}
}
Kullanım Senaryoları: Neden Önemli?
1. Afet Durumları
İnternet altyapısı çöktüğünde (deprem, sel, savaş) Bluetooth mesh üzerinden iletişim devam eder. Her cihaz bir relay noktası olur.
2. Protestolar ve Sansür
Merkezi sunucu yok = sansürlenemez. Hükümetler kapatamaz çünkü kapatılacak bir sunucu yok.
3. Remote Alanlar
Dağcılık, keşif, kırsal alanlar - internet olmayan yerlerde P2P iletişim.
4. Privacy-First İletişim
- Telefon numarası yok
- Hesap yok
- Merkezi sunucu yok
- Metadata minimizasyonu
Geohash ile Location-Based Channels
BitChat'in en yenilikçi özelliklerinden biri coğrafi sohbet odaları:
Geohash Precision:
- 7 chars (block): Mahalle seviyesi
- 6 chars (neighborhood): İlçe seviyesi
- 5 chars (city): Şehir seviyesi
- 4 chars (province): İl seviyesi
- 2 chars (region): Ülke/bölge seviyesi
Örnek: İstanbul için sx9f geohash'i kullanarak şehir geneli sohbet odası oluşturabilirsiniz.
Teknik Zorluklar ve Çözümler
Challenge 1: Bluetooth LE Bant Genişliği
Problem: Bluetooth LE'nin düşük veri hızı (1 Mbps teorik, pratikte çok daha az)
Çözüm: LZ4 compression + binary protocol + adaptive message batching
Challenge 2: Mesh Routing Complexity
Problem: Multi-hop routing'de loop'lar ve mesaj kaybı
Çözüm: TTL (hop count) + message deduplication + acknowledgment sistemi
Challenge 3: Pil Ömrü
Problem: Sürekli Bluetooth scanning pili tüketir
Çözüm: Adaptive duty cycling - hareket halindeyken sık scanning, durağandarken seyrek
Challenge 4: Security
Problem: Mesh network'te her relay mesajı görebilir
Çözüm: Noise Protocol ile end-to-end encryption, relay'ler sadece şifreli payload görür
Nostr Entegrasyonu: Neden NIP-17/44/59 Değil?
BitChat, Nostr'u relay transport olarak kullanıyor ama proprietary private-envelope format kullanıyor:
Kind-1059 events:
- v2:-prefixed content
- XChaCha20-Poly1305 encryption
- BitChat-specific key derivation
- NIP-17/44/59 ile uyumlu değil
Neden? BitChat'in threat modeli farklı. Nostr'un genel şifreleme standartları yerine, mesh network ile uyumlu özel bir yapı kurmuşlar.
Emergency Wipe: Triple-Tap Security
Acil durumlarda (polis baskısı, sınır geçişi) üç kez dokunarak tüm veriyi anında silme:
func emergencyWipe() {
messageStore.deleteAll()
keychain.wipeAllKeys()
peerDiscovery.clearCache()
nostrIdentity.delete()
UserDefaults.standard.removePersistentDomain(
forName: Bundle.main.bundleIdentifier!
)
}
Performans Optimizasyonları
LZ4 Compression
Mesaj boyutunu %60-70 azaltır, Bluetooth LE'nin kısıtlı bant genişliğinde kritik.
Adaptive Battery Modes
enum PowerMode {
case active // Continuous scanning
case balanced // 30s scan, 30s sleep
case conservative // 5min scan, 10min sleep
}
Optimized Networking
- Connection pooling
- Message batching
- Lazy peer discovery
- Predictive routing
Katkıda Bulunanlar
- jackjackbits (core maintainer) - 648 contributions
- nothankyou1 - 128 contributions
- qalandarov (networking) - 97 contributions
- callebtc (Nostr integration) - 24 contributions
Lisans: Public Domain (Unlicense)
BitChat tamamen public domain - istediğiniz gibi kullanın, değiştirin, satin.
CoddyKit ile Swift Öğrenin
BitChat gibi P2P uygulamalar geliştirmek istiyorsanız, Swift temellerini sağlam atmanız gerekiyor. CoddyKit'in kapsamlı Swift kursu ile:
- Swift syntax ve semantics
- iOS/macOS development
- Bluetooth LE programming
- Networking ve concurrency
- Cryptography implementation
Sonuç
BitChat, merkeziyetsiz iletişimin geleceğini gösteriyor. İnternet olmadan, sansürlenemeyen, privacy-first bir mesajlaşma sistemi. Bluetooth mesh ve Nostr'un akıllıca birleşimi, afet durumlarından protestolara kadar kritik senaryolarda hayat kurtarıcı olabilir.
GitHub: permissionlesstech/bitchat
Website: bitchat.free
App Store: BitChat Mesh
Bu makale 28 Temmuz 2026 tarihinde GitHub Trending verileri kullanılarak hazırlanmıştır.
İlgili CoddyKit Eğitimleri:
- Swift - iOS/macOS development için
- Cyber Security - Encryption ve security temelleri

Top comments (0)