海狸IM 2.0 发版记录:六端工程拆分与主要变更说明
最近在维护的开源 IM 项目海狸(Beaver IM)完成了 2.0 大版本发布。本文记录本次发版的工程结构、各端版本号以及主要功能变更,供正在调研或二次开发的同学参考。下文以事实说明为主,不涉及商业推广。
1. 发版背景
1.x 阶段,项目以「服务端 + 客户端」为主。2.0 将产品链路拆成 六个可独立部署的仓库 ,分别对应服务端、移动端、PC 端、运营后台、开放平台门户、OAuth 授权页,版本号与发版策略在各仓库根目录 VERSION 文件中统一维护。
本次发版的核心目标可以概括为三点:
- 客户端消息能力补全(回复、编辑、撤回、语音、多媒体统一等)
- 运营与监控能力下沉到独立后台工程
- 开放能力以 OAuth2 为主落地,群通知走 PC 端推送机器人(单向 Webhook)
2. 六端版本对照
| 序号 | 工程 | 仓库名 | 版本 | 主要技术栈 |
|---|---|---|---|---|
| ① | 服务端 | beaver-server | 2.0.1 | Go、go-zero、gRPC、WebSocket |
| ② | 移动端 | beaver-flutter | 2.0.1 | Flutter 3.x、Drift、BLoC |
| ③ | PC 端 | beaver-desktop | 2.0.0 | Electron 31、Vue 3、Vite、TypeScript |
| ④ | 运营后台 | beaver-manager | 2.0.1 | Vue 3、Element Plus、Vite |
| ⑤ | 开放平台门户 | beaver-open | 2.0 | OAuth2 应用管理前端 |
| ⑥ | OAuth 授权页 | beaver-oauth | 2.0 | 授权确认、扫码登录页 |
说明:移动端主线为 Flutter 工程;早期 Uniapp 版本已不再维护。
3. 工程关系示意
六个仓库在部署上的依赖关系大致如下(非代码结构,仅说明职责边界):
┌──────────────────────────────┐
│ ⑤ beaver-open │
│ OAuth2 应用 / 回调 / Scope │
└──────────────┬───────────────┘
│
┌─────────────┐ ┌────────────┴───┐ ┌─────────────┐
│② beaver- │ │ ③ beaver- │ │④ beaver- │
│ flutter │ │ desktop │ │ manager │
└──────┬──────┘ └───────┬────────┘ └──────┬──────┘
│ │ │
└─────────────────┼──────────────────┘
│
┌─────────▼─────────┐
│ ① beaver-server │
│ 微服务 + open 模块 │
└─────────┬─────────┘
│
┌─────────▼─────────┐
│ ⑥ beaver-oauth │
│ 用户授权确认 UI │
└───────────────────┘
- ②③:面向终端用户的聊天客户端
- ④:面向运营人员的后台管理
- ⑤⑥:面向第三方系统 OAuth2 接入;与 ① 中的 auth、open 服务配合
- ③ 另承担 群推送机器人 的配置入口(见后文)
4. 跨端共性变更
以下改动在多个客户端或服务端同时出现,属于 2.0 的「底座级」调整。
4.1 消息与媒体
- 私聊、群聊支持消息回复、转发、撤回、编辑
- 文本消息支持 Markdown 渲染
- 语音消息在移动端与 PC 端均可收发;「未听」状态通过消息媒体同步接口跨端对齐(2.0.1 修复了跨库查询导致的同步问题)
- 图片、视频、语音、文件等资源统一使用 fileUrl,避免各端展示逻辑不一致
4.2 音视频
- 移动端增加来电横幅组件(IncomingCallBanner)
- 音视频通话基于 LiveKit 实现
4.3 配置与设备
- 各仓库引入 VERSION 文件,与包管理配置中的版本号对齐
- 用户设置(如 PC 快捷键)支持写入服务端,跨设备同步
- 登录设备记录 UA 信息,支持在线状态查询与踢设备下线

5. 各端变更摘要
5.1 服务端(beaver-server 2.0.1)
工程与接口规范
- REST API 路径对齐 v1 规范
- 引入统一日志模块与鉴权锁(authlock),用于多实例场景下的并发安全
- 发版版本号与客户端 VERSION 策略统一
业务接口
- 用户设置读写 API
- 消息媒体同步(含语音未听标记)
- OAuth2:扫码登录、Authorization Code、H5 授权码等流程
- 群推送机器人:对外提供 bot_public 推送接口,供外部系统向群内发送通知消息
运营支撑
- 在线用户统计、连接监控及设备详情查询
- 内容审核、用户管控等 RPC 能力拆分,供运营后台调用
5.2 移动端(beaver-flutter 2.0.1)
- 会话内消息搜索
- 底部回复栏(ReplyBar)、编辑栏(EditBar)
- 动态(Moment)评论、点赞列表与输入区域
- 群聊 / 私聊会话设置完善
- 本地 Drift 数据库 + 增量同步策略延续并优化

5.3 PC 端(beaver-desktop 2.0.0)
独立设置中心
- 账号安全:修改密码、已登录设备列表、远程踢下线
- 快捷键自定义,配置同步至服务端
- 关于页与版本更新入口
群推送机器人(PC 端配置入口)
群详情 → 群助手 → 添加「通知机器人」:
- 群主或管理员可创建自定义推送机器人
- 创建后获得带 Token 的 Webhook 推送 URL
- 外部系统 POST 该地址即可向群内推送通知类消息
- 当前类型为「通知机器人 / 自定义机器人」;不支持 群内 @机器人 触发自动回复
其他
- 语音消息播放 UI 重构
- 消息编辑栏、文件消息独立展示组件
- 动态相关通知接入
- 登录页与 OAuth 扫码流程对齐

5.4 运营后台(beaver-manager 2.0.1)
- 用户 360 视图:基本信息、关系、会话、操作记录聚合展示
- 用户批量状态变更、批量删除
- 内容安全与举报审核流程
- 会话审计
- 在线监控大盘、用户在线设备详情
- 应用版本与发版策略管理
5.5 开放平台门户(beaver-open 2.0)
2.0 阶段,门户侧 仅覆盖 OAuth2 应用管理,主要包括:
- 创建 OAuth2 应用,获取 AppId、AppSecret
- 配置 redirect_uri 与 Scope
- 密钥管理与 Token 吊销
当前门户未提供:IM 事件订阅 Webhook 配置、群内 @机器人 交互管理。这两类能力与 OAuth2 门户无关,需与下文「能力边界」区分。
5.6 OAuth 授权页(beaver-oauth 2.0)
面向终端用户的授权确认界面,与 ⑤ 门户、① 服务端 open/auth 模块配合:
- 扫码登录确认
- OAuth2 标准授权页
- H5 授权场景
授权页独立部署,避免与开发者门户混在同一前端工程。
6. 开放相关能力边界(2.0 实测结论)
接入前建议先确认边界,避免按「全功能开放平台」预期开发:
| 能力 | 2.0 状态 | 说明 |
|---|---|---|
| OAuth2 第三方登录 | 已支持 | ⑤ 门户 + ⑥ 授权页 + ① open/auth |
| 群通知单向推送 | 已支持 | ③ PC 群助手创建机器人,拿 Webhook URL |
| 开放平台配置 IM 事件 Webhook | 未在门户开放 | --- |
| 群内 @机器人 交互 | 未支持 | --- |
| 机器人与用户双向对话 | 未支持 | --- |
OAuth2 解决身份接入;群推送机器人解决「系统 → 群聊」通知。二者入口与协议不同,不宜混为一谈。
7. 部署依赖建议
按常见私有化部署顺序:
- 部署 beaver-server(必选)
- 按需部署 beaver-flutter 、beaver-desktop 、beaver-manager
- 若需 OAuth2 接入,再部署 beaver-open 、beaver-oauth,并确保 open 相关微服务已启动
- 群推送机器人无需在门户配置,在 PC 客户端群助手中创建即可
文档与部署说明见项目文档站;本地与服务器部署亦有视频教程可供对照。
8. 小结
海狸 IM 2.0 的主要变化不在单一功能点,而在 工程拆分 与 能力边界清晰化:
- 六个仓库分别承担聊天、运营、OAuth2、授权 UI 等职责
- 客户端消息与媒体能力在 2.0 集中补全
- 开放能力现阶段以 OAuth2 为主;群机器人为 PC 端配置的单向推送,非交互式 @机器人
后续版本计划在事件订阅、交互式机器人等方向继续迭代;具体以仓库 CHANGELOG 与文档为准。
参考链接
| 工程 | 地址 |
|---|---|
| beaver-server | https://github.com/wsrh8888/beaver-server |
| beaver-flutter | https://github.com/wsrh8888/beaver-flutter |
| beaver-desktop | https://github.com/wsrh8888/beaver-desktop |
| beaver-manager | https://github.com/wsrh8888/beaver-manager |
| beaver-open | https://github.com/wsrh8888/beaver-open |
| beaver-oauth | https://github.com/wsrh8888/beaver-oauth |
| 文档 | https://wsrh8888.github.io/beaver-docs/ |