Murasaki
コアコンセプト

アーキテクチャ

Rust ホスト、ローカル Node ランタイム、WebView レンダラーの関係。

Murasaki は 3 層のデスクトップランタイムです。React は OS の WebView で描画され、 アプリのバックエンドコードは同梱された Node.js プロセスで実行され、小さな Rust ホストがネイティブウィンドウとアプリのライフサイクルを管理します。

┌─────────────── ネイティブアプリ ────────────────┐
│                                                 │
│  Rust host (tao / wry / muda)                   │
│  windows · WebViews · native menu · update handoff│
│                      │                          │
│                      │ 起動 / 監視              │
│                      ▼                          │
│  Local Node runtime                             │
│  src/main.ts · use-main · use-server · API route│
│                      │                          │
│                      │ 認証付き loopback HTTP   │
│                      ▼                          │
│  OS WebView                                     │
│  React 19 · Murasaki router · renderer code     │
│                                                 │
└─────────────────────────────────────────────────┘

これは Electron の Chromium + Node レンダラーモデルとは異なります。レンダラーに Node グローバルはありません。ファイル、DB、ソケット、Worker、シークレットを扱う コードは src/main.ts'use main' モジュール、 'use server' アクション、または src/api/ ルートに置きます。

各レイヤーの責務

レイヤー担当担当しないもの
Rust ホストnative event loop、宣言済みapp window、window別navigation / capability policy、OS open request normalize、menu、Node子process監視、更新の最終適用business logic、React state
ローカル NodeMain lifecycle、登録済みURL / file処理、Action、API route、更新検証、app resource / data任意native windowの動的生成
レンダラーUI、routing、browser API、型付きbackend call、許可済み宣言windowの操作filesystem・Node・native moduleへの直接access

Murasaki は 1.0 未満です。宣言windowには独立したdeny-by-default command allowlistが ありますが、capability argumentやpath / URL scopeはpolicy制御されません。packaged macOS / Windows appはsingle instanceを強制し、URL scheme / file associationを登録して、 一致するactivationをNode MainのopenRequested()へ渡せます。本番設計を確定する前に プラットフォームと機能の状況を 確認してください。

開発時とパッケージ後

コードの境界は同じですが、実行するホストが異なります。

murasaki devパッケージ済みアプリ
Web アセットHMR 付き Vite dev server同梱 Node が dist/client を配信
Node バックエンドVite 子プロセスアプリ内のポータブル Node
ネイティブホストCLI が @murasakijs/native をロード単体の Rust launcher
宣言window個別dev WebViewとして全routeを作成resolved bundle metadataから全routeを作成
Main entryVite SSR で読み込み、entry の変更で hot reloadserver/main.mjs にコンパイル
バックエンド呼び出しVite middleware同梱 loopback HTTP server
URL / file 登録dev mode では OS に登録しないmacOS app metadata または Windows installer registry

本番では appId から決めた loopback port を使うため、起動をまたいでレンダラーの origin が安定します。Windows の WebView2 profile も appId ごとに分離されます。 リリース後は appId を安易に変更しないでください。データパス、WebView profile、 bundle identity、single-instance lock、ローカル origin が変わる可能性があります。

Next.js 風であり、Next.js そのものではない

src/app、layout、route handler、directive、React 19 といった慣れた規約を採用して いますが、Next.js runtime ではありません。React Server Components や Edge runtime はなく、middleware はクライアントナビゲーションだけに参加します。対応範囲は各 ガイドの記述を基準にし、Next.js にあるという理由だけで API の存在を仮定しないで ください。

次へ

On this page