The CLI
One command - bunmaska - that scaffolds, runs, watches, packages, and auto-updates your app. Pure Bun, no Xcode project, no electron-builder.
Installing the package gives you the bunmaska command - your developer tool. The whole development loop lives here: scaffold, run, package. It is not bundled into your app and your users never install it; what they get is a standalone executable (see Shipping Your App). Everything below is for you, not them.
bunmaska init [name]
Scaffolds a runnable starter from an embedded template: a main.ts, a preload.js, a renderer (index.html + script), a bunmaska.config.ts, and a package.json wired to depend on bunmaska.
bunmaska init my-app
bunmaska dev
Runs your app and restarts it on file changes (debounced). This is what you’ll have open all day.
bunmaska dev
bunmaska run <entry>
Runs an entry file once, no watching. Equivalent to bun run <entry> with Bunmaska’s runtime wiring.
bunmaska run src/main.ts
bunmaska build
Compiles your app with bun build --compile, bundles it next to the Bun runtime (which dlopens system WebKit, so there’s no Chromium to ship), and emits real distributables:
- macOS - a
.appbundle (with a.icnsconverted from your PNG), optional code-signing/notarization, and a.dmg. - Linux - an AppDir
.tar.gzand a.deb.
bunmaska build
bunmaska build --update
Everything build does, plus it emits the auto-update feed (update.json + a content-hashed .tar.zst) that the runtime autoUpdater consumes. Because there’s no 150 MB engine to re-download, updates are tiny.
bunmaska build --update --channel stable
quitAndInstall’s final atomic swap-and-relaunch is still experimental. The check → download → verify → stage engine is solid; the very last step is the alpha part.
bunmaska engine <subcommand>
Manages the pinned-WebKit engine store - the opt-in “tested == shipped” tier. See Pinned WebKit Engine for the full story; the subcommands:
bunmaska engine list # installed engines (side by side) + refcounts
bunmaska engine which [dir] # the engine a project resolves
bunmaska engine install <path> # install a local engine directory
bunmaska engine install <url> # install a published .tar.zst - signature + hash verified
bunmaska engine use <id> # print the per-project config to add (there is no --global)
bunmaska engine prune # garbage-collect engines no installed app references
bunmaska engine verify <id> # structural integrity check on an installed engine
Most apps never touch this - the system WebKit default is the right answer for them. It’s here for when you genuinely need the exact build you tested.
bunmaska doctor [dir]
A quick health report: the Bun version, the platform, the engine store, and the engine the current project resolves (and whether it’s installed). Run it when something engine-related looks off.
bunmaska doctor