Komai:一种原生、基于 Rust 的 Matrix 桌面体验方案

近十年来,etke.cc 团队专注于 Matrix 生态系统的基础设施层面,提供托管服务并开发了广泛使用的 matrix-docker-ansible-deploy 剧本。然而,尽管他们为数千人解决了托管问题,却对现有的桌面客户端感到不满意。于是诞生了 Komai,一款专为桌面体验设计的原生 Matrix 聊天应用。

构建 Matrix 客户端是一项众所周知的艰巨任务。协议的覆盖面极广——从房间和空间到涉及多设备密钥、交叉签名和恢复的复杂端到端加密(E2EE)应有尽有。对 etke.cc 团队而言,现有客户端常常像是一连串的“纸刺”——细小的用户体验摩擦累积成令人沮丧的体验。

从 nheko 到独立:特修斯之船

开发者并未从零开始,而是基于 nheko——一个原生的 Qt/QML 客户端。最初的目标相对 modest: 只做少量 UX 修补并发布一个精炼的构建。然而,在大约 100 次补丁后,项目迎来了“特修斯之船”时刻。他们的愿景与上游项目的分歧已大到难以维系。

为实现完全独立,团队进行了大规模的架构转变:更换加密核心。他们剔除了 mtxclient 和已废弃的 libolm,并改用 matrix-rust-sdk。此举使 Komai 与更广泛的 Matrix 生态系统的现代方向保持一致,支持 sliding sync 和 vodozemac 加密实现。

以 Rust 为中心的架构

迁移到 Rust SDK 成为更广泛转向 Rust 的催化剂。为降低 C++ 代码的接触面并提升稳定性,团队为特定功能集成了多个 Rust crate:

  • Linkify:用于检测消息中的 URL。
  • BlurHash:用于图像占位符的编码/解码。
  • Syntect:用于代码块的语法高亮。
  • Resolvematrix:通过 Continuwuity 进行 Matrix 服务器发现。

通过将协议和文本密集的逻辑迁移至 Rust,Komai 获得了更为成熟且高性能的基础,同时保留原生的 C++/QML 前端以确保速度。

设计理念与关键特性

Komai 采用“桌面优先”的思路构建,避免了单纯将移动 UI 拉伸至显示器的常见陷阱。其设计理念强调可读性、原生性能以及对 Matrix 概念的透明呈现。

高级用户功能

  • Browser-Style Room Tabs:用户可以并排打开多个会话并固定常用房间,这在其他 Matrix 客户端中鲜有出现。
  • Automation Hooks:应用可通过 CLI、D-Bus 或使用模型上下文协议(MCP)的 AI 代理进行驱动。
  • Multi-Account Profiles:专用的应用配置文件支持完全独立的身份和状态,每个配置文件在独立窗口中运行。

可访问性与入门

  • Decentralized Registration:注册页面不默认使用 matrix.org,而是提供精选的公共服务器列表,以从第一天起鼓励去中心化。
  • Inclusive Theming:内置超过 10 种主题(包括 Catppuccin、Dracula 和 Tokyo Night),并保持符合 WCAG AA 对比度标准。
  • Voice Transcription:受 Claude 启发,用户可长按空格键进行语音输入,随后通过 OpenAI 或本地兼容服务器转录,使语音交流可搜索、可快速浏览。

AI 在开发中的角色

Komai 最受讨论的方面之一是其开发过程。团队坦言 C++、QML 和 Rust 并非其主要强项,并且在实现 matrix-rust-sdk 移植及其他功能时大量依赖了 Claude CodeCodex 等 AI 编码代理。

此做法在社区中引发了两极分化的争论。一些批评者将该项目称为“AI 垃圾”,认为在开发者并未完全掌握的语言中依赖 AI 编写核心逻辑风险极大。另一些人则为此辩护,指出最终产出是一个快速、开源、非 Electron 的应用,提供了真实的价值。

“AI 在得力之手中能够交付超出平均水平的成果,” 开发者们断言,将该工具定位为工程师的力量倍增器——即便他们并非每种语言的专家,只要清楚自己想要构建的东西。

当前状态与可用性

Komai 目前通过 AppImage、Flatpak、Snap 以及 Arch Linux AUR 提供 Linux (x86_64) 版本。虽然尚未完美且目前仅限 Linux,但它已成为开发者的日常使用工具,并且是一个在 GPL-3.0-or-later 许可证下的完整自由软件项目。

Sources