- メインプロセスに Bun、ネイティブバインディングに Zig を使う TypeScriptベースのデスクトップアプリフレームワーク
- macOS、Windows、Ubuntu をすべてサポートし、インストーラー・自動更新・差分パッチアーティファクトを自動生成
- ウィンドウ制御、メニュー、ショートカット、クリップボード、ダイアログ、セッションストレージなど 完全なデスクトップ機能セット を提供し、OOPIFベースの安定したWebView を実装
- 内部構造は BunのFFIと共有メモリモデル を活用し、マルチプロセス環境でも効率を維持
- ElectronとTauriの限界を経験した開発者が、2年間にわたり Zig、C、C++、Objective-C を学びながら自ら開発
- 5分以内にコーディングを始め、10分以内にデプロイまで可能な 統合ワークフロー を目標
Electrobun プロジェクト概要と目標
- Bun でメインプロセスを実行し、WebView TypeScript をバンドルし、Zig でネイティブバインディングを書く構成
- メインプロセスとWebViewの両方を TypeScript で記述しつつ、プロセス間の 分離(isolation) を保ちながら高速で型付きのRPC通信を提供
- 自己展開型アプリバンドルのサイズは約 12MB(システムWebView利用時、ほとんどが Bun ランタイムのサイズ)
- bsdiff ベースの差分更新により、パッチサイズを最小 14KB まで削減可能
- 5分以内にコーディングを開始し、10分以内にデプロイまで完了できる 単一の統合ワークフロー の提供が目標
npx electrobun init コマンドでテンプレートベースのプロジェクトを開始可能
制作背景
- Visual Basic 6 の時代からデスクトップアプリを作っており、Adobe AIR の時代に複数のスタートアップ製品を数千人へ配布した経験が原点
- 20年以上にわたりスタートアップの初期エンジニアとしてユニコーン規模の製品を構築・拡張してきたが、デスクトップ開発環境はむしろ後退
- ハイブリッドなWebブラウザ+コードエディタ+PTYターミナルである co(lab) を作る中であまりに多くの不便にぶつかり、自らフレームワークを作る決断をした
- 最初のバージョンは Electron で作ったが、コード署名・公証・配布・更新の過程は、アプリ開発よりフレームワークと戦っている感覚だった
- Webのような 継続的デプロイ(continuous shipping) を望んでいたが、既存のツールチェーンはそれを必要以上に難しくしていた
- Tauri も試したが、Rust はすべての開発者に適しているわけではないと判断し、当時 Bun は 1.0 リリース数か月前の状態だったため自ら開発に着手
macOSからクロスプラットフォームへ
- 当初は macOS アプリのみビルド可能だったが、現在は macOS、Windows、Ubuntu のすべてでビルド・配布を第一級にサポート
- インストーラー、自動更新アーティファクト、差分パッチ(differential patches) がすべて自動生成される
- 静的ホスト(R2、S3、GitHub Releases)を接続するだけで配布完了
- 差分更新は、C から Zig へ移植し SIMD と zstd で最適化した zig-bsdiff が担当
- BunのFFI が安定化したことで、従来書いていた Zig FFI 層の大半を Bun に置き換え
- アーキテクチャは前向きに転換し、Bun がワーカー生成時に 共有メモリ を使うため、マルチプロセスでも効率を維持
リリース済み機能
- 現在は完全なフレームワークとして、クロスプラットフォームのウィンドウ制御、メニュー、ショートカット(accelerators)、グローバルショートカット、クリップボード、ダイアログ、WebViewパーティション、セッションストレージ、ページ内検索(find-in-page)、バンドル・更新ツーリングなどを提供
- OOPIF(Out-of-Process Iframe) 実装が実際に動作するレベルに到達
- Electron の
<webview> タグは Chromium で deprecated になったが、いまだ代替手段は用意されていない状態
<electrobun-webview> は、DOMポジショニング、プロセス分離、レイヤリングが正常に動作する真の "super iframe"
- カーソルのちらつき(cursor flicker)問題なしに、ブラウザエンジンのパッチなしでクロスプラットフォーム動作
プラットフォーム対応状況
- macOS 14+: 公式サポート
- Windows 11+: 公式サポート
- Ubuntu 22.04+: 公式サポート
- その他の Linux ディストリビューション(gtk3、webkit2gtk-4.1): コミュニティサポート
今後の計画
- co(lab) を Electrobun 上に 全面的に再構築 し終え、v1 安定化を基盤に co(lab) 開発へ本格的に集中
- フレームワークが プラットフォーム変動(platform churn) に揺さぶられることなく、野心的な長期プロダクトを構築できるほど安定化したことが核心目標
- Discord コミュニティは成長中で、ベータテスト・Issue提出・フィードバックで貢献したユーザーたちがフレームワーク形成に寄与
- Electrobun は Blackboard が公開する最初の主要プロダクト
5件のコメント
co(lab) の全面的な書き直しと書かれていたので、Google と一緒に
ipynb実行向けクラウドの安定性を改善してくれるものだと思ったが、まったく関係のない Blackboard チームの開発プロジェクトだったそれでも、
npxでインストールする OOPIF にアクセスできるのは重要な経験に見える「コード署名・公証・配布・アップデートの過程が、アプリ開発よりフレームワークと戦っている感覚」
本文の制作背景に上記のような言及がありますが、
実際のアプリ開発より配布のほうに多くの工数がかかる場合があります。
この問題を解決したという点だけでも高く評価します。
Flutter に zig を組み合わせるのも、かなり簡単にできるようですね。
Dart/C FFI のドキュメントと大きな違いもなく…
> なぜ主要な Linux ディストリビューションが標準の WebView を提供していないのか疑問です。アプリのエコシステム拡大の大きな障害です。
GUI 環境の OS であれば、今や WebView は標準コンポーネントとして定着すべきだと思います。
Hacker Newsのコメント
こんにちは、Electrobun の作者です
今回 v1 安定版をリリースしました。アーキテクチャは固定されており、もし バグ や Electron/Tauri で使っていた API が必要なら、GitHub issue に残してもらえれば優先的に対応する予定です
この1か月で5万行のコードを修正し、安定化作業を完了しました
Electrobun で作ったオープンソースプロジェクト Colab(Webブラウザ + コードエディタ + PTY ターミナル)の デモ動画 もあります
Electrobun は基本的にシステム WebView を使いますが、
bundleCEFオプションで CEF を含めることもできます。構造的に WebView に依存しないため、Servo や Ladybird の準備が整えばすぐに置き換え可能ですまた各リリースごとに zstd ベースの自動圧縮パッケージ を生成し、初回ダウンロードサイズを減らしつつ、アップデートは 14KB 程度の小ささに保てます
partitionキーを入れると TypeScript エラーが発生しますElectrobun はとても有望に見えます。次のプロジェクトはこれで作る予定です
フル TypeScript スタック の中では最も生産性が高いです。Rust や長いコンパイル工程なしに、Electron より軽くて速い代替を得られるのがうれしいです
Discord では多くの ゲーム開発者 が Electrobun でデスクトップゲームを試しています
Steam のインディーゲーム市場で Electron の一部を置き換える可能性があります
特に
bun --watch game.tsによる 即時リロード 付きの TypeScript ゲーム開発体験はとても速くて滑らかですTauri の主な問題は、システム WebView の品質 が OS ごとに違う点です
Linux には公式の WebView がなく、Windows 7 や初期の 10 では Edge WebView を使いません。こうした違いのせいで起動に20秒以上かかることもあります
100MB 節約するためにこうしたトレードオフを受け入れるべきなのか疑問です
ほとんどのユーザーは高速なインターネットを使っているので、ダウンロード速度は大きな問題ではありません
Electrobun が 内蔵 Chromium レンダラー をサポートしているのか気になりましたが、ドキュメントでは明確ではありませんでした
タイトルに、この記事が プロジェクト回顧ブログ記事 だと明記してほしかったです
実際のプロジェクトは 公式ドキュメントへのリンク で見るほうが適切です
プロジェクトのメインページは こちら です
インターフェースはすっきりして見えますし、自分は Zig に慣れているので Rust より取っつきやすそうです
今週会社で新しい Electron アプリ を配布する予定ですが、Electrobun があと1年早く出ていてくれたらよかったのにと思います
Electron Builder がアップデートや署名の過程をある程度簡略化してくれるとはいえ、依然として面倒です
次の個人プロジェクトでは Electrobun を試してみるつもりです
記事では notarizing と stapling の問題に触れていましたが、Xcode を使わないと Apple はこの工程を非常に難しくしています
Windows でも CI 自動化は簡単ではありません。Electrobun がより良いソリューションを提供するならとても興味があります
notarize: trueでビルドすれば大丈夫ですElectrobun で署名と公証を何度もやりましたが問題ありませんでした。複雑なケース向けの escape hatch も用意されています
助けが必要なら Discord で DM を送ってください。(Electrobun 関係者ではありませんが、Apple の公証システムのつらさはよくわかっています)
Electron アプリが 500MB 以上なら、Electrobun の 14MB は本当に 小さいサイズ に感じられます
Ubuntu 以外のディストリビューションが現時点では サポート対象外 なのは残念です
関連する議論は issue コメント で確認できます