Kind: class of electron-updater
+Extends: module:electron-updater/out/BaseUpdater.BaseUpdater
+
+
appImageUpdater.isUpdaterActive() ⇒ Boolean
+
+
AppUpdater ⇐ module:events.EventEmitter
+
Kind: class of electron-updater
+Extends: module:events.EventEmitter
+Properties
+
+
+
autoDownload = true Boolean - Whether to automatically download an update when it is found.
+
+
+
autoInstallOnAppQuit = true Boolean - Whether to automatically install a downloaded update on app quit (if quitAndInstall was not called before).
+
+
+
allowPrerelease = false Boolean - GitHub provider only. Whether to allow update to pre-release versions. Defaults to true if application version contains prerelease components (e.g. 0.12.1-alpha.1, here alpha is a prerelease component), otherwise false.
+
If true, downgrade will be allowed (allowDowngrade will be set to true).
+
+
+
fullChangelog = false Boolean - GitHub provider only. Get all release notes (from current version to latest), not just the latest.
+
+
+
allowDowngrade = false Boolean - Whether to allow version downgrade (when a user from the beta channel wants to go back to the stable channel).
+
Taken in account only if channel differs (pre-release version component in terms of semantic versioning).
+
+
+
currentVersion SemVer - The current application version.
+
+
+
channel String | “undefined” - Get the update channel. Not applicable for GitHub. Doesn’t return channel from the update configuration, only if was previously set.
+
+
+
requestHeaders [key: string]: string | “undefined” - The request headers.
+
+
+
netSession Electron:Session
+
+
+
loggerLogger | “undefined” - The logger. You can pass electron-log, winston or another logger with the following interface: { info(), warn(), error() }. Set it to null if you would like to disable a logging feature.
Restarts the app and installs the update after it has been downloaded.
+It should only be called after update-downloaded has been emitted.
+
Note:autoUpdater.quitAndInstall() will close all application windows first and only emit before-quit event on app after that.
+This is different from the normal quit event sequence.
+
+
+
+
Param
+
Type
+
Description
+
+
+
+
+
isSilent
+
Boolean
+
windows-only Runs the installer in silent mode. Defaults to false.
+
+
+
isForceRunAfter
+
Boolean
+
Run the app after finish even on silent install. Not applicable for macOS. Ignored if isSilent is set to false.
+
+
diff --git a/docs/api/programmaticUsage.md b/docs/api/programmaticUsage.md
new file mode 100644
index 00000000000..58a4d5e2322
--- /dev/null
+++ b/docs/api/programmaticUsage.md
@@ -0,0 +1,130 @@
+```
+"use strict"
+
+const builder = require("electron-builder")
+const Platform = builder.Platform
+
+// Let's get that intellisense working
+/**
+* @type {import('electron-builder').Configuration}
+* @see https://www.electron.build/configuration/configuration
+*/
+const options = {
+ protocols: {
+ name: "Deeplink Example",
+ // Don't forget to set `MimeType: "x-scheme-handler/deeplink"` for `linux.desktop` entry!
+ schemes: [
+ "deeplink"
+ ]
+ },
+
+ // "store” | “normal” | "maximum". - For testing builds, use 'store' to reduce build time significantly.
+ compression: "normal",
+ removePackageScripts: true,
+
+ afterSign: async (context) => {
+ // Mac releases require hardening+notarization: https://developer.apple.com/documentation/xcode/notarizing_macos_software_before_distribution
+ if (!isDebug && context.electronPlatformName === "darwin") {
+ await notarizeMac(context)
+ }
+ },
+ artifactBuildStarted: (context) => {
+ identifyLinuxPackage(context)
+ },
+ afterAllArtifactBuild: (buildResult) => {
+ return stampArtifacts(buildResult)
+ },
+ // force arch build if using electron-rebuild
+ beforeBuild: async (context) => {
+ const { appDir, electronVersion, arch } = context
+ await electronRebuild.rebuild({ buildPath: appDir, electronVersion, arch })
+ return false
+ },
+ nodeGypRebuild: false,
+ buildDependenciesFromSource: false,
+
+ directories: {
+ output: "dist/artifacts/local",
+ buildResources: "installer/resources"
+ },
+ files: [
+ "out"
+ ],
+ extraFiles: [
+ {
+ from: "build/Release",
+ to: nodeAddonDir,
+ filter: "*.node"
+ }
+ ],
+
+ win: {
+ target: 'nsis'
+ },
+ nsis: {
+ deleteAppDataOnUninstall: true,
+ include: "installer/win/nsis-installer.nsh"
+ },
+
+ mac: {
+ target: 'dmg',
+ hardenedRuntime: true,
+ gatekeeperAssess: true,
+ extendInfo: {
+ NSAppleEventsUsageDescription: 'Let me use Apple Events.',
+ NSCameraUsageDescription: 'Let me use the camera.',
+ NSScreenCaptureDescription: 'Let me take screenshots.',
+ }
+ },
+ dmg: {
+ background: "installer/mac/dmg-background.png",
+ iconSize: 100,
+ contents: [
+ {
+ x: 255,
+ y: 85,
+ type: "file"
+ },
+ {
+ x: 253,
+ y: 325,
+ type: "link",
+ path: "/Applications"
+ }
+ ],
+ window: {
+ width: 500,
+ height: 500
+ }
+ },
+
+ linux: {
+ desktop: {
+ StartupNotify: "false",
+ Encoding: "UTF-8",
+ MimeType: "x-scheme-handler/deeplink"
+ },
+ target: ["AppImage", "rpm", "deb"]
+ },
+ deb: {
+ priority: "optional",
+ afterInstall:"installer/linux/after-install.tpl",
+ },
+ rpm: {
+ fpm: ["--before-install", "installer/linux/before-install.tpl"],
+ afterInstall:"installer/linux/after-install.tpl",
+ }
+};
+
+// Promise is returned
+builder.build({
+ targets: Platform.MAC.createTarget(),
+ config: options
+})
+.then((result) => {
+ console.log(JSON.stringify(result))
+})
+.catch((error) => {
+ console.error(error)
+})
+```
\ No newline at end of file
diff --git a/docs/auto-update.md b/docs/auto-update.md
new file mode 100644
index 00000000000..119440a5276
--- /dev/null
+++ b/docs/auto-update.md
@@ -0,0 +1,1133 @@
+See [publish configuration](configuration/publish.md) for information on how to configure your local or CI environment for automated deployments.
+
+!!! info "Code signing is required on macOS"
+ macOS application must be [signed](code-signing.md) in order for auto updating to work.
+
+## Auto-updatable Targets
+
+* macOS: DMG.
+* Linux: AppImage.
+* Windows: NSIS.
+
+All these targets are default, custom configuration is not required. (Though it is possible to [pass in additional configuration, e.g. request headers](#custom-options-instantiating-updater-directly).)
+
+!!! info "Squirrel.Windows is not supported"
+ Simplified auto-update is supported on Windows if you use the default NSIS target, but is not supported for Squirrel.Windows.
+ You can [easily migrate to NSIS](https://github.com/electron-userland/electron-builder/issues/837#issuecomment-355698368).
+
+## Differences between electron-updater and built-in autoUpdater
+
+* Dedicated release server is not required.
+* Code signature validation not only on macOS, but also on Windows.
+* All required metadata files and artifacts are produced and published automatically.
+* Download progress and [staged rollouts](#staged-rollouts) supported on all platforms.
+* Different providers supported out of the box ([GitHub Releases](https://help.github.com/articles/about-releases/), [Amazon S3](https://aws.amazon.com/s3/), [DigitalOcean Spaces](https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-spaces), [Keygen](https://keygen.sh/docs/api/#auto-updates-electron) and generic HTTP(s) server).
+* You need only 2 lines of code to make it work.
+
+## Quick Setup Guide
+
+1. Install [electron-updater](https://yarn.pm/electron-updater) as an app dependency.
+
+2. [Configure publish](configuration/publish.md).
+
+3. Use `autoUpdater` from `electron-updater` instead of `electron`:
+
+ ```js tab="JavaScript"
+ const { autoUpdater } = require("electron-updater")
+ ```
+
+ ```js tab="ES2015"
+ import { autoUpdater } from "electron-updater"
+ ```
+
+4. Call `autoUpdater.checkForUpdatesAndNotify()`. Or, if you need custom behaviour, implement `electron-updater` events, check examples below.
+
+!!! note
+ 1. Do not call [setFeedURL](#appupdatersetfeedurloptions). electron-builder automatically creates `app-update.yml` file for you on build in the `resources` (this file is internal, you don't need to be aware of it).
+ 2. `zip` target for macOS is **required** for Squirrel.Mac, otherwise `latest-mac.yml` cannot be created, which causes `autoUpdater` error. Default [target](configuration/mac.md#MacOptions-target) for macOS is `dmg`+`zip`, so there is no need to explicitly specify target.
+
+## Examples
+
+!!! example "Example in TypeScript using system notifications"
+ ```typescript
+ import { autoUpdater } from "electron-updater"
+
+ export default class AppUpdater {
+ constructor() {
+ const log = require("electron-log")
+ log.transports.file.level = "debug"
+ autoUpdater.logger = log
+ autoUpdater.checkForUpdatesAndNotify()
+ }
+ }
+ ```
+
+* A [complete example](https://github.com/iffy/electron-updater-example) showing how to use.
+* An [encapsulated manual update via menu](https://github.com/electron-userland/electron-builder/blob/docs/encapsulated%20manual%20update%20via%20menu.js).
+
+### Custom Options instantiating updater Directly
+
+If you want to more control over the updater configuration (e.g. request header for authorization purposes), you can instantiate the updater directly.
+
+```typescript
+import { NsisUpdater } from "electron-updater"
+// Or MacUpdater, AppImageUpdater
+
+export default class AppUpdater {
+ constructor() {
+ const options = {
+ requestHeaders: {
+ // Any request headers to include here
+ },
+ provider: 'generic',
+ url: 'https://example.com/auto-updates'
+ }
+
+ const autoUpdater = new NsisUpdater(options)
+ autoUpdater.addAuthHeader(`Bearer ${token}`)
+ autoUpdater.checkForUpdatesAndNotify()
+ }
+}
+```
+
+## Debugging
+
+You don't need to listen all events to understand what's wrong. Just set `logger`.
+[electron-log](https://github.com/megahertz/electron-log) is recommended (it is an additional dependency that you can install if needed).
+
+```js
+autoUpdater.logger = require("electron-log")
+autoUpdater.logger.transports.file.level = "info"
+```
+
+Note that in order to develop/test UI/UX of updating without packaging the application you need to have a file named `dev-app-update.yml` in the root of your project, which matches your `publish` setting from electron-builder config (but in [yaml](https://www.json2yaml.com) format). But it is not recommended, better to test auto-update for installed application (especially on Windows). [Minio](https://github.com/electron-userland/electron-builder/issues/3053#issuecomment-401001573) is recommended as a local server for testing updates.
+
+## Compatibility
+
+Generated metadata files format changes from time to time, but compatibility preserved up to version 1. If you start a new project, recommended to set `electronUpdaterCompatibility` to current latest format version (`>= 2.16`).
+
+Option `electronUpdaterCompatibility` set the electron-updater compatibility semver range. Can be specified per platform.
+
+e.g. `>= 2.16`, `>=1.0.0`. Defaults to `>=2.15`
+
+* `1.0.0` latest-mac.json
+* `2.15.0` path
+* `2.16.0` files
+
+## Staged Rollouts
+
+Staged rollouts allow you to distribute the latest version of your app to a subset of users that you can increase over time, similar to rollouts on platforms like Google Play.
+
+Staged rollouts are controlled by manually editing your `latest.yml` / `latest-mac.yml` (channel update info file).
+
+```yml
+version: 1.1.0
+path: TestApp Setup 1.1.0.exe
+sha512: Dj51I0q8aPQ3ioaz9LMqGYujAYRbDNblAQbodDRXAMxmY6hsHqEl3F6SvhfJj5oPhcqdX1ldsgEvfMNXGUXBIw==
+stagingPercentage: 10
+```
+
+Update will be shipped to 10% of userbase.
+
+If you want to pull a staged release because it hasn't gone well, you **must** increment the version number higher than your broken release.
+Because some of your users will be on the broken 1.0.1, releasing a new 1.0.1 would result in them staying on a broken version.
+
+## File Generated and Uploaded in Addition
+
+`latest.yml` (or `latest-mac.yml` for macOS, or `latest-linux.yml` for Linux) will be generated and uploaded for all providers except `bintray` (because not required, `bintray` doesn't use `latest.yml`).
+
+## Private GitHub Update Repo
+
+You can use a private repository for updates with electron-updater by setting the `GH_TOKEN` environment variable (on user machine) and `private` option.
+If `GH_TOKEN` is set, electron-updater will use the GitHub API for updates allowing private repositories to work.
+
+
+!!! warning
+ Private GitHub provider only for [very special](https://github.com/electron-userland/electron-builder/issues/1393#issuecomment-288191885) cases — not intended and not suitable for all users.
+
+!!! note
+ The GitHub API currently has a rate limit of 5000 requests per user per hour. An update check uses up to 3 requests per check.
+
+## Events
+
+The `autoUpdater` object emits the following events:
+
+#### Event: `error`
+
+* `error` Error
+
+Emitted when there is an error while updating.
+
+#### Event: `checking-for-update`
+
+Emitted when checking if an update has started.
+
+#### Event: `update-available`
+
+* `info` [UpdateInfo](#UpdateInfo) (for generic and github providers) | [VersionInfo](#VersionInfo) (for Bintray provider)
+
+Emitted when there is an available update. The update is downloaded automatically if `autoDownload` is `true`.
+
+#### Event: `update-not-available`
+
+Emitted when there is no available update.
+
+* `info` [UpdateInfo](#UpdateInfo) (for generic and github providers) | [VersionInfo](#VersionInfo) (for Bintray provider)
+
+#### Event: `download-progress`
+* `progress` ProgressInfo
+ * `bytesPerSecond`
+ * `percent`
+ * `total`
+ * `transferred`
+
+Emitted on progress.
+
+#### Event: `update-downloaded`
+
+* `info` [UpdateInfo](#UpdateInfo) — for generic and github providers. [VersionInfo](#VersionInfo) for Bintray provider.
+
+
+## API
+
+
+
+
+## builder-util-runtime
+
+* [builder-util-runtime](#module_builder-util-runtime)
+ * [`.BaseS3Options`](#BaseS3Options) ⇐ [PublishConfiguration](electron-builder#PublishConfiguration)
+ * [`.BintrayOptions`](#BintrayOptions) ⇐ [PublishConfiguration](electron-builder#PublishConfiguration)
+ * [`.BlockMap`](#BlockMap)
+ * [`.BlockMapDataHolder`](#BlockMapDataHolder)
+ * [`.CustomPublishOptions`](#CustomPublishOptions) ⇐ [PublishConfiguration](electron-builder#PublishConfiguration)
+ * [`.DownloadOptions`](#DownloadOptions)
+ * [`.GenericServerOptions`](#GenericServerOptions) ⇐ [PublishConfiguration](electron-builder#PublishConfiguration)
+ * [`.GithubOptions`](#GithubOptions) ⇐ [PublishConfiguration](electron-builder#PublishConfiguration)
+ * [`.KeygenOptions`](#KeygenOptions) ⇐ [PublishConfiguration](electron-builder#PublishConfiguration)
+ * [`.PackageFileInfo`](#PackageFileInfo) ⇐ [BlockMapDataHolder](#BlockMapDataHolder)
+ * [`.ProgressInfo`](#ProgressInfo)
+ * [`.PublishConfiguration`](#PublishConfiguration)
+ * [`.ReleaseNoteInfo`](#ReleaseNoteInfo)
+ * [`.RequestHeaders`](#RequestHeaders) ⇐ [key: string]: string
+ * [`.S3Options`](#S3Options) ⇐ [BaseS3Options](electron-builder#BaseS3Options)
+ * [`.SnapStoreOptions`](#SnapStoreOptions) ⇐ [PublishConfiguration](electron-builder#PublishConfiguration)
+ * [`.SpacesOptions`](#SpacesOptions) ⇐ [BaseS3Options](electron-builder#BaseS3Options)
+ * [`.UpdateFileInfo`](#UpdateFileInfo) ⇐ [BlockMapDataHolder](#BlockMapDataHolder)
+ * [`.UpdateInfo`](#UpdateInfo)
+ * [`.WindowsUpdateInfo`](#WindowsUpdateInfo) ⇐ [UpdateInfo](#UpdateInfo)
+ * [.CancellationError](#CancellationError) ⇐ Error
+ * [.CancellationToken](#CancellationToken) ⇐ module:events.EventEmitter
+ * [`.cancel()`](#module_builder-util-runtime.CancellationToken+cancel)
+ * [`.createPromise(callback)`](#module_builder-util-runtime.CancellationToken+createPromise) ⇒ Promise<module:builder-util-runtime/out/CancellationToken.R>
+ * [`.dispose()`](#module_builder-util-runtime.CancellationToken+dispose)
+ * [.DigestTransform](#DigestTransform) ⇐ internal:Transform
+ * [`._flush(callback)`](#module_builder-util-runtime.DigestTransform+_flush)
+ * [`._transform(chunk, encoding, callback)`](#module_builder-util-runtime.DigestTransform+_transform)
+ * [`.validate()`](#module_builder-util-runtime.DigestTransform+validate) ⇒ null
+ * [.HttpError](#HttpError) ⇐ Error
+ * [`.isServerError()`](#module_builder-util-runtime.HttpError+isServerError) ⇒ Boolean
+ * [.HttpExecutor](#HttpExecutor)
+ * [`.addErrorAndTimeoutHandlers(request, reject)`](#module_builder-util-runtime.HttpExecutor+addErrorAndTimeoutHandlers)
+ * [`.createRequest(options, callback)`](#module_builder-util-runtime.HttpExecutor+createRequest) ⇒ module:builder-util-runtime/out/httpExecutor.T
+ * [`.doApiRequest(options, cancellationToken, requestProcessor, redirectCount)`](#module_builder-util-runtime.HttpExecutor+doApiRequest) ⇒ Promise<String>
+ * [`.downloadToBuffer(url, options)`](#module_builder-util-runtime.HttpExecutor+downloadToBuffer) ⇒ Promise<module:global.Buffer>
+ * [`.prepareRedirectUrlOptions(redirectUrl, options)`](#module_builder-util-runtime.HttpExecutor+prepareRedirectUrlOptions) ⇒ module:http.RequestOptions
+ * [`.request(options, cancellationToken, data)`](#module_builder-util-runtime.HttpExecutor+request) ⇒ Promise< \| String>
+ * [`.retryOnServerError(task, maxRetries)`](#module_builder-util-runtime.HttpExecutor+retryOnServerError) ⇒ Promise<any>
+ * [.ProgressCallbackTransform](#ProgressCallbackTransform) ⇐ internal:Transform
+ * [`._flush(callback)`](#module_builder-util-runtime.ProgressCallbackTransform+_flush)
+ * [`._transform(chunk, encoding, callback)`](#module_builder-util-runtime.ProgressCallbackTransform+_transform)
+ * [.UUID](#UUID)
+ * [`.check(uuid, offset)`](#module_builder-util-runtime.UUID+check) ⇒ "undefined" \| module:builder-util-runtime/out/uuid.__object \| module:builder-util-runtime/out/uuid.__object
+ * [`.inspect()`](#module_builder-util-runtime.UUID+inspect) ⇒ String
+ * [`.parse(input)`](#module_builder-util-runtime.UUID+parse) ⇒ module:global.Buffer
+ * [`.toString()`](#module_builder-util-runtime.UUID+toString) ⇒ String
+ * [`.v5(name, namespace)`](#module_builder-util-runtime.UUID+v5) ⇒ any
+ * [.XElement](#XElement)
+ * [`.attribute(name)`](#module_builder-util-runtime.XElement+attribute) ⇒ String
+ * [`.element(name, ignoreCase, errorIfMissed)`](#module_builder-util-runtime.XElement+element) ⇒ [XElement](#XElement)
+ * [`.elementOrNull(name, ignoreCase)`](#module_builder-util-runtime.XElement+elementOrNull) ⇒ null \| [XElement](#XElement)
+ * [`.getElements(name, ignoreCase)`](#module_builder-util-runtime.XElement+getElements) ⇒ Array<[XElement](#XElement)>
+ * [`.elementValueOrEmpty(name, ignoreCase)`](#module_builder-util-runtime.XElement+elementValueOrEmpty) ⇒ String
+ * [`.removeAttribute(name)`](#module_builder-util-runtime.XElement+removeAttribute)
+ * [`.asArray(v)`](#module_builder-util-runtime.asArray) ⇒ Array<module:builder-util-runtime.T>
+ * [`.configureRequestOptions(options, token, method)`](#module_builder-util-runtime.configureRequestOptions) ⇒ module:http.RequestOptions
+ * [`.configureRequestOptionsFromUrl(url, options)`](#module_builder-util-runtime.configureRequestOptionsFromUrl) ⇒ module:http.RequestOptions
+ * [`.configureRequestUrl(url, options)`](#module_builder-util-runtime.configureRequestUrl)
+ * [`.createHttpError(response, description)`](#module_builder-util-runtime.createHttpError) ⇒ [HttpError](#HttpError)
+ * [`.getS3LikeProviderBaseUrl(configuration)`](#module_builder-util-runtime.getS3LikeProviderBaseUrl) ⇒ String
+ * [`.newError(message, code)`](#module_builder-util-runtime.newError) ⇒ Error
+ * [`.parseDn(seq)`](#module_builder-util-runtime.parseDn) ⇒ Map<String \| String>
+ * [`.parseJson(result)`](#module_builder-util-runtime.parseJson) ⇒ Promise<any>
+ * [`.parseXml(data)`](#module_builder-util-runtime.parseXml) ⇒ [XElement](#XElement)
+ * [`.safeGetHeader(response, headerKey)`](#module_builder-util-runtime.safeGetHeader) ⇒ any
+ * [`.safeStringifyJson(data, skippedNames)`](#module_builder-util-runtime.safeStringifyJson) ⇒ String
+
+
+### `BaseS3Options` ⇐ [PublishConfiguration](electron-builder#PublishConfiguration)
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Extends**: [PublishConfiguration](electron-builder#PublishConfiguration)
+**Properties**
+* channel = `latest` String | "undefined" - The update channel.
+* path = `/` String | "undefined" - The directory path.
+* acl = `public-read` "private" | "public-read" | "undefined" - The ACL. Set to `null` to not [add](https://github.com/electron-userland/electron-builder/issues/1822).
+* **provider** "github" | "bintray" | "s3" | "spaces" | "generic" | "custom" | "snapStore" | "keygen" - The provider.
+* publishAutoUpdate = `true` Boolean - Whether to publish auto update info files.
+
+ Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.
+* requestHeaders [key: string]: string - Any custom request headers
+
+
+### `BintrayOptions` ⇐ [PublishConfiguration](electron-builder#PublishConfiguration)
+[Bintray](https://bintray.com/) options. Requires an API key. An API key can be obtained from the user [profile](https://bintray.com/profile/edit) page ("Edit Your Profile" -> API Key).
+Define `BT_TOKEN` environment variable.
+
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Extends**: [PublishConfiguration](electron-builder#PublishConfiguration)
+**Properties**
+* **provider** "bintray" - The provider. Must be `bintray`.
+* package String | "undefined" - The Bintray package name.
+* repo = `generic` String | "undefined" - The Bintray repository name.
+* owner String | "undefined" - The owner.
+* component String | "undefined" - The Bintray component (Debian only).
+* distribution = `stable` String | "undefined" - The Bintray distribution (Debian only).
+* user String | "undefined" - The Bintray user account. Used in cases where the owner is an organization.
+* token String | "undefined"
+* publishAutoUpdate = `true` Boolean - Whether to publish auto update info files.
+
+ Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.
+* requestHeaders [key: string]: string - Any custom request headers
+
+
+### `BlockMap`
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Properties**
+* **version** "1" | "2"
+* **files** Array<module:builder-util-runtime/out/blockMapApi.BlockMapFile>
+
+
+### `BlockMapDataHolder`
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Properties**
+* size Number - The file size. Used to verify downloaded size (save one HTTP request to get length). Also used when block map data is embedded into the file (appimage, windows web installer package).
+* blockMapSize Number - The block map file size. Used when block map data is embedded into the file (appimage, windows web installer package). This information can be obtained from the file itself, but it requires additional HTTP request, so, to reduce request count, block map size is specified in the update metadata too.
+* **sha512** String - The file checksum.
+* isAdminRightsRequired Boolean
+
+
+### `CustomPublishOptions` ⇐ [PublishConfiguration](electron-builder#PublishConfiguration)
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Extends**: [PublishConfiguration](electron-builder#PublishConfiguration)
+**Properties**
+* **provider** "custom" - The provider. Must be `custom`.
+* updateProvider module:builder-util-runtime/out/publishOptions.__type - The Provider to provide UpdateInfo regarding available updates. Required to use custom providers with electron-updater.
+* publishAutoUpdate = `true` Boolean - Whether to publish auto update info files.
+
+ Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.
+* requestHeaders [key: string]: string - Any custom request headers
+
+
+### `DownloadOptions`
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Properties**
+* headers [key: string]: string | "undefined"
+* sha2 String | "undefined"
+* sha512 String | "undefined"
+* **cancellationToken** [CancellationToken](#CancellationToken)
+* onProgress callback
+
+
+### `GenericServerOptions` ⇐ [PublishConfiguration](electron-builder#PublishConfiguration)
+Generic (any HTTP(S) server) options.
+In all publish options [File Macros](/file-patterns#file-macros) are supported.
+
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Extends**: [PublishConfiguration](electron-builder#PublishConfiguration)
+**Properties**
+* **provider** "generic" - The provider. Must be `generic`.
+* **url** String - The base url. e.g. `https://bucket_name.s3.amazonaws.com`.
+* channel = `latest` String | "undefined" - The channel.
+* useMultipleRangeRequest Boolean - Whether to use multiple range requests for differential update. Defaults to `true` if `url` doesn't contain `s3.amazonaws.com`.
+* publishAutoUpdate = `true` Boolean - Whether to publish auto update info files.
+
+ Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.
+* requestHeaders [key: string]: string - Any custom request headers
+
+
+### `GithubOptions` ⇐ [PublishConfiguration](electron-builder#PublishConfiguration)
+[GitHub](https://help.github.com/articles/about-releases/) options.
+
+GitHub [personal access token](https://help.github.com/articles/creating-an-access-token-for-command-line-use/) is required. You can generate by going to [https://github.com/settings/tokens/new](https://github.com/settings/tokens/new). The access token should have the repo scope/permission.
+Define `GH_TOKEN` environment variable.
+
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Extends**: [PublishConfiguration](electron-builder#PublishConfiguration)
+**Properties**
+* **provider** "github" - The provider. Must be `github`.
+* repo String | "undefined" - The repository name. [Detected automatically](#github-repository-and-bintray-package).
+* owner String | "undefined" - The owner.
+* vPrefixedTagName = `true` Boolean - Whether to use `v`-prefixed tag name.
+* host = `github.com` String | "undefined" - The host (including the port if need).
+* protocol = `https` "https" | "http" | "undefined" - The protocol. GitHub Publisher supports only `https`.
+* token String | "undefined" - The access token to support auto-update from private github repositories. Never specify it in the configuration files. Only for [setFeedURL](/auto-update#appupdatersetfeedurloptions).
+* private Boolean | "undefined" - Whether to use private github auto-update provider if `GH_TOKEN` environment variable is defined. See [Private GitHub Update Repo](/auto-update#private-github-update-repo).
+* releaseType = `draft` "draft" | "prerelease" | "release" | "undefined" - The type of release. By default `draft` release will be created.
+
+ Also you can set release type using environment variable. If `EP_DRAFT`is set to `true` — `draft`, if `EP_PRE_RELEASE`is set to `true` — `prerelease`.
+* publishAutoUpdate = `true` Boolean - Whether to publish auto update info files.
+
+ Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.
+* requestHeaders [key: string]: string - Any custom request headers
+
+
+### `KeygenOptions` ⇐ [PublishConfiguration](electron-builder#PublishConfiguration)
+Keygen options.
+https://keygen.sh/
+Define `KEYGEN_TOKEN` environment variable.
+
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Extends**: [PublishConfiguration](electron-builder#PublishConfiguration)
+**Properties**
+* **provider** "keygen" - The provider. Must be `keygen`.
+* **account** String - Keygen account's UUID
+* **product** String - Keygen product's UUID
+* channel = `stable` "stable" | "rc" | "beta" | "alpha" | "dev" | "undefined" - The channel.
+* platform String | "undefined" - The target Platform. Is set programmatically explicitly during publishing.
+* publishAutoUpdate = `true` Boolean - Whether to publish auto update info files.
+
+ Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.
+* requestHeaders [key: string]: string - Any custom request headers
+
+
+### `PackageFileInfo` ⇐ [BlockMapDataHolder](#BlockMapDataHolder)
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Extends**: [BlockMapDataHolder](#BlockMapDataHolder)
+**Properties**
+* **path** String
+
+
+### `ProgressInfo`
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Properties**
+* **total** Number
+* **delta** Number
+* **transferred** Number
+* **percent** Number
+* **bytesPerSecond** Number
+
+
+### `PublishConfiguration`
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Properties**
+* **provider** "github" | "bintray" | "s3" | "spaces" | "generic" | "custom" | "snapStore" | "keygen" - The provider.
+* publishAutoUpdate = `true` Boolean - Whether to publish auto update info files.
+
+ Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.
+* requestHeaders [key: string]: string - Any custom request headers
+
+
+### `ReleaseNoteInfo`
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Properties**
+* **version** String - The version.
+* **note** String | "undefined" - The note.
+
+
+### `RequestHeaders` ⇐ [key: string]: string
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Extends**: [key: string]: string
+
+### `S3Options` ⇐ [BaseS3Options](electron-builder#BaseS3Options)
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Extends**: [BaseS3Options](electron-builder#BaseS3Options)
+**Properties**
+* **provider** "s3" - The provider. Must be `s3`.
+* **bucket** String - The bucket name.
+* region String | "undefined" - The region. Is determined and set automatically when publishing.
+* acl = `public-read` "private" | "public-read" | "undefined" - The ACL. Set to `null` to not [add](https://github.com/electron-userland/electron-builder/issues/1822).
+
+ Please see [required permissions for the S3 provider](https://github.com/electron-userland/electron-builder/issues/1618#issuecomment-314679128).
+* storageClass = `STANDARD` "STANDARD" | "REDUCED_REDUNDANCY" | "STANDARD_IA" | "undefined" - The type of storage to use for the object.
+* encryption "AES256" | "aws:kms" | "undefined" - Server-side encryption algorithm to use for the object.
+* endpoint String | "undefined" - The endpoint URI to send requests to. The default endpoint is built from the configured region. The endpoint should be a string like `https://{service}.{region}.amazonaws.com`.
+
+
+### `SnapStoreOptions` ⇐ [PublishConfiguration](electron-builder#PublishConfiguration)
+[Snap Store](https://snapcraft.io/) options.
+
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Extends**: [PublishConfiguration](electron-builder#PublishConfiguration)
+**Properties**
+* **provider** "snapStore" - The provider. Must be `snapStore`.
+* **repo** String - snapcraft repo name
+* channels = `["edge"]` String | Array<String> | "undefined" - The list of channels the snap would be released.
+* publishAutoUpdate = `true` Boolean - Whether to publish auto update info files.
+
+ Auto update relies only on the first provider in the list (you can specify several publishers). Thus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.
+* requestHeaders [key: string]: string - Any custom request headers
+
+
+### `SpacesOptions` ⇐ [BaseS3Options](electron-builder#BaseS3Options)
+[DigitalOcean Spaces](https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-spaces) options.
+Access key is required, define `DO_KEY_ID` and `DO_SECRET_KEY` environment variables.
+
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Extends**: [BaseS3Options](electron-builder#BaseS3Options)
+**Properties**
+* **provider** "spaces" - The provider. Must be `spaces`.
+* **name** String - The space name.
+* **region** String - The region (e.g. `nyc3`).
+
+
+### `UpdateFileInfo` ⇐ [BlockMapDataHolder](#BlockMapDataHolder)
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Extends**: [BlockMapDataHolder](#BlockMapDataHolder)
+**Properties**
+* **url** String
+
+
+### `UpdateInfo`
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Properties**
+* **version** String - The version.
+* **files** Array<[UpdateFileInfo](#UpdateFileInfo)>
+* **path** String - Deprecated: {tag.description}
+* **sha512** String - Deprecated: {tag.description}
+* releaseName String | "undefined" - The release name.
+* releaseNotes String | Array<[ReleaseNoteInfo](#ReleaseNoteInfo)> | "undefined" - The release notes. List if `updater.fullChangelog` is set to `true`, `string` otherwise.
+* **releaseDate** String - The release date.
+* stagingPercentage Number - The [staged rollout](/auto-update#staged-rollouts) percentage, 0-100.
+
+
+### `WindowsUpdateInfo` ⇐ [UpdateInfo](#UpdateInfo)
+**Kind**: interface of [builder-util-runtime](#module_builder-util-runtime)
+**Extends**: [UpdateInfo](#UpdateInfo)
+**Properties**
+* packages Object<String, any> | "undefined"
+
+
+### CancellationError ⇐ Error
+**Kind**: class of [builder-util-runtime](#module_builder-util-runtime)
+**Extends**: Error
+
+### CancellationToken ⇐ module:events.EventEmitter
+**Kind**: class of [builder-util-runtime](#module_builder-util-runtime)
+**Extends**: module:events.EventEmitter
+**Properties**
+* **cancelled** Boolean
+
+**Methods**
+* [.CancellationToken](#CancellationToken) ⇐ module:events.EventEmitter
+ * [`.cancel()`](#module_builder-util-runtime.CancellationToken+cancel)
+ * [`.createPromise(callback)`](#module_builder-util-runtime.CancellationToken+createPromise) ⇒ Promise<module:builder-util-runtime/out/CancellationToken.R>
+ * [`.dispose()`](#module_builder-util-runtime.CancellationToken+dispose)
+
+
+#### `cancellationToken.cancel()`
+
+#### `cancellationToken.createPromise(callback)` ⇒ Promise<module:builder-util-runtime/out/CancellationToken.R>
+
+- callback callback
+
+
+#### `cancellationToken.dispose()`
+
+### DigestTransform ⇐ internal:Transform
+**Kind**: class of [builder-util-runtime](#module_builder-util-runtime)
+**Extends**: internal:Transform
+**Properties**
+* actual String
+* isValidateOnEnd = `true` Boolean
+
+**Methods**
+* [.DigestTransform](#DigestTransform) ⇐ internal:Transform
+ * [`._flush(callback)`](#module_builder-util-runtime.DigestTransform+_flush)
+ * [`._transform(chunk, encoding, callback)`](#module_builder-util-runtime.DigestTransform+_transform)
+ * [`.validate()`](#module_builder-util-runtime.DigestTransform+validate) ⇒ null
+
+
+#### `digestTransform._flush(callback)`
+
+- callback any
+
+
+#### `digestTransform._transform(chunk, encoding, callback)`
+
+- chunk module:global.Buffer
+- encoding String
+- callback any
+
+
+#### `digestTransform.validate()` ⇒ null
+
+### HttpError ⇐ Error
+**Kind**: class of [builder-util-runtime](#module_builder-util-runtime)
+**Extends**: Error
+
+#### `httpError.isServerError()` ⇒ Boolean
+
+### HttpExecutor
+**Kind**: class of [builder-util-runtime](#module_builder-util-runtime)
+
+* [.HttpExecutor](#HttpExecutor)
+ * [`.addErrorAndTimeoutHandlers(request, reject)`](#module_builder-util-runtime.HttpExecutor+addErrorAndTimeoutHandlers)
+ * [`.createRequest(options, callback)`](#module_builder-util-runtime.HttpExecutor+createRequest) ⇒ module:builder-util-runtime/out/httpExecutor.T
+ * [`.doApiRequest(options, cancellationToken, requestProcessor, redirectCount)`](#module_builder-util-runtime.HttpExecutor+doApiRequest) ⇒ Promise<String>
+ * [`.downloadToBuffer(url, options)`](#module_builder-util-runtime.HttpExecutor+downloadToBuffer) ⇒ Promise<module:global.Buffer>
+ * [`.prepareRedirectUrlOptions(redirectUrl, options)`](#module_builder-util-runtime.HttpExecutor+prepareRedirectUrlOptions) ⇒ module:http.RequestOptions
+ * [`.request(options, cancellationToken, data)`](#module_builder-util-runtime.HttpExecutor+request) ⇒ Promise< \| String>
+ * [`.retryOnServerError(task, maxRetries)`](#module_builder-util-runtime.HttpExecutor+retryOnServerError) ⇒ Promise<any>
+
+
+#### `httpExecutor.addErrorAndTimeoutHandlers(request, reject)`
+
+- request any
+- reject callback
+
+
+#### `httpExecutor.createRequest(options, callback)` ⇒ module:builder-util-runtime/out/httpExecutor.T
+
+- options any
+- callback callback
+
+
+#### `httpExecutor.doApiRequest(options, cancellationToken, requestProcessor, redirectCount)` ⇒ Promise<String>
+
+- options module:http.RequestOptions
+- cancellationToken [CancellationToken](#CancellationToken)
+- requestProcessor callback
+- redirectCount
+
+
+#### `httpExecutor.downloadToBuffer(url, options)` ⇒ Promise<module:global.Buffer>
+
+- url module:url.URL
+- options [DownloadOptions](electron-builder#DownloadOptions)
+
+
+#### `httpExecutor.prepareRedirectUrlOptions(redirectUrl, options)` ⇒ module:http.RequestOptions
+
+- redirectUrl String
+- options module:http.RequestOptions
+
+
+#### `httpExecutor.request(options, cancellationToken, data)` ⇒ Promise< \| String>
+
+- options module:http.RequestOptions
+- cancellationToken [CancellationToken](#CancellationToken)
+- data Object<String, any> | "undefined"
+
+
+#### `httpExecutor.retryOnServerError(task, maxRetries)` ⇒ Promise<any>
+
+- task callback
+- maxRetries
+
+
+### ProgressCallbackTransform ⇐ internal:Transform
+**Kind**: class of [builder-util-runtime](#module_builder-util-runtime)
+**Extends**: internal:Transform
+
+* [.ProgressCallbackTransform](#ProgressCallbackTransform) ⇐ internal:Transform
+ * [`._flush(callback)`](#module_builder-util-runtime.ProgressCallbackTransform+_flush)
+ * [`._transform(chunk, encoding, callback)`](#module_builder-util-runtime.ProgressCallbackTransform+_transform)
+
+
+#### `progressCallbackTransform._flush(callback)`
+
+- callback any
+
+
+#### `progressCallbackTransform._transform(chunk, encoding, callback)`
+
+- chunk any
+- encoding String
+- callback any
+
+
+### UUID
+**Kind**: class of [builder-util-runtime](#module_builder-util-runtime)
+**Properties**
+* OID = `UUID.parse("6ba7b812-9dad-11d1-80b4-00c04fd430c8")` module:global.Buffer
+
+**Methods**
+* [.UUID](#UUID)
+ * [`.check(uuid, offset)`](#module_builder-util-runtime.UUID+check) ⇒ "undefined" \| module:builder-util-runtime/out/uuid.__object \| module:builder-util-runtime/out/uuid.__object
+ * [`.inspect()`](#module_builder-util-runtime.UUID+inspect) ⇒ String
+ * [`.parse(input)`](#module_builder-util-runtime.UUID+parse) ⇒ module:global.Buffer
+ * [`.toString()`](#module_builder-util-runtime.UUID+toString) ⇒ String
+ * [`.v5(name, namespace)`](#module_builder-util-runtime.UUID+v5) ⇒ any
+
+
+#### `uuiD.check(uuid, offset)` ⇒ "undefined" \| module:builder-util-runtime/out/uuid.__object \| module:builder-util-runtime/out/uuid.__object
+
+- uuid module:global.Buffer | String
+- offset
+
+
+#### `uuiD.inspect()` ⇒ String
+
+#### `uuiD.parse(input)` ⇒ module:global.Buffer
+
+- input String
+
+
+#### `uuiD.toString()` ⇒ String
+
+#### `uuiD.v5(name, namespace)` ⇒ any
+
+- name String | module:global.Buffer
+- namespace module:global.Buffer
+
+
+### XElement
+**Kind**: class of [builder-util-runtime](#module_builder-util-runtime)
+**Properties**
+* value= String
+* **attributes** Object<String, any> | "undefined"
+* isCData = `false` Boolean
+* **elements** Array<[XElement](#XElement)> | "undefined"
+
+**Methods**
+* [.XElement](#XElement)
+ * [`.attribute(name)`](#module_builder-util-runtime.XElement+attribute) ⇒ String
+ * [`.element(name, ignoreCase, errorIfMissed)`](#module_builder-util-runtime.XElement+element) ⇒ [XElement](#XElement)
+ * [`.elementOrNull(name, ignoreCase)`](#module_builder-util-runtime.XElement+elementOrNull) ⇒ null \| [XElement](#XElement)
+ * [`.getElements(name, ignoreCase)`](#module_builder-util-runtime.XElement+getElements) ⇒ Array<[XElement](#XElement)>
+ * [`.elementValueOrEmpty(name, ignoreCase)`](#module_builder-util-runtime.XElement+elementValueOrEmpty) ⇒ String
+ * [`.removeAttribute(name)`](#module_builder-util-runtime.XElement+removeAttribute)
+
+
+#### `xElement.attribute(name)` ⇒ String
+
+- name String
+
+
+#### `xElement.element(name, ignoreCase, errorIfMissed)` ⇒ [XElement](#XElement)
+
+- name String
+- ignoreCase
+- errorIfMissed String | "undefined"
+
+
+#### `xElement.elementOrNull(name, ignoreCase)` ⇒ null \| [XElement](#XElement)
+
+- name String
+- ignoreCase
+
+
+#### `xElement.getElements(name, ignoreCase)` ⇒ Array<[XElement](#XElement)>
+
+- name String
+- ignoreCase
+
+
+#### `xElement.elementValueOrEmpty(name, ignoreCase)` ⇒ String
+
+- name String
+- ignoreCase
+
+
+#### `xElement.removeAttribute(name)`
+
+- name String
+
+
+### `builder-util-runtime.asArray(v)` ⇒ Array<module:builder-util-runtime.T>
+**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
+
+- v "undefined" | undefined | module:builder-util-runtime.T | Array<module:builder-util-runtime.T>
+
+
+### `builder-util-runtime.configureRequestOptions(options, token, method)` ⇒ module:http.RequestOptions
+**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
+
+- options module:http.RequestOptions
+- token String | "undefined"
+- method "GET" | "DELETE" | "PUT"
+
+
+### `builder-util-runtime.configureRequestOptionsFromUrl(url, options)` ⇒ module:http.RequestOptions
+**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
+
+- url String
+- options module:http.RequestOptions
+
+
+### `builder-util-runtime.configureRequestUrl(url, options)`
+**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
+
+- url module:url.URL
+- options module:http.RequestOptions
+
+
+### `builder-util-runtime.createHttpError(response, description)` ⇒ [HttpError](#HttpError)
+**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
+
+- response module:http.IncomingMessage
+- description any | "undefined"
+
+
+### `builder-util-runtime.getS3LikeProviderBaseUrl(configuration)` ⇒ String
+**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
+
+- configuration [PublishConfiguration](electron-builder#PublishConfiguration)
+
+
+### `builder-util-runtime.newError(message, code)` ⇒ Error
+**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
+
+- message String
+- code String
+
+
+### `builder-util-runtime.parseDn(seq)` ⇒ Map<String \| String>
+**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
+
+- seq String
+
+
+### `builder-util-runtime.parseJson(result)` ⇒ Promise<any>
+**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
+
+- result Promise< | String>
+
+
+### `builder-util-runtime.parseXml(data)` ⇒ [XElement](#XElement)
+**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
+
+- data String
+
+
+### `builder-util-runtime.safeGetHeader(response, headerKey)` ⇒ any
+**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
+
+- response any
+- headerKey String
+
+
+### `builder-util-runtime.safeStringifyJson(data, skippedNames)` ⇒ String
+**Kind**: method of [builder-util-runtime](#module_builder-util-runtime)
+
+- data any
+- skippedNames Set<String>
+
+
+## electron-updater
+
+* [electron-updater](#module_electron-updater)
+ * [`.Logger`](#Logger)
+ * [`.debug(message)`](#module_electron-updater.Logger+debug)
+ * [`.error(message)`](#module_electron-updater.Logger+error)
+ * [`.info(message)`](#module_electron-updater.Logger+info)
+ * [`.warn(message)`](#module_electron-updater.Logger+warn)
+ * [`.ResolvedUpdateFileInfo`](#ResolvedUpdateFileInfo)
+ * [`.UpdateCheckResult`](#UpdateCheckResult)
+ * [`.UpdateDownloadedEvent`](#UpdateDownloadedEvent) ⇐ module:builder-util-runtime.UpdateInfo
+ * [.AppImageUpdater](#AppImageUpdater) ⇐ module:electron-updater/out/BaseUpdater.BaseUpdater
+ * [`.isUpdaterActive()`](#module_electron-updater.AppImageUpdater+isUpdaterActive) ⇒ Boolean
+ * [.AppUpdater](#AppUpdater) ⇐ module:events.EventEmitter
+ * [`.addAuthHeader(token)`](#module_electron-updater.AppUpdater+addAuthHeader)
+ * [`.checkForUpdates()`](#module_electron-updater.AppUpdater+checkForUpdates) ⇒ Promise<[UpdateCheckResult](#UpdateCheckResult)>
+ * [`.checkForUpdatesAndNotify(downloadNotification)`](#module_electron-updater.AppUpdater+checkForUpdatesAndNotify) ⇒ Promise< \| [UpdateCheckResult](#UpdateCheckResult)>
+ * [`.downloadUpdate(cancellationToken)`](#module_electron-updater.AppUpdater+downloadUpdate) ⇒ Promise<any>
+ * [`.getFeedURL()`](#module_electron-updater.AppUpdater+getFeedURL) ⇒ undefined \| null \| String
+ * [`.setFeedURL(options)`](#module_electron-updater.AppUpdater+setFeedURL)
+ * [`.isUpdaterActive()`](#module_electron-updater.AppUpdater+isUpdaterActive) ⇒ Boolean
+ * [`.quitAndInstall(isSilent, isForceRunAfter)`](#module_electron-updater.AppUpdater+quitAndInstall)
+ * [.MacUpdater](#MacUpdater) ⇐ [AppUpdater](#AppUpdater)
+ * [`.quitAndInstall()`](#module_electron-updater.MacUpdater+quitAndInstall)
+ * [`.addAuthHeader(token)`](#module_electron-updater.AppUpdater+addAuthHeader)
+ * [`.checkForUpdates()`](#module_electron-updater.AppUpdater+checkForUpdates) ⇒ Promise<[UpdateCheckResult](#UpdateCheckResult)>
+ * [`.checkForUpdatesAndNotify(downloadNotification)`](#module_electron-updater.AppUpdater+checkForUpdatesAndNotify) ⇒ Promise< \| [UpdateCheckResult](#UpdateCheckResult)>
+ * [`.downloadUpdate(cancellationToken)`](#module_electron-updater.AppUpdater+downloadUpdate) ⇒ Promise<any>
+ * [`.getFeedURL()`](#module_electron-updater.AppUpdater+getFeedURL) ⇒ undefined \| null \| String
+ * [`.setFeedURL(options)`](#module_electron-updater.AppUpdater+setFeedURL)
+ * [`.isUpdaterActive()`](#module_electron-updater.AppUpdater+isUpdaterActive) ⇒ Boolean
+ * [.NsisUpdater](#NsisUpdater) ⇐ module:electron-updater/out/BaseUpdater.BaseUpdater
+ * [.Provider](#Provider)
+ * [`.getLatestVersion()`](#module_electron-updater.Provider+getLatestVersion) ⇒ Promise<module:electron-updater/out/providers/Provider.T>
+ * [`.setRequestHeaders(value)`](#module_electron-updater.Provider+setRequestHeaders)
+ * [`.resolveFiles(updateInfo)`](#module_electron-updater.Provider+resolveFiles) ⇒ Array<[ResolvedUpdateFileInfo](#ResolvedUpdateFileInfo)>
+ * [.UpdaterSignal](#UpdaterSignal)
+ * [`.login(handler)`](#module_electron-updater.UpdaterSignal+login)
+ * [`.progress(handler)`](#module_electron-updater.UpdaterSignal+progress)
+ * [`.updateCancelled(handler)`](#module_electron-updater.UpdaterSignal+updateCancelled)
+ * [`.updateDownloaded(handler)`](#module_electron-updater.UpdaterSignal+updateDownloaded)
+ * [`.autoUpdater`](#module_electron-updater.autoUpdater) : [AppUpdater](#AppUpdater)
+ * [`.DOWNLOAD_PROGRESS`](#module_electron-updater.DOWNLOAD_PROGRESS) : "login" \| "checking-for-update" \| "update-available" \| "update-not-available" \| "update-cancelled" \| "download-progress" \| "update-downloaded" \| "error"
+ * [`.UPDATE_DOWNLOADED`](#module_electron-updater.UPDATE_DOWNLOADED) : "login" \| "checking-for-update" \| "update-available" \| "update-not-available" \| "update-cancelled" \| "download-progress" \| "update-downloaded" \| "error"
+
+
+### `Logger`
+**Kind**: interface of [electron-updater](#module_electron-updater)
+
+* [`.Logger`](#Logger)
+ * [`.debug(message)`](#module_electron-updater.Logger+debug)
+ * [`.error(message)`](#module_electron-updater.Logger+error)
+ * [`.info(message)`](#module_electron-updater.Logger+info)
+ * [`.warn(message)`](#module_electron-updater.Logger+warn)
+
+
+#### `logger.debug(message)`
+
+- message String
+
+
+#### `logger.error(message)`
+
+- message any
+
+
+#### `logger.info(message)`
+
+- message any
+
+
+#### `logger.warn(message)`
+
+- message any
+
+
+### `ResolvedUpdateFileInfo`
+**Kind**: interface of [electron-updater](#module_electron-updater)
+**Properties**
+* **url** module:url.URL
+* **info** module:builder-util-runtime.UpdateFileInfo
+* packageInfo module:builder-util-runtime.PackageFileInfo
+
+
+### `UpdateCheckResult`
+**Kind**: interface of [electron-updater](#module_electron-updater)
+**Properties**
+* **updateInfo** module:builder-util-runtime.UpdateInfo
+* downloadPromise Promise<Array<String>> | "undefined"
+* cancellationToken CancellationToken
+* **versionInfo** module:builder-util-runtime.UpdateInfo - Deprecated: {tag.description}
+
+
+### `UpdateDownloadedEvent` ⇐ module:builder-util-runtime.UpdateInfo
+**Kind**: interface of [electron-updater](#module_electron-updater)
+**Extends**: module:builder-util-runtime.UpdateInfo
+**Properties**
+* **downloadedFile** String
+
+
+### AppImageUpdater ⇐ module:electron-updater/out/BaseUpdater.BaseUpdater
+**Kind**: class of [electron-updater](#module_electron-updater)
+**Extends**: module:electron-updater/out/BaseUpdater.BaseUpdater
+
+#### `appImageUpdater.isUpdaterActive()` ⇒ Boolean
+
+### AppUpdater ⇐ module:events.EventEmitter
+**Kind**: class of [electron-updater](#module_electron-updater)
+**Extends**: module:events.EventEmitter
+**Properties**
+* autoDownload = `true` Boolean - Whether to automatically download an update when it is found.
+* autoInstallOnAppQuit = `true` Boolean - Whether to automatically install a downloaded update on app quit (if `quitAndInstall` was not called before).
+* allowPrerelease = `false` Boolean - *GitHub provider only.* Whether to allow update to pre-release versions. Defaults to `true` if application version contains prerelease components (e.g. `0.12.1-alpha.1`, here `alpha` is a prerelease component), otherwise `false`.
+
+ If `true`, downgrade will be allowed (`allowDowngrade` will be set to `true`).
+* fullChangelog = `false` Boolean - *GitHub provider only.* Get all release notes (from current version to latest), not just the latest.
+* allowDowngrade = `false` Boolean - Whether to allow version downgrade (when a user from the beta channel wants to go back to the stable channel).
+
+ Taken in account only if channel differs (pre-release version component in terms of semantic versioning).
+* currentVersion SemVer - The current application version.
+* **channel** String | "undefined" - Get the update channel. Not applicable for GitHub. Doesn't return `channel` from the update configuration, only if was previously set.
+* **requestHeaders** [key: string]: string | "undefined" - The request headers.
+* **netSession** Electron:Session
+* **logger** [Logger](#Logger) | "undefined" - The logger. You can pass [electron-log](https://github.com/megahertz/electron-log), [winston](https://github.com/winstonjs/winston) or another logger with the following interface: `{ info(), warn(), error() }`. Set it to `null` if you would like to disable a logging feature.
+* signals = `new UpdaterSignal(this)` [UpdaterSignal](#UpdaterSignal)
+* configOnDisk = `new Lazy(() => this.loadUpdateConfig())` Lazy<any>
+* httpExecutor module:electron-updater/out/electronHttpExecutor.ElectronHttpExecutor
+* **isAddNoCacheQuery** Boolean
+
+**Methods**
+* [.AppUpdater](#AppUpdater) ⇐ module:events.EventEmitter
+ * [`.addAuthHeader(token)`](#module_electron-updater.AppUpdater+addAuthHeader)
+ * [`.checkForUpdates()`](#module_electron-updater.AppUpdater+checkForUpdates) ⇒ Promise<[UpdateCheckResult](#UpdateCheckResult)>
+ * [`.checkForUpdatesAndNotify(downloadNotification)`](#module_electron-updater.AppUpdater+checkForUpdatesAndNotify) ⇒ Promise< \| [UpdateCheckResult](#UpdateCheckResult)>
+ * [`.downloadUpdate(cancellationToken)`](#module_electron-updater.AppUpdater+downloadUpdate) ⇒ Promise<any>
+ * [`.getFeedURL()`](#module_electron-updater.AppUpdater+getFeedURL) ⇒ undefined \| null \| String
+ * [`.setFeedURL(options)`](#module_electron-updater.AppUpdater+setFeedURL)
+ * [`.isUpdaterActive()`](#module_electron-updater.AppUpdater+isUpdaterActive) ⇒ Boolean
+ * [`.quitAndInstall(isSilent, isForceRunAfter)`](#module_electron-updater.AppUpdater+quitAndInstall)
+
+
+#### `appUpdater.addAuthHeader(token)`
+Shortcut for explicitly adding auth tokens to request headers
+
+
+- token String
+
+
+#### `appUpdater.checkForUpdates()` ⇒ Promise<[UpdateCheckResult](#UpdateCheckResult)>
+Asks the server whether there is an update.
+
+
+#### `appUpdater.checkForUpdatesAndNotify(downloadNotification)` ⇒ Promise< \| [UpdateCheckResult](#UpdateCheckResult)>
+
+- downloadNotification module:electron-updater/out/AppUpdater.DownloadNotification
+
+
+#### `appUpdater.downloadUpdate(cancellationToken)` ⇒ Promise<any>
+Start downloading update manually. You can use this method if `autoDownload` option is set to `false`.
+
+**Returns**: Promise<any> - Path to downloaded file.
+
+- cancellationToken CancellationToken
+
+
+#### `appUpdater.getFeedURL()` ⇒ undefined \| null \| String
+
+#### `appUpdater.setFeedURL(options)`
+Configure update provider. If value is `string`, [GenericServerOptions](/configuration/publish#genericserveroptions) will be set with value as `url`.
+
+
+- options [PublishConfiguration](/configuration/publish#publishconfiguration) | String | [GithubOptions](/configuration/publish#githuboptions) | [S3Options](/configuration/publish#s3options) | [SpacesOptions](/configuration/publish#spacesoptions) | [GenericServerOptions](/configuration/publish#genericserveroptions) | [BintrayOptions](/configuration/publish#bintrayoptions) | module:builder-util-runtime/out/publishOptions.CustomPublishOptions | module:builder-util-runtime/out/publishOptions.KeygenOptions | [SnapStoreOptions](/configuration/publish#snapstoreoptions) | String - If you want to override configuration in the `app-update.yml`.
+
+
+#### `appUpdater.isUpdaterActive()` ⇒ Boolean
+
+#### `appUpdater.quitAndInstall(isSilent, isForceRunAfter)`
+Restarts the app and installs the update after it has been downloaded.
+It should only be called after `update-downloaded` has been emitted.
+
+**Note:** `autoUpdater.quitAndInstall()` will close all application windows first and only emit `before-quit` event on `app` after that.
+This is different from the normal quit event sequence.
+
+
+- isSilent Boolean - *windows-only* Runs the installer in silent mode. Defaults to `false`.
+- isForceRunAfter Boolean - Run the app after finish even on silent install. Not applicable for macOS. Ignored if `isSilent` is set to `false`.
+
+
+### MacUpdater ⇐ [AppUpdater](#AppUpdater)
+**Kind**: class of [electron-updater](#module_electron-updater)
+**Extends**: [AppUpdater](#AppUpdater)
+
+* [.MacUpdater](#MacUpdater) ⇐ [AppUpdater](#AppUpdater)
+ * [`.quitAndInstall()`](#module_electron-updater.MacUpdater+quitAndInstall)
+ * [`.addAuthHeader(token)`](#module_electron-updater.AppUpdater+addAuthHeader)
+ * [`.checkForUpdates()`](#module_electron-updater.AppUpdater+checkForUpdates) ⇒ Promise<[UpdateCheckResult](#UpdateCheckResult)>
+ * [`.checkForUpdatesAndNotify(downloadNotification)`](#module_electron-updater.AppUpdater+checkForUpdatesAndNotify) ⇒ Promise< \| [UpdateCheckResult](#UpdateCheckResult)>
+ * [`.downloadUpdate(cancellationToken)`](#module_electron-updater.AppUpdater+downloadUpdate) ⇒ Promise<any>
+ * [`.getFeedURL()`](#module_electron-updater.AppUpdater+getFeedURL) ⇒ undefined \| null \| String
+ * [`.setFeedURL(options)`](#module_electron-updater.AppUpdater+setFeedURL)
+ * [`.isUpdaterActive()`](#module_electron-updater.AppUpdater+isUpdaterActive) ⇒ Boolean
+
+
+#### `macUpdater.quitAndInstall()`
+**Overrides**: [quitAndInstall](#module_electron-updater.AppUpdater+quitAndInstall)
+
+#### `macUpdater.addAuthHeader(token)`
+Shortcut for explicitly adding auth tokens to request headers
+
+
+- token String
+
+
+#### `macUpdater.checkForUpdates()` ⇒ Promise<[UpdateCheckResult](#UpdateCheckResult)>
+Asks the server whether there is an update.
+
+
+#### `macUpdater.checkForUpdatesAndNotify(downloadNotification)` ⇒ Promise< \| [UpdateCheckResult](#UpdateCheckResult)>
+
+- downloadNotification module:electron-updater/out/AppUpdater.DownloadNotification
+
+
+#### `macUpdater.downloadUpdate(cancellationToken)` ⇒ Promise<any>
+Start downloading update manually. You can use this method if `autoDownload` option is set to `false`.
+
+**Returns**: Promise<any> - Path to downloaded file.
+
+- cancellationToken CancellationToken
+
+
+#### `macUpdater.getFeedURL()` ⇒ undefined \| null \| String
+
+#### `macUpdater.setFeedURL(options)`
+Configure update provider. If value is `string`, [GenericServerOptions](/configuration/publish#genericserveroptions) will be set with value as `url`.
+
+
+- options [PublishConfiguration](/configuration/publish#publishconfiguration) | String | [GithubOptions](/configuration/publish#githuboptions) | [S3Options](/configuration/publish#s3options) | [SpacesOptions](/configuration/publish#spacesoptions) | [GenericServerOptions](/configuration/publish#genericserveroptions) | [BintrayOptions](/configuration/publish#bintrayoptions) | module:builder-util-runtime/out/publishOptions.CustomPublishOptions | module:builder-util-runtime/out/publishOptions.KeygenOptions | [SnapStoreOptions](/configuration/publish#snapstoreoptions) | String - If you want to override configuration in the `app-update.yml`.
+
+
+#### `macUpdater.isUpdaterActive()` ⇒ Boolean
+
+### NsisUpdater ⇐ module:electron-updater/out/BaseUpdater.BaseUpdater
+**Kind**: class of [electron-updater](#module_electron-updater)
+**Extends**: module:electron-updater/out/BaseUpdater.BaseUpdater
+
+### Provider
+**Kind**: class of [electron-updater](#module_electron-updater)
+**Properties**
+* **isUseMultipleRangeRequest** Boolean
+* **fileExtraDownloadHeaders** [key: string]: string | "undefined"
+
+**Methods**
+* [.Provider](#Provider)
+ * [`.getLatestVersion()`](#module_electron-updater.Provider+getLatestVersion) ⇒ Promise<module:electron-updater/out/providers/Provider.T>
+ * [`.setRequestHeaders(value)`](#module_electron-updater.Provider+setRequestHeaders)
+ * [`.resolveFiles(updateInfo)`](#module_electron-updater.Provider+resolveFiles) ⇒ Array<[ResolvedUpdateFileInfo](#ResolvedUpdateFileInfo)>
+
+
+#### `provider.getLatestVersion()` ⇒ Promise<module:electron-updater/out/providers/Provider.T>
+
+#### `provider.setRequestHeaders(value)`
+
+- value [key: string]: string | "undefined"
+
+
+#### `provider.resolveFiles(updateInfo)` ⇒ Array<[ResolvedUpdateFileInfo](#ResolvedUpdateFileInfo)>
+
+- updateInfo module:electron-updater/out/providers/Provider.T
+
+
+### UpdaterSignal
+**Kind**: class of [electron-updater](#module_electron-updater)
+
+* [.UpdaterSignal](#UpdaterSignal)
+ * [`.login(handler)`](#module_electron-updater.UpdaterSignal+login)
+ * [`.progress(handler)`](#module_electron-updater.UpdaterSignal+progress)
+ * [`.updateCancelled(handler)`](#module_electron-updater.UpdaterSignal+updateCancelled)
+ * [`.updateDownloaded(handler)`](#module_electron-updater.UpdaterSignal+updateDownloaded)
+
+
+#### `updaterSignal.login(handler)`
+Emitted when an authenticating proxy is [asking for user credentials](https://github.com/electron/electron/blob/master/docs/api/client-request.md#event-login).
+
+
+- handler module:electron-updater.__type
+
+
+#### `updaterSignal.progress(handler)`
+
+- handler callback
+
+
+#### `updaterSignal.updateCancelled(handler)`
+
+- handler callback
+
+
+#### `updaterSignal.updateDownloaded(handler)`
+
+- handler callback
+
+
+### `electron-updater.autoUpdater` : [AppUpdater](#AppUpdater)
+**Kind**: constant of [electron-updater](#module_electron-updater)
+
+### `electron-updater.DOWNLOAD_PROGRESS` : "login" \| "checking-for-update" \| "update-available" \| "update-not-available" \| "update-cancelled" \| "download-progress" \| "update-downloaded" \| "error"
+**Kind**: constant of [electron-updater](#module_electron-updater)
+
+### `electron-updater.UPDATE_DOWNLOADED` : "login" \| "checking-for-update" \| "update-available" \| "update-not-available" \| "update-cancelled" \| "download-progress" \| "update-downloaded" \| "error"
+**Kind**: constant of [electron-updater](#module_electron-updater)
+
+
diff --git a/docs/cli.md b/docs/cli.md
new file mode 100644
index 00000000000..1a35d3f5d38
--- /dev/null
+++ b/docs/cli.md
@@ -0,0 +1,111 @@
+```
+Commands:
+ electron-builder build Build [default]
+ electron-builder install-app-deps Install app deps
+ electron-builder node-gyp-rebuild Rebuild own native code
+ electron-builder create-self-signed-cert Create self-signed code signing cert
+ for Windows apps
+ electron-builder start Run application in a development
+ mode using electron-webpack
+
+Building:
+ --mac, -m, -o, --macos Build for macOS, accepts target list (see
+ https://goo.gl/5uHuzj). [array]
+ --linux, -l Build for Linux, accepts target list (see
+ https://goo.gl/4vwQad) [array]
+ --win, -w, --windows Build for Windows, accepts target list (see
+ https://goo.gl/jYsTEJ) [array]
+ --x64 Build for x64 [boolean]
+ --ia32 Build for ia32 [boolean]
+ --armv7l Build for armv7l [boolean]
+ --arm64 Build for arm64 [boolean]
+ --dir Build unpacked dir. Useful to test. [boolean]
+ --prepackaged, --pd The path to prepackaged app (to pack in a
+ distributable format)
+ --projectDir, --project The path to project directory. Defaults to current
+ working directory.
+ --config, -c The path to an electron-builder config. Defaults to
+ `electron-builder.yml` (or `json`, or `json5`), see
+ https://goo.gl/YFRJOM
+
+Publishing:
+ --publish, -p Publish artifacts (to GitHub Releases), see
+ https://goo.gl/tSFycD
+ [choices: "onTag", "onTagOrDraft", "always", "never", undefined]
+
+Other:
+ --help Show help [boolean]
+ --version Show version number [boolean]
+```
+
+For other commands please see help using `--help` arg, e.g. `./node_modules/.bin/electron-builder install-app-deps --help`
+
+!!! tip
+ Since Node.js 8 [npx](https://medium.com/@maybekatz/introducing-npx-an-npm-package-runner-55f7d4bd282b) is bundled, so, you can simply use `npx electron-builder`.
+
+
+Prepend `npx` to sample commands below if you run it from Terminal and not from `package.json` scripts.
+
+!!! example "build for macOS, Windows and Linux"
+ `electron-builder -mwl`
+
+!!! example "build deb and tar.xz for Linux"
+ `electron-builder --linux deb tar.xz`
+
+!!! example "build NSIS 32-bit installer for Windows"
+ `electron-builder --windows nsis:ia32`
+
+!!! example "set package.json property `foo` to `bar`"
+ `electron-builder -c.extraMetadata.foo=bar`
+
+!!! example "configure unicode options for NSIS"
+ `electron-builder -c.nsis.unicode=false`
+
+## Target
+
+Without target configuration, electron-builder builds Electron app for current platform and current architecture using default target.
+
+* macOS - DMG and ZIP for Squirrel.Mac.
+* Windows - [NSIS](configuration/nsis.md).
+* Linux:
+ - if you build on Windows or macOS: [Snap](configuration/snap.md) and [AppImage](configuration/appimage.md) for x64.
+ - if you build on Linux: [Snap](configuration/snap.md) and [AppImage](configuration/appimage.md) for current architecture.
+
+Platforms and archs can be configured or using [CLI args](https://github.com/electron-userland/electron-builder#cli-usage), or in the configuration.
+
+For example, if you don't want to pass `--ia32` and `--x64` flags each time, but instead build by default NSIS target for all archs for Windows:
+
+!!! example "Configuration"
+ ```json tab="package.json"
+ "build": {
+ "win": {
+ "target": [
+ {
+ "target": "nsis",
+ "arch": [
+ "x64",
+ "ia32"
+ ]
+ }
+ ]
+ }
+ }
+ ```
+
+ ``` yaml tab="electron-builder.yml"
+ win:
+ target:
+ - target: nsis
+ arch:
+ - x64
+ - ia32
+ ```
+
+and use
+```
+build -wl
+```
+
+### TargetConfiguration
+* **target** String - The target name. e.g. `snap`.
+* arch "x64" | "ia32" | "armv7l" | "arm64"> | "x64" | "ia32" | "armv7l" | "arm64" - The arch or list of archs.
\ No newline at end of file
diff --git a/docs/code-signing.md b/docs/code-signing.md
new file mode 100644
index 00000000000..526354a0e34
--- /dev/null
+++ b/docs/code-signing.md
@@ -0,0 +1,75 @@
+macOS and Windows code signing is supported. Windows is dual code-signed (SHA1 & SHA256 hashing algorithms).
+
+On a macOS development machine, a valid and appropriate identity from your keychain will be automatically used.
+
+!!! tip
+ See article [Notarizing your Electron application](https://kilianvalkhof.com/2019/electron/notarizing-your-electron-application/).
+
+
+| Env Name | Description
+| -------------- | -----------
+| `CSC_LINK` | The HTTPS link (or base64-encoded data, or `file://` link, or local path) to certificate (`*.p12` or `*.pfx` file). Shorthand `~/` is supported (home directory).
+| `CSC_KEY_PASSWORD` | The password to decrypt the certificate given in `CSC_LINK`.
+| `CSC_NAME` | *macOS-only* Name of certificate (to retrieve from login.keychain). Useful on a development machine (not on CI) if you have several identities (otherwise don't specify it).
+| `CSC_IDENTITY_AUTO_DISCOVERY`| `true` or `false`. Defaults to `true` — on a macOS development machine valid and appropriate identity from your keychain will be automatically used.
+| `CSC_KEYCHAIN`| The keychain name. Used if `CSC_LINK` is not specified. Defaults to system default keychain.
+
+!!! tip
+ If you are building Windows on macOS and need to set a different certificate and password (than the ones set in `CSC_*` env vars) you can use `WIN_CSC_LINK` and `WIN_CSC_KEY_PASSWORD`.
+
+## Windows
+
+To sign an app on Windows, there are two types of certificates:
+
+* EV Code Signing Certificate
+* Code Signing Certificate
+
+Both certificates work with auto-update. The regular (and often cheaper) Code Signing Certificate shows a warning during installation that goes away once enough users installed your application and you've built up trust. The EV Certificate has more trust and thus works immediately without any warnings. However, it is not possible to export the EV Certificate as it is bound to a physical USB dongle. Thus, you can't export the certificate for signing code on a CI, such as AppVeyor.
+
+If you are using an EV Certificate, you need to provide [win.certificateSubjectName](configuration/win.md#WindowsConfiguration-certificateSubjectName) in your electron-builder configuration.
+
+If you use Windows 7, please ensure that [PowerShell](https://blogs.technet.microsoft.com/heyscriptingguy/2013/06/02/weekend-scripter-install-powershell-3-0-on-windows-7/) is updated to version 3.0.
+
+If you are on Linux or Mac and you want sign a Windows app using EV Code Signing Certificate, please use [the guide for Unix systems](tutorials/code-signing-windows-apps-on-unix.md).
+
+## Travis, AppVeyor and other CI Servers
+To sign app on build server you need to set `CSC_LINK`, `CSC_KEY_PASSWORD`:
+
+1. [Export](https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/MaintainingCertificates/MaintainingCertificates.html#//apple_ref/doc/uid/TP40012582-CH31-SW7) certificate.
+ Consider to not use special characters (for bash[1]) in the password because “*values are not escaped when your builds are executed*”.
+2. Encode file to base64 (macOS: `base64 -i yourFile.p12 -o envValue.txt`, Linux: `base64 yourFile.p12 > envValue.txt`).
+
+ Or upload `*.p12` file (e.g. on Google Drive, use [direct link generator](http://www.syncwithtech.org/p/direct-download-link-generator.html) to get correct download link).
+
+3. Set `CSC_LINK` and `CSC_KEY_PASSWORD` environment variables. See [Travis](https://docs.travis-ci.com/user/environment-variables/#Defining-Variables-in-Repository-Settings) or [AppVeyor](https://www.appveyor.com/docs/build-configuration#environment-variables) documentation.
+ Recommended to set it in the CI Project Settings, not in the `.travis.yml`/`appveyor.yml`. If you use link to file (not base64 encoded data), make sure to escape special characters (for bash[1]) accordingly.
+
+ In case of AppVeyor, don't forget to click on lock icon to “Toggle variable encryption”.
+
+ Keep in mind that Windows is not able to handle enviroment variable values longer than 8192 characters, thus if the base64 representation of your certificate exceeds that limit, try re-exporting the certificate without including all the certificates in the certification path (they are not necessary, but the Certificate Manager export wizard ticks the option by default), otherwise the encoded value will be truncated.
+
+[1] `printf "%q\n" ""`
+
+## Where to Buy Code Signing Certificate
+See [Get a code signing certificate](https://msdn.microsoft.com/windows/hardware/drivers/dashboard/get-a-code-signing-certificate) for Windows (platform: "Microsoft Authenticode").
+Please note — Gatekeeper only recognises [Apple digital certificates](http://stackoverflow.com/questions/11833481/non-apple-issued-code-signing-certificate-can-it-work-with-mac-os-10-8-gatekeep).
+
+## How to Export Certificate on macOS
+
+1. Open Keychain.
+2. Select `login` keychain, and `My Certificates` category.
+3. Select all required certificates (hint: use cmd-click to select several):
+ * `Developer ID Application:` to sign app for macOS.
+ * `3rd Party Mac Developer Installer:` and either `Apple Distribution` or `3rd Party Mac Developer Application:` to sign app for MAS (Mac App Store).
+ * `Developer ID Application:` and `Developer ID Installer` to sign app and installer for distribution outside of the Mac App Store.
+ * `Apple Development:` or `Mac Developer:` to sign development builds for testing Mac App Store submissions (`mas-dev` target). You also need a provisioning profile in the working directory that matches this certificate and the device being used for testing.
+
+ Please note – you can select as many certificates as needed. No restrictions on electron-builder side.
+ All selected certificates will be imported into temporary keychain on CI server.
+4. Open context menu and `Export`.
+
+## How to Disable Code Signing During the Build Process on macOS
+
+To disable Code Signing when building for macOS leave all the above vars unset except for `CSC_IDENTITY_AUTO_DISCOVERY` which needs to be set to `false`. This can be done by running `export CSC_IDENTITY_AUTO_DISCOVERY=false`.
+
+Another way — set `mac.identity` to `null`. You can pass aditional configuration using CLI as well: `-c.mac.identity=null`.
diff --git a/docs/configuration/appimage.md b/docs/configuration/appimage.md
new file mode 100644
index 00000000000..5a4386a6bcb
--- /dev/null
+++ b/docs/configuration/appimage.md
@@ -0,0 +1,7 @@
+The top-level [appImage](configuration.md#Configuration-appImage) key contains set of options instructing electron-builder on how it should build [AppImage](https://appimage.org/).
+
+!!! info "Desktop Integration"
+ Since electron-builder 21 desktop integration is not a part of produced AppImage file. [AppImageLauncher](https://github.com/TheAssassin/AppImageLauncher) is the recommended way to integrate AppImages.
+
+
+{!generated/appimage-options.md!}
\ No newline at end of file
diff --git a/docs/configuration/appx.md b/docs/configuration/appx.md
new file mode 100644
index 00000000000..64f96f54b85
--- /dev/null
+++ b/docs/configuration/appx.md
@@ -0,0 +1,73 @@
+The top-level [appx](configuration.md#Configuration-appx) key contains set of options instructing electron-builder on how it should build AppX (Windows Store).
+
+All options are optional. All required for AppX configuration is inferred and computed automatically.
+
+
+
+
applicationId String - The application id. Defaults to identityName. Can’t start with numbers.
+
backgroundColor = #464646 String | “undefined” - The background color of the app tile. See Visual Elements.
+
displayName String | “undefined” - A friendly name that can be displayed to users. Corresponds to Properties.DisplayName. Defaults to the application product name.
publisher String | “undefined” - The Windows Store publisher. Not used if AppX is build for testing. See AppX Package Code Signing below.
+
publisherDisplayName String | “undefined” - A friendly name for the publisher that can be displayed to users. Corresponds to Properties.PublisherDisplayName. Defaults to company name from the application metadata.
+
languages Array<String> | String | “undefined” - The list of supported languages that will be listed in the Windows Store. The first entry (index 0) will be the default language. Defaults to en-US if omitted.
+
addAutoLaunchExtension Boolean - Whether to add auto launch extension. Defaults to true if electron-winstore-auto-launch in the dependencies.
+
customExtensionsPath String - Relative path to custom extensions xml to be included in an appmanifest.xml.
+
+
+
+## AppX Package Code Signing
+
+* If the AppX package is meant for enterprise or self-made distribution (manually install the app without using the Store for testing or for enterprise distribution), it must be [signed](../code-signing.md).
+* If the AppX package is meant for Windows Store distribution, no need to sign the package with any certificate. The Windows Store will take care of signing it with a Microsoft certificate during the submission process.
+
+## AppX Assets
+
+AppX assets need to be placed in the `appx` folder in the [build](configuration.md#MetadataDirectories-buildResources) directory.
+
+The assets should follow these naming conventions:
+
+- Logo: `StoreLogo.png`
+- Square150x150Logo: `Square150x150Logo.png`
+- Square44x44Logo: `Square44x44Logo.png`
+- Wide310x150Logo: `Wide310x150Logo.png`
+- *Optional* BadgeLogo: `BadgeLogo.png`
+- *Optional* Square310x310Logo: `LargeTile.png`
+- *Optional* Square71x71Logo: `SmallTile.png`
+- *Optional* SplashScreen: `SplashScreen.png`
+
+All official AppX asset types are supported by the build process. These assets can include scaled assets by using `target size` and `scale` in the name.
+See [Guidelines for tile and icon assets](https://docs.microsoft.com/en-us/windows/uwp/controls-and-patterns/tiles-and-notifications-app-assets) for more information.
+
+Default assets will be used for `Logo`, `Square150x150Logo`, `Square44x44Logo` and `Wide310x150Logo` if not provided. For assets marked `Optional`, these assets will not be listed in the manifest file if not provided.
+
+## How to publish your Electron App to the Windows App Store
+
+1. You'll need a microsoft developer account (pay some small fee). Use your favourite search engine to find the registration form.
+2. Register you app for the desktop bridge [here](https://developer.microsoft.com/en-us/windows/projects/campaigns/desktop-bridge).
+3. Wait for MS to answer and further guide you.
+4. In the meantime, build and test your appx. It's dead simple.
+
+ ```json
+ "win": {
+ "target": "appx",
+ },
+ ```
+5. The rest should be pretty straight forward — upload the appx to the store and wait for approval.
+
+## Building AppX on macOS
+
+The only solution for now — using [Parallels Desktop for Mac](http://www.parallels.com/products/desktop/) ([Pro Edition](https://forum.parallels.com/threads/prlctl-is-now-a-pro-or-business-version-tool-only.330290/) is required). Create Windows 10 virtual machine and start it. It will be detected and used automatically to build AppX on your macOS machine. Nothing is required to setup on Windows. It allows you to not copy project to Windows and to not setup build environment on Windows.
+
+## Common Questions
+#### How do install AppX without trusted certificate?
+
+If you use self-signed certificate, you need to add it to "Trusted People". See [Install the certificate](https://stackoverflow.com/a/24372483/1910191).
diff --git a/docs/configuration/configuration.md b/docs/configuration/configuration.md
new file mode 100644
index 00000000000..9555497faf7
--- /dev/null
+++ b/docs/configuration/configuration.md
@@ -0,0 +1,201 @@
+electron-builder [configuration](#configuration) can be defined
+
+* in the `package.json` file of your project using the `build` key on the top level:
+ ```json
+ "build": {
+ "appId": "com.example.app"
+ }
+ ```
+* or through the `--config ` option. Defaults to `electron-builder.yml`.
+ ```yaml
+ appId: "com.example.app"
+ ```
+
+ `json`, [json5](http://json5.org), [toml](https://github.com/toml-lang/toml) or `js` (exported configuration or function that produces configuration) formats also supported.
+
+ !!! tip
+ If you want to use [toml](https://en.wikipedia.org/wiki/TOML), please install `yarn add toml --dev`.
+
+Most of the options accept `null` — for example, to explicitly set that DMG icon must be default volume icon from the OS and default rules must be not applied (i.e. use application icon as DMG icon), set `dmg.icon` to `null`.
+
+## Artifact File Name Template
+
+`${ext}` macro is supported in addition to [file macros](../file-patterns.md#file-macros).
+
+## Environment Variables from File
+
+Env file `electron-builder.env` in the current dir ([example](https://github.com/motdotla/dotenv-expand/blob/master/test/.env)). Supported only for CLI usage.
+
+## How to Read Docs
+
+* Name of optional property is normal, **required** is bold.
+* Type is specified after property name: `Array | String`. Union like this means that you can specify or string (`**/*`), or array of strings (`["**/*", "!foo.js"]`).
+
+## Configuration
+
+
+
+
appId = com.electron.${name} String | “undefined” - The application id. Used as CFBundleIdentifier for MacOS and as Application User Model ID for Windows (NSIS target only, Squirrel.Windows not supported). It is strongly recommended that an explicit ID is set.
+
productName String | “undefined” - As name, but allows you to specify a product name for your executable which contains spaces and other special characters not allowed in the name property.
includeSubNodeModules = false Boolean - Whether to include all of the submodules node_modules directories
+
+
+
+
+
buildDependenciesFromSource = false Boolean - Whether to build the application native dependencies from source.
+
+
+
nodeGypRebuild = false Boolean - Whether to execute node-gyp rebuild before starting to package the app.
+
Don’t usenpm (neither .npmrc) for configuring electron headers. Use electron-builder node-gyp-rebuild instead.
+
+
+
npmArgs Array<String> | String | “undefined” - Additional command line arguments to use when installing app native deps.
+
+
+
npmRebuild = true Boolean - Whether to rebuild native dependencies before starting to package the app.
+
+
+
+
+
+
buildVersion String | “undefined” - The build version. Maps to the CFBundleVersion on macOS, and FileVersion metadata property on Windows. Defaults to the version. If TRAVIS_BUILD_NUMBER or APPVEYOR_BUILD_NUMBER or CIRCLE_BUILD_NUM or BUILD_NUMBER or bamboo.buildNumber or CI_PIPELINE_IID env defined, it will be used as a build version (version.build_number).
+
+
+
electronCompile Boolean - Whether to use electron-compile to compile app. Defaults to true if electron-compile in the dependencies. And false if in the devDependencies or doesn’t specified.
+
+
+
electronDist String | module:app-builder-lib/out/configuration.__type - Returns the path to custom Electron build (e.g. ~/electron/out/R). Zip files must follow the pattern electron-v${version}-${platformName}-${arch}.zip, otherwise it will be assumed to be an unpacked Electron app directory
electronBranding ElectronBrandingOptions - The branding used by Electron’s distributables. This is needed if a fork has modified Electron’s BRANDING.json file.
+
+
+
electronVersion String | “undefined” - The version of electron you are packaging for. Defaults to version of electron, electron-prebuilt or electron-prebuilt-compile dependency.
+
+
+
extends Array<String> | String | “undefined” - The name of a built-in configuration preset (currently, only react-cra is supported) or any number of paths to config files (relative to project dir).
+
The latter allows to mixin a config from multiple other configs, as if you Object.assign them, but properly combine files glob patterns.
+
If react-scripts in the app dependencies, react-cra will be set automatically. Set to null to disable automatic detection.
+
+
+
extraMetadata any - Inject properties to package.json.
+
+
+
+
+
forceCodeSigning = false Boolean - Whether to fail if the application is not signed (to prevent unsigned app if code signing configuration is not correct).
+
nodeVersion String | “undefined” - libui-based frameworks only The version of NodeJS you are packaging for. You can set it to current to set the Node.js version that you use to run.
+
launchUiVersion Boolean | String | “undefined” - libui-based frameworks only The version of LaunchUI you are packaging for. Applicable for Windows only. Defaults to version suitable for used framework version.
+
framework String | “undefined” - The framework name. One of electron, proton, libui. Defaults to electron.
+
beforePack module:app-builder-lib/out/configuration.__type | String | “undefined” - The function (or path to file or module id) to be run before pack
+
+
+
+
+
afterPack - The function (or path to file or module id) to be run after pack (but before pack into distributable format and sign).
+
+
+
afterSign - The function (or path to file or module id) to be run after pack and sign (but before pack into distributable format).
+
+
+
artifactBuildStarted module:app-builder-lib/out/configuration.__type | String | “undefined” - The function (or path to file or module id) to be run on artifact build start.
+
+
+
artifactBuildCompleted module:app-builder-lib/out/configuration.__type | String | “undefined” - The function (or path to file or module id) to be run on artifact build completed.
msiProjectCreated module:app-builder-lib/out/configuration.__type | String | “undefined” - MSI project created on disk - not packed into .msi package yet.
+
+
+
appxManifestCreated module:app-builder-lib/out/configuration.__type | String | “undefined” - Appx manifest created on disk - not packed into .appx package yet.
+
+
+
onNodeModuleFile - The function (or path to file or module id) to be run on each node module file.
+
+
+
beforeBuild (context: BeforeBuildContext) => Promise | null - The function (or path to file or module id) to be run before dependencies are installed or rebuilt. Works when npmRebuild is set to true. Resolving to false will skip dependencies install or rebuild.
+
If provided and node_modules are missing, it will not invoke production dependencies check.
+
+
+
+
+
remoteBuild = true Boolean - Whether to build using Electron Build Service if target not supported on current OS.
+
includePdb = false Boolean - Whether to include PDB files.
+
removePackageScripts = true Boolean - Whether to remove scripts field from package.json files.
+
removePackageKeywords = true Boolean - Whether to remove keywords field from package.json files.
+
+
+
+
+---
+
+### Overridable per Platform Options
+
+Following options can be set also per platform (top-level keys [mac](mac.md), [linux](linux.md) and [win](win.md)) if need.
+
+{!generated/PlatformSpecificBuildOptions.md!}
+
+## Metadata
+Some standard fields should be defined in the `package.json`.
+
+{!generated/Metadata.md!}
+
+## Proton Native
+
+To package [Proton Native](https://proton-native.js.org/) app, set `protonNodeVersion` option to `current` or specific NodeJS version that you are packaging for.
+Currently, only macOS and Linux supported.
+
+## Build Version Management
+`CFBundleVersion` (macOS) and `FileVersion` (Windows) will be set automatically to `version.build_number` on CI server (Travis, AppVeyor, CircleCI and Bamboo supported).
+
+{!includes/hooks.md!}
diff --git a/docs/configuration/contents.md b/docs/configuration/contents.md
new file mode 100644
index 00000000000..1afa65972ba
--- /dev/null
+++ b/docs/configuration/contents.md
@@ -0,0 +1,84 @@
+## files
+
+`Array | String | FileSet`
+
+A [glob patterns](../file-patterns.md) relative to the [app directory](configuration.md#MetadataDirectories-app), which specifies which files to include when copying files to create the package.
+
+Defaults to:
+```json
+[
+ "**/*",
+ "!**/node_modules/*/{CHANGELOG.md,README.md,README,readme.md,readme}",
+ "!**/node_modules/*/{test,__tests__,tests,powered-test,example,examples}",
+ "!**/node_modules/*.d.ts",
+ "!**/node_modules/.bin",
+ "!**/*.{iml,o,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,xproj}",
+ "!.editorconfig",
+ "!**/._*",
+ "!**/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,.gitignore,.gitattributes}",
+ "!**/{__pycache__,thumbs.db,.flowconfig,.idea,.vs,.nyc_output}",
+ "!**/{appveyor.yml,.travis.yml,circle.yml}",
+ "!**/{npm-debug.log,yarn.lock,.yarn-integrity,.yarn-metadata.json}"
+]
+```
+
+Development dependencies are never copied in any case. You don't need to ignore it explicitly. Hidden files are not ignored by default, but all files that should be ignored, are ignored by default.
+
+
+Default pattern `**/*` **is not added to your custom** if some of your patterns is not ignore (i.e. not starts with `!`). `package.json` and `**/node_modules/**/*` (only production dependencies will be copied) is added to your custom in any case. All default ignores are added in any case — you don't need to repeat it if you configure own patterns.
+
+May be specified in the platform options (e.g. in the [mac](mac.md)).
+
+You may also specify custom source and destination directories by using `FileSet` objects instead of simple glob patterns.
+
+```json
+[
+ {
+ "from": "path/to/source",
+ "to": "path/to/destination",
+ "filter": ["**/*", "!foo/*.js"]
+ }
+]
+```
+
+You can use [file macros](../file-patterns.md#file-macros) in the `from` and `to` fields as well. `from` and `to` can be files and you can use this to [rename](https://github.com/electron-userland/electron-builder/issues/1119) a file while packaging.
+
+### `FileSet.from`
+
+`String`
+
+The source path relative to and defaults to:
+
+* the [app directory](configuration.md#MetadataDirectories-app) for `files`,
+* the project directory for `extraResources` and `extraFiles`.
+
+If you don't use two-package.json structure and don't set custom app directory, app directory equals to project directory.
+
+### `FileSet.to`
+
+`String`
+
+The destination path relative to and defaults to:
+* the asar archive root for `files`,
+* the app's content directory for `extraFiles`,
+* the app's resource directory for `extraResources`.
+
+### `FileSet.filter`
+
+`Array | String`
+
+The [glob patterns](../file-patterns.md). Defaults to `*/**`.
+
+## extraResources
+
+`Array | String | FileSet`
+
+A [glob patterns](../file-patterns.md) relative to the project directory, when specified, copy the file or directory with matching names directly into the app's resources directory (`Contents/Resources` for MacOS, `resources` for Linux and Windows).
+
+File patterns (and support for `from` and `to` fields) the same as for [files](#files).
+
+## extraFiles
+
+`Array | String | FileSet`
+
+The same as [extraResources](#extraresources) but copy into the app's content directory (`Contents` for MacOS, root directory for Linux and Windows).
\ No newline at end of file
diff --git a/docs/configuration/dmg.md b/docs/configuration/dmg.md
new file mode 100644
index 00000000000..acad319e28a
--- /dev/null
+++ b/docs/configuration/dmg.md
@@ -0,0 +1,78 @@
+The top-level [dmg](configuration.md#Configuration-dmg) key contains set of options instructing electron-builder on how it should build [DMG](https://en.wikipedia.org/wiki/Apple_Disk_Image).
+
+
+
+
+
background String | “undefined” - The path to background image (default: build/background.tiff or build/background.png if exists). The resolution of this file determines the resolution of the installer window. If background is not specified, use window.size. Default locations expected background size to be 540x380. See: DMG with Retina background support.
+
+
+
backgroundColor String | “undefined” - The background color (accepts css colors). Defaults to #ffffff (white) if no background image.
+
+
+
icon String | “undefined” - The path to DMG icon (volume icon), which will be shown when mounted, relative to the build resources or to the project directory. Defaults to the application icon (build/icon.icns).
+
+
+
iconSize = 80 Number | “undefined” - The size of all the icons inside the DMG.
+
+
+
iconTextSize = 12 Number | “undefined” - The size of all the icon texts inside the DMG.
+
+
+
title = ${productName} ${version} String | “undefined” - The title of the produced DMG, which will be shown when mounted (volume name).
+
Macro ${productName}, ${version} and ${name} are supported.
+
+
+
contents Array<DmgContent> - The content — to customize icon locations. The x and y coordinates refer to the position of the center of the icon (at 1x scale), and do not take the label into account.
+
+
x Number - The device-independent pixel offset from the left of the window to the center of the icon.
+
y Number - The device-independent pixel offset from the top of the window to the center of the icon.
+
type “link” | “file” | “dir”
+
name String - The name of the file within the DMG. Defaults to basename of path.
+
path String - The path of the file within the DMG.
+
+
+
+
format = UDZO “UDRW” | “UDRO” | “UDCO” | “UDZO” | “UDBZ” | “ULFO” - The disk image format. ULFO (lzfse-compressed image (OS X 10.11+ only)).
+
+
+
window - The DMG window position and size. With y co-ordinates running from bottom to top.
+
The Finder makes sure that the window will be on the user’s display, so if you want your window at the top left of the display you could use "x": 0, "y": 100000 as the x, y co-ordinates. It is not to be possible to position the window relative to the top left or relative to the center of the user’s screen.
+
+
x = 400 Number - The X position relative to left of the screen.
+
y = 100 Number - The Y position relative to bottom of the screen.
+
width Number - The width. Defaults to background image width or 540.
+
height Number - The height. Defaults to background image height or 380.
+
+
+
+
internetEnabled = false Boolean - Whether to create internet-enabled disk image (when it is downloaded using a browser it will automatically decompress the image, put the application on the desktop, unmount and remove the disk image file).
+
+
+
sign = false Boolean - Whether to sign the DMG or not. Signing is not required and will lead to unwanted errors in combination with notarization requirements.
+
+
+
+## DMG License
+
+To add license to DMG, create file `license_LANG_CODE.txt` in the build resources. Multiple license files in different languages are supported — use lang postfix (e.g. `_de`, `_ru`)). For example, create files `license_de.txt` and `license_en.txt` in the build resources.
+If OS language is german, `license_de.txt` will be displayed. See map of [language code to name](https://github.com/meikidd/iso-639-1/blob/master/src/data.js).
+
+You can also change the default button labels of the DMG by passing a json file named `licenseButtons_LANG_CODE.json`. The german file would be named: `licenseButtons_de.json`.
+The contain file should have the following format:
+```json
+{
+ "lang": "English",
+ "agree": "Agree",
+ "disagree": "Disagree",
+ "print": "Print",
+ "save": "Save",
+ "description": "Here is my own description"
+}
+```
diff --git a/docs/configuration/linux.md b/docs/configuration/linux.md
new file mode 100644
index 00000000000..ef81cfe8086
--- /dev/null
+++ b/docs/configuration/linux.md
@@ -0,0 +1,58 @@
+The top-level [linux](configuration.md#Configuration-linux) key contains set of options instructing electron-builder on how it should build Linux targets. These options applicable for any Linux target.
+
+
+
+
+
target = AppImage String | TargetConfiguration - Target package type: list of AppImage, snap, deb, rpm, freebsd, pacman, p5p, apk, 7z, zip, tar.xz, tar.lz, tar.gz, tar.bz2, dir.
+
electron-builder docker image can be used to build Linux targets on any platform.
maintainer String | “undefined” - The maintainer. Defaults to author.
+
+
+
vendor String | “undefined” - The vendor. Defaults to author.
+
+
+
icon String - The path to icon set directory or one png file, relative to the build resources or to the project directory. The icon filename must contain the size (e.g. 32x32.png) of the icon. By default will be generated automatically based on the macOS icns file.
mimeTypes Array<String> | “undefined” - The mime types in addition to specified in the file associations. Use it if you don’t want to register a new mime type, but reuse existing.
+
+
+
desktop any | “undefined” - The Desktop file entries (name to value).
+
+
+
executableArgs Array<String> | “undefined” - The executable parameters. Pass to executableName
+
+
+
+
+
+---
+
+{!includes/platform-specific-configuration-note.md!}
+
+## Debian Package Options
+
+The top-level [deb](configuration.md#Configuration-deb) key contains set of options instructing electron-builder on how it should build Debian package.
+
+{!generated/DebOptions.md!}
+
+All [LinuxTargetSpecificOptions](linux.md#linuxtargetspecificoptions-apk-freebsd-pacman-p5p-and-rpm-options) can be also specified in the `deb` to customize Debian package.
+
+## `LinuxTargetSpecificOptions` APK, FreeBSD, Pacman, P5P and RPM Options
+
+
+The top-level `apk`, `freebsd`, `pacman`, `p5p` and `rpm` keys contains set of options instructing electron-builder on how it should build corresponding Linux target.
+
+{!generated/LinuxTargetSpecificOptions.md!}
diff --git a/docs/configuration/mac.md b/docs/configuration/mac.md
new file mode 100644
index 00000000000..204817ecd47
--- /dev/null
+++ b/docs/configuration/mac.md
@@ -0,0 +1,101 @@
+The top-level [mac](configuration.md#Configuration-mac) key contains set of options instructing electron-builder on how it should build macOS targets. These options applicable for any macOS target.
+
+
+
+
+
category String | “undefined” - The application category type, as shown in the Finder via View -> Arrange by Application Category when viewing the Applications directory.
+
For example, "category": "public.app-category.developer-tools" will set the application category to Developer Tools.
target String | TargetConfiguration - The target package type: list of default, dmg, mas, mas-dev, pkg, 7z, zip, tar.xz, tar.lz, tar.gz, tar.bz2, dir. Defaults to default (dmg and zip for Squirrel.Mac).
+
+
+
identity String | “undefined” - The name of certificate to use when signing. Consider using environment variables CSC_LINK or CSC_NAME instead of specifying this option. MAS installer identity is specified in the mas.
+
+
+
icon = build/icon.icns String | “undefined” - The path to application icon.
+
+
+
entitlements String | “undefined” - The path to entitlements file for signing the app. build/entitlements.mac.plist will be used if exists (it is a recommended way to set). MAS entitlements is specified in the mas.
+
+
+
entitlementsInherit String | “undefined” - The path to child entitlements which inherit the security settings for signing frameworks and bundles of a distribution. build/entitlements.mac.inherit.plist will be used if exists (it is a recommended way to set). Otherwise default.
+
This option only applies when signing with entitlements provided.
+
+
+
entitlementsLoginHelper String | “undefined” - Path to login helper entitlement file. When using App Sandbox, the the com.apple.security.inherit key that is normally in the inherited entitlements cannot be inherited since the login helper is a standalone executable. Defaults to the value provided for entitlements. This option only applies when signing with entitlements provided.
+
+
+
provisioningProfile String | “undefined” - The path to the provisioning profile to use when signing, absolute or relative to the app root.
+
+
+
bundleVersion String | “undefined” - The CFBundleVersion. Do not use it unless you need to.
+
+
+
bundleShortVersion String | “undefined” - The CFBundleShortVersionString. Do not use it unless you need to.
+
+
+
darkModeSupport = false Boolean - Whether a dark mode is supported. If your app does have a dark mode, you can make your app follow the system-wide dark mode setting.
+
+
+
helperBundleId = ${appBundleIdentifier}.helper String | “undefined” - The bundle identifier to use in the application helper’s plist.
+
+
+
helperRendererBundleId = ${appBundleIdentifier}.helper.Renderer String | “undefined” - The bundle identifier to use in the Renderer helper’s plist.
+
+
+
helperPluginBundleId = ${appBundleIdentifier}.helper.Plugin String | “undefined” - The bundle identifier to use in the Plugin helper’s plist.
+
+
+
helperGPUBundleId = ${appBundleIdentifier}.helper.GPU String | “undefined” - The bundle identifier to use in the GPU helper’s plist.
+
+
+
helperEHBundleId = ${appBundleIdentifier}.helper.EH String | “undefined” - The bundle identifier to use in the EH helper’s plist.
+
+
+
helperNPBundleId = ${appBundleIdentifier}.helper.NP String | “undefined” - The bundle identifier to use in the NP helper’s plist.
+
+
+
type = distribution “distribution” | “development” | “undefined” - Whether to sign app for development or for distribution.
+
+
+
extendInfo any - The extra entries for Info.plist.
+
+
+
binaries Array<String> | “undefined” - Paths of any extra binaries that need to be signed.
+
+
+
minimumSystemVersion String | “undefined” - The minimum version of macOS required for the app to run. Corresponds to LSMinimumSystemVersion.
+
+
+
requirements String | “undefined” - Path of requirements file used in signing. Not applicable for MAS.
+
+
+
electronLanguages Array<String> | String - The electron locales. By default Electron locales used as is.
+
+
+
extraDistFiles Array<String> | String | “undefined” - Extra files to put in archive. Not applicable for tar.*.
+
+
+
hardenedRuntime = true Boolean - Whether your app has to be signed with hardened runtime.
+
+
+
gatekeeperAssess = false Boolean - Whether to let electron-osx-sign validate the signing or not.
+
+
+
strictVerify = true Array<String> | String | Boolean - Whether to let electron-osx-sign verify the contents or not.
+
+
+
signIgnore Array<String> | String | “undefined” - Regex or an array of regex’s that signal skipping signing a file.
+
+
+
timestamp String | “undefined” - Specify the URL of the timestamp authority server
+
+
+
+
+
+---
+
+{!includes/platform-specific-configuration-note.md!}
diff --git a/docs/configuration/mas.md b/docs/configuration/mas.md
new file mode 100644
index 00000000000..4b83b1c64fa
--- /dev/null
+++ b/docs/configuration/mas.md
@@ -0,0 +1,11 @@
+The top-level [mas](configuration.md#Configuration-mas) key contains set of options instructing electron-builder on how it should build MAS (Mac Application Store) target.
+Inherits [macOS options](mac.md).
+
+
+
+
entitlements String | “undefined” - The path to entitlements file for signing the app. build/entitlements.mas.plist will be used if exists (it is a recommended way to set). Otherwise default.
+
entitlementsInherit String | “undefined” - The path to child entitlements which inherit the security settings for signing frameworks and bundles of a distribution. build/entitlements.mas.inherit.plist will be used if exists (it is a recommended way to set). Otherwise default.
+
binaries Array<String> | “undefined” - Paths of any extra binaries that need to be signed.
+
+
+
diff --git a/docs/configuration/nsis.md b/docs/configuration/nsis.md
new file mode 100644
index 00000000000..8cbdeb5c7aa
--- /dev/null
+++ b/docs/configuration/nsis.md
@@ -0,0 +1,145 @@
+The top-level [nsis](configuration.md#Configuration-nsis) key contains set of options instructing electron-builder on how it should build NSIS target (default target for Windows).
+
+These options also applicable for [Web installer](#web-installer), use top-level `nsisWeb` key.
+
+{!generated/NsisOptions.md!}
+
+---
+
+Inherited from `TargetSpecificOptions`:
+
+{!generated/TargetSpecificOptions.md!}
+
+---
+
+Unicode enabled by default. Large strings are supported (maximum string length of 8192 bytes instead of the default of 1024 bytes).
+
+## 32 bit + 64 bit
+
+If you build both ia32 and x64 arch (`--x64 --ia32`), you in any case get one installer. Appropriate arch will be installed automatically.
+The same applied to web installer (`nsis-web` [target](win.md#WindowsConfiguration-target)).
+
+## Web Installer
+
+To build web installer, set [target](win.md#WindowsConfiguration-target) to `nsis-web`. Web Installer automatically detects OS architecture and downloads corresponding package file. So, user don't need to guess what installer to download and in the same time you don't bundle package files for all architectures in the one installer (as in case of default `nsis` target). It doesn't matter for common Electron application (due to superb LZMA compression, size difference is acceptable), but if your application is huge, Web Installer is a solution.
+
+To customize web installer, use the top-level `nsisWeb` key (not `nsis`).
+
+If for some reasons web installer cannot download (antivirus, offline):
+
+* Download package file into the same directory where installer located. It will be detected automatically and used instead of downloading from the Internet. Please note — only original package file is allowed (checksum is checked).
+* Specify any local package file using `--package-file=path_to_file`.
+
+## Custom NSIS script
+
+Two options are available — [include](#NsisOptions-include) and [script](#NsisOptions-script). `script` allows you to provide completely different NSIS script. For most cases it is not required as you need only to customise some aspects, but still use well-tested and maintained default NSIS script. So, `include` is recommended.
+
+Keep in mind — if you customize NSIS script, you should always state about it in the issue reports. And don't expect that your issue will be resolved.
+
+1. Add file `build/installer.nsh`.
+2. Define wanted macro to customise: `customHeader`, `preInit`, `customInit`, `customUnInit`, `customInstall`, `customUnInstall`, `customRemoveFiles`, `customInstallMode`.
+
+ !!! example
+ ```nsis
+ !macro customHeader
+ !system "echo '' > ${BUILD_RESOURCES_DIR}/customHeader"
+ !macroend
+
+ !macro preInit
+ ; This macro is inserted at the beginning of the NSIS .OnInit callback
+ !system "echo '' > ${BUILD_RESOURCES_DIR}/preInit"
+ !macroend
+
+ !macro customInit
+ !system "echo '' > ${BUILD_RESOURCES_DIR}/customInit"
+ !macroend
+
+ !macro customInstall
+ !system "echo '' > ${BUILD_RESOURCES_DIR}/customInstall"
+ !macroend
+
+ !macro customInstallMode
+ # set $isForceMachineInstall or $isForceCurrentInstall
+ # to enforce one or the other modes.
+ !macroend
+ ```
+
+* `BUILD_RESOURCES_DIR` and `PROJECT_DIR` are defined.
+* `build` is added as `addincludedir` (i.e. you don't need to use `BUILD_RESOURCES_DIR` to include files).
+* `build/x86-unicode` and `build/x86-ansi` are added as `addplugindir`.
+* File associations macro `registerFileAssociations` and `unregisterFileAssociations` are still defined.
+* All other electron-builder specific flags (e.g. `ONE_CLICK`) are still defined.
+
+If you want to include additional resources for use during installation, such as scripts or additional installers, you can place them in the `build` directory and include them with `File`. For example, to include and run `extramsi.msi` during installation, place it in the `build` directory and use the following:
+
+```nsis
+!macro customInstall
+ File /oname=$PLUGINSDIR\extramsi.msi "${BUILD_RESOURCES_DIR}\extramsi.msi"
+ ExecWait '"msiexec" /i "$PLUGINSDIR\extramsi.msi" /passive'
+!macroend
+```
+
+??? question "Is there a way to call just when the app is installed (or uninstalled) manually and not on update?"
+ Use `${isUpdated}`.
+
+ ```nsis
+ ${ifNot} ${isUpdated}
+ # your code
+ ${endIf}
+ ```
+
+## GUID vs Application Name
+
+Windows requires to use registry keys (e.g. INSTALL/UNINSTALL info). Squirrel.Windows simply uses application name as key.
+But it is not robust — Google can use key Google Chrome SxS, because it is a Google.
+
+So, it is better to use [GUID](http://stackoverflow.com/a/246935/1910191).
+You are not forced to explicitly specify it — name-based [UUID v5](https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_5_.28SHA-1_hash_.26_namespace.29) will be generated from your [appId](configuration.md#Configuration-appId) or [name](configuration.md#Metadata-name).
+It means that you **should not change appId** once your application in use (or name if `appId` was not set). Application product name (title) or description can be safely changed.
+
+You can explicitly set guid using option [nsis.guid](#NsisOptions-guid), but it is not recommended — consider using [appId](configuration.md#Configuration-appId).
+
+It is also important to set the Application User Model ID (AUMID) to the [appId](configuration.md#Configuration-appId) of the application, in order for notifications on Windows 8/8.1 to function and for Window 10 notifications to display the app icon within the notifications by default. The AUMID should be set within the Main process and before any BrowserWindows have been opened, it is normally the first piece of code executed: `app.setAppUserModelId(appId)`
+
+## Portable
+
+To build portable app, set target to `portable` (or pass `--win portable`).
+
+For portable app, following environment variables are available:
+
+* `PORTABLE_EXECUTABLE_DIR` - dir where portable executable located.
+* `PORTABLE_EXECUTABLE_APP_FILENAME` - sanitized app name to use in [file paths](https://github.com/electron-userland/electron-builder/issues/3186#issue-345489962).
+
+## Common Questions
+
+??? question "How do change the default installation directory to custom?"
+
+ It is very specific requirement. Do not do if you are not sure. Add [custom macro](#custom-nsis-script):
+
+ ```nsis
+ !macro preInit
+ SetRegView 64
+ WriteRegExpandStr HKLM "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\MyApp"
+ WriteRegExpandStr HKCU "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\MyApp"
+ SetRegView 32
+ WriteRegExpandStr HKLM "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\MyApp"
+ WriteRegExpandStr HKCU "${INSTALL_REGISTRY_KEY}" InstallLocation "C:\MyApp"
+ !macroend
+ ```
+
+??? question "Is it possible to made single installer that will allow configuring user/machine installation?"
+
+ Yes, you need to switch to assisted installer (not default one-click).
+
+ ```json tab="package.json"
+ "build": {
+ "nsis": {
+ "oneClick": false
+ }
+ }
+ ```
+
+ ```yaml tab="electron-builder.yml"
+ nsis:
+ oneClick: false
+ ```
diff --git a/docs/configuration/pkg.md b/docs/configuration/pkg.md
new file mode 100644
index 00000000000..cef3beddc34
--- /dev/null
+++ b/docs/configuration/pkg.md
@@ -0,0 +1,63 @@
+The top-level [pkg](configuration.md#Configuration-pkg) key contains set of options instructing electron-builder on how it should build [PKG](https://goo.gl/yVvgF6) (macOS installer component package).
+
+
+
+
+
scripts = build/pkg-scripts String | “undefined” - The scripts directory, relative to build (build resources directory). The scripts can be in any language so long as the files are marked executable and have the appropriate shebang indicating the path to the interpreter. Scripts are required to be executable (chmod +x file). See: Scripting in installer packages.
+
+
+
installLocation = /Applications String | “undefined” - The install location. Do not use it to create per-user package. Mostly never you will need to change this option. /Applications would install it as expected into /Applications if the local system domain is chosen, or into $HOME/Applications if the home installation is chosen.
+
+
+
allowAnywhere = true Boolean | “undefined” - Whether can be installed at the root of any volume, including non-system volumes. Otherwise, it cannot be installed at the root of a volume.
allowCurrentUserHome = true Boolean | “undefined” - Whether can be installed into the current user’s home directory. A home directory installation is done as the current user (not as root), and it cannot write outside of the home directory. If the product cannot be installed in the user’s home directory and be not completely functional from user’s home directory.
allowRootDirectory = true Boolean | “undefined” - Whether can be installed into the root directory. Should usually be true unless the product can be installed only to the user’s home directory.
identity String | “undefined” - The name of certificate to use when signing. Consider using environment variables CSC_LINK or CSC_NAME instead of specifying this option.
+
+
+
license String | “undefined” - The path to EULA license file. Defaults to license.txt or eula.txt (or uppercase variants). In addition to txt, rtfandhtmlsupported (don't forget to usetarget="_blank"` for links).
+
+
+
backgroundPkgBackgroundOptions | “undefined” - Options for the background image for the installer.
+
+
+
welcome String | “undefined” - The path to the welcome file. This may be used to customize the text on the Introduction page of the installer.
+
+
+
mustClose Array<String> | “undefined” - Identifies applications that must be closed before the package is installed.\n\nCorresponds to must-close
+
+
+
conclusion String | “undefined” - The path to the conclusion file. This may be used to customize the text on the final “Summary” page of the installer.
+
+
+
isRelocatable = true Boolean | “undefined” - Install bundle over previous version if moved by user?
+
+
+
isVersionChecked = true Boolean | “undefined” - Don’t install bundle if newer version on disk?
overwriteAction = upgrade “upgrade” | “update” | “undefined” - Specifies how an existing version of the bundle on disk should be handled when the version in the package is installed.
+
If you specify upgrade, the bundle in the package atomi-cally replaces any version on disk; this has the effect of deleting old paths that no longer exist in the new version of the bundle.
+
If you specify update, the bundle in the package overwrites the version on disk, and any files not contained in the package will be left intact; this is appropriate when you are delivering an update-only package.
+
Another effect of update is that the package bundle will not be installed at all if there is not already a version on disk; this allows a package to deliver an update for an app that the user might have deleted.
+
+
diff --git a/docs/configuration/publish.md b/docs/configuration/publish.md
new file mode 100644
index 00000000000..588e4188179
--- /dev/null
+++ b/docs/configuration/publish.md
@@ -0,0 +1,242 @@
+The [publish](configuration.md#Configuration-publish) key contains a set of options instructing electron-builder on how it should publish artifacts and build update info files for [auto update](../auto-update.md).
+
+`String | Object | Array