让设备之间,
直接使用彼此的服务。

CyberGrid 是多用户、多应用、多终端的连接协调服务。以 Rust SDK 为主要接入方式,发现同账号、同应用的设备,发布 TCP 端口,再把远端服务映射到本机。

设备之间传输,中央协调连接Mac 与 Android 之间传输应用数据。中央只处理身份、发现和信令,不转发业务字节。MacAndroid设备间加密业务通道WebRTC / iroh / TunnelCyberGrid身份 · 发现 · 信令
实线:业务通道 虚线:中央协调信息。Release v0.7.0 的 Rust SDK 与 Lab 提供图中的三层连接策略。

中央负责身份、设备状态和短期信令,不接收文件、同步内容或端到端业务字节。Logto 托管注册与登录,设备各自完成授权。

从一对设备开始

  1. 配置产品与真实 OAuth 应用。 推荐在服务端用静态产品策略绑定各端真实 Native client;各端通过官方 Logto SDK 独立登录,同一账号和 canonical 产品共享目录。历史 v0.7 Lab 仍按其真实 Native ID 使用。
  2. 分别登录并公布服务。 在每台设备独立授权;用新版 Lab 发布测试服务,也可用 SDK Expose 自有 TCP 服务。
  3. 发现设备,建立映射。 选择远端设备与公开端口,通过 loopback 地址访问;业务协议与同步规则由你的应用处理。
Android Lab 0.3 · 预置配置网页登录
# 从 Lab 0.3 Android 完整 ZIP 解压目录执行;先安装同包测试 APK。
ADB_CONTROL=tools/android-adb.py
# 从 adb devices 获取本机实际序列号。
read -r ANDROID_SERIAL
python3 "$ADB_CONTROL" --serial "$ANDROID_SERIAL" start
python3 "$ADB_CONTROL" --serial "$ANDROID_SERIAL" web-login
# 在手机系统浏览器完成 Logto 登录,再查询实际状态。
python3 "$ADB_CONTROL" --serial "$ANDROID_SERIAL" status

另一端独立授权后使用 Devices / Map。查看端口映射,或从 Lab 双端测试开始;Android 完整 ZIP 携带 ADB 控制工具与许可。

未发布源码已增加静态产品、有限准入、Rust 默认关闭 gate、JS directory/watch 与安全 bridge wrapper,以及 RAM-only 宿主模块。这些扩展尚未更新下列 v0.7.0 下载;完整样例、真实云登录、手机和长跑验收另行记录。

目标 v0.8.0 正在准备:Rust 0.3.0 / JS 0.2.0 / Lab 0.4.0 / server 0.2.0 / RAM-only 样例 0.1.0。完整仓库源码包将保留 SDK、服务和样例的相对依赖;外部 Noise adapter 不随包分发。该版本尚未发布,以下下载仍为不可变 v0.7.0,完整样例与生产验收仍单独记录。

SDK 与测试 App

Rust 是主要 SDK。 Release v0.7.0 的 Rust SDK 与 Lab 提供 WebRTC → iroh 直连 → Cloudflare 匿名隧道的三层连接策略,也可选择直连并行竞速;Go SDK 保持两级兼容实现。

Release v0.7.0 的 Lab 0.3 使用普通 Native 应用网页登录,需与本次协调服务一同升级。历史 v0.5.1 的 Lab 0.2 与 CLI 设备码登录不适用于新服务;本次 Go / Rust CLI 也不提供网页登录入口,首次登录请使用 Lab 或宿主官方 Logto SDK。所有下载由 GitHub Releases 提供;按随包 manifest 与 SHA256SUMS 校验完整文件,保留对应许可证。

Rust SDK 0.2.0

主要 SDK:原生 crate、嵌入示例与双平台 provider 资源,通过 Cargo path 集成。包含 iroh 直连与顺序 / 并行连接策略。

查看 Rust 发布文件Rust 接入说明

Go SDK / CLI 0.4.0

Go 库与 macOS / Android arm64 原生命令行程序;CLI 保留历史设备码入口,不支持新服务首次网页登录。

查看 Go 发布文件Go 接入说明

JS / TS SDK 0.1.0

只读浏览器 SDK:宿主使用官方 Logto 登录后查询应用、设备及端口显式地址;提供源码包及零运行依赖的 ESM / 类型包。

查看 JS 发布文件浏览器接入边界

CyberGrid Lab 0.3.0

Tauri 2 测试 App:macOS Apple Silicon ZIP、Android arm64 API 28+ APK / 完整 ZIP、源码与许可。

查看 Lab 发布文件Android ADB 使用

浏览完整源码 · 最新 Release。各包中的 provider 固定版本与许可随包提供,运行时不自动下载或更新。

直连优先,需要时回退

Rust SDK 默认先尝试增强 WebRTC,再尝试 iroh 直连,最后使用 Cloudflare Quick Tunnel。也可选择 WebRTC / iroh 并行竞速,两个直连阶段均失败后才回退。iroh 禁用 relay,仅使用设备公布的数字网络地址;没有可用地址或直连超时会继续回退。各路径沿用端到端双向认证,业务密钥由终端持有。Go SDK 仍为 WebRTC → Cloudflare 两级;历史 v0.6.0 的 Rust / Lab 包也只包含两级策略。

macOS 默认使用 SDK 随附 provider,无需外装或 PATH 查找。Android 宿主将 SDK 资源安装至 nativeLibraryDir,按当前网络提供 DNS 与 App cache 环境。查看宿主集成要求。

既有 Wi-Fi / 4G 公网通信记录只证实 Cloudflare 回退可用,不包含新增 iroh 路径的公网验收,也不代表 WebRTC 或 iroh 在任意网络均能直连。Quick Tunnel 用于开发测试,没有可用性 SLA。

部署自己的 CyberGrid

同一套 Node.js 22 路由提供官网、控制台、管理后台与 API,可部署为 Vercel Functions,也可在普通 Docker 中运行。Redis 是必需的共享协调存储;实例无须常驻,应用业务数据仍只在终端之间传输。

Vercel 部署使用 Vercel KV 环境变量接入 Marketplace 的 Upstash Redis,并配置 Logto issuer、SPA、resource 与 CYBERGRID_PRODUCTS 静态产品策略;只有未配置静态策略时,可选动态目录才需要 Management M2M 凭据;管理后台可选配置独立密钥。Docker 部署在 server/ 复制 .env.example 并配置 Redis 后执行 docker compose up --build -d;也可直接运行 Node。

Vercel KV 已迁移到 Marketplace Upstash Redis,当前不再提供独立的旧 Vercel KV 产品。连接资源后设置 CYBERGRID_REDIS_TRANSPORT=vercel-kv,并使用自动注入的 KV_REST_API_URL 与 KV_REST_API_TOKEN;不要使用只读 token。也可使用自有 Upstash 数据库,把它的 REST URL 与完整数据库 token 手工配置为这两个 KV 变量;账户 API 管理密钥只用于创建和管理数据库,不能作为运行时 token。普通 Docker / Node 仍可选择 TCP Redis。查看 Vercel 官方说明。

CYBERGRID_PUBLIC_ORIGIN 可留空:配置时固定使用该 HTTPS origin;留空时按本请求合法 Host / HTTP(S) 地址生成回跳,也支持代理覆盖的严格单值 X-Forwarded-Host / Proto。Node 部署按 socket 地址限流;Vercel Functions 使用固定的共享限流桶,不信任客户端提供的转发 IP。

JWT resource 独立固定:优先使用 LOGTO_RESOURCE,否则有公开 origin 时默认其加 /api,无公开 origin 时为 https://cybergrid.local/api。这是 OAuth 标识,不需 DNS,但应在 Logto 创建相同 resource。已有部署应显式保存原 resource,避免移除公开 origin 后改变 audience。

默认回跳为本次有效 origin 加 /console/callback/,可配置同源专用路径,并在 Logto 登记相同 URI。独立管理密钥 CYBERGRID_ADMIN_KEY 只保存在服务端,SMTP 在 Logto 配置。网站构建不获取 SDK 归档,下载直接来自 GitHub Releases。

一键部署到 Vercel 查看 Vercel Functions 配置步骤;查看 Node / Docker 部署步骤。设备控制台使用 Logto 查看当前用户,只读管理后台使用独立管理密钥。

接入前了解这些边界

  • 当前仅映射 TCP;端口必须由远端显式发布。设备在线表示心跳有效,不代表业务 TCP 已建立。
  • Lab 为测试版本:macOS 未公证,Android 使用测试签名并需保持前台;不提供后台长期保活保证。
  • Function 或 Node 实例重启不会主动清空 Redis 协调状态。命名空间重置、会话过期或设备失联时,SDK 可恢复注册和公布信息;旧业务 TCP 可能中断,应用自行决定重试和同步。
  • 邮箱验证与找回密码由 Logto 托管;实际邮箱收件链路尚未完成验收。
  • 无 UDP、无损切路或应用业务字节自动重放。阅读完整平台限制。

原代码及第三方组件各自适用随源码提供的许可和版权声明,请在使用、修改和分发前阅读。