技术栈详解
从原生视图到云端连接,每一层的技术与职责。
原生 UI:NSGo
桌面与移动端使用 NSGo,以 Go 编写界面,映射到平台原生视图。设备导航、会话虚拟列表、Markdown 和图片预览均在原生 UI 中完成。原生视图无需打包浏览器运行时。查看体积与内存实测。
应用核心与 Provider:Go
Go 核心复用设备管理、配对、加密、网络与同步逻辑。Provider 封装各 Agent 的安装发现、启动和原生协议,并向界面提供统一能力。应用内直接调用 Go 核心。
网络:WebRTC、TCP、WebSocket
原生 WebRTC 由 Pion 实现;浏览器使用标准 RTCPeerConnection 与 DataChannel。原生端还提供 TCP 候选发现与打洞。公共 STUN 和自建探测器并行辅助获取地址映射。
WebSocket 承载信令,并在需要时中继端到端加密业务数据。用户仅配置一个服务根地址,探测与连接能力由服务自动下发。
Web:Next.js、React、OpenNext
官网、文档与 /chat 共用 Next.js App Router。React 控制端采用响应式布局、虚拟消息列表与增量同步;浏览器直接使用 WebRTC 和 Web Crypto。
OpenNext 将站点构建适配到 Cloudflare Worker。Fumadocs 根据仓库内 Markdown/MDX 生成多语言文档、导航、搜索与目录。
本地数据:SQLite 与 IndexedDB
原生端用 SQLite 保存配置与会话缓存,附件缓存在本地文件中;浏览器用 IndexedDB 保存配对身份、会话快照和附件缓存。恢复连接后补齐最新状态,继续增量订阅。
云端:Workers、Durable Objects、D1
Worker 处理 HTTP 请求与连接入口;Durable Objects 协调设备房间和可休眠 WebSocket;D1 持久化设备身份、配对与服务元数据。云端不持久化聊天和附件明文。
开发与扩展
依赖版本分别记录在 go.mod、clients/nsgo/go.mod、package.json 与 pnpm-lock.yaml。开发环境、构建命令和检查流程见本地开发;扩展 Agent 见Provider 接入。