
新发布Aug 1, 2026
bitchat v1.7.1
蓝牙网状聊天,IRC氛围
bitchat
一款去中心化的点对点消息应用,采用双传输架构:本地蓝牙网状网络用于离线通信,基于互联网的 Nostr 协议实现全球覆盖。无需账户、无需手机号、无需中央服务器。这就是侧群聊。
许可证
本项目已发布到公共领域。详情见 LICENSE 文件。
功能特性
- 双传输架构:蓝牙网状网络(离线)+ Nostr 协议(基于互联网的消息传输)
- 基于位置的频道:通过全球 Nostr 中继使用地理哈希坐标的地理聊天室
- 智能消息路由:自动选择最佳传输方式(蓝牙优先,Nostr 回退)
- 去中心化网状网络:通过蓝牙低功耗自动发现对等节点并进行多跳消息中继
- 隐私优先:无需账户、无需手机号、无持久标识符
- 私密消息端到端加密:网状网络使用 Noise 协议,Nostr 使用 NIP-17
- IRC 风格命令:熟悉的
/slap、/msg、/who风格界面 - 通用应用:原生支持 iOS 和 macOS
- 紧急擦除:三次轻触即可立即清除所有数据
- 性能优化:LZ4 消息压缩、自适应电池模式以及优化的网络通信
技术架构
BitChat 采用混合消息传递架构,包含两个互补的传输层:
蓝牙网状网络(离线)
- 本地通信:蓝牙范围内的直接点对点通信
- 多跳中继:消息通过附近设备路由(最多 7 跳)
- 无需互联网:在灾难场景下完全离线工作
- Noise 协议加密:具有前向保密的端到端加密
- 二进制协议:针对蓝牙低功耗限制优化的紧凑数据包格式
- 自动发现:对等节点发现和连接管理
- 自适应电源:电池优化的占空比循环
Nostr 协议(互联网)
- 全球覆盖:通过互联网中继与全球用户连接
- 位置频道:使用地理哈希坐标的地理聊天室
- 290+ 中继网络:分布全球,确保可靠性
- NIP-17 加密:互联网隐私的礼物包装式私密消息
- 临时密钥:每个地理哈希区域生成全新的加密身份
频道类型
mesh #bluetooth
- 传输方式:蓝牙低功耗网状网络
- 范围:多跳范围内的本地设备
- 互联网:不需要
- 使用场景:离线通信、抗议、灾难、偏远地区
位置频道(block #dr5rsj7、neighborhood #dr5rs、country #dr)
- 传输方式:Nostr 协议(通过互联网)
- 范围:由地理哈希精度定义的地理区域
block(7 个字符):城市街区级别neighborhood(6 个字符):区/社区city(5 个字符):城市级别province(4 个字符):州/省region(2 个字符):国家/大区域
- 互联网:需要(连接到 Nostr 中继)
- 使用场景:基于位置的社区聊天、本地活动、区域讨论
直接消息路由
私密消息采用智能传输选择:
-
优先蓝牙(可用时首选)
- 具有已建立的 Noise 会话的直接连接
- 最快且最隐私的选项
-
Nostr 回退(蓝牙不可用时)
- 使用接收方的 Nostr 公钥
- NIP-17 礼物包装以保护隐私
- 通过全球中继网络路由
-
智能排队(两者均不可用时)
- 消息排队等待,直到传输方式可用
- 当连接建立时自动送达
有关详细的协议文档,请参阅技术白皮书。
设置
选项 1:使用 Xcode
cd bitchat
open bitchat.xcodeproj
要在设备上运行,需执行几个准备步骤:
- 克隆本地配置:
cp Configs/Local.xcconfig.example Configs/Local.xcconfig - 将你的开发者团队 ID 添加到新创建的
Configs/Local.xcconfig中- Bundle ID 将设置为
chat.bitchat.<team_id>(除非你修改为其他值)
- Bundle ID 将设置为
- 需要手动更新授权文件(TODO:自动化):
- 搜索并将
group.chat.bitchat替换为group.<your_bundle_id>(例如group.chat.bitchat.ABC123)
- 搜索并将
选项 2:使用 just
brew install just
想在 macOS 上尝试?just run 会自动设置并从源码运行。之后运行 just clean 可恢复原始状态以便进行移动应用构建和开发。
本地化
- 基础应用资源位于
bitchat/Localization/Base.lproj/。将新增文本添加到Localizable.strings,复数规则添加到Localizable.stringsdict。 - Share 扩展的字符串独立存放于
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编译检查本地化更新。