@painda/wizard

Replace NSIS / WiX
in minutes.

One config file. One CLI command. A fully branded, animated Windows installer your users will actually like.

$npm install -D @painda/wizard
1 config fileWindows-nativeMIT licensedTypeScript-first
scroll

// what you get

Everything an installer needs.
Nothing it doesn't.

Fully Branded

Set your logo, primary color, accent, font, and light/dark theme in config. The installer becomes yours — not an NSIS dialog.

Beautiful UI

Animated wizard with Welcome → License → Privacy → Options → Progress → Finish. Built with React + Framer Motion.

Windows-Native

Writes registry entries, desktop and Start Menu shortcuts, and Add/Remove Programs. No admin required by default.

TypeScript Config

defineConfig() with full Zod validation. Autocomplete in your IDE. No XML, no NSIS scripts, no surprises.

Drop-In

Works with any existing Electron app. Build with electron-builder --dir first, then npx painda build. Done.

Maintenance Mode

If the app is already installed, the wizard switches to Repair / Reinstall / Uninstall mode automatically.

// quick start

From zero to installer in 3 steps.

01

Install

npm install -D @painda/wizard

Add to any Electron project as a dev dependency.

02

Configure

Create painda.config.ts. Set your brand, pages, and payload path.

03

Build

npx painda build

Outputs a branded installer EXE to your dist folder.

painda.config.ts
import { defineConfig } from "@painda/wizard";

export default defineConfig({
  app: {
    id: "com.example.myapp",
    name: "My App",
    version: "1.0.0",
    publisher: "My Company",
  },
  branding: {
    primaryColor: "#4f46e5",
    accentColor: "#a855f7",
    logo: "./assets/logo.png",
    theme: "dark",
  },
  pages: {
    license: { file: "./assets/license.txt", mustScroll: true },
    options: { desktopShortcut: true, startMenuShortcut: true },
    finish: { runApp: true },
  },
  payload: {
    from: "./dist/win-unpacked",
    executable: "MyApp.exe",
  },
  output: {
    dir: "dist-installer",
    filename: "${name}-Setup-${version}.exe",
  },
});

// wizard pages

Every screen, covered.

Enable only the pages you need. Each one is fully themed to match your brand.

WelcomeBranded splash with tagline and logo
LicenseScroll-to-accept EULA with mustScroll option
PrivacyPrivacy policy page, fully configurable
OptionsInstall path, shortcuts, custom checkboxes
ProgressAnimated progress bar with live status
MaintenanceRepair / Reinstall / Uninstall for existing installs
UpdateSeamless update mode via electron-updater
FinishConfetti, launch app, custom links