BitChat is a decentralized peer-to-peer messaging app that combines Bluetooth mesh networks for offline communication with Nostr protocol for global reach. It requires no accounts, phone numbers, or central servers, making it the ultimate side-groupchat solution for private, resilient communication.
BitChat uses a dual transport architecture: Bluetooth mesh for local offline communication and Nostr protocol for internet-based messaging. Messages are routed peer-to-peer through nearby devices in mesh mode or through distributed Nostr relays for global communication. All encryption happens directly between devices.
Yes, BitChat is privacy-first by design. It uses Noise Protocol for Bluetooth mesh encryption and BitChat's proprietary private-envelope encryption for Nostr messages. No personal information is required, and metadata is minimized. However, the mesh does use a persistent device identifier for routing purposes.
BitChat uses two complementary transport layers: 1) Bluetooth Low Energy mesh network for local, offline communication with multi-hop relay capabilities, and 2) Nostr protocol over internet for global reach with geographic channels. The app intelligently routes messages between these transports based on availability.
The Bluetooth mesh creates a local network where devices can communicate directly within range or relay messages through nearby devices (up to 7 hops). It uses a compact binary protocol optimized for Bluetooth LE constraints with automatic peer discovery, connection management, and battery-optimized duty cycling.
BitChat uses Nostr as a relay transport but implements its own proprietary private-envelope format (kind-1059 events with XChaCha20-Poly1305 encryption) rather than standard NIPs. This means private messages only work between BitChat clients but provides enhanced security for the app's use case.
BitChat collects minimal data: a persistent per-device identifier derived from your identity key for mesh routing purposes. No personal information, location data, or message content is stored on servers. Messages are end-to-end encrypted and never stored permanently.
Metadata is minimized but unavoidable in any communication system. The mesh reveals device proximity and routing paths. Nostr usage reveals connection to specific relays and geohash-based channel subscriptions. For detailed analysis of what metadata is exposed, see the technical whitepaper.
The emergency wipe feature allows you to instantly delete all app data with a triple-tap gesture. This is designed for situations where privacy is critical and you need to ensure no traces of your communication remain on the device.
Always install from the official App Store for the most secure build. For builds from source, verify against the per-release hash manifest as described in the Verifying BitChat documentation. This is crucial because mirrors may appear that cannot be verified when repositories are taken down.
You can install via App Store or build from source using Xcode or the Swift package manager with `just`. For Xcode builds, you'll need to configure your Apple Developer Team ID. The SwiftPM approach uses pre-configured schemes and never patches source files.
BitChat is a universal app supporting iOS 15+ and macOS Monterey (12.5+). It requires devices with Bluetooth Low Energy capabilities and works best with modern Apple silicon for optimal performance. The app is optimized for both iPhone and Mac experiences.
Location channels use geohash coordinates to create geographic chat rooms. Different precision levels define channel scopes: 7 characters (city block), 6 (neighborhood), 5 (city), 4 (province), and 2 (region). You join channels based on your location and communicate with others in the same geographic area.
BitChat supports familiar IRC commands including /slap (playful interaction), /msg (private message), /who (list online users), /join (enter channel), /part (leave channel), and /quit (exit app). These commands work across both mesh and Nostr transports for consistent experience.
BitChat intelligently selects transport based on availability: 1) Bluetooth direct connection when available (fastest), 2) Nostr fallback when Bluetooth is unavailable, and 3) Smart queuing when neither transport is available. Messages are automatically delivered when connections are established.
Technical support is available through the GitHub repository issues tracker. For community discussions, join the Nostr network or participate in relevant technical forums. The project also maintains technical documentation at deepwiki.com/permissionlesstech/bitchat.
Contributions are welcome via GitHub! You can submit bug reports, feature requests, code improvements, documentation updates, or translations. Check the issues page for open tasks and follow the contribution guidelines in the repository README.
BitChat is released into the public domain under The Unlicense. This means you can use, modify, distribute, and sublicense the software for any purpose without restrictions. The LICENSE file contains the full legal text.