bitchat:一款不联网也能聊天的蓝牙mesh通讯工具

1 阅读6分钟

bitchat 是一款运行在 iOS 和 macOS 上的聊天应用。它的副标题只有一句话:"bluetooth mesh chat, IRC vibes"。意思是它用蓝牙 mesh 做底层通讯,界面体验像 IRC 频道。IRC 是一种老牌互联网聊天协议,频道公开、命令简洁、氛围直接。bitchat 借鉴的不是技术栈,而是那种"进入一个频道就能聊"的轻量感。

它的核心卖点不是更好用的聊天软件,而是"没有网络也能聊天"。 在设备之间直接建立蓝牙 mesh 连接后,消息可以在局域网内跳跃传递。有网的时候,又能通过 Tor 和 Nostr relay 把消息中继到更远的地方。这个设计天然适合网络被切断、信号被屏蔽或者不信任运营商的场景。

项目最近一周密集的提交主题都围着"protest-hardening"转。PR #1486 的标题就是"网络敌对时保持工作 + 构建可验证"。同一天还有 #1488 修复了这次 review 发现的三个漏洞,#1489 添加了真正的安全策略。这种开发节奏说明团队不是在幻想场景做产品,而是在针对真实的高压环境迭代。

bitchat 的网络架构可以分成两层:本地层和互联网层。 本地层是蓝牙 BLE mesh,设备之间直接通讯,不依赖任何基础设施。互联网层通过内嵌的 Arti 客户端跑 Tor,再经由 Nostr relay 投递消息。Tor 隐藏用户 IP,Nostr 提供去中心化的中继网络。用户最多可以手动配置八个自定义 relay,支持 .onion 地址。

加密方面,mesh peer 之间用 Noise 协议握手,私信信封用 XChaCha20-Poly1305,nonce 是 24 字节。每个设备都有 Ed25519 签名密钥,首次建立信任后会做 TOFU 钉扎。这样即使有人冒充同一个公钥,也无法替换已经锁定的身份。

投递状态管理也做了细致设计。状态优先级是 sending < sent < carried < delivered < read,只能升级不能降级。1.7.1 版本专门修复了"晚期 sent 状态覆盖 carried 状态"的问题。这种细节在普通聊天应用里很少见,但对高延迟、弱连接的 mesh 网络很重要。

功能上它已经超出"原型"阶段。频道聊天、私信、已读回执、语音消息、mesh 桥接、地理位置频道、一次性匿名身份、分享扩展这些都有。1.7.0 批次刚加了 push-to-talk、mesh bridging、DM store-and-forward 和 geo-notes。1.7.1 则是一次质量修复,处理了 PTT 热麦克风泄漏、bridge courier 提前报告成功、已屏蔽发送者通过存档 echo 重新出现等八个问题。

地理位置频道是 bitchat 里一个有趣的设计。进入某个 geohash 区域后,用户会进入对应的位置频道。这个设计不需要 GPS 权限,也不强制互相关注。适合在活动现场快速建立临时公共频道,大家在同一地理范围内就能自动看见彼此。

一次性身份让使用者可以临时创建新身份参与讨论,用完即弃。这对需要保护真实身份的场景很实用。不过它也有管理成本,频道里如果出现大量一次性身份,信任建立会更困难。项目团队显然意识到了这点,所以才有了签名密钥 TOFU 钉扎和已屏蔽发送者过滤这些配套机制。

和同类方案比起来,bitchat 的定位相当独特。Briar 也是 P2P 通讯,支持蓝牙和 Tor,但它主要面向 Android,GitHub 镜像仓库有 662 Star。Session 走洋葱路由路线,桌面端仓库有 536 Star,不过原仓库已经归档,活跃开发转移到 session-foundation/session-desktop。SimpleX Chat 更成熟,19,098 Star,强调无用户标识符,但它依赖服务器中继,离线场景需要额外考虑。

bitchat 真正的差异点是把"蓝牙 mesh 作为默认通讯层"放在第一位,而不是离线功能的补充。 其他项目多是"有网走服务器,没网 fallback 到 P2P"。bitchat 反过来,默认就是设备直连,互联网只是可选的延伸。

README 里的 Quick Start 部分在页面抓取时被截断了,我没拿到官方完整构建步骤。从仓库里的 Justfile 和 bitchat.xcodeproj 推断,标准流程应该是先克隆,再用 just 构建,最后用 Xcode 打开运行。你至少需要一台 macOS 设备和 Xcode。更稳妥的做法是先跑:

git clone https://github.com/permissionlesstech/bitchat.git
cd bitchat
just build

如果系统里没有 just,可以用 cargo install just 或 brew install just 安装。编译出来的 app 需要签名才能在真机上运行,模拟器上限制会少一些。

目前已知的限制:项目声明当前没有 Tor bridges 或 pluggable transports,arti-client 没开启对应功能。也没有可复现构建、没有已发布签名密钥、没有非 GitHub 镜像。这意味着除了 App Store 上的编译版本,普通用户很难验证自己编译的二进制是否跟官方一致。作者把这些都列在 SECURITY.md 和 VERIFYING-A-BUILD.md 里,没有遮掩。

另一个限制是平台。 它现在只有 iOS 和 macOS 版本,Android 和 Windows 用户用不了。大规模群组、视频通话、语音通话这些功能也还没有。项目现在处于活跃开发阶段,1,015 次提交,最新提交在 2026 年 7 月 27 日,但离日常通讯工具的完整度还有距离。

仓库提交记录里能看到多个 Claude 模型版本作为 Co-author 出现,包括 Claude Opus 5、Claude Fable 5、Claude Opus 4.8。这说明项目大量使用了 AI 辅助编程。代码审查流程看起来也比较严格,PR 编号已经到 #1491。

适合用它的人是那些有明确离线通讯需求的人。参加户外活动、去网络不稳定地区、或者身处网络可能被切断的环境,bitchat 的蓝牙 mesh 层能提供基础通讯能力。隐私极客也会喜欢它把 Tor、Nostr、Noise 协议组合在一起的设计。记者、活动组织者、野外救援这类场景都值得关注。

不适合的人同样明确。如果你只是想在城市里找个 Signal 替代品,bitchat 目前还不够成熟。它没有 Android 客户端,没有视频通话,群组规模受限,也没有经过长时间的大规模安全审计。普通用户日常聊天还是 Telegram、Signal 或 SimpleX 更省心。

最后提醒一点:bitchat 用 Unlicense 协议发布,代码全部进入公共领域。你可以自由使用、修改、分发,没有任何限制。但这也意味着没有商业公司背书,安全责任需要用户自己评估。

项目地址:https://github.com/permissionlesstech/bitchat

竞品地址:

- Briar:https://github.com/briar/briar
- Session Desktop:https://github.com/session-foundation/session-desktop
- SimpleX Chathttps://github.com/simplex-chat/simplex-chat