客户端、主机与社区
客户端在浏览器中运行,桌面外壳使用 Tauri。API 基于 Node.js/TypeScript,主机数据存储在 PostgreSQL 中。文件使用兼容 S3 的存储;配置后媒体使用 LiveKit。
主机管理账户和自身基础设施。公会(guild)是主机内的一个带有角色和频道的社区,一个主机可以服务多个社区。
联邦
相互独立的主机交换经过签名的请求。地址使用 @username#hostname;联邦使用 Ed25519 密钥和重放保护。Sibrel 使用自己的协议,与 Matrix 并不直接兼容。
- 跨主机的群组有一个归属主机;成员变更和同步取决于该主机是否在线。
- 备用中继在直接投递失败后生效。它不中继音频和视频,也不保证把消息送达完全离线的主机。
- 中继只使用运营者配置的带宽比例,而不是自动测量的空闲带宽。
- 签名用于验证请求来源,并不加密消息。
拆分基础设施
文件可以使用本地 MinIO 或外部 S3 存储;媒体可以使用本地或独立的 LiveKit。项目支持额外的存储节点和媒体节点。每个房间会分配到一个媒体节点。
自动化
机器人是一个单独账户,其权限按社区单独限制。可以使用 REST API、WebSocket 网关、斜杠命令、按钮、嵌入内容(embed)和语音。Webhook 用于简单的入站通知。
安全边界
来自主输入框的新附件由客户端使用 AES-256-GCM 加密,文件密钥会为接收方的密钥进行封装。旧附件、头像、公开帖子、表情和贴图使用不同的访问模式。
不要把文字消息视为端到端加密。文件加密无法防范恶意客户端、被入侵的设备或保存文件的接收方。参见安全指南。
优点与运营者责任
| 优点 | 成本与限制 |
|---|---|
| 掌控自己的主机并拆分服务。 | 运维、更新、备份和监控由你负责。 |
| 在相互独立的节点之间进行联邦。 | 需要信任运营者、版本兼容以及可用的网络路由。 |
| 使用 Tauri 客户端,无需额外的 Electron 引擎。 | 没有适用于所有设备的通用内存占用或速度指标。 |
| 专用的机器人 API 与集成能力。 | 机器人必须处理错误、令牌被撤销、断线和 API 变更。 |
| 权限和规则可配置。 | 自托管并不能免除法律或个人数据方面的义务。 |