返回项目

已发布 · 2026-07-22 · Public / Open Source

VA-11 Chat

一个为小规模私密对话设计的极简实时聊天室,以原生 WebSocket、本地文件存储和加密消息历史保持系统简单可控。

#Open Source#Real-time Web#TypeScript#Privacy Engineering

Problem

大多数聊天产品从账号体系、社交关系和复杂协作功能开始设计。对于几个人在一个安静空间里持续对话,这些能力反而可能成为负担。

VA-11 Chat 选择从最小问题出发:怎样用一个可以自行部署、容易理解的系统,提供按频道隔离的实时对话,同时保留必要的隐私与管理能力。

Role

Creator / Maintainer。

System

  • 单进程架构:由一个长驻 Node.js 进程承载 Express API、静态前端与原生 WebSocket 连接。
  • 频道隔离:管理员创建频道和用户,访问者使用频道凭据登录,消息只在所属频道内流动。
  • 本地持久化:频道配置与最近 100 条消息写入 JSON / JSONL 文件,不依赖数据库或 ORM。
  • 加密历史:消息在落盘前使用 AES-256-GCM 加密,并通过独立密钥管理 Cookie 签名与消息解密。
  • 轻量防护:登录和发言分别设置内存限速,生产环境启用 Secure Cookie,并明确单实例部署边界。
  • 简洁前端:Vite + React 提供响应式登录、聊天与管理界面,不引入组件库。

Impact

项目把实时通信、认证、持久化与部署压缩进一套可审阅的小型代码库,并提供 Vitest 集成测试、Docker Compose 与 GitHub Actions 工作流。它适合少量用户、单实例运行的自托管场景,也让系统的安全边界保持可见。

Why It Matters

简单不等于省略关键问题。VA-11 Chat 的价值在于为每一项复杂度给出明确理由:需要实时性,所以使用 WebSocket;需要历史记录,所以加密落盘;不需要横向扩展,所以保留单进程和本地文件。它是一项关于产品克制与可理解软件的实践。

Link

GitHub: roark47/va-11-chat