Skip to content
 
 

Latest commit

 

History

175 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EdgeChat

基于 Cloudflare 全家桶打造的现代团队聊天系统

账号体系 · 公开/私有群组 · 私信 · 实时消息 · 文件上传 · 管理后台

license stars forks issues last commit

Vue 3 Cloudflare Workers Hono Durable Objects GPL-3.0-or-later Telegram Bridge

中文 · English · 日本語 · 在线 Demo · 项目文档 · Telegram 社区

这可能是 1000 万以下最好用的 Cloudflare 聊天室


EdgeChat 是一个部署在 Cloudflare 上的团队聊天系统:账号体系、公开群组、私有群组、私信、实时消息、文件上传、管理员后台一应俱全。目标很直接——在 Cloudflare 生态里,用尽量低的运维成本,跑起一套能直接落地使用的站内 IM。

最近更新

Important

实验性 WebMCP 支持:EdgeChat 已率先接入 OpenAI 最近推出的实验性 Site tools(WebMCP) 能力。在 ChatGPT 桌面应用的内置浏览器中使用 ChatGPT Work 或 Codex 打开并登录 EdgeChat 后,AI 可以直接发现并调用站点提供的聊天工具。

工具 功能 状态
edgechat.login 登录并建立当前浏览器会话
edgechat.list_channels 查询用户可见群聊
edgechat.read_messages 获取某聊天室最近消息
edgechat.send_message 向指定房间发送消息
edgechat.open_dm 找到或打开与某人的私聊

登录工具沿用现有认证与浏览器安全确认,工具结果不会返回密码或 session token。

目录

界面预览

聊天界面 管理后台
EdgeChat 聊天界面预览 EdgeChat 管理后台预览

在线 Demo

edgechat-demo.wcjxxgaq.workers.dev

演示站复用正式项目的 Vue 页面、路由、状态管理和实时消息逻辑,但所有 API、WebSocket、文件上传与 Telegram 回流都在浏览器内存中模拟。刷新页面或点击右上角「重置演示数据」即可恢复初始状态,不会访问正式 Worker,也不会写入 D1、KV 或 R2。

特色功能:Telegram 消息双向桥接

管理员可以把 EdgeChat 内的任意一个群组,与一个 Telegram 群组绑定。绑定后,通过 Telegram Bot,两侧的消息会双向实时转发——EdgeChat 成员发的消息会同步出现在 Telegram 群里,Telegram 群里的消息也会同步出现在 EdgeChat 里,两边成员就像在同一个群里聊天一样,完全不需要互相切换应用或重复建群。

EdgeChat 与 Telegram 双向消息桥接演示
实时无缝转发,双向同步

为什么是 EdgeChat

EdgeChat 自建 Rocket.Chat / Mattermost 商业 SaaS IM
部署成本 Cloudflare 免费额度内可跑 需要常驻服务器 / 容器 按人头订阅收费
运维负担 无需管理服务器,Serverless 需要自行运维数据库、缓存 无需运维,但不可控
数据归属 完全在自己的 Cloudflare 账号 完全自持 数据在第三方
上线方式 GitHub Actions 一键自动部署 手动 / Docker Compose 直接注册

这张对比表只是给出一个大致的选型参考,实际是否合适取决于你的团队规模和需求,欢迎在 Issue 里讨论指正。

功能特性

💬 消息与会话

  • 支持公开群组、私有群组与私信会话
  • Telegram 群组双向消息桥接,一个 Bot 打通两侧成员
  • 实时消息、历史消息分页、文件消息
  • 文件上传与头像管理
  • 支持定时硬删除过期消息

🔐 隐私与安全

  • 新写入的消息与新上传的附件使用 AES-256-GCM 服务端加密,历史数据不做批量回填
  • 管理员后台不提供群组或私信消息正文的查看入口
  • 管理员创建用户,不开放自助注册

🛠 管理后台

  • 仪表盘、用户管理、注册邀请、网站设置一级导航
  • 用户支持永久封禁,或按天、小时、分钟设置临时封禁;到期后无需定时任务即可自动恢复
  • 浏览器端直接比对源码仓库,检查当前部署是否有更新

🎨 体验

  • 现代化 Liquid Glass 风格界面
  • 适配移动端,支持基础无障碍能力

技术栈

frontend backend
realtime d1 kv r2
deploy

Telegram 社区

欢迎加入我们的 Telegram 社区,与其他用户和开发者交流讨论、反馈问题,第一时间获取项目动态。

部署

GitHub Actions 自动部署(推荐)

推荐优先使用 GitHub Actions 部署,适合长期维护和生产环境更新。仓库内已提供 .github/workflows/deploy-worker.yml,推送到 mastermain,或手动触发 workflow_dispatch 即可执行自动部署。

原生 Android 客户端

仓库内的 android/ 是独立的 Kotlin + Jetpack Compose 客户端(Android 8 / API 26 起),只依赖稳定的 /api/v1 协议,不复用网页组件或 CSS。未登录时可在同一页输入 HTTPS 服务器地址、用户名和密码;也可以通过 edgechat://connect?server=https%3A%2F%2Fchat.example.com 预填服务器。提交后客户端会先校验服务器能力,再完成登录。

  • 安装包:从 GitHub Releases 下载 edgechat-*.apk 并核对 SHA256SUMS.txt
  • CI:.github/workflows/android-ci.yml 运行单元测试、Lint 和 Debug APK 构建
  • 发布:推送 android-v* 标签或手动运行 Android Release,需要配置 ANDROID_KEYSTORE_BASE64ANDROID_KEYSTORE_PASSWORDANDROID_KEY_ALIASANDROID_KEY_PASSWORD
  • 限制:首版不接入 FCM,应用进入后台后会关闭 WebSocket;恢复前台时通过增量同步补齐消息,不承诺后台即时通知

完整说明:https://echat.azora.top/guide/android.html

🔐 隐私与服务端加密说明(点击展开)

GitHub Actions 会管理服务端加密 Worker Secrets。首次部署时,如果目标 Worker 尚无加密 Secret,工作流会自动生成随机 32 字节 AES 密钥,以独立的版本化 Secret 注入,并记录当前 active key ID;后续普通部署只检查这些 Secret 是否存在,不会重新生成、覆盖或轮换。生产环境已经存在的 EDGECHAT_ENCRYPTION_KEYRING JSON 密钥环也会被原样保留并继续兼容。

部署后新写入的消息正文和新上传的附件会自动加密。历史 D1 消息和 R2 附件保持原状,读取时同时兼容历史明文与新密文;项目不会通过 Cron、定时任务或部署脚本循环加密全部历史数据。

需要手动指定密钥时,可创建名为 EDGECHAT_ENCRYPTION_KEYRING 的 GitHub Repository Secret,格式如下:

{"activeKeyId":"v1","keys":{"v1":"BASE64_ENCODED_32_BYTE_KEY"}}

首次部署会直接采用该值。已有 Worker 需要自动增量轮换时,手动运行 Deploy Worker 并勾选 rotate_encryption_key:工作流只新增一个版本化密钥 Secret,并把 active key ID 切换到新版本,所有旧 Secret 和旧 JSON 密钥环都保持不变。新消息会使用新 active key,旧密文继续使用各自信封中的 key ID 解密。

apply_encryption_keyring 是备用的手动覆盖入口。使用它时,Repository Secret 中必须是完整 JSON 密钥环,keys 需要保留所有仍被历史密文引用的旧 key ID,再增加新 key 并更新 activeKeyId。删除旧 key 会导致对应历史密文永久无法读取。apply_encryption_keyringrotate_encryption_key 不能在同一次运行中同时启用。

这属于服务端静态加密,不是端到端加密。Worker 会在通过会话权限校验后解密内容,因此 Cloudflare Worker 运行环境和掌握密钥的部署方仍位于信任边界内。作为配套隐私调整,管理员后台的消息搜索与完整会话查看页面及其 API 已移除;管理员仍可看到消息数量等聚合统计。

手动部署 / Docker

点击展开手动部署与 Docker 说明

如果你希望本地手动部署,完整步骤、资源准备和注意事项请查看文档站教程:

快速开始

# 安装依赖
npm install

# 前端开发
npm run dev:frontend

# 纯前端 demo(独立端口和构建目录)
npm run dev:demo

# 本地构建
npm run build

# 本地手动发布
npm run deploy
更多脚本说明(demo 构建 / 部署、CI 环境变量)
# 独立构建 demo
npm run build:demo

# 部署独立 demo Worker
npm run deploy:demo

demo 使用 wrangler.demo.toml.github/workflows/deploy-demo.yml,Worker 名称为 edgechat-demo。GitHub Actions 仅支持手动触发,并读取 DEMO_CLOUDFLARE_ACCOUNT_IDDEMO_CLOUDFLARE_API_TOKEN,不会改变现有生产部署工作流。

在非交互环境下部署时,需要提前设置 CLOUDFLARE_API_TOKEN

后台更新检查会在构建时自动记录当前 GitHub 仓库、分支和提交。为了获得准确结果,手动部署应在 Git 仓库内基于已经推送的干净提交构建;源码仓库需要保持公开,浏览器才能直接调用 GitHub Compare API,整个过程不会创建定时任务。

PowerShell 示例:

$env:CLOUDFLARE_API_TOKEN = "your-token"
npm run deploy

项目结构

点击展开目录树
edgechat/
├─ assets/
│  └─ previews/
│     ├─ chat-home.png
│     └─ admin-dashboard.png
├─ frontend/
│  ├─ src/
│  │  ├─ api.js
│  │  ├─ router.js
│  │  ├─ store.js
│  │  ├─ ws.js
│  │  ├─ runtime.js
│  │  ├─ demo/
│  │  ├─ styles.css
│  │  ├─ components/ui/
│  │  └─ pages/
│  ├─ vite.config.js
│  └─ vite.demo.config.js
├─ worker/
│  ├─ schema.sql
│  ├─ migrations/
│  └─ src/
│     ├─ index.js
│     ├─ auth.js
│     ├─ db.js
│     ├─ middleware.js
│     ├─ utils.js
│     ├─ api/
│     └─ do/
├─ wrangler.toml
├─ wrangler.demo.toml
├─ package.json
├─ README.md
├─ README.en.md
├─ README.ja.md
└─ LICENSE

更多实现说明可查看 TECHNICAL.md 和文档站:https://echat.azora.top/

贡献

欢迎提交 Issue 和 Pull Request,一起完善 EdgeChat。

感谢所有为项目提供帮助的贡献者:

贡献者

Star History

Star History Chart

Typing SVG

协议说明

本项目采用 GNU GPL v3.0 or later

你可以使用、修改和分发本项目;如果你分发修改版本,需要继续提供对应源代码,并保持 GPL 兼容。

鸣谢

感谢 linux do 在推广方面为本项目做出的贡献。

About

A full-featured team chat system built on Cloudflare Workers, with public/private groups, DMs, realtime messaging, file uploads, and an admin dashboard.

Resources

Code of conduct

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages