Linux-specific packaging including AppImage, Snap, Flatpak, and traditional package formats (deb, rpm, tar). Supports multiple architectures and comprehensive desktop integration.
Core Linux build configuration with desktop integration and package options.
/**
* Linux-specific build configuration
*/
interface LinuxConfiguration extends PlatformSpecificBuildOptions {
/** Target configurations (AppImage, snap, deb, etc.) */
target?: TargetConfiguration | Array<TargetConfiguration | string> | string | null;
/** Package maintainer */
maintainer?: string | null;
/** Package vendor */
vendor?: string | null;
/** Application icon */
icon?: string | null;
/** Package category */
packageCategory?: string | null;
/** Package description */
description?: string | null;
/** Package synopsis (short description) */
synopsis?: string | null;
/** Package priority */
priority?: string | null;
/** MIME types handled by application */
mimeTypes?: Array<string> | null;
/** Desktop entry configuration */
desktop?: LinuxDesktopFile | null;
/** Executable name */
executableName?: string | null;
/** Package depends */
depends?: Array<string> | null;
/** RPM build requires */
fpm?: Array<string> | null;
/** Package after install script */
afterInstall?: string | null;
/** Package after remove script */
afterRemove?: string | null;
}Usage Examples:
import { LinuxConfiguration } from "electron-builder";
const linuxConfig: LinuxConfiguration = {
target: [
{ target: "AppImage", arch: ["x64"] },
{ target: "deb", arch: ["x64", "arm64"] },
{ target: "rpm", arch: ["x64"] },
{ target: "snap", arch: ["x64"] }
],
icon: "build/icon.png",
category: "Office",
maintainer: "My Company <support@company.com>",
vendor: "My Company",
description: "My application description",
synopsis: "Short description for package lists",
packageCategory: "productivity",
mimeTypes: ["application/x-myapp", "text/x-myapp"],
desktop: {
Name: "My Application",
Comment: "My application description",
Keywords: "productivity;office;editor"
}
};Linux desktop entry configuration for application integration.
/**
* Linux desktop entry configuration
*/
interface LinuxDesktopFile {
/** Application name */
Name?: string;
/** Application comment/description */
Comment?: string;
/** Application generic name */
GenericName?: string;
/** Application keywords */
Keywords?: string;
/** Application categories */
Categories?: string;
/** Start in terminal */
Terminal?: boolean;
/** Show in application menu */
NoDisplay?: boolean;
/** Desktop actions */
Actions?: string;
/** Startup notification */
StartupNotify?: boolean;
/** Startup WM class */
StartupWMClass?: string;
/** Additional desktop entry fields */
[key: string]: any;
}Configuration for AppImage portable application format.
/**
* AppImage configuration options
*/
interface AppImageOptions {
/** Application license */
license?: string | null;
/** Desktop entry overrides */
desktop?: LinuxDesktopFile | null;
/** Application category */
category?: string | null;
/** System integration behavior */
systemIntegration?: "ask" | "doNotAsk";
/** AppImage synopsis */
synopsis?: string | null;
/** AppImage description */
description?: string | null;
/** Include system libraries */
includeSystemLibraries?: boolean;
/** Additional AppImage args */
args?: Array<string> | null;
}Usage Examples:
import { AppImageOptions } from "electron-builder";
const appImageOptions: AppImageOptions = {
license: "MIT",
category: "Office",
systemIntegration: "ask",
synopsis: "Modern text editor",
description: "A modern, fast text editor with advanced features",
desktop: {
Name: "My Editor",
Comment: "Advanced text editor",
Keywords: "editor;text;code",
Categories: "Development;TextEditor;",
MimeType: "text/plain;text/x-chdr;text/x-csrc;"
}
};
const config = {
linux: {
target: "AppImage"
},
appimage: appImageOptions
};Configuration for Ubuntu Snap packages with confinement and plug/slot system.
/**
* Snap package configuration
*/
interface SnapOptions {
/** Build packages required during snap build */
buildPackages?: Array<string> | null;
/** Stage packages included in snap */
stagePackages?: Array<string> | null;
/** Interface plugs for system access */
plugs?: Array<string> | PlugDescriptor | null;
/** Interface slots provided by snap */
slots?: Array<SlotDescriptor> | null;
/** Build order dependencies */
after?: Array<string> | null;
/** Uses staged kernel modules */
usesStagedKernel?: boolean;
/** Build environment variables */
buildEnvironment?: Array<string> | null;
/** Snap grade (stability level) */
grade?: "devel" | "stable" | null;
/** Snap feature assumptions */
assumes?: Array<string> | null;
/** Target architectures */
architectures?: Array<string> | null;
/** Snap layout configuration */
layout?: any;
/** Snap title */
title?: string | null;
/** Auto-start application */
autoStart?: boolean;
/** Snap summary */
summary?: string | null;
/** Snap description */
description?: string | null;
/** Base snap to use */
base?: string | null;
/** Confinement level */
confinement?: "devmode" | "strict" | "classic" | null;
/** Snap environment */
environment?: { [key: string]: string } | null;
/** Snap apps configuration */
apps?: { [key: string]: any } | null;
}
/**
* Snap plug descriptor for interface connections
*/
interface PlugDescriptor {
[plugName: string]: {
interface?: string;
[key: string]: any;
};
}
/**
* Snap slot descriptor for provided interfaces
*/
interface SlotDescriptor {
[slotName: string]: {
interface?: string;
[key: string]: any;
};
}Usage Examples:
import { SnapOptions } from "electron-builder";
const snapOptions: SnapOptions = {
summary: "Modern text editor",
description: "A modern, fast text editor with advanced features and Git integration",
grade: "stable",
confinement: "strict",
base: "core22",
architectures: ["amd64"],
plugs: [
"default",
"home",
"network",
"network-bind",
"removable-media"
],
stagePackages: [
"libnss3",
"libxss1",
"libasound2"
],
buildPackages: [
"build-essential"
],
environment: {
TMPDIR: "$XDG_RUNTIME_DIR"
}
};
const config = {
linux: {
target: "snap"
},
snap: snapOptions
};Configuration for Flatpak application sandboxing and distribution.
/**
* Flatpak configuration options
*/
interface FlatpakOptions {
/** Flatpak runtime */
runtime?: string | null;
/** Runtime version */
runtimeVersion?: string | null;
/** Base application */
base?: string | null;
/** Base version */
baseVersion?: string | null;
/** SDK for building */
sdk?: string | null;
/** Finish args for permissions */
finishArgs?: Array<string> | null;
/** Modules to build */
modules?: Array<any> | null;
/** Desktop file name */
desktop?: string | null;
}Configuration for .deb package creation.
/**
* Debian package options
*/
interface DebOptions extends CommonLinuxOptions {
/** Package depends */
depends?: Array<string> | null;
/** Package recommends */
recommends?: Array<string> | null;
/** Package suggests */
suggests?: Array<string> | null;
/** Package conflicts */
conflicts?: Array<string> | null;
/** Package provides */
provides?: Array<string> | null;
/** Package replaces */
replaces?: Array<string> | null;
/** Debian package priority */
priority?: "required" | "important" | "standard" | "optional" | "extra" | null;
/** Debian section */
section?: string | null;
/** Package compression */
compression?: "xz" | "gzip" | null;
}
/**
* Common Linux package options
*/
interface CommonLinuxOptions {
/** After install script */
afterInstall?: string | null;
/** After remove script */
afterRemove?: string | null;
/** Before install script */
beforeInstall?: string | null;
/** Before remove script */
beforeRemove?: string | null;
/** Package depends */
depends?: Array<string> | null;
}Configuration for .rpm package creation.
/**
* RPM package options (uses fpm)
*/
interface RpmOptions extends CommonLinuxOptions {
/** RPM group */
group?: string | null;
/** RPM requires */
requires?: Array<string> | null;
/** RPM provides */
provides?: Array<string> | null;
/** RPM conflicts */
conflicts?: Array<string> | null;
/** RPM obsoletes */
obsoletes?: Array<string> | null;
/** Compression algorithm */
compression?: "xz" | "gzip" | "bzip2" | null;
}Configuration for Linux-specific target behaviors.
/**
* Linux target-specific options
*/
interface LinuxTargetSpecificOptions extends TargetSpecificOptions {
/** Desktop file template */
desktop?: LinuxDesktopFile | null;
/** Package maintainer scripts */
maintainerScripts?: {
beforeInstall?: string;
afterInstall?: string;
beforeRemove?: string;
afterRemove?: string;
};
/** File permissions */
filePermissions?: {
[pattern: string]: string;
};
}Usage Examples:
import { DebOptions, LinuxConfiguration } from "electron-builder";
// Comprehensive Debian package configuration
const debOptions: DebOptions = {
depends: [
"libgtk-3-0",
"libnotify4",
"libnss3",
"libxss1",
"libxtst6",
"libasound2"
],
recommends: [
"git"
],
section: "editors",
priority: "optional",
afterInstall: "scripts/postinst.sh",
afterRemove: "scripts/postrm.sh",
compression: "xz"
};
// Multi-format Linux build
const linuxConfig: LinuxConfiguration = {
target: [
{ target: "AppImage", arch: ["x64"] },
{ target: "deb", arch: ["x64", "arm64"] },
{ target: "rpm", arch: ["x64"] },
{ target: "tar.gz", arch: ["x64", "arm64"] }
],
category: "Development",
maintainer: "My Company <support@company.com>",
desktop: {
Name: "My Editor",
Comment: "Advanced code editor",
Keywords: "editor;development;code",
Categories: "Development;TextEditor;IDE;",
MimeType: "text/plain;application/json;text/x-python;",
StartupNotify: true,
StartupWMClass: "my-editor"
}
};
const config = {
linux: linuxConfig,
deb: debOptions,
appimage: {
systemIntegration: "ask"
},
snap: {
confinement: "strict",
plugs: ["home", "network", "removable-media"]
}
};Linux-specific packager with desktop integration capabilities.
/**
* Linux packager with desktop integration
*/
class LinuxPackager extends PlatformPackager {
/** Create desktop entry file */
createDesktopEntry(desktop: LinuxDesktopFile): Promise<string>;
/** Install desktop file */
installDesktopEntry(desktopFile: string): Promise<void>;
/** Package application for Linux */
pack(outDir: string, arch: Arch, targets: Array<Target>): Promise<any>;
/** Get package dependencies */
getPackageDependencies(): Promise<Array<string>>;
}Linux builds may require additional system packages:
For AppImage:
fuse (for testing AppImages)desktop-file-utilsFor Snap:
snapcraft (snap build tool)multipass or lxd (for confined builds)For Flatpak:
flatpak-builderUsage Examples:
# Install AppImage dependencies
sudo apt install fuse desktop-file-utils
# Install Snap dependencies
sudo snap install snapcraft --classic
# Install Flatpak dependencies
sudo apt install flatpak-builder
flatpak install flathub org.electronjs.Electron2.BaseAppLinux packaging provides comprehensive support for modern Linux distribution formats while maintaining compatibility with traditional package management systems and desktop environments.