permissionlesstech/bitchat

GitHub: permissionlesstech/bitchat

bitchat 是一款结合蓝牙 mesh 离线网络与 Nostr 协议的去中心化聊天应用,无需账号或中心服务器即可实现隐私通信。

Stars: 27960 | Forks: 3891

icon_128x128@2x ## bitchat 一款采用双传输架构的去中心化对等消息应用:结合用于离线通信的本地蓝牙 mesh 网络与基于互联网的 Nostr 协议以实现全球覆盖。无需账号,无需手机号,没有中心服务器。这是你的秘密群聊工具。 [bitchat.free](http://bitchat.free) 📲 [App Store](https://apps.apple.com/us/app/bitchat-mesh/id6748219622) ## 许可证 本项目已发布至公共领域。详情请参阅 [LICENSE](LICENSE) 文件。 ## 功能 - **双传输架构**:蓝牙 mesh 用于离线通信 + Nostr 协议用于基于互联网的消息传输 - **基于地理位置的频道**:利用全球 Nostr 中继上的 geohash 坐标实现的地理聊天室 - **智能消息路由**:自动选择最佳传输方式(蓝牙 → Nostr 备选) - **去中心化 Mesh 网络**:通过蓝牙 LE 自动发现节点并进行多跳消息中继 - **隐私至上**:无需账号,无需手机号,无持久标识符 - **私信端到端加密**:mesh 网络使用 [Noise Protocol](https://noiseprotocol.org),Nostr 使用 NIP-17 - **IRC 风格命令**:熟悉的 `/slap`、`/msg`、`/who` 风格界面 - **通用应用**:原生支持 iOS 和 macOS - **紧急擦除**:三击即可瞬间清除所有数据 - **性能优化**:LZ4 消息压缩、自适应电池模式及优化的网络处理 ## [技术架构](https://deepwiki.com/permissionlesstech/bitchat) BitChat 采用 **混合消息架构**,包含两个互补的传输层: ### 蓝牙 Mesh 网络(离线) - **本地通信**:蓝牙范围内的直接点对点通信 - **多跳中继**:消息通过附近的设备进行路由(最多 7 跳) - **无需互联网**:在灾难场景下可完全离线工作 - **Noise Protocol 加密**:具备前向保密性的端到端加密 - **二进制协议**:针对蓝牙 LE 限制优化的紧凑数据包格式 - **自动发现**:节点发现与连接管理 - **自适应电源管理**:针对电池优化的占空比控制 ### Nostr 协议(互联网) - **全球覆盖**:通过互联网中继与全球用户建立连接 - **地理频道**:使用 geohash 坐标的地理聊天室 - **290+ 中继网络**:遍布全球,确保可靠性 - **NIP-17 加密**:为互联网隐私提供封装式(gift-wrapped)私信 - **临时密钥**:每个 geohash 区域使用全新的加密身份 ### 频道类型 #### `mesh #bluetooth` - **传输方式**:低功耗蓝牙 mesh 网络 - **范围**:多跳范围内的本地设备 - **互联网**:非必需 - **用例**:离线通信、抗议活动、灾难救援、偏远地区 #### 地理频道(`block #dr5rsj7`、`neighborhood #dr5rs`、`country #dr`) - **传输方式**:基于互联网的 Nostr 协议 - **范围**:由 geohash 精度定义的地理区域 - `block`(7 个字符):街区级别 - `neighborhood`(6 个字符):区/社区级别 - `city`(5 个字符):城市级别 - `province`(4 个字符):州/省级别 - `region`(2 个字符):国家/大区级别 - **互联网**:必需(连接到 Nostr 中继) - **用例**:基于地理位置的社区聊天、本地活动、区域讨论 ### 私信路由 私信采用 **智能传输选择**: 1. **蓝牙优先**(在可用时首选) - 与已建立的 Noise 会话建立直接连接 - 最快且最私密的选项 2. **Nostr 备选**(在蓝牙不可用时) - 使用接收者的 Nostr 公钥 - NIP-17 封装以保护隐私 - 通过全球中继网络路由 3. **智能排队**(在两者均不可用时) - 消息排队等待,直到有可用的传输方式 - 建立连接后自动投递 有关详细的协议文档,请参阅 [技术白皮书](WHITEPAPER.md)。 ## 设置 ### 选项 1:使用 Xcode ``` cd bitchat open bitchat.xcodeproj ``` 要在设备上运行,需要执行以下几个步骤来准备代码: - 克隆本地配置:`cp Configs/Local.xcconfig.example Configs/Local.xcconfig` - 将你的 Developer Team ID 添加到新创建的 `Configs/Local.xcconfig` 中 - Bundle ID 将被设置为 `chat.bitchat.`(除非你将其设置为其他内容) - 需要手动更新 Entitlements(待办:实现自动化): - 搜索并将 `group.chat.bitchat` 替换为 `group.`(例如 `group.chat.bitchat.ABC123`) ### 选项 2:使用 `just` ``` brew install just ``` 想在 macOS 上尝试:`just run` 将完成相关设置并从源码运行。 之后运行 `just clean` 将状态恢复原状,以便进行移动应用的构建与开发。 ## 本地化 - 基础应用资源位于 `bitchat/Localization/Base.lproj/` 下。将新的文案添加到 `Localizable.strings`,将复数规则添加到 `Localizable.stringsdict`。 - Share extension 的字符串单独存放在 `bitchatShareExtension/Localization/Base.lproj/Localizable.strings` 中。 - 推荐使用描述意图的键名(如 `app_info.features.offline.title`),并尽可能复用现有的键名。 - 运行 `xcodebuild -project bitchat.xcodeproj -scheme "bitchat (macOS)" -configuration Debug CODE_SIGNING_ALLOWED=NO build` 以对任何本地化更新进行编译检查。
标签:iOS, Nostr协议, 即时通讯, 去中心化, 端到端加密, 蓝牙Mesh网络