Komai: 一款原生、由 Rust 驅動的 Matrix 桌上型體驗方案
近十年來,etke.cc 團隊一直專注於 Matrix 生態系統的基礎設施端,提供託管服務並開發廣泛使用的 matrix-docker-ansible-deploy playbook。然而,儘管他們為數千人解決了託管問題,但他們對現有的桌上型用戶端仍感到不滿。其結果便是 Komai,一款專為桌上型體驗設計的原生 Matrix 聊天應用程式。
開發一個 Matrix 用戶端是一項公認的艱鉅任務。協定介面非常龐大——涵蓋了從房間和空間到涉及多裝置金鑰、交叉簽署和恢復的複雜端到端加密 (E2EE)。對於 etke.cc 團隊而言,現有的用戶端往往感覺像是一連串的「紙上割傷」——那些累積成令人沮喪體驗的小型 UX 摩擦。
從 nheko 到獨立自主: 「忒修斯之船」
開發者並非從零開始,而是從 nheko 開始,這是一款原生的 Qt/QML 用戶端。最初的目標很謙虛:套用一些 UX 修補程式並發布一個精煉的版本。然而,在進行了約 100 個修補程式後,該專案進入了「忒修斯之船」的時刻。他們與上游專案之間的差異變得太大,以至於難以維護。
為了實現完全的獨立,團隊進行了大規模的架構轉型:更換加密核心。他們移除了 mtxclient 和 libolm(該函式庫已被棄用),並將其替換為 matrix-rust-sdk。此舉使 Komai 與更廣泛的 Matrix 生態系統的現代化方向保持一致,並支援 sliding sync 和 vodozemac 加密實作。
以 Rust 為中心的架構
遷移至 Rust SDK 是向 Rust 進行更廣泛轉型的催化劑。為了減少 C++ 的介面面積並提高穩定性,團隊整合了幾個 Rust crates 用於特定功能:
- Linkify: 用於訊息中的 URL 偵測。
- BlurHash: 用於圖片佔位符編碼/解碼。
- Syntect: 用於程式碼區塊的語法高亮。
- Resolvematrix: 透過 Continuwuity 進行 Matrix 伺服器探索。
透過將協定和大量文字處理的邏輯移至 Rust,Komai 在保持原生 C++/QML 前端以確保速度的同時,獲得了更經得起測試且效能更佳的基礎。
設計哲學與關鍵功能
Komai 是以「桌上型優先」的心態構建的,避免了僅將行動裝置 UI 簡單拉伸以適應螢幕的常見陷阱。其設計哲學強調可讀性、原生效能與對 Matrix 概念的透明度。
強大用戶功能
- 瀏覽器風格的房間分頁: 用戶可以並排開啟多個對話,並釘選常用房間,這是在其他 Matrix 用戶端中罕見的功能。
- 自動化鉤子 (Automation Hooks): 該應用程式可以透過 CLI、D-Bus 或使用 Model Context Protocol (MCP) 的 AI 代理程式來驅動。
- 多帳號設定檔: 專用的應用程式設定檔允許完全獨立的身分與狀態,每個設定檔都在自己的視窗中執行。
無障礙與新手引導
- 去中心化註冊: 註冊頁面並非預設為
matrix.org,而是提供一份精選的公開伺服器列表,以從第一天起就鼓勵去中心化。 - 包容性主題: 維護了超過 10 種內建主題(包括 Catppuccin、Dracula 和 Tokyo Night),以符合 WCAG AA 對比度標準。
- 語音轉錄: 受 Claude 的啟發,用戶可以長按 Space 鍵來進行語音輸入,隨後透過 OpenAI 或本地相容的伺服器進行轉錄,使語音通訊可以被搜尋與瀏覽。
AI 在開發中的角色
Komai 最受討論的面向之一是其開發過程。團隊公開承認 C++、QML 和 Rust 並非他們的主要強項,且他們在實作 matrix-rust-sdk 移植與其他功能時,高度依賴 AI 編碼代理程式,例如 Claude Code 和 Codex。
這種做法在社群中引起了兩極化的辯論。一些批評者將該專案案稱為「AI 垃圾 (AI slop)」,認為在開發者尚未完全掌握的語言中依賴 AI 處理核心邏輯是一項冒險的行為。其他人則為這種做法辯護,工程師可以透過這種方式來提升效能,提升工程師在明確知道自己想建構的什麼時的效能倍增器。
「對於有能力的人來說,AI 可以提供高於平均水準的結果,」開發者斷言,將該工具定位為工程師在明確知道自己想建構的什麼時的效能倍增器,即使他們並非每種語言的專家。
目前狀態與可用性
Komai 目前可透過 AppImage、Flatpak、Snap 和 Arch Linux AUR 取得,適用於 Linux (x86_64)。雖然它目前尚未達到完美,且目前僅限於 Linux,但它已成為開發者的日常使用工具,並且是一個根據 GPL-3.0-or-later 授權的完全自由軟體專案。