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 demo Run a checksum-verified macOS developer preview
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 helpDevelopment and packaging support macOS, Windows, and Linux. Linux bundles
produce an AppDir and .AppImage; installer also produces a .deb.
Linux --sign GPG-signs the .AppImage, .deb, and a combined
SHA256SUMS; RPM packages and repository metadata are not yet implemented.
An explicit --sign request fails closed before output on every platform;
it never silently produces an unsigned artifact.
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, or an AppDir plus .AppImage on Linux.
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 --target linux-x64 # Linux AppDir + AppImage
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). Targets includedarwin-arm64,darwin-x64,win32-x64,win32-arm64,linux-x64, andlinux-arm64.--sign— Developer ID-sign the.appon macOS, Authenticode-sign the app executable before the Windows portable ZIP is created, or GPG-sign the produced.AppImageon Linux. 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); an NSIS .exe on Windows, plus an MSI .msi when the
built-in updater is disabled; and a .deb on Linux. The portable Windows ZIP
comes from the bundle step. The Linux bundle step also keeps the AppDir
and .AppImage artifacts.
murasaki installer # installer(s) for the host platform (re-bundles first)
murasaki installer --target win32-x64 # Windows x64 installers
murasaki installer --target linux-x64 # Linux amd64 .deb + bundle artifacts
murasaki installer --sign --notarize # macOS: Developer ID sign + notarize + staple
murasaki installer --target win32-x64 --sign # Windows: sign app + generated installer(s)
murasaki installer --no-build # reuse an existing dist/bundle--target <platform>-<arch>/--arch arm64|x64— forwarded tobundle.--sign— macOS Developer ID, Windows Authenticode, or Linux GPG signing. On Windows it signs and verifies the app executable and every generated installer. Updater-enabled builds require per-user NSIS and skip MSI. On Linux it GPG-signs the.AppImage, the.deb, and a combinedSHA256SUMS(see Distribution).- The command fails when the platform packaging tool produces no installer.
Use
murasaki bundlewhen a portable ZIP/AppImage is the intended output. --notarize— macOS only; submits the signed.dmgto Apple's notary service and staples the ticket (--notarizerequires--sign).
murasaki demo
Downloads and launches a packaged macOS developer preview in one command. The runner selects Apple silicon or Intel automatically, verifies the release asset against its published SHA-256 and strict ad-hoc code signature, caches the verified app, and only then removes the quarantine attribute.
pnpm dlx murasaki@latest demo papelle
pnpm dlx murasaki@latest demo oscilla
pnpm dlx murasaki@latest demo orgliamurasaki demo --listlists every available preview.--refreshignores the verified local cache and downloads the asset again.--no-openprepares and verifies the app without launching it.- Running
murasaki demowithout a name launches the packaged default create-murasaki scaffold.
These are ad-hoc-signed developer previews for CLI users, not notarized consumer downloads. Production apps should be signed and notarized by their publisher.
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 platform icon resources from one square 1024px PNG. On macOS with a
full Xcode installation, the output contains Assets.car with an AppIcon
asset as well as icon.icns: current macOS applies its own icon mask and
appearance rendering from the asset catalog, while .icns remains the legacy
fallback. With Command Line Tools only, Murasaki warns and produces the .icns
fallback. The command is PNG-only off macOS for now.
You rarely need to run it directly — murasaki bundle embeds the same resources
from config.icon automatically. Do not bake macOS's rounded mask into the
canonical source image; provide a square design and let the system mask the
asset-catalog version. Windows builds generate an .ico and embed it into the
.exe.
murasaki release
murasaki release --keygen [--force]
murasaki release --manifest --base-url <url> --version <v> [--notes <md>] [--mandatory] [--rollout <0-100>]
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(mode0600, gitignored automatically). It never prints the private key; it shows an stdin-based command for storing the file 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-<arch>.exe— the legacy un-suffixed-setup.exename is still recognized for win32-x64), and Linux-linux-<arch>.AppImagepayloads, hashes whichever exist, and writesdist/latest.jsonwith ageneratedAttimestamp. Linux.debpackages are intentionally not update payloads because the system package manager owns their lifecycle. Missing targets are skipped, not errors.--rollout <0-100>writes an optional staged-rollout percentage.--sign— signsdist/latest.jsonintodist/latest.json.sig. Key from$MURASAKI_UPDATE_KEY, falling back to.murasaki/update-key. Also writes akeyIdrotation hint into the manifest when.murasaki/update-key.pubis available.
--generate-manifest still works as a deprecated alias of --manifest.