イントロダクション
デスクトップアプリのための Next.js DX — React 19 + Vite、Rust ネイティブ、Rust を書く必要はありません。
Murasaki を使えば、Next.js アプリを作る感覚のままネイティブなデスクトップアプリを構築できます。ファイルベースルーティング、レイアウト、サーバーアクション、API ルート、そして React 19 — これらすべてが、Electron のバンドルされた Chromium ではなく、Rust ネイティブなウィンドウの上で動作します。
あなたが書くのは React と TypeScript だけです。Murasaki は小さな Rust コア(@murasakijs/native、tao/wry/muda をベースに構築)を同梱しており、本物のネイティブウィンドウ、ネイティブメニュー、OS との統合を提供します — Rust を一切書く必要はありません。
Murasaki を選ぶ理由
| Murasaki | Electron | Tauri | |
|---|---|---|---|
| UI ランタイム | OS WebView (wry) | bundled Chromium | OS WebView |
| 言語 | TypeScript / React | TypeScript / React | TypeScript + Rust |
| DX | Next.js 風(Vite HMR) | manual wiring | manual wiring |
| メモリ(アイドル時) | Electron の約 1/5* | baseline | small |
| インストーラーサイズ | ~43 MB .dmg / ~120 MB .app† | ~80–150 MB* | ~3–10 MB* |
| サーバーアクション | defineAction / useAction | manual IPC | manual IPC / commands |
* Electron/Tauri でよく引用されるおおよその目安であり、実測ベンチマークではありません。
† macOS で実測。.app はフル Node ランタイムを同梱しているため、サイズの大部分はそこか
ら来ています。
Murasaki を選ぶべきなのは、React/Next.js を知っていて、Rust を学んだり IPC を手動で配線したりすることなく、軽量なデスクトップアプリを作りたい人です。
できること
- ファイルベースルーティング —
src/app/**/page.tsx、レイアウト、動的セグメント、loading/error/not-found、middleware.ts。詳しくはルーティングを参照してください。 - Server Actions —
'use server'+defineAction/useAction、おなじみの React 19 の形そのままです。詳しくはServer Actionsを参照してください。 - Node Main — DB、socket、worker、background work のための長寿命 Node lifecycle と
型付き
'use main'call。Node Mainを参照してください。 - API Routes — Next.js 風の
src/api/**/route.tsによる HTTP エンドポイント。詳しくは API Routesを参照してください。 - ネイティブウィンドウ & メニュー — 本物のネイティブウィンドウ、ネイティブメニューバー、
スコープ付きのネイティブコンテキストメニュー(
NSMenuであり、HTML のポップアップでは ありません)。詳しくはNative APIsを参照してください。 - UI キット —
@murasakijs/ui、shadcn スタイルのコンポーネントライブラリです。詳しく はスタイリングとライブのコンポーネントを 参照してください。 - 本格的な配布 — ポータブルでクロスアーキテクチャ対応の
.appバンドル、コード署名 + 公証にも対応。詳しくはDistributionを参照してください。
バンドルは macOS(.app / .dmg)と Windows(.zip / .exe / .msi)向けの
インストーラを出力します。Linux(.AppImage)はロードマップに含まれています。Rust
コア自体はすでに 5 つのターゲットすべてでビルド可能です。
Murasaki は 1.0 未満です。global shortcut、Linux packaging / signing などの本番 blocker は プラットフォームと機能の状況で 確認してください。