An Electron app for managing multiple ComfyUI installations.
Run the NSIS installer (.exe) and launch from the Start Menu or desktop shortcut.
Open the .dmg, drag ComfyUI Launcher to Applications, and launch from there.
.deb (Debian/Ubuntu):
sudo apt install ./ComfyUI-Launcher-*.debThen launch from your application menu.
AppImage:
chmod +x ComfyUI-Launcher-*.AppImage
./ComfyUI-Launcher-*.AppImage --no-sandboxWe recommend using nvm (or nvm-windows) to manage Node versions:
# Install and use Node 22
nvm install 22
nvm use 22
# Verify
node --version # should print v22.x.x
# Enable pnpm via Corepack (bundled with Node)
corepack enable
pnpm --version- Build tool: electron-vite
- Renderer: Vue 3 (Composition API) + TypeScript
- State: Pinia
- i18n: vue-i18n (locale files in
locales/) - Styling: Tailwind CSS v4
- Icons: Lucide
- Main process: TypeScript (
src/main/) - Linting: ESLint (flat config) + Prettier
- Testing: Vitest + Vue Test Utils
src/
main/ # Electron main process (TypeScript)
preload/ # Preload scripts (context bridge)
renderer/src/ # Vue 3 renderer
components/ # Reusable UI components
composables/ # Vue composables (useModal, useTheme, …)
stores/ # Pinia stores (session, installation)
views/ # Top-level views and modal views
types/ # Renderer-side type re-exports
types/ # Shared IPC types (single source of truth)
locales/ # i18n translation files
sources/ # Installation source plugins
git clone https://github.com/Comfy-Org/ComfyUI-Launcher.git
cd ComfyUI-Launcher
pnpm installWindows / macOS:
pnpm run devLinux:
./linux-dev.shpnpm run typecheck # both main + renderer
pnpm run typecheck:node # main process only
pnpm run typecheck:web # renderer onlypnpm run lint # check for lint errors
pnpm run lint:fix # auto-fix lint errors
pnpm run format # format with Prettier
pnpm run format:check # check formatting without writingpnpm test # run all unit tests
pnpm run test:watch # run in watch mode# Platform-specific
pnpm run build:win # Windows (NSIS installer)
pnpm run build:mac # macOS (DMG)
pnpm run build:linux # Linux (AppImage, .deb)Build output is written to the dist/ directory.
Pushing a version tag triggers the ToDesktop Build & Release workflow. It runs a ToDesktop cloud build and creates a draft GitHub Release with platform download links.
# Ensure package.json version matches the tag version first
# e.g. package.json "version": "0.2.0"
# Tag the current commit with that same version
git tag v0.1.0
# Push the tag to trigger the release workflow
git push origin v0.1.0The workflow enforces tag == package.json version. Once the build finishes, go to the Releases page to review and publish the draft.
On Windows and macOS, all app data lives under the standard Electron userData path.
Dev vs. production path difference: Electron derives the
userDatadirectory name from the app's name. In development (pnpm run dev), it uses thenamefield frompackage.json(comfyui-launcher), while packaged builds use theproductNamefromelectron-builder.yml(ComfyUI Launcher). This means the two environments use separate data directories:
Windows macOS Linux Dev %APPDATA%\comfyui-launcher~/Library/Application Support/comfyui-launcher~/.config/comfyui-launcherProduction %APPDATA%\ComfyUI Launcher~/Library/Application Support/ComfyUI Launcher~/.config/ComfyUI Launcher
On Linux, the app follows the XDG Base Directory Specification:
| Purpose | Linux Path |
|---|---|
Config (settings.json) |
$XDG_CONFIG_HOME/comfyui-launcher (default ~/.config/comfyui-launcher) |
Data (installations.json) |
$XDG_DATA_HOME/comfyui-launcher (default ~/.local/share/comfyui-launcher) |
Cache (download-cache/) |
$XDG_CACHE_HOME/comfyui-launcher (default ~/.cache/comfyui-launcher) |
State (port-locks/) |
$XDG_STATE_HOME/comfyui-launcher (default ~/.local/state/comfyui-launcher) |
| Default install dir | ~/ComfyUI-Installs |
Existing files at the old ~/.config/comfyui-launcher location are automatically migrated on first launch.