Murasaki

CLI reference

Every Murasaki command — dev, build, bundle, installer, and more.

murasaki dev         Start the Vite dev server + native window (HMR, Fast Refresh)
murasaki build       Production Vite build → dist/client
murasaki bundle      Native app folder / .app for the current platform
murasaki installer   Distributable installer for the current platform
murasaki init        Install the Rust toolchain (only if you're hacking on @murasakijs/native)
murasaki icon        Generate .icns / .ico / .png from a single PNG
murasaki release     Auto-update manifest helpers
murasaki help        Show this help

murasaki bundle and murasaki installer produce real installers on macOS and Windows today; Linux packaging is on the roadmap (it still prints a "not supported yet" message). murasaki dev works on macOS, Windows, and Linux.

murasaki dev

Boots the Vite dev server in a child process and attaches a native window pointed at it — React Fast Refresh + HMR work as usual; edit and save, the window updates. Runs on config.devPort (default 5178), auto-incrementing if that port is taken.

murasaki build

A production Vite build → dist/client.

murasaki bundle

Packages dist/client + the compiled server-actions registry + a portable Node runtime + the native launcher binary into dist/bundle/ — a <productName>.app on macOS, a <productName>/ folder with <productName>.exe on Windows.

murasaki bundle                       # host platform + arch, unsigned
murasaki bundle --arch x64            # cross-arch (macOS): x64 .app on Apple Silicon
murasaki bundle --target win32-arm64  # cross-target: an arm64 Windows bundle
murasaki bundle --sign                # macOS Developer ID or Windows Authenticode signing
murasaki bundle --no-build            # reuse an existing dist/client
  • --arch arm64|x64 / --target <platform>-<arch> — target arch / platform (defaults to the host). Windows targets are win32-x64 / win32-arm64.
  • --sign — Developer ID-sign the .app on macOS or Authenticode-sign the app executable before the Windows portable ZIP is created. Windows signing must run on Windows with SignTool. See Distribution.
  • --no-build — skip the Vite rebuild if dist/client already exists.

murasaki installer

Turns the bundle output into a distributable installer for the target platform: a drag-to-install, styled .dmg on macOS (dist/<productName>-<version>.dmg, falling back to a plain DMG if Finder-styling fails); a portable .zip, an NSIS .exe, and an MSI .msi on Windows.

murasaki installer                     # installer(s) for the host platform (re-bundles first)
murasaki installer --target win32-x64  # Windows x64 installers
murasaki installer --sign --notarize   # macOS: Developer ID sign + notarize + staple
murasaki installer --target win32-x64 --sign # Windows: sign app + NSIS + MSI
murasaki installer --no-build          # reuse an existing dist/bundle
  • --target <platform>-<arch> / --arch arm64|x64 — forwarded to bundle.
  • --sign — macOS Developer ID or Windows Authenticode signing. On Windows it signs and verifies the app executable, NSIS setup, and MSI.
  • --notarize — macOS only; submits the signed .dmg to Apple's notary service and staples the ticket (--notarize requires --sign).

murasaki init

Checks for rustc and prints an install command if it's missing. Only needed if you're hacking on @murasakijs/native itself — end users of Murasaki never need Rust; prebuilt binaries come down from npm.

murasaki icon

murasaki icon assets/logo.png

Generates dist/icons/icon.icns (macOS, via sips + iconutil) from a single 1024px PNG; this standalone command is PNG-only off macOS for now. You rarely need it, though — murasaki bundle already generates and embeds the platform icon from config.icon automatically: the .icns on macOS, and the Windows .ico (embedded into the .exe).

murasaki release

murasaki release --keygen [--force]
murasaki release --manifest --base-url <url> --version <v> [--notes <md>] [--mandatory]
murasaki release --sign

Three independent modes for publishing signed auto-updates — see the Auto-update guide for the full flow.

  • --keygen — generates the Ed25519 keypair used to sign update manifests. Writes .murasaki/update-key.pub (commit it) and .murasaki/update-key (gitignored automatically), and prints the private key once with instructions to store it as a MURASAKI_UPDATE_KEY GitHub secret. Refuses to overwrite an existing key without --force.
  • --manifest — scans dist/ for this version's payloads (the macOS .app.zip, the Windows -setup.exe), hashes whichever exist, and writes dist/latest.json. Missing targets are skipped, not errors.
  • --sign — signs dist/latest.json into dist/latest.json.sig. Key from $MURASAKI_UPDATE_KEY, falling back to .murasaki/update-key.

--generate-manifest still works as a deprecated alias of --manifest.

Next

Improve this page on GitHub

On this page