CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/npm-electron-builder

A complete solution to package and build a ready for distribution Electron app for MacOS, Windows and Linux with auto update support out of the box

Pending

Quality

Pending

Does it follow best practices?

Impact

Pending

No eval scenarios have been run

SecuritybySnyk

Pending

The risk profile of this skill

Overview
Eval results
Files

windows-packaging.mddocs/

Windows Packaging

Windows-specific packaging including NSIS installers, MSI packages, Squirrel.Windows auto-updater, and comprehensive code signing. Supports both x64 and ia32 architectures with various installer formats.

Capabilities

Windows Configuration

Core Windows build configuration with signing and installer options.

/**
 * Windows-specific build configuration
 */
interface WindowsConfiguration extends PlatformSpecificBuildOptions {
  /** Target configurations (NSIS, MSI, portable, etc.) */
  target?: TargetConfiguration | Array<TargetConfiguration | string> | string | null;
  /** Application icon (.ico file) */
  icon?: string | null;
  /** Legal trademarks */
  legalTrademarks?: string | null;
  /** Signtool.exe additional options */
  signtoolOptions?: Array<string> | null;
  /** Code signing configuration */
  sign?: string | WindowsSignOptions | null;
  /** Certificate file path (.p12/.pfx) */
  certificateFile?: string | null;
  /** Certificate password */
  certificatePassword?: string | null;
  /** Certificate SHA1 thumbprint */
  certificateSha1?: string | null;
  /** Certificate subject name */
  certificateSubjectName?: string | null;
  /** RFC 3161 timestamp server URL */
  rfc3161TimeStampServer?: string | null;
  /** Legacy timestamp server URL */
  timeStampServer?: string | null;
  /** Publisher display name */
  publisherName?: string | Array<string> | null;
  /** Verify update package signatures */
  verifyUpdateCodeSignature?: boolean;
  /** Requested execution level */
  requestedExecutionLevel?: "asInvoker" | "highestAvailable" | "requireAdministrator" | null;
  /** Application manifest file */
  applicationManifest?: string | null;
  /** Windows-specific extra files */
  extraFiles?: Array<FileSet> | FileSet | null;
  /** Windows-specific extra resources */
  extraResources?: Array<FileSet> | FileSet | null;
}

Usage Examples:

import { WindowsConfiguration } from "electron-builder";

const windowsConfig: WindowsConfiguration = {
  target: [
    { target: "nsis", arch: ["x64", "ia32"] },
    { target: "portable", arch: ["x64"] },
    { target: "zip", arch: ["x64", "ia32"] }
  ],
  icon: "build/icon.ico",
  publisherName: "My Company",
  certificateFile: "certificates/code-signing.p12",
  certificatePassword: process.env.WINDOWS_CERT_PASSWORD,
  rfc3161TimeStampServer: "http://timestamp.digicert.com",
  requestedExecutionLevel: "asInvoker",
  verifyUpdateCodeSignature: true
};

NSIS Installer Options

Configuration for NSIS-based Windows installers with extensive customization.

/**
 * NSIS installer configuration
 */
interface NsisOptions {
  /** One-click installer (no user interaction) */
  oneClick?: boolean;
  /** Install for all users (requires admin) */
  perMachine?: boolean;
  /** Allow elevation prompt */
  allowElevation?: boolean;
  /** Allow user to change installation directory */
  allowToChangeInstallationDirectory?: boolean;
  /** Installer icon */
  installerIcon?: string | null;
  /** Uninstaller icon */
  uninstallerIcon?: string | null;
  /** Installer header image */
  installerHeader?: string | null;
  /** Installer header icon */
  installerHeaderIcon?: string | null;
  /** Installer sidebar image */
  installerSidebar?: string | null;
  /** Uninstaller sidebar image */
  uninstallerSidebar?: string | null;
  /** Supported installer languages */
  installerLanguages?: Array<string> | string | null;
  /** Default language */
  language?: string | null;
  /** Multi-language installer */
  multiLanguageInstaller?: boolean;
  /** Pack elevate helper */
  packElevateHelper?: boolean;
  /** Pre-compressed file extensions */
  preCompressedFileExtensions?: Array<string> | null;
  /** Unicode NSIS */
  unicode?: boolean;
  /** Application GUID */
  guid?: string | null;
  /** Treat warnings as errors */
  warningsAsErrors?: boolean;
  /** Display language selector */
  displayLanguageSelector?: boolean;
  /** Installation directory name */
  installDirectoryName?: string | null;
  /** Desktop shortcut */
  createDesktopShortcut?: boolean;
  /** Start menu shortcut */
  createStartMenuShortcut?: boolean;
  /** Shortcut name */
  shortcutName?: string | null;
  /** Menu category */
  menuCategory?: string | null;
  /** Run after finish */
  runAfterFinish?: boolean;
  /** Delete app data on uninstall */
  deleteAppDataOnUninstall?: boolean;
  /** License file */
  license?: string | null;
  /** Include/exclude patterns */
  include?: string | null;
  /** Custom NSIS script */
  script?: string | null;
}

Usage Examples:

import { NsisOptions } from "electron-builder";

const nsisOptions: NsisOptions = {
  oneClick: false,
  perMachine: false,
  allowElevation: true,
  allowToChangeInstallationDirectory: true,
  installerIcon: "build/installer.ico",
  uninstallerIcon: "build/uninstaller.ico",
  installerHeader: "build/installer-header.bmp",
  installerSidebar: "build/installer-sidebar.bmp",
  createDesktopShortcut: true,
  createStartMenuShortcut: true,
  shortcutName: "My Application",
  runAfterFinish: true,
  deleteAppDataOnUninstall: false,
  license: "LICENSE.txt",
  language: "en_US",
  multiLanguageInstaller: true,
  installerLanguages: ["en_US", "de_DE", "fr_FR"],
  unicode: true
};

const config = {
  win: {
    target: "nsis"
  },
  nsis: nsisOptions
};

NSIS Web Installer

Configuration for web-based NSIS installers that download app files on demand.

/**
 * NSIS web installer configuration
 */
interface NsisWebOptions extends NsisOptions {
  /** Application package URL */
  appPackageUrl?: string | null;
  /** Application package size */
  appPackageSize?: number | null;
  /** Artifacts URL pattern */
  artifactName?: string | null;
}

MSI Installer Options

Configuration for Windows MSI installer packages.

/**
 * MSI installer configuration
 */
interface MsiOptions {
  /** MSI upgrade code GUID */
  upgradeCode?: string | null;
  /** Wrap MSI in .exe bootstrapper */
  warningsAsErrors?: boolean | null;
  /** Additional MSI properties */
  additionalWixProperties?: Array<string> | null;
  /** WiX file for customization */
  wxs?: string | null;
  /** UI banner image */
  ui?: MsiUiOptions | null;
  /** One-click install */
  oneClick?: boolean;
  /** Per-machine installation */
  perMachine?: boolean;
  /** MSI language */
  language?: string | null;
  /** Create desktop shortcut */
  createDesktopShortcut?: boolean;
  /** Create start menu shortcut */
  createStartMenuShortcut?: boolean;
  /** Shortcut name */
  shortcutName?: string | null;
  /** Menu category/folder */
  menuCategory?: string | null;
}

/**
 * MSI UI customization options
 */
interface MsiUiOptions {
  /** Welcome dialog image */
  chooseDirectory?: string | null;
  /** Installation progress dialog */
  installDirectory?: string | null;
}

Portable Executable Options

Configuration for portable (no-install) Windows executables.

/**
 * Portable executable configuration
 */
interface PortableOptions {
  /** Unpack portable app to temp directory */
  unpackDirName?: string | null;
  /** Request elevation for portable app */
  requestExecutionLevel?: "asInvoker" | "highestAvailable" | "requireAdministrator" | null;
  /** Splashscreen image */
  splashImage?: string | null;
}

Squirrel.Windows Options

Configuration for Squirrel.Windows auto-updater and installer.

/**
 * Squirrel.Windows configuration
 */  
interface SquirrelWindowsOptions {
  /** Remote update URL */
  remoteReleases?: string | null;
  /** Remote token for authentication */
  remoteToken?: string | null;
  /** Use package directory layout */
  useAppIdAsId?: boolean;
  /** Loading GIF for installer */
  loadingGif?: string | null;
  /** MSI wrapper options */
  msi?: MsiWrappedOptions | null;
  /** Executable name for updates */
  name?: string | null;
  /** Package name for Squirrel */
  packageName?: string | null;
  /** Description for package */
  description?: string | null;
  /** Package authors */
  authors?: string | null;
  /** Package owners */
  owners?: string | null;
}

/**
 * MSI wrapper for Squirrel.Windows
 */
interface MsiWrappedOptions {
  /** Upgrade code GUID */
  upgradeCode?: string | null;
  /** Wrap in MSI */
  enabled?: boolean;
}

AppX (Windows Store) Options

Configuration for Windows Store AppX packages.

/**
 * Windows Store AppX configuration
 */
interface AppXOptions {
  /** Application ID */
  applicationId?: string | null;
  /** Background color */
  backgroundColor?: string | null;
  /** Display name */
  displayName?: string | null;
  /** Identity name */
  identityName?: string | null;
  /** Publisher display name */
  publisherDisplayName?: string | null;
  /** Publisher identity */
  publisher?: string | null;
  /** Languages supported */
  languages?: Array<string> | string | null;
  /** AppX manifest additions */
  manifest?: string | null;
  /** Custom AppX manifest */
  customManifest?: string | null;
  /** Show name on tiles */
  showNameOnTiles?: boolean;
  /** Add auto launch */
  addAutoLaunch?: boolean;
  /** AppX artifacts */
  artifacts?: Array<any> | null;
}

Code Signing

Windows code signing configuration with certificate management.

/**
 * Windows code signing options
 */
interface WindowsSignOptions {
  /** Certificate file path */
  certificateFile?: string | null;
  /** Certificate password */
  certificatePassword?: string | null;
  /** Certificate SHA1 thumbprint */
  certificateSha1?: string | null;
  /** Certificate subject name */
  certificateSubjectName?: string | null;
  /** Additional signtool options */
  signtoolOptions?: Array<string> | null;
  /** RFC 3161 timestamp server */
  rfc3161TimeStampServer?: string | null;
  /** Legacy timestamp server */
  timeStampServer?: string | null;
  /** Additional certificate file */
  additionalCertificateFile?: string | null;
}

/**
 * Custom Windows signing function
 */
interface CustomWindowsSign {
  (configuration: CustomWindowsSignTaskConfiguration, packager: WinPackager): Promise<any>;
}

/**
 * Custom signing task configuration
 */
interface CustomWindowsSignTaskConfiguration {
  /** File path to sign */
  path: string;
  /** Packager instance */
  packager: WinPackager;
  /** Signing options */
  options: WindowsSignOptions;
}

/**
 * Windows packager with signing capabilities
 */
class WinPackager extends PlatformPackager {
  /** Sign file with certificate */
  sign(file: string, options?: WindowsSignOptions): Promise<void>;
  
  /** Create Windows package */
  pack(outDir: string, arch: Arch, targets: Array<Target>): Promise<any>;
}

Usage Examples:

import { WindowsSignOptions, CustomWindowsSign } from "electron-builder";

// Standard certificate signing
const signOptions: WindowsSignOptions = {
  certificateFile: "certs/code-signing.p12",
  certificatePassword: process.env.CERT_PASSWORD,
  rfc3161TimeStampServer: "http://timestamp.digicert.com",
  signtoolOptions: ["/tr", "http://timestamp.digicert.com", "/td", "sha256"]
};

// Custom signing function
const customSign: CustomWindowsSign = async (configuration, packager) => {
  console.log(`Signing ${configuration.path}`);
  // Custom signing logic using Azure Key Vault, HSM, etc.
  await packager.sign(configuration.path, configuration.options);
};

const config = {
  win: {
    sign: customSign, // or signOptions for standard signing
    certificateSubjectName: "My Company, Inc.",
    rfc3161TimeStampServer: "http://timestamp.digicert.com"
  }
};

Common Windows Installer Configuration

Shared configuration options across Windows installer types.

/**
 * Common Windows installer configuration
 */
interface CommonWindowsInstallerConfiguration {
  /** One-click installation */
  oneClick?: boolean;
  /** Per-machine installation */
  perMachine?: boolean;
  /** Allow elevation */
  allowElevation?: boolean;
  /** Run after finish */
  runAfterFinish?: boolean;
  /** Create desktop shortcut */
  createDesktopShortcut?: boolean;
  /** Create start menu shortcut */
  createStartMenuShortcut?: boolean;
  /** Shortcut name */
  shortcutName?: string | null;
  /** Menu category */
  menuCategory?: string | null;
  /** Delete app data on uninstall */
  deleteAppDataOnUninstall?: boolean;
}

Environment Variables

Common environment variables for Windows signing:

  • WINDOWS_CERT_PASSWORD - Certificate password
  • CSC_LINK - Certificate file path
  • CSC_KEY_PASSWORD - Certificate password
  • WIN_CSC_LINK - Windows-specific certificate path

Usage Examples:

// Environment-based signing configuration
const config = {
  win: {
    // Certificate automatically detected from environment
    publisherName: "My Company",
    rfc3161TimeStampServer: "http://timestamp.digicert.com"
  }
};

// Multi-target Windows build
const multiTargetConfig = {
  win: {
    target: [
      { target: "nsis", arch: ["x64", "ia32"] },
      { target: "msi", arch: ["x64"] },
      { target: "portable", arch: ["x64"] },
      { target: "appx", arch: ["x64"] }
    ]
  },
  nsis: {
    oneClick: false,
    allowToChangeInstallationDirectory: true
  },
  msi: {
    oneClick: true,
    perMachine: true
  }
};

Windows packaging provides comprehensive support for modern Windows distribution including multiple installer formats, code signing, Windows Store submission, and enterprise deployment scenarios.

Install with Tessl CLI

npx tessl i tessl/npm-electron-builder

docs

build-system.md

code-signing.md

configuration.md

index.md

linux-packaging.md

macos-packaging.md

platform-targets.md

publishing.md

windows-packaging.md

tile.json