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 helpmurasaki 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 arewin32-x64/win32-arm64.--sign— Developer ID-sign the.appon 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 ifdist/clientalready 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 tobundle.--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.dmgto Apple's notary service and staples the ticket (--notarizerequires--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.pngGenerates 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 --signThree 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 aMURASAKI_UPDATE_KEYGitHub secret. Refuses to overwrite an existing key without--force.--manifest— scansdist/for this version's payloads (the macOS.app.zip, the Windows-setup.exe), hashes whichever exist, and writesdist/latest.json. Missing targets are skipped, not errors.--sign— signsdist/latest.jsonintodist/latest.json.sig. Key from$MURASAKI_UPDATE_KEY, falling back to.murasaki/update-key.
--generate-manifest still works as a deprecated alias of --manifest.