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
npx @tessl/cli install tessl/npm-electron-builder@26.0.0Electron Builder is a complete solution to package and build ready-for-distribution Electron applications for macOS, Windows, and Linux with built-in auto-update support. It provides a comprehensive build pipeline from source code to distributable installers, handling code signing, native dependencies, and publishing to various platforms.
npm install --save-dev electron-builderimport {
build,
publish,
createTargets,
Platform,
Arch,
buildForge,
CancellationToken,
getArchSuffix,
archFromString,
log
} from "electron-builder";For CommonJS:
const {
build,
publish,
createTargets,
Platform,
Arch,
buildForge,
CancellationToken,
getArchSuffix,
archFromString,
log
} = require("electron-builder");Configuration and type imports:
import type {
Configuration,
PackagerOptions,
PublishOptions,
TargetConfiguration,
MacConfiguration,
WindowsConfiguration,
LinuxConfiguration,
BuildResult
} from "electron-builder";import { build, Platform } from "electron-builder";
// Basic build for current platform
await build({
targets: Platform.current().createTarget(),
config: {
appId: "com.example.myapp",
productName: "My App",
directories: {
output: "dist"
}
}
});
// Cross-platform build
await build({
targets: new Map([
[Platform.MAC, new Map([[Arch.x64, ["dmg", "zip"]]])],
[Platform.WINDOWS, new Map([[Arch.x64, ["nsis", "portable"]]])],
[Platform.LINUX, new Map([[Arch.x64, ["AppImage", "deb"]]])]
])
});Electron Builder is structured around several key components:
build() function orchestrates the entire packaging processMacPackager, WinPackager, LinuxPackager) handle platform-specific logicPublishManager handles artifact upload to various distribution platformsCore build functionality for packaging Electron applications into distributable formats. Handles the complete build pipeline from source to installer.
function build(options: PackagerOptions & PublishOptions, packager?: Packager): Promise<Array<string>>;
interface PackagerOptions {
targets?: TargetMap;
mac?: Array<string>;
win?: Array<string>;
linux?: Array<string>;
config?: Configuration | string | null;
projectDir?: string | null;
prepackaged?: string | null;
}
interface PublishOptions {
publish?: PublishPolicy | null;
}
type PublishPolicy = "onTag" | "onTagOrDraft" | "always" | "never";Integration with Electron Forge for hybrid build workflows.
function buildForge(forgeOptions: ForgeOptions): Promise<Array<string>>;
interface ForgeOptions {
/** Forge configuration object */
config?: any;
/** Output directory for build artifacts */
dir?: string;
/** Enable interactive mode for user prompts */
interactive?: boolean;
/** Custom packager options */
packagerOptions?: PackagerOptions;
/** Publishing configuration */
publishOptions?: PublishOptions;
}Platform abstraction and target configuration system for cross-platform builds. Manages architecture and output format combinations.
class Platform {
static MAC: Platform;
static WINDOWS: Platform;
static LINUX: Platform;
static current(): Platform;
createTarget(type?: string | Array<string> | null, archs?: Array<Arch>): TargetMap;
}
enum Arch {
ia32 = "ia32",
x64 = "x64",
armv7l = "armv7l",
arm64 = "arm64",
universal = "universal"
}
function createTargets(platforms: Array<Platform>, type?: string | null, arch?: string | null): TargetMap;Comprehensive configuration system for customizing build behavior, output formats, and platform-specific options.
interface Configuration extends PlatformSpecificBuildOptions {
appId?: string | null;
productName?: string | null;
directories?: MetadataDirectories | null;
files?: FileSet | null;
extraFiles?: Array<FileSet> | FileSet | null;
extraResources?: Array<FileSet> | FileSet | null;
mac?: MacConfiguration | null;
win?: WindowsConfiguration | null;
linux?: LinuxConfiguration | null;
publish?: Array<PublishConfiguration> | PublishConfiguration | null;
}
interface MetadataDirectories {
buildResources?: string | null;
output?: string | null;
app?: string | null;
}macOS-specific packaging options including DMG creation, code signing, notarization, and App Store distribution.
interface MacConfiguration extends PlatformSpecificBuildOptions {
identity?: string | null;
icon?: string | null;
entitlements?: string | null;
entitlementsInherit?: string | null;
provisioningProfile?: string | null;
bundleVersion?: string | null;
helperBundleId?: string | null;
helperRendererBundleId?: string | null;
helperPluginBundleId?: string | null;
helperGPUBundleId?: string | null;
helperEHBundleId?: string | null;
type?: "distribution" | "development" | null;
extendInfo?: any;
binaries?: Array<string> | null;
minimumSystemVersion?: string | null;
requirements?: string | null;
electronLanguages?: Array<string> | string;
strictVerify?: boolean | string | Array<string>;
gatekeeperAssess?: boolean;
darkModeSupport?: boolean;
mergeASARs?: boolean;
x64ArchFiles?: string;
singleArchFiles?: string;
}
interface DmgOptions {
background?: string | null;
backgroundColor?: string | null;
icon?: string | null;
iconSize?: number | null;
iconTextSize?: number | null;
title?: string | null;
contents?: Array<DmgContent>;
format?: "UDZO" | "UDBZ" | "ULFO" | "UDRO" | "UDCO" | "UDRW" | "UDTO" | "UDSP" | "UDSB" | "UFBI";
window?: DmgWindow | null;
internetEnabled?: boolean;
sign?: boolean;
writeUpdateInfo?: boolean;
}Windows-specific packaging including NSIS installers, MSI packages, code signing, and Squirrel.Windows auto-updater.
interface WindowsConfiguration extends PlatformSpecificBuildOptions {
target?: TargetConfiguration | Array<TargetConfiguration | string> | string | null;
icon?: string | null;
legalTrademarks?: string | null;
signtoolOptions?: Array<string> | null;
sign?: string | WindowsSignOptions | null;
certificateFile?: string | null;
certificatePassword?: string | null;
certificateSha1?: string | null;
certificateSubjectName?: string | null;
rfc3161TimeStampServer?: string | null;
timeStampServer?: string | null;
publisherName?: string | Array<string> | null;
verifyUpdateCodeSignature?: boolean;
requestedExecutionLevel?: "asInvoker" | "highestAvailable" | "requireAdministrator" | null;
applicationManifest?: string | null;
extraFiles?: Array<FileSet> | FileSet | null;
extraResources?: Array<FileSet> | FileSet | null;
}
interface NsisOptions {
oneClick?: boolean;
perMachine?: boolean;
allowElevation?: boolean;
allowToChangeInstallationDirectory?: boolean;
installerIcon?: string | null;
uninstallerIcon?: string | null;
installerHeader?: string | null;
installerHeaderIcon?: string | null;
installerSidebar?: string | null;
uninstallerSidebar?: string | null;
installerLanguages?: Array<string> | string | null;
language?: string | null;
multiLanguageInstaller?: boolean;
packElevateHelper?: boolean;
preCompressedFileExtensions?: Array<string> | null;
unicode?: boolean;
guid?: string | null;
warningsAsErrors?: boolean;
}Linux-specific packaging including AppImage, Snap, Flatpak, and traditional package formats (deb, rpm, tar).
interface LinuxConfiguration extends PlatformSpecificBuildOptions {
target?: TargetConfiguration | Array<TargetConfiguration | string> | string | null;
maintainer?: string | null;
vendor?: string | null;
icon?: string | null;
packageCategory?: string | null;
description?: string | null;
synopsis?: string | null;
priority?: string | null;
mimeTypes?: Array<string> | null;
desktop?: LinuxDesktopFile | null;
executableName?: string | null;
}
interface AppImageOptions {
license?: string | null;
desktop?: LinuxDesktopFile | null;
category?: string | null;
systemIntegration?: "ask" | "doNotAsk";
}
interface SnapOptions {
buildPackages?: Array<string> | null;
stagePackages?: Array<string> | null;
plugs?: Array<string> | PlugDescriptor | null;
slots?: Array<SlotDescriptor> | null;
after?: Array<string> | null;
usesStagedKernel?: boolean;
buildEnvironment?: Array<string> | null;
grade?: "devel" | "stable" | null;
assumes?: Array<string> | null;
architectures?: Array<string> | null;
layout?: any;
title?: string | null;
autoStart?: boolean;
summary?: string | null;
description?: string | null;
base?: string | null;
confinement?: "devmode" | "strict" | "classic" | null;
}Artifact publishing to various distribution platforms including GitHub Releases, S3, and custom servers with auto-update support.
function publish(args: {
files: string[];
version: string | undefined;
configurationFilePath: string | undefined;
policy: PublishPolicy;
}): Promise<any>;
function publishArtifactsWithOptions(
uploadOptions: Array<{file: string; arch: string | null}>,
buildVersion?: string,
configurationFilePath?: string,
publishConfiguration?: PublishConfiguration,
publishOptions?: PublishOptions
): Promise<any>;
class PublishManager {
constructor(packager: Packager, options: PublishOptions, cancellationToken?: CancellationToken);
getGlobalPublishConfigurations(): Promise<Array<PublishConfiguration> | null>;
scheduleUpload(publishConfig: PublishConfiguration, uploadTask: UploadTask, appInfo: AppInfo): Promise<any>;
awaitTasks(): Promise<Array<string>>;
cancelTasks(): void;
}Integrated code signing for Windows and macOS with certificate management, timestamping, and validation.
interface WindowsSignOptions {
certificateFile?: string | null;
certificatePassword?: string | null;
certificateSha1?: string | null;
certificateSubjectName?: string | null;
signtoolOptions?: Array<string> | null;
rfc3161TimeStampServer?: string | null;
timeStampServer?: string | null;
additionalCertificateFile?: string | null;
}
interface CustomWindowsSign {
(configuration: CustomWindowsSignTaskConfiguration, packager: WinPackager): Promise<any>;
}
interface CustomMacSign {
(configuration: CustomMacSignOptions, packager: MacPackager): Promise<any>;
}electron-builder [build-options]
electron-builder --mac --win --linux
electron-builder --publish=onTagOrDraft
electron-builder --config path/to/config.json
electron-builder --projectDir /path/to/projectelectron-builder publish --files="dist/*.dmg,dist/*.exe"
electron-builder publish --publish=alwayselectron-builder install-app-deps
electron-builder install-app-deps --platform=win32 --arch=x64electron-builder create-self-signed-cert --publisher="My Company"electron-builder startArchitecture detection and manipulation utilities from builder-util.
/**
* Convert architecture string to Arch enum
* @param name - Architecture name (ia32, x64, armv7l, arm64, universal)
* @returns Corresponding Arch enum value
*/
function archFromString(name: string): Arch;
/**
* Get architecture suffix for file naming
* @param arch - Target architecture
* @param defaultArch - Default architecture to omit suffix for
* @returns Architecture suffix string or empty string
*/
function getArchSuffix(arch: Arch, defaultArch?: Arch): string;Integrated logging system for build processes.
/**
* Global logger instance for electron-builder operations
*/
const log: Logger;
interface Logger {
info(message: string | any, ...args: any[]): void;
warn(message: string | any, ...args: any[]): void;
error(message: string | any, ...args: any[]): void;
debug(message: string | any, ...args: any[]): void;
}
## Types and Interfaces
```typescript { .api }
interface BuildResult {
artifactPaths: Array<string>;
platformToTargets: Map<Platform, Map<String, Target>>;
outDir: string;
configuration: Configuration;
}
interface TargetConfiguration {
target: string;
arch?: Array<Arch> | string | Arch | null;
}
interface FileSet {
from?: string;
to?: string;
filter?: Array<string> | string;
}
interface ProgressInfo {
total: number;
delta: number;
transferred: number;
percent: number;
bytesPerSecond: number;
}
class CancellationToken {
readonly isCancellationRequested: boolean;
readonly cancelled: boolean;
cancel(): void;
createChild(): CancellationToken;
createPromise<T>(executor: (resolve: (value?: T) => void, reject: (reason?: any) => void, onCancel: (callback: () => void) => void) => void): Promise<T>;
}This comprehensive API enables building production-ready Electron applications with professional installers, automatic updates, and cross-platform distribution capabilities.