Node サイドカー
NeoTavern のバックエンドは Fastify サーバーで、デスクトップアプリでは組み込み Node.js サイドカーとして実行されます: シェルの隣にパッケージ化された自己完結型 Node.js 24 バイナリです。
なぜサイドカーなのか
バックエンドを別プロセスとしてバンドルすることで、シェルは薄く、バックエンドは本物に保たれます:
- バックエンドはセルフホストインストールが実行するのと同じ Fastify 5 アプリケーションであるため、デスクトップとサーバーの動作は同一のままです。
- Node.js と SQLite がディストリビューションにコンパイルされているため、初回起動に npm インストールもターミナルも不要です。
- プロセス境界により、バックエンドのクラッシュやハングがシェルのイベントループを倒すことはできず、シェルはライフサイクルの保証を強制できます。
起動
起動時にシェルはサイドカー実行ファイルをスパウンし、ウェブビューを開く前に準備完了を待ちます。バックエンドは:
127.0.0.1のランダムな空きポートのみでリッスンします;- SQLite データベースを作成し、保留中のスキーママイグレーションをデータディレクトリで実行します。保留中のマイグレーションの前にバックアップを取ります;
- 本番 Web アセットと API を提供します。
初回起動は完全に自動です: データディレクトリ、データベース、同梱テーマ、スターターキャラクターがユーザーの操作なしでセットアップされます。
正常なシャットダウン
シャットダウンは協調的で順序付けられています:
- シェルが閉じるイベントを受け取り、バックエンドに停止を伝えます。
- バックエンドは新しい接続の受け入れを停止し、デッドライン内で進行中の作業を完了し、データベースをきれいに閉じます。
- サイドカーが終了し、シェルが終了します。
予期しないバックエンドの終了はシェルによって検出され、エラー終了として報告され、バックエンドプロセスが静かに孤児化されることはありません。したがって、アプリはウィンドウを閉じた後に迷子の neotavern-server プロセスを残すことはありません。
バンドルと検証
サイドカーはターゲットプラットフォームごとにビルドされます。ネイティブアドオン(better-sqlite3、Sharp)と本番 Web アセットは同じターゲットランナーで準備され、実行ファイルとともにパッケージ化されます。OS 間での準備済みリソースの移動はサポートされません。スモークゲートは各プラットフォームの CI でパッケージ化されたサイドカーをヘッドレスで実行し、実際の Node 実行ファイル、SQLite、Sharp、パッケージ化された SPA、診断、残留プロセスの不在を検証します。
ポータブルバリアント
Windows ポータブルビルドは同じサイドカーレイアウトを実行します: メイン実行ファイル、サイドカー実行ファイル、portable.flag マーカー、resources/ フォルダです。フラグはデータルートをアプリケーションの隣のローカル data/ フォルダに切り替えます。シェルはパッケージ化された Node バイナリに渡す前に Windows リソースパスを正規化します。
フォーマットと初回起動の体験はパッケージング を、このプロセスを管理するシェルはTauri シェル を参照してください。