Highlights
- 1Bluetooth LE mesh with multi‑hop relay (up to 7 hops)
- 2Nostr fallback with geohash-based location channels
- 3Noise encryption, LZ4 compression, App Store + build verification
permissionlesstech/bitchat
bluetooth mesh chat, IRC vibes
snapshot: 2026-07-28
scraped_at: Jul 28, 2026, 1:51 AM
period stars: +2,346
stars: 32,317
forks: 5,066
Language: Swift
Summary
The generated summary body for the selected provider.
Highlights
Translation
Translated body generated separately from the summary.
No translation available yet.
README
Captured original README content.
A decentralized peer-to-peer messaging app with dual transport architecture: local Bluetooth mesh networks for offline communication and internet-based Nostr protocol for global reach. No accounts, no phone numbers, no central servers. It's the side-groupchat.
Install from the App Store, or build from source you have verified. A compiled build from anywhere else cannot be verified — see Verifying bitchat for how to check source against the per-release hash manifest, and for what to do if that is the only build you can get.
This matters more than it usually would: this repository has been the target of takedown demands, and when a repository or releases page disappears, mirrors appear that nobody can check.
This project is released into the public domain. See the LICENSE file for details.
bitchat is a decentralized, privacy-first peer-to-peer messaging app written in Swift that combines a local Bluetooth LE mesh with an internet fallback using the Nostr protocol. The repo implements a dual-transport architecture: an offline Bluetooth mesh with multi-hop relay (up to 7 hops) and Noise-protocol end-to-end sessions, plus Nostr relays for global reach with location-based geohash channels and BitChat private-envelope encryption. The app is a universal native iOS/macOS client available on the App Store and buildable from source; the README includes concrete build/test workflows (Xcode schemes, swift test, and just commands) and a dedicated VERIFYING-A-BUILD.md for validating release binaries.
The project saw a large daily star surge and attention (2,346 stars today) driven by interest in decentralized offline-capable messaging and by community concern over takedown demands and mirrored releases; the repo's explicit build-verification guidance and App Store presence have amplified visibility and discussion.
/slap, /msg, /who style interfaceBitChat uses a hybrid messaging architecture with two complementary transport layers:
BitChat's private-envelope format is proprietary and is not NIP-17,
NIP-44, or NIP-59 compatible. It uses Nostr as a relay transport but only
interoperates with BitChat clients: private payloads travel inside kind-1059
events whose v2:-prefixed content is a BitChat-specific XChaCha20-Poly1305
construction, not NIP-44 encryption.
mesh #bluetoothblock #dr5rsj7, neighborhood #dr5rs, country #dr)block (7 chars): City block levelneighborhood (6 chars): District/neighborhoodcity (5 chars): City levelprovince (4 chars): State/provinceregion (2 chars): Country/large regionPrivate messages use intelligent transport selection:
Bluetooth First (preferred when available)
Nostr Fallback (when Bluetooth unavailable)
Smart Queuing (when neither available)
For detailed protocol documentation, see the Technical Whitepaper.
open bitchat.xcodeproj
For a signed device build, create your ignored local configuration and replace the example team ID with your Apple Developer Team ID:
cp Configs/Local.xcconfig.example Configs/Local.xcconfig
Local.xcconfig.example derives unique app and App Group identifiers from that
team ID. The entitlement files already reference $(APP_GROUP_ID), so tracked
project or entitlement files do not need to be edited.
Useful command-line checks from the repository root:
# macOS Debug build without signing
xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" \
-configuration Debug CODE_SIGNING_ALLOWED=NO build
# Full SwiftPM test suite
swift test
# iOS simulator tests
xcodebuild -project bitchat.xcodeproj -scheme "bitchat (iOS)" \
-sdk iphonesimulator \
-destination 'platform=iOS Simulator,name=iPhone 17' test
If iPhone 17 is unavailable, choose an installed simulator from:
xcodebuild -showdestinations -project bitchat.xcodeproj -scheme "bitchat (iOS)"
justbrew install just
just check
just run
just build and just run use the current bitchat (macOS) scheme and keep
Xcode output in the ignored .DerivedData/ directory. They never patch source,
project, configuration, or entitlement files.
just clean removes only .DerivedData/ and .build/. It does not invoke Git
or restore tracked files, so uncommitted work is preserved. just test runs the
SwiftPM suite and just test-ios runs the iPhone 17 simulator suite.
bitchat/Localizable.xcstrings.bitchatShareExtension/Localization/Localizable.xcstrings.app_info.features.offline.title) and reuse existing ones where possible.xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build to compile-check any localization updates.