概要
- deno desktop はDenoプロジェクトを自己完結型デスクトップアプリ化
- コード、Denoランタイム、Webレンダリングエンジンをバイナリに同梱
- Deno v2.9.0 から導入、安定版は未リリース
- Web技術活用、OSごとのWebViewまたはChromium(CEF)選択可能
- Node互換・クロスコンパイル・自動アップデート など多機能
deno desktopとは
- deno desktop はDenoプロジェクト(TypeScript単一ファイルからNext.jsアプリまで)をデスクトップアプリに変換
- 出力は 再配布可能なバイナリ、コード・Denoランタイム・Webレンダリングエンジンを一体化
- 各プラットフォームごとに 1つのバンドル を生成
利用方法と現状
- Deno v2.9.0 で導入、現在は安定版ではない
- すぐに試すには
deno upgrade canaryでカナリアビルドをインストール - コマンドやAPIは安定版リリース前に変更の可能性あり
deno desktopの特徴
- Web技術 を最大限活用、既存のElectronやTauri、Electrobunの課題を解消
- バイナリサイズは 小型、Node互換性も確保
- デフォルトは各OSのWebViewを使用し、必要に応じて Chromium(CEF)バンドル にも対応
- npmエコシステム がDenoのNode互換レイヤー経由で利用可能
フレームワーク自動検出
- Next.js、Astro、Fresh、Remix、Nuxt、SvelteKit、SolidStart、TanStack Start、Vite SSR を自動検出
- 既存Webプロジェクトを コード変更なし でデスクトップ化可能
- リリースモードでは本番サーバー、
--hmrではホットリロード付き開発サーバーを自動起動
バックエンド・通信方式
- プロセス内バインディング でバックエンドとUIが通信
- ソケットベースのIPCではなく、 高速なインプロセス通信 を実現
- DenoコードとWebView間のラウンドトリップを排除
クロスコンパイルとアップデート
- 1台のマシンでmacOS、Windows、Linux用バイナリを生成 可能
- バックエンドは必要時にダウンロード、ローカルビルド不要
- バイナリ差分自動アップデート (manifestとbsdiffパッチ対応)
- 起動失敗時は自動ロールバック
シンプルなサンプル
- 1ファイルアプリ例:
main.tsDeno.serve(() => new Response("<h1>Hello, desktop</h1>", { headers: { "content-type": "text/html" }, }))
- コマンド:
deno desktop main.ts - 実行バイナリを直接起動(
./mainまたはmain.exe)
主な機能一覧
- 設定 :deno.jsonのdesktopブロック
- バックエンド選択 :CEF、webview、raw
- HTTPサーバ連携 :Deno.serve()統合
- フレームワーク対応 :Next.js等主要Webフレームワーク
- ウィンドウ管理 :Deno.BrowserWindowライフサイクル、複数ウィンドウ、イベント
- バインディング :webviewからDenoコード呼び出し
- メニュー :アプリ・コンテキストメニュー
- トレイ・ドック :システムアイコン、macOS Dock
- ダイアログ :prompt(), alert(), confirm()をネイティブポップアップ化
- 通知 :Web Notification APIによるネイティブ通知
- ホットリロード :
--hmrでフレームワーク/非フレームワーク両対応 - DevTools :Denoランタイムとwebview両方に統合DevTools
- 自動アップデート :Deno.autoUpdate(), manifest, bsdiff, ロールバック
- エラー報告 :未捕捉例外・パニックのキャプチャ
- 配布 :クロスコンパイル、出力形式、インストーラ
- 他ツール比較 :Electron、Tauri、Electrobun、Dioxusとの違い
- CLIリファレンス :コマンド、フラグ、deno.json desktopスキーマ