Skip to content

v1.0.0

Latest

Choose a tag to compare

@kite88 kite88 released this 02 Oct 16:06

首个正式版本:Go + Gin + GORM(PostgreSQL) + Redis 实现的即时通讯 / 客服系统。前端是 Vue2 + Axios 静态页,由后端直接托管,无构建流程、无外部图片资源。

功能

账号

  • 注册 / 登录 / 退出,JWT 鉴权,token 剩余有效期不足 12 小时自动续签
  • 单点登录:账号在别处登录后旧 token 立即失效,前端清理本地态并跳回登录页
  • 头像由 /avatar 按用户名哈希动态生成 SVG,服务不依赖任何图片资源

联系人

  • 按账号 / 昵称模糊搜索,结果标注双方关系(可添加 / 申请中 / 待你处理 / 已是好友 / 已拉黑)
  • 好友申请:同意 / 拒绝、重复申请 upsert、双方互相申请直接成为好友,并实时推送事件
  • 删除好友:单向软删除,只清我这一侧的列表与聊天记录,对方记录不受影响
  • 黑名单:单向拦截「被拉黑方 → 拉黑方」方向的消息,可随时移出并自动恢复

消息

  • WebSocket 实时收发,同账号可多端在线;离线消息在对方上线后按原顺序补发
  • 支持文本、emoji 与图片表情,单条报文上限 8KB
  • 发送前双向校验好友关系与黑名单,未送达时撤回本地乐观渲染的消息并回执事件
    (not_friend / unfriended / blacklisted)
  • 未读数基于已读游标计算,打开会话即标记已读;消息经 Redis 队列异步落库,失败转入错误队列

前端

  • 一套 DOM 响应式适配 PC 与手机(断点 991px),移动端全屏聊天 + visualViewport 键盘避让
  • 浅色 / 跟随系统 / 深色主题,中文 / English,字号 10~30px 可调,字重切换
  • 无 jQuery、无 Bootstrap JS,Bootstrap CSS 按实际用到的 class 裁剪至约 12KB

技术栈

层 选型
服务端 Go 1.23、Gin、GORM(PostgreSQL)、go-redis、golang-jwt
主键 用户 / 好友申请用雪花 ID,消息用 UUID v7(RFC 9562)
分层 api / ws / task → service → dao → db,依赖单向向下
前端 Vue 2 + Axios,静态资源由后端托管,无构建步骤

快速开始

docker compose up -d      # 启动 PostgreSQL + Redis
go run .                  # 默认 http://127.0.0.1:2580

新库是空的,直接在登录页注册账号即可;也可以把 config.yaml 里的 seed.enabled 改成 true 重启,
得到一组两两互加好友的演示账号(密码 123123),开箱即可互发消息。

产物

平台 归档 包内可执行文件
Windows mini-im-windows-<arch>.zip mini-im.exe
Linux / macOS mini-im-<os>-<arch>.tar.gz mini-im(权限 0755,解压即可运行)

架构覆盖 amd64 / arm64,共 6 个平台。归档是顶层目录 mini-im-<os>-<arch>/,内含可执行文件、
config.yaml、LICENSE、web/(前端静态页必须与可执行文件放在一起)以及启动脚本
(Linux / macOS 为 start.sh,Windows 为 start.bat):

tar -xzf mini-im-linux-amd64.tar.gz && cd mini-im-linux-amd64
./start.sh                 # 等价于 ./mini-im,附加参数会原样透传

启动脚本会先切到自身所在目录,因此可以在任意位置调用。Windows 下也可以直接双击 start.bat:
它会把控制台切到 UTF-8 代码页以正确显示应用的中文日志(脚本自身提示保持英文,避免 cmd 在多字节
字符上解析出错),并在进程退出后保留窗口、打印退出码与常见失败原因(PostgreSQL / Redis 未启动、
数据库未创建、端口被占用等),不会一闪而过。数据库 / Redis / 端口等配置可用 IM_* 环境变量覆盖。

checksums.txt 是全部 6 个归档的 SHA256(LF 换行,Linux 下可直接 sha256sum -c checksums.txt)。

归档均为 CGO_ENABLED=0 静态编译,并内嵌 IANA 时区数据库,因此在没有安装 Go、系统也没有 tzdata
的机器上(典型是 Windows)同样能解析配置里的 timezone: Asia/Shanghai,不需要额外安装。

质量

  • tools/e2e 端到端回归覆盖注册登录、搜索加好友、在线 / 离线消息、聊天记录、已读、登录态挤线等全链路,
    以及拒绝重申请、互相申请、并发消息、超长消息、伪造 sender 等边界,94/94 项断言通过
  • 文档:中文 README ·
    English README
    —— 含 PC 端与手机端的实拍操作截图、完整接口说明、数据表与设计要点
  • 版本历史见 CHANGELOG.md

许可

MIT © 2026 kite88