基于 Tauri + Rust Core + Svelte 5 构建的弱中心化端到端加密即时通讯系统。
弱中心化 + 端到端加密 + 设备为核心身份的即时通讯协议与应用系统
| 层级 | 技术 | 用途 |
|---|---|---|
| 桌面框架 | Tauri v2 | 内存占用 20-80MB,原生性能 |
| 前端 | SvelteKit + Svelte 5 | 现代响应式 UI,基于 runes |
| 后端 | Rust + tokio | 异步运行时,密码学运算 |
| 数据库 | SQLite (rusqlite) | 本地消息存储 |
| 密码学 | X25519, Ed25519, AES-256-GCM, BLAKE3, HKDF | 完整密码学套件 |
┌─────────────────────────────────────────────────────────────┐
│ 客户端 │
│ ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ │
│ │ Svelte │ │ Rust Core │ │ 后台守护进程 │ │
│ │ UI │ │ crypto/sync │ │ (Daemon) │ │
│ └─────────────┘ └──────────────┘ └─────────────────┘ │
│ │ │ │ │
│ └────────────────┴────────────────────┘ │
│ │ │
│ ┌──────────▼──────────┐ │
│ │ SQLite 数据库 │ │
│ └─────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
│
│ WebSocket
▼
┌─────────────────────────────────────────────────────────────┐
│ Relay 服务器 │
│ - WebSocket 连接管理 │
│ - 在线状态 (Redis) │
│ - 加密消息缓存 (TTL 7 天) │
│ - 群组密钥缓存 │
└─────────────────────────────────────────────────────────────┘
src-tauri/src/)| 文件 | 说明 |
|---|---|
lib.rs |
应用入口、AppState 管理 (db + identity)、日志初始化 |
main.rs |
Windows 子系统入口 |
crypto.rs |
身份/设备密钥生成、会话密钥派生、AES-256-GCM、Ed25519、BLAKE3 |
db.rs |
SQLite 层:messages、groups、devices、pending_messages、identities |
identity.rs |
身份密钥管理,支持助记词备份/导出 |
message.rs |
消息发送/获取/撤回操作,含 pending 队列 |
relay.rs |
WebSocket Relay 连接状态(当前为存根) |
error.rs |
自定义错误枚举,支持序列化 |
src/)routes/+page.svelte - 主聊天界面,侧边栏导航(聊天、群组、设备、设置)routes/+layout.svelte - 根布局,全局样式当前处于 阶段一:基础设施 建设阶段(早期开发)。
| 阶段 | 任务 | 状态 |
|---|---|---|
| 1. 基础设施 | Tauri 项目初始化、Rust 密码学模块、SQLite 层 | 进行中 |
| 2. 身份与加密 | 身份/设备密钥生成、消息加解密 | 待开发 |
| 3. 消息系统 | WebSocket 客户端、ACK 机制、离线补发、消息撤回 | 待开发 |
| 4. 群组系统 | 群组管理、群密钥轮转、群消息加解密 | 待开发 |
| 5. 多设备 | 设备绑定流程、设备撤销 | 待开发 |
| 6. 媒体系统 | 媒体上传/下载(OSS/R2) | 待开发 |
| 7. 同步与后台 | 后台同步引擎、守护进程 | 待开发 |
| 8. UI 层 | 完整 Svelte UI | 待开发 |
| 9. Relay 服务器 | Rust Relay(axum + WebSocket) | 待开发 |
| 10. 测试 | 集成测试 | 待开发 |
详细任务分解请查看 TODO.md。
# 安装依赖
npm install
# 前端开发(SvelteKit 服务于 port 1420)
npm run dev
# Tauri 开发(带原生窗口)
npm run tauri dev
# 仅构建前端
npm run build
# 预览构建后的前端
npm run preview
npm run tauri build # 构建生产版本
npm run tauri dev # 启动开发模式
invoke('send_message') → Rust message.rs → SQLite + pending 队列relay.rs 管理连接状态(WebSocket 存根)[0u8; 32]