Shirei: A Cross-Platform Native Go GUI Framework

Shirei: A Cross-Platform Native Go GUI Framework

Shirei 概覽

Shirei 是一個使用原生 Go 編寫的跨平台 GUI 框架,旨在提供一種簡化桌面應用程式開發的方式。其主要的架構目標是在維持不同作業系統原生效能的同時,盡量減少對 C 函式庫(cgo)的依賴。

技術架構與平台後端

Shirei 採用針對特定平台的策略來處理視窗化與渲染,避免了「一體適用」的 C 封裝方法。

  • Windows: 框架會手動載入並呼叫相關的 DLLs,利用 Windows DLL 介面的穩定性來避免使用 cgo。
  • Linux: Shirei 直接在 Go 中實作了 X11 與 Wayland 的線路協定(wire protocols),這簡化了跨平台編譯與發行。
  • macOS: 框架利用 cgo 來存取 Cocoa 函式庫,因為 macOS 通常需要系統名稱解析,且不偏好靜態連結的 Go 程式。

由於後端依賴於 RGBA 緩衝區作為最低公分母,該框架目前繞過了原生作業系統的輔助功能(accessibility features)。

即時模式 API 設計

Shirei 是建立在即時模式(immediate mode)API 之上的,這允許開發者根據目前的數據在每一幀中描述 UI,而不是維護與同步持久性 UI 元件(widgets)的狀態。

即時模式 vs. 保留模式

雖然框架推崇無需與元件狀態同步數據的效率,但社群討論強調了關於擴展性的常見爭議。一些開發者認為,與保留模式(retained mode)系統相比,即時模式 API 可能無法擴展到高度複雜的使用者介面。此外,即時模式渲染(每一幀重新繪製)與單向數據流(如 React 所見)之間也存在區別,有些人指出框架的文檔可能將這些概念混淆了。

目前的限制與路線圖

Shirei 目前被定位為開發者工具,而非精緻的消費者應用程式。以下限制已被明確承認:

  • 效能: 大型文本塊可能會對響應能力產生負面影響,需要使用特定的 LargeText 元件。
  • 元件目錄: 函式庫缺乏富文本、樹狀元件與日期選擇器。
  • 主題: 目前沒有強大的主題系統;樣式目前較為冗長,且僅限於部分元件的基本強調色。
  • 平台支援: 目前僅限於桌面環境;目前不支援 Android 或 iOS。

開發方法論與 AI 整合

Shirei 以其在開發過程中大量整合 AI 編碼代理(coding agents)而聞名。提交紀錄(commit histories)顯示了來自多個 AI 實體(包括 Claude, Codex, Composer, 與 Cursor Grok 4.5)的顯著貢獻。

這種做法在開發者之間引發了爭議:有些人認為這是一種處理建構 UI 框架所需的「細碎繁瑣工作」的高效方式,而其他人則批評其提交紀錄對於人工審查而言並不切實際,因為單次提交中包含大量、長達數千行的變更。

與其他 Go GUI 框架的比較

Shirei 進入了一個已有數個 Go GUI 選項的領域:

  • Wails: 一個受歡迎的替代方案,使用基於 Web 的前端與 Go 後端。
  • Fyne: 另一個原生 Go GUI 工具包。
  • Ebitengine: 一個 GPU 加速的遊戲引擎,一些開發者建議這是一個建構自定義 UI 的更高效能基礎,特別是針對 Raspberry Pi 等效能較弱的硬體。

Sources