兩年前,我暫停了 co(lab) 的開發,以便打造一個我一直希望存在的桌面應用程式框架。現在,我已經推出了穩定的 v1 版本,這篇文章將回顧我這兩年來的側邊任務,期間我學習了 Zig、C、C++ 和 Objective-C。

我接觸程式設計的開端是 2000 年初的 Visual Basic 6,當時我用它來建構桌面應用程式。接著 Adobe AIR 改變了我的人生——我透過它創辦了幾家新創公司,並向數千人發佈了桌面應用程式。對我來說,那是一段黃金時期。快轉 20 多年,我經歷了在新創公司從零到一的開發、在獨角獸公司擔任早期工程師擴展關鍵系統並服務數千萬用戶,以及創辦我自己的新創實驗室;但不知為何,桌面開發似乎變得更糟了。當時我正在開發 co(lab),一個混合了網頁瀏覽器、程式碼編輯器和 PTY 終端機的應用程式,我遇到了太多令人煩惱的小問題。

第一個版本是使用 Electron 建構的。開發者體驗很糟糕——處理程式碼簽署、認證、分發和更新,感覺就像在與框架搏鬥,而不是在建構我的應用程式。我希望能夠像網頁一樣持續發佈,但工具鏈中的每一個環節都讓這件事比預期的還要困難。

我嘗試了 Tauri,但 Rust 並不適合所有人。Bun 當時正在崛起,距離 1.0 版本還有幾個月。於是我開始動手。

Electrobun 最初只能建構 macOS 應用程式。如今,它對在 macOS、Windows 和 Ubuntu 上建構及發佈提供了第一級支援。安裝程式、自動更新構件、差異補丁——所有這些都自動生成。你可以自備靜態主機(R2、S3、GitHub Releases),然後就完成了。差異更新由 zig-bsdiff 提供支援,我將其從 C 移植到 Zig,並使用 SIMD 和 zstd 進行了優化。

隨著 Bun 的 FFI 穩定下來,我替換了我編寫的大部分 Zig FFI 層,並直接依賴 Bun。架構以一種好的方式反轉了——Bun 在啟動 worker 時使用共享記憶體,因此即使有多個處理程序,Electrobun 也能保持高效。

如今的 Electrobun 是一個完整的框架:跨平台的視窗控制、選單、加速鍵、全域快捷鍵、剪貼簿、對話框、網頁檢視分割區、會話儲存、頁內搜尋,以及圍繞打包和更新的穩固工具。

OOPIF 的故事現在是真實的。Electron 的 <webview> 標籤已被 Chromium 棄用,他們至今仍未修復。Building a Better OOPIF 深入探討了 <electrobun-webview> 如何演變成一個真正的「超級 iframe」——DOM 定位、進程隔離、真正有效的層疊,以及沒有游標閃爍的噩夢。它無需修補瀏覽器引擎即可跨平台運作。

co(lab) 已完全重寫為 Electrobun,現在 v1 已經實現,我正在加倍投入。該框架足夠穩定,可以建構有野心、長期的產品,而無需擔心平台變動。這始終是我們的目標。

社群正在成長。我們 Discord 中的人們正在建構令人驚嘆的應用程式。如果你測試過 Beta 版本、提交過問題或提供過回饋——謝謝你。Electrobun 是我從 Blackboard 發佈的第一個重要產品,而你幫助塑造了它。