项目详情

bitchat

蓝牙 mesh 聊天,IRC 的味道——断网也能聊、无账号无服务器

GitHub 地址 Unlicense(公有领域) Swift iOS / macOS BLE Mesh + Nostr

更新于 2026-07-25 · App Store 已上架

← 返回汇总
项目速览

一句话定位

无网也能聊的去中心化群聊,断网时人就是网络

去中心化 P2P 聊天 App。双传输架构:本地蓝牙 mesh 网络负责离线通信,Nostr 协议负责联网全球可达。无账号、无手机号、无中心服务器——自称「the side-groupchat」。Swift 原生 iOS/macOS 通用 App,Noise Protocol 端到端加密。适合极端断网场景(抗议/灾情/偏远地区)、隐私极客、以及想研究 mesh 网络与 Noise 协议实战的开发者。

项目速览

核心数据

28.9k
GitHub Stars
4.4k
Forks
983
Commits
7
Mesh 最大跳数

数据截至 2026-07-25。已上架 App Store,公有领域许可(Unlicense)。

为什么存在

主流聊天的三个硬伤

依赖中心服务器

服务器宕机、被关停或被审查,整张网瞬间失语。灾情/抗议现场网络一断,所有人失联。

身份强绑定

手机号、账号、持久标识符——服务商手里握着完整社交图谱与元数据。

断网即死

现有 IM 哪怕是「加密」的,没网就是砖头。离线场景几乎没有解。

核心理念

明文从不落盘

Ephemerality by default

四条设计目标贯穿全文:保密(端到端加密,中继只见密文)、认证(密钥即身份,公告签名验证)、韧性(在丢包/低带宽/网络分裂下仍工作)、最终送达(离线消息在有限保留窗口内必达)。持久化的只有密封密文或已公开广播流量——而这一切都会随「panic wipe」一键灰飞烟灭。

核心架构

双传输层 + 统一路由

BLE Mesh ↔ MessageRouter ↔ Nostr Relay
Transport A · 离线
Bluetooth LE Mesh
每台设备同时是 GATT central + peripheral,受控泛洪中继。无需基础设施、无需配对、无需账号。最多 7 跳,Noise XX 加密。
Transport B · 联网
Nostr Protocol
私信走 NIP-17/NIP-59 gift-wrap(kind 1059),用一次性临时密钥封装,relay 既不知发送者也不知内容。可选走 Tor。290+ 全球 relay。

两传输层实现同一 Transport 接口,由 MessageRouter 协调:优先活着的 mesh 链路,fallback 到 Nostr,两者都不通时启动 courier 系统。

智能路由

私信三级降级策略

① 蓝牙优先

可用时首选。与已建立 Noise 会话的 peer 直连——最快、最私密。中间节点只见密文。

② Nostr 兜底

蓝牙不可达时,用对方 Nostr 公钥走 NIP-17 gift-wrap,经全球 relay 网络路由。

③ 智能排队

两者都不通,消息入队等待。一旦有传输可用即自动投递。

BLE Mesh 细节

受控泛洪的五道阀门

BLE Mesh 细节

分片、路由与存在感

分片重组

超 MTU 包切 ~469B 片段,独立中继,每节点重组(128 并发、30s 超时、1MiB 上限)。

源路由

公告带最多 10 个直连邻居,构建浅拓扑图(60s 新鲜度)。有双向确认路径则源路由,否则回退泛洪。

存在感

签名公告多跳传播:孤立时每 4s,连上后退避到 15–30s。RSSI 门控 + 占空比扫描省电。

加密体系

三套加密覆盖三种场景

场景模式属性
在线会话Noise XX(X25519/ChaCha20-Poly1305/SHA-256)双向认证 + 前向保密 + 身份隐藏
离线密封Noise X(单向,密封到对方静态密钥)无前向保密——静态密钥泄露则暴露未投递邮件;prekey 是未来工作
Nostr 私信NIP-17/NIP-59 gift-wraprumor(14)→seal(13)→wrap(1059),临时密钥封装,relay 不知发送者与内容

自动 rekey:每 1 小时或 10000 条消息后轮换会话密钥。peer ID 轮换时通过 fingerprint 映射保持会话连续。

Store and Forward

「对方不在」的四重保险

四机制覆盖「发送时对方不在范围内」问题,保证在有限保留窗口内最终送达。

频道模型

Mesh 频道 + 地理频道

mesh #bluetooth
  • 传输:BLE mesh
  • 范围:多跳内的本地设备
  • 无需联网
  • 场景:离线通信、抗议、灾情、偏远地区
Location Channels(geohash)
  • 传输:Nostr over internet
  • 精度分级:block(7字符)/neighborhood(6)/city(5)/province(4)/region(2)
  • 临时密钥:每个 geohash 区域独立临时身份
  • 场景:本地社区、活动、区域讨论
身份与隐私

密钥即身份

技术栈

Swift 原生 + Apple 加密原语

快速上手

两种方式跑起来

# 方式 1:Xcode(要跑真机需配签名)
cd bitchat
open bitchat.xcodeproj

# 准备本地配置
cp Configs/Local.xcconfig.example Configs/Local.xcconfig
# 填入你的 Developer Team ID
# Bundle ID 自动设为 chat.bitchat.<TeamID>
# Entitlements 里 group.chat.bitchat 改成 group.chat.bitchat.<TeamID>

# 方式 2:用 just(macOS 上从源码跑)
brew install just
just run        # 自动配置并从源码运行
just clean      # 跑完恢复移动端构建环境

# 普通用户直接 App Store 下载
# apps.apple.com/us/app/bitchat-mesh/id6748219622
适用场景

适合谁用

风险提示

需要权衡

潜力评估

未来空间

28.9k Stars 说明「断网可聊」击中了真实痛点。双传输架构(BLE mesh + Nostr)是同类中少见的完整工程实现,加上 Unlicense 公有领域许可,社区 fork/移植活跃(4.4k Forks)。若补齐 Android、引入独立安全审计、推进 prekey 前向保密,有潜力成为抗审查通信的事实开源标准之一。天花板取决于 mesh 网络效应能否在足够密集的人群中跑通。


上一个
ego lite
下一个
Chat2DB
1 / 18