{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false,
  "definitions": {
    "AllPublishOptions": {
      "anyOf": [
        {
          "$ref": "#/definitions/GithubOptions"
        },
        {
          "$ref": "#/definitions/GitlabOptions"
        },
        {
          "$ref": "#/definitions/S3Options"
        },
        {
          "$ref": "#/definitions/SpacesOptions"
        },
        {
          "$ref": "#/definitions/R2Options"
        },
        {
          "$ref": "#/definitions/GenericServerOptions"
        },
        {
          "$ref": "#/definitions/CustomPublishOptions"
        },
        {
          "$ref": "#/definitions/KeygenOptions"
        },
        {
          "$ref": "#/definitions/SnapStoreOptions"
        },
        {
          "$ref": "#/definitions/BitbucketOptions"
        },
        {
          "type": "string"
        }
      ]
    },
    "AppImageOptions": {
      "additionalProperties": false,
      "properties": {
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template).",
          "type": [
            "null",
            "string"
          ]
        },
        "category": {
          "description": "The [application category](https://specifications.freedesktop.org/menu-spec/latest/apa.html#main-category-registry).",
          "type": [
            "null",
            "string"
          ]
        },
        "compression": {
          "anyOf": [
            {
              "enum": [
                "gzip",
                "xz",
                "zstd"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "The compression algorithm passed to the AppImage build tool.\n\n**FUSE2 toolset (`\"0.0.0\"` or unset):** only `\"xz\"` and `\"gzip\"` are forwarded\nto mksquashfs (`-comp <value>`); `\"xz\"` additionally passes `-Xdict-size 100% -b 1048576`.\n`\"zstd\"`, `null`, and unset fall through to the root-level `compression` option:\n- `\"maximum\"` → `\"xz\"`\n- anything else → flag omitted (mksquashfs defaults to gzip)\n\n**Static-runtime toolsets (`>= 1.0.0`):** `\"gzip\"` and `\"zstd\"` are forwarded\ndirectly. `\"xz\"` is mapped to `\"zstd\"` (nearest supported equivalent). `null`\nor unset falls through to the root-level `compression` option:\n- `\"store\"` → `\"gzip\"`\n- `\"normal\"` / `\"maximum\"` / unset → `\"zstd\"`"
        },
        "description": {
          "description": "As [description](https://www.electron.build/configuration#description) from application package.json, but allows you to specify different for Linux.",
          "type": [
            "null",
            "string"
          ]
        },
        "desktop": {
          "anyOf": [
            {
              "$ref": "#/definitions/LinuxDesktopFile"
            },
            {
              "type": "null"
            }
          ],
          "description": "The [Desktop file](https://developer.gnome.org/documentation/guidelines/maintainer/integrating.html#desktop-files)"
        },
        "executableArgs": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "The executable parameters. Pass to executableName"
        },
        "license": {
          "description": "The path to EULA license file. Defaults to `license.txt` or `eula.txt` (or uppercase variants). Only plain text is supported.",
          "type": [
            "null",
            "string"
          ]
        },
        "mimeTypes": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "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."
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        },
        "synopsis": {
          "description": "The [short description](https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Description).",
          "type": [
            "null",
            "string"
          ]
        }
      },
      "type": "object"
    },
    "AppXOptions": {
      "additionalProperties": false,
      "properties": {
        "addAutoLaunchExtension": {
          "description": "Whether to add auto launch extension. Defaults to `true` if [electron-winstore-auto-launch](https://github.com/felixrieseberg/electron-winstore-auto-launch) in the dependencies.",
          "type": "boolean"
        },
        "applicationId": {
          "description": "The application id. Defaults to `identityName`. This string contains alpha-numeric fields separated by periods. Each field must begin with an ASCII alphabetic character.",
          "type": "string"
        },
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template).",
          "type": [
            "null",
            "string"
          ]
        },
        "backgroundColor": {
          "default": "#464646",
          "description": "The background color of the app tile. See [Visual Elements](https://msdn.microsoft.com/en-us/library/windows/apps/br211471.aspx).",
          "type": [
            "null",
            "string"
          ]
        },
        "capabilities": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "The list of [capabilities](https://learn.microsoft.com/en-us/windows/uwp/packaging/app-capability-declarations) to be added to an `appmanifest.xml`.\nThe `runFullTrust` capability is obligatory for electron apps and will be auto added if not specified here.\nDefaults to `['runFullTrust']` if omitted\nExample:  `['runFullTrust', 'privateNetworkClientServer', 'webcam']`"
        },
        "customExtensionsPath": {
          "description": "Relative path to custom extensions xml to be included in an `appmanifest.xml`.",
          "type": "string"
        },
        "customManifestPath": {
          "description": "(Advanced Option) Relative path to custom `appmanifest.xml` (file name doesn't matter, it'll be renamed) located in build resources directory.\nSupports the following template macros:\n\n- ${publisher}\n- ${publisherDisplayName}\n- ${version}\n- ${applicationId}\n- ${identityName}\n- ${executable}\n- ${displayName}\n- ${description}\n- ${backgroundColor}\n- ${logo}\n- ${square150x150Logo}\n- ${square44x44Logo}\n- ${lockScreen}\n- ${defaultTile}\n- ${splashScreen}\n- ${arch}\n- ${resourceLanguages}\n- ${capabilities}\n- ${extensions}\n- ${minVersion}\n- ${maxVersionTested}",
          "type": "string"
        },
        "displayName": {
          "description": "A friendly name that can be displayed to users. Corresponds to [Properties.DisplayName](https://msdn.microsoft.com/en-us/library/windows/apps/br211432.aspx).\nDefaults to the application product name.",
          "type": [
            "null",
            "string"
          ]
        },
        "electronUpdaterAware": {
          "default": false,
          "type": "boolean"
        },
        "identityName": {
          "description": "The name. Corresponds to [Identity.Name](https://msdn.microsoft.com/en-us/library/windows/apps/br211441.aspx). Defaults to the [application name](https://www.electron.build/configuration#metadata).",
          "type": [
            "null",
            "string"
          ]
        },
        "languages": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "The list of [supported languages](https://docs.microsoft.com/en-us/windows/uwp/globalizing/manage-language-and-region#specify-the-supported-languages-in-the-apps-manifest) that will be listed in the Windows Store.\nThe first entry (index 0) will be the default language.\nDefaults to en-US if omitted."
        },
        "makeappxArgs": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ]
        },
        "maxVersionTested": {
          "default": "arch === Arch.arm64 ? \"10.0.16299.0\" : \"10.0.14316.0\"",
          "description": "Set the `MaxVersionTested` field in the appx manifest.xml",
          "type": [
            "null",
            "string"
          ]
        },
        "minVersion": {
          "default": "arch === Arch.arm64 ? \"10.0.16299.0\" : \"10.0.14316.0\"",
          "description": "Set the MinVersion field in the appx manifest.xml",
          "type": [
            "null",
            "string"
          ]
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        },
        "publisher": {
          "description": "The Windows Store publisher. Not used if AppX is build for testing. See [AppX Package Code Signing](#appx-package-code-signing) below.",
          "type": [
            "null",
            "string"
          ]
        },
        "publisherDisplayName": {
          "description": "A friendly name for the publisher that can be displayed to users. Corresponds to [Properties.PublisherDisplayName](https://msdn.microsoft.com/en-us/library/windows/apps/br211460.aspx).\nDefaults to company name from the application metadata.",
          "type": [
            "null",
            "string"
          ]
        },
        "setBuildNumber": {
          "default": false,
          "description": "Whether to set build number. See https://github.com/electron-userland/electron-builder/issues/3875",
          "type": "boolean"
        },
        "showNameOnTiles": {
          "default": false,
          "description": "Whether to overlay the app's name on top of tile images on the Start screen. Defaults to `false`. (https://docs.microsoft.com/en-us/uwp/schemas/appxpackage/uapmanifestschema/element-uap-shownameontiles) in the dependencies.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "ArchType": {
      "enum": [
        "arm64",
        "armv7l",
        "ia32",
        "universal",
        "x64"
      ],
      "type": "string"
    },
    "Architecture": {
      "additionalProperties": false,
      "properties": {
        "build-for": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ],
          "description": "The target architecture for the build"
        },
        "build-on": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ],
          "description": "The architectures to build the snap on"
        }
      },
      "required": [
        "build-on"
      ],
      "type": "object"
    },
    "AsarOptions": {
      "additionalProperties": false,
      "properties": {
        "disableIntegrity": {
          "default": false,
          "description": "Whether to skip computing the ASAR integrity hash.\n\nNormally electron-builder computes and embeds a SHA-256 hash of `app.asar` so that Electron\ncan verify it at startup (when the `embeddedAsarIntegrityValidation` fuse is enabled). Set to\n`true` only for custom Electron forks with encrypted ASAR support where the header is not\nreadable by standard tools.",
          "type": "boolean"
        },
        "disableSanityCheck": {
          "default": false,
          "description": "Whether to skip the ASAR package integrity sanity check.\n\nSet to `true` only when using a custom Electron fork that implements its own encrypted or\nnon-standard ASAR integrity validation that is not compatible with electron-builder's default\ncheck. Standard builds should leave this `false`.",
          "type": "boolean"
        },
        "ordering": {
          "description": "Path to a file containing the order in which files should be packed into the asar archive.\nEach line of the file is a relative path from the app directory. Files listed first are\npacked first, which can improve app startup time by front-loading frequently accessed modules.\nSee the [asar documentation](https://github.com/electron/asar) for details.",
          "type": [
            "null",
            "string"
          ]
        },
        "smartUnpack": {
          "default": true,
          "description": "Whether to automatically unpack executables files.",
          "type": "boolean"
        },
        "unpack": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "A [glob patterns](https://www.electron.build/file-patterns) relative to the [app directory](#directories),\nwhich specifies which files to unpack when creating the asar archive."
        }
      },
      "type": "object"
    },
    "BitbucketOptions": {
      "additionalProperties": false,
      "description": "Bitbucket options.\nhttps://bitbucket.org/\nDefine `BITBUCKET_TOKEN` environment variable.\n\nBitbucket Cloud is [retiring app passwords](https://www.atlassian.com/blog/bitbucket/bitbucket-cloud-transitions-to-api-tokens) in favor of API tokens and access tokens. Authentication is selected by whether a `username` is provided:\n- With `username` — the token is sent via HTTP Basic auth. Use a Bitbucket username + [app password](https://bitbucket.org/account/settings/app-passwords), or an Atlassian account email + [API token](https://support.atlassian.com/bitbucket-cloud/docs/using-api-tokens/).\n- Without `username` — the token is sent as a repository/project/workspace [access token](https://support.atlassian.com/bitbucket-cloud/docs/using-access-tokens/) via Bearer auth.\n\nFor the auto-updater on a private repository, pass the matching header to `autoUpdater.addAuthHeader(...)`:\n```typescript\n// access token (no username)\nautoUpdater.addAuthHeader(`Bearer ${token}`)\n// app password or API token (with username)\nautoUpdater.addAuthHeader(`Basic ${Buffer.from(`${username}:${token}`).toString(\"base64\")}`)\n```",
      "properties": {
        "channel": {
          "default": "latest",
          "description": "The channel.",
          "type": [
            "null",
            "string"
          ]
        },
        "owner": {
          "description": "Repository owner",
          "type": "string"
        },
        "provider": {
          "const": "bitbucket",
          "description": "The provider. Must be `bitbucket`.",
          "type": "string"
        },
        "publishAutoUpdate": {
          "default": true,
          "description": "Whether to publish auto update info files.\n\nAuto update relies only on the first provider in the list (you can specify several publishers).\nThus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.",
          "type": "boolean"
        },
        "publisherName": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ]
        },
        "requestHeaders": {
          "$ref": "#/definitions/OutgoingHttpHeaders",
          "description": "Any custom request headers"
        },
        "slug": {
          "description": "Repository slug/name",
          "type": "string"
        },
        "timeout": {
          "default": 120000,
          "description": "Request timeout in milliseconds. (Default is 2 minutes; O is ignored)",
          "type": [
            "null",
            "number"
          ]
        },
        "token": {
          "description": "The token to support auto-update from private bitbucket repositories. Depending on `username`, this is a Bitbucket [app password](https://bitbucket.org/account/settings/app-passwords), an Atlassian [API token](https://support.atlassian.com/bitbucket-cloud/docs/using-api-tokens/), or a repository/project/workspace [access token](https://support.atlassian.com/bitbucket-cloud/docs/using-access-tokens/).",
          "type": [
            "null",
            "string"
          ]
        },
        "updaterCacheDirName": {
          "type": [
            "null",
            "string"
          ]
        },
        "username": {
          "description": "The user name to support auto-update from private bitbucket repositories. Provide a Bitbucket username (for an app password) or an Atlassian account email (for an API token) to authenticate with HTTP Basic auth. Leave unset to send `token` as a Bearer access token.",
          "type": [
            "null",
            "string"
          ]
        }
      },
      "required": [
        "owner",
        "provider",
        "slug"
      ],
      "type": "object"
    },
    "Concurrency": {
      "additionalProperties": false,
      "description": "Configuration for experimental concurrent builds.",
      "properties": {
        "jobs": {
          "default": 1,
          "description": "Maximum number of platform/architecture builds to run in parallel.\n\nSet to `1` to disable concurrency (sequential builds, the safe default). Higher values\nreduce wall-clock time on multi-platform builds at the cost of increased memory and CPU\nusage. Ensure that your {@link Hooks} and build resources are safe to execute concurrently\nbefore raising this limit.",
          "type": "number"
        }
      },
      "required": [
        "jobs"
      ],
      "type": "object"
    },
    "CustomNsisBinary": {
      "additionalProperties": false,
      "properties": {
        "checksum": {
          "default": "VKMiizYdmNdJOWpRGz4trl4lD++BvYP2irAXpMilheUP0pc93iKlWAoP843Vlraj8YG19CVn0j+dCo/hURz9+Q==",
          "type": [
            "null",
            "string"
          ]
        },
        "debugLogging": {
          "description": "Whether or not to enable NSIS logging for debugging.\nNote: Requires a debug-enabled NSIS build.\nelectron-builder's included `makensis` does not natively support debug-enabled NSIS installers currently, you must supply your own via `customNsisBinary?: CustomNsisBinary`\nIn your custom nsis scripts, you can leverage this functionality via `LogSet` and `LogText`",
          "type": [
            "null",
            "boolean"
          ]
        },
        "url": {
          "default": "https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-3.0.4.1/nsis-3.0.4.1.7z",
          "type": [
            "null",
            "string"
          ]
        },
        "version": {
          "default": "3.0.4.1",
          "type": [
            "null",
            "string"
          ]
        }
      },
      "required": [
        "url"
      ],
      "type": "object"
    },
    "CustomNsisResources": {
      "additionalProperties": false,
      "properties": {
        "checksum": {
          "default": "Dqd6g+2buwwvoG1Vyf6BHR1b+25QMmPcwZx40atOT57gH27rkjOei1L0JTldxZu4NFoEmW4kJgZ3DlSWVON3+Q==",
          "type": "string"
        },
        "url": {
          "default": "https://github.com/electron-userland/electron-builder-binaries/releases/download/nsis-resources-3.4.1/nsis-resources-3.4.1.7z",
          "type": "string"
        },
        "version": {
          "default": "3.4.1",
          "type": "string"
        }
      },
      "required": [
        "checksum",
        "url",
        "version"
      ],
      "type": "object"
    },
    "CustomPublishOptions": {
      "additionalProperties": {},
      "properties": {
        "provider": {
          "const": "custom",
          "description": "The provider. Must be `custom`.",
          "type": "string"
        },
        "publishAutoUpdate": {
          "default": true,
          "description": "Whether to publish auto update info files.\n\nAuto update relies only on the first provider in the list (you can specify several publishers).\nThus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.",
          "type": "boolean"
        },
        "publisherName": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ]
        },
        "requestHeaders": {
          "$ref": "#/definitions/OutgoingHttpHeaders",
          "description": "Any custom request headers"
        },
        "timeout": {
          "default": 120000,
          "description": "Request timeout in milliseconds. (Default is 2 minutes; O is ignored)",
          "type": [
            "null",
            "number"
          ]
        },
        "updateProvider": {
          "description": "The Provider to provide UpdateInfo regarding available updates.  Required\nto use custom providers with electron-updater.",
          "typeof": "function"
        },
        "updaterCacheDirName": {
          "type": [
            "null",
            "string"
          ]
        }
      },
      "required": [
        "provider"
      ],
      "type": "object"
    },
    "DebOptions": {
      "additionalProperties": false,
      "properties": {
        "afterInstall": {
          "description": "File path to script to be passed to FPM for `--after-install` arg.",
          "type": [
            "null",
            "string"
          ]
        },
        "afterRemove": {
          "description": "File path to script to be passed to FPM for `--after-remove` arg.",
          "type": [
            "null",
            "string"
          ]
        },
        "appArmorProfile": {
          "description": "File path to custom AppArmor profile (Ubuntu 24+)",
          "type": [
            "null",
            "string"
          ]
        },
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template).",
          "type": [
            "null",
            "string"
          ]
        },
        "category": {
          "description": "The [application category](https://specifications.freedesktop.org/menu-spec/latest/apa.html#main-category-registry).",
          "type": [
            "null",
            "string"
          ]
        },
        "compression": {
          "anyOf": [
            {
              "enum": [
                "bzip2",
                "gz",
                "xz",
                "zst"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "xz",
          "description": "The compression type passed to fpm. For `deb`, `rpm`, and `pacman` targets prefer the\ntyped per-format interfaces (`DebOptions`, `RpmOptions`, `PacmanOptions`) which narrow\nthis to only the values that fpm actually accepts for that format."
        },
        "depends": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": [
            "libgtk-3-0",
            "libnotify4",
            "libnss3",
            "libxss1",
            "libxtst6",
            "xdg-utils",
            "libatspi2.0-0",
            "libuuid1",
            "libsecret-1-0"
          ],
          "description": "Package dependencies.\nIf need to support Debian, `libappindicator1` should be removed, it is [deprecated in Debian](https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=895037).\nIf need to support KDE, `gconf2` and `gconf-service` should be removed as it's no longer used [by GNOME](https://packages.debian.org/bullseye/gconf2)."
        },
        "description": {
          "description": "As [description](https://www.electron.build/configuration#description) from application package.json, but allows you to specify different for Linux.",
          "type": [
            "null",
            "string"
          ]
        },
        "desktop": {
          "anyOf": [
            {
              "$ref": "#/definitions/LinuxDesktopFile"
            },
            {
              "type": "null"
            }
          ],
          "description": "The [Desktop file](https://developer.gnome.org/documentation/guidelines/maintainer/integrating.html#desktop-files)"
        },
        "executableArgs": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "The executable parameters. Pass to executableName"
        },
        "fpm": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "*Advanced only* The [fpm](https://fpm.readthedocs.io/en/latest/cli-reference.html) options.\n\nExample: `[\"--before-install=build/deb-preinstall.sh\", \"--after-upgrade=build/deb-postinstall.sh\"]`"
        },
        "icon": {
          "type": "string"
        },
        "maintainer": {
          "type": [
            "null",
            "string"
          ]
        },
        "mimeTypes": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "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."
        },
        "packageCategory": {
          "description": "The [package category](https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Section).",
          "type": [
            "null",
            "string"
          ]
        },
        "packageName": {
          "description": "The name of the package.",
          "type": [
            "null",
            "string"
          ]
        },
        "priority": {
          "description": "The [Priority](https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Priority) attribute.",
          "type": [
            "null",
            "string"
          ]
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        },
        "recommends": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": [
            "libappindicator3-1"
          ],
          "description": "The [recommended package dependencies](https://www.debian.org/doc/debian-policy/ch-relationships.html#s-binarydeps)."
        },
        "synopsis": {
          "description": "The [short description](https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Description).",
          "type": [
            "null",
            "string"
          ]
        },
        "vendor": {
          "type": [
            "null",
            "string"
          ]
        }
      },
      "type": "object"
    },
    "DmgContent": {
      "additionalProperties": false,
      "properties": {
        "name": {
          "description": "The name of the file within the DMG. Defaults to basename of `path`.",
          "type": "string"
        },
        "path": {
          "description": "The path of the file within the DMG.",
          "type": "string"
        },
        "type": {
          "enum": [
            "dir",
            "file",
            "link"
          ],
          "type": "string"
        },
        "x": {
          "description": "The device-independent pixel offset from the left of the window to the **center** of the icon.",
          "type": "number"
        },
        "y": {
          "description": "The device-independent pixel offset from the top of the window to the **center** of the icon.",
          "type": "number"
        }
      },
      "required": [
        "x",
        "y"
      ],
      "type": "object"
    },
    "DmgOptions": {
      "additionalProperties": false,
      "properties": {
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template).",
          "type": [
            "null",
            "string"
          ]
        },
        "background": {
          "description": "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.\nIf background is not specified, use `window.size`. Default locations expected background size to be 540x380.",
          "type": [
            "null",
            "string"
          ]
        },
        "backgroundColor": {
          "default": "#ffffff",
          "description": "The background color (accepts css colors). Used when no background image is set.",
          "type": [
            "null",
            "string"
          ]
        },
        "badgeIcon": {
          "description": "The path to DMG icon (badge icon), which will be shown when mounted, relative to the [build resources](https://www.electron.build/contents#extraresources) or to the project directory.",
          "type": [
            "null",
            "string"
          ]
        },
        "contents": {
          "description": "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.",
          "items": {
            "$ref": "#/definitions/DmgContent"
          },
          "type": "array"
        },
        "filesystem": {
          "anyOf": [
            {
              "enum": [
                "APFS",
                "HFS+"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "APFS",
          "description": "The filesystem for the DMG volume (e.g. `\"APFS\"` or `\"HFS+\"`)\nAs of v27 this defaults to APFS. Set it explicitly to `\"HFS+\"` if you need compatibility with older macOS versions (pre-10.13 High Sierra cannot mount APFS volumes)."
        },
        "format": {
          "default": "UDZO",
          "description": "The disk image format. `ULFO` (lzfse-compressed image (OS X 10.11+ only)). `ULMO` (lzma-compressed image (macOS 10.15+ only)).",
          "enum": [
            "UDBZ",
            "UDCO",
            "UDRO",
            "UDRW",
            "UDZO",
            "ULFO",
            "ULMO"
          ],
          "type": "string"
        },
        "icon": {
          "description": "The path to DMG icon (volume icon), which will be shown when mounted, relative to the [build resources](https://www.electron.build/contents#extraresources) or to the project directory.\nDefaults to the application icon (`build/icon.icns`).",
          "type": [
            "null",
            "string"
          ]
        },
        "iconSize": {
          "default": 80,
          "description": "The size of all the icons inside the DMG.",
          "type": [
            "null",
            "number"
          ]
        },
        "iconTextSize": {
          "default": 12,
          "description": "The size of all the icon texts inside the DMG.",
          "type": [
            "null",
            "number"
          ]
        },
        "internetEnabled": {
          "default": false,
          "description": "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).",
          "type": "boolean"
        },
        "license": {
          "anyOf": [
            {
              "$ref": "#/definitions/Record<string,string>"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "License agreement to display when the DMG is mounted.\n\nAccepts a single file path (`.rtf`, `.txt`, or `.html`) used as the English/default license,\nor a language-code → file-path map for multi-language builds.\n\nWhen set, this takes precedence over the file-naming convention\n(`license_en.txt`, etc. in the build resources directory).\nPaths are resolved relative to the build resources directory or project root."
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        },
        "shrink": {
          "default": true,
          "description": "Whether to shrink the DMG filesystem to the minimum size after copying files.\nSet to `false` to preserve the explicit `size` you specified.",
          "type": "boolean"
        },
        "sign": {
          "default": false,
          "description": "Whether to sign the DMG or not. Signing is not required and will lead to unwanted errors in combination with notarization requirements.",
          "type": "boolean"
        },
        "size": {
          "description": "The initial size of the DMG filesystem. Accepts the same syntax as the `-size` argument to `hdiutil`, e.g. `\"150m\"`, `\"4g\"`.\nIf not specified, the size is calculated automatically.\nSet this explicitly for large apps or apps with sparse files to avoid \"No space left on device\" errors.",
          "type": [
            "null",
            "string"
          ]
        },
        "title": {
          "default": "${productName} ${version}",
          "description": "The title of the produced DMG, which will be shown when mounted (volume name).\n\nMacro `${productName}`, `${version}` and `${name}` are supported.",
          "type": [
            "null",
            "string"
          ]
        },
        "window": {
          "$ref": "#/definitions/DmgWindow",
          "description": "The DMG window position and size. With y co-ordinates running from bottom to top.\n\nThe 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.\nIt is not to be possible to position the window relative to the [top left](https://github.com/electron-userland/electron-builder/issues/3990#issuecomment-512960957) or relative to the center of the user’s screen."
        },
        "writeUpdateInfo": {
          "default": true,
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "DmgWindow": {
      "additionalProperties": false,
      "properties": {
        "height": {
          "description": "The height. Defaults to background image height or 380.",
          "type": "number"
        },
        "width": {
          "description": "The width. Defaults to background image width or 540.",
          "type": "number"
        },
        "x": {
          "default": 400,
          "description": "The X position relative to left of the screen.",
          "type": "number"
        },
        "y": {
          "default": 100,
          "description": "The Y position relative to bottom of the screen.",
          "type": "number"
        }
      },
      "type": "object"
    },
    "ElectronBrandingOptions": {
      "additionalProperties": false,
      "description": "Electron distributables branding options.",
      "properties": {
        "productName": {
          "type": "string"
        },
        "projectName": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "ElectronGetOptions": {
      "additionalProperties": false,
      "properties": {
        "checksums": {
          "$ref": "#/definitions/Record<string,string>",
          "description": "Provides checksums for the artifact as strings.\nCan be used if you already know the checksums of the Electron artifact\nyou are downloading and want to skip the checksum file download\nwithout skipping the checksum validation.\n\nThis should be an object whose keys are the file names of the artifacts and\nthe values are their respective SHA256 checksums."
        },
        "mirrorOptions": {
          "type": "object",
          "additionalProperties": false,
          "description": "Mirror options passed directly to @electron/get. Omits customDir, customFilename, and customVersion which are controlled by electron-builder.",
          "properties": {
            "mirror": {
              "type": "string",
              "description": "The base mirror URL for downloading Electron artifacts."
            },
            "nightlyMirror": {
              "type": "string",
              "description": "The mirror URL to use for nightly Electron builds."
            },
            "resolveAssetURL": {
              "type": "string",
              "description": "A custom function (serialised) to resolve the full asset URL."
            }
          }
        },
        "unsafelyDisableChecksums": {
          "description": "When set to `true`, disables checking that the artifact download completed successfully\nwith the correct payload.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "ElectronSignOptions": {
      "additionalProperties": false,
      "description": "Signing options passed to `@electron/osx-sign`. Electron-builder owns the fields it must control\nitself — `app`, `keychain`, `platform`, `version`, `optionsForFile`, and `type` (derived from the\nbuild flavor: `mas-dev` → `development`, otherwise `distribution`) — and forwards everything else.\n\nAdditionally exposes a small set of per-file convenience fields that electron-builder maps\ninternally through `optionsForFile`.",
      "properties": {
        "additionalArguments": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Extra arguments passed to each `codesign` invocation."
        },
        "batchCodesignCalls": {
          "description": "Combine all files with identical CLI arguments in a single `codesign` call instead of running\n`codesign` once for each of those files. This minimizes the number of child processes that need\nto be spawned and reduces the time it takes to sign all files.",
          "type": "boolean"
        },
        "binaries": {
          "description": "Array of paths to additional binaries that will be signed along with built-ins of Electron.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "entitlements": {
          "description": "Path to the main app entitlements file.\nFalls back to `build/entitlements.mac.plist` if it exists, then to `@electron/osx-sign`'s\nbuilt-in defaults.",
          "type": [
            "null",
            "string"
          ]
        },
        "entitlementsInherit": {
          "description": "Path to child entitlements inherited by embedded frameworks and bundles.\nFalls back to `build/entitlements.mac.inherit.plist` if it exists.",
          "type": [
            "null",
            "string"
          ]
        },
        "entitlementsLoginHelper": {
          "description": "Path to entitlements for the Login Helper.\nRequired when using App Sandbox, because the Login Helper cannot inherit entitlements.\nDefaults to the value of `entitlements`.",
          "type": [
            "null",
            "string"
          ]
        },
        "hardenedRuntime": {
          "description": "Whether to enable [Hardened Runtime](https://developer.apple.com/documentation/security/hardened_runtime).\n\nHardened Runtime is a prerequisite for notarization (mandatory on macOS 10.15+).\nDefaults to `true` for `darwin` builds and `false` for `mas-dev`.",
          "type": "boolean"
        },
        "identity": {
          "description": "The signing identity (certificate name or SHA-1 hash). Applies to both app signing and DMG signing.\nPrefer the environment variables `CSC_LINK` / `CSC_NAME` over hardcoding this value.\n\n- **Not set** (default): electron-builder searches the keychain for a valid certificate.\n- **`null`**: skip signing entirely.\n- **`\"-\"`**: ad-hoc signing (requires disabling library validation — see `hardenedRuntime`).",
          "type": [
            "null",
            "string"
          ]
        },
        "identityValidation": {
          "description": "Flag to enable/disable validation for the signing identity.\nIf enabled, the {@link SignOptions.identityidentity} provided\nwill be validated in the {@link BaseSignOptions.keychainkeychain} specified.",
          "type": "boolean"
        },
        "ignore": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "typeof": "function"
            },
            {
              "type": "string"
            }
          ],
          "description": "Defines files that will be skipped during the code signing process.\nThis property accepts a regex, function or an array of regexes and functions.\nElements of other types are treated as `RegExp`.\n\nFile paths matching a regex or returning a `true` value from a function will be ignored."
        },
        "preAutoEntitlements": {
          "description": "Flag to enable/disable entitlements automation tasks necessary for code signing most Electron apps.\n* Adds [`com.apple.security.application-groups`](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_application-groups) to the entitlements file\n* Fills in the `ElectronTeamID` property in `Info.plist` with the provisioning profile's Team Identifier or by parsing the identity name.",
          "type": "boolean"
        },
        "preEmbedProvisioningProfile": {
          "description": "Flag to enable/disable the embedding of a provisioning profile into the app's `Contents` folder.\nWill use the profile from {@link OnlySignOptions.provisioningProfile} if provided. Otherwise, it\nsearches for a `.provisionprofile` file in the current working directory.",
          "type": "boolean"
        },
        "provisioningProfile": {
          "description": "Path to a provisioning profile, which can be used to grant restricted entitlements to your app.\n\nSee [Apple Documentation](https://developer.apple.com/documentation/technotes/tn3125-inside-code-signing-provisioning-profiles) for more details.",
          "type": "string"
        },
        "requirements": {
          "description": "Path to a [requirements file](https://developer.apple.com/library/mac/documentation/Security/Conceptual/CodeSigningGuide/RequirementLang/RequirementLang.html).\nNot applicable for MAS.",
          "type": [
            "null",
            "string"
          ]
        },
        "strictVerify": {
          "description": "Flag to enable/disable the `--strict` flag when verifying the signed application bundle.\nAlso supports string values to specify which strict restrictions to use, see codesign man page for supported values.",
          "type": [
            "string",
            "boolean"
          ]
        },
        "timestamp": {
          "description": "URL of the timestamp authority server. Passed per-file to `codesign --timestamp=<url>`.",
          "type": [
            "null",
            "string"
          ]
        }
      },
      "type": "object"
    },
    "ElectronUniversalOptions": {
      "additionalProperties": false,
      "description": "Options forwarded to `@electron/universal`'s `makeUniversalApp`.\nElectron-builder fills in the app paths and `force`; everything else is configurable here\nand auto-tracks upstream additions to `MakeUniversalOpts`.",
      "properties": {
        "infoPlistsToIgnore": {
          "description": "A {@link https://github.com/isaacs/minimatch?tab=readme-ov-file#features minimatch} pattern of `Info.plist`\npaths that should not receive an injected `ElectronAsarIntegrity` value.\n\nUse this if your application contains another bundle that's already signed.",
          "type": "string"
        },
        "mergeASARs": {
          "default": true,
          "description": "Whether to merge x64 and arm64 ASARs into one.",
          "type": "boolean"
        },
        "singleArchFiles": {
          "description": "If {@link MakeUniversalOpts.mergeASARs} is enabled, this property provides a\n{@link https://github.com/isaacs/minimatch?tab=readme-ov-file#features minimatch}\npattern of paths that are allowed to be present in one of the ASAR files, but not in the other.",
          "type": "string"
        },
        "x64ArchFiles": {
          "description": "A {@link https://github.com/isaacs/minimatch?tab=readme-ov-file#features minimatch}\npattern of binaries that are expected to be the same x64 binary in both\n\nUse this if your application contains binaries that have already been merged into a universal file\nusing the `lipo` tool.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "FileAssociation": {
      "additionalProperties": false,
      "description": "File associations.\n\nmacOS (corresponds to [CFBundleDocumentTypes](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-101685)), NSIS, and MSI only.\n\nOn Windows (NSIS) works only if [nsis.perMachine](https://www.electron.build/nsis) is set to `true`.",
      "properties": {
        "description": {
          "description": "*windows-only.* The description.",
          "type": [
            "null",
            "string"
          ]
        },
        "ext": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ],
          "description": "The extension (minus the leading period). e.g. `png`."
        },
        "icon": {
          "description": "The path to icon (`.icns` for MacOS and `.ico` for Windows), relative to `build` (build resources directory). Defaults to `${firstExt}.icns`/`${firstExt}.ico` (if several extensions specified, first is used) or to application icon.\n\nNot supported on Linux, file issue if need (default icon will be `x-office-document`). Not supported on MSI.",
          "type": [
            "null",
            "string"
          ]
        },
        "isPackage": {
          "description": "*macOS-only* Whether the document is distributed as a bundle. If set to true, the bundle directory is treated as a file. Corresponds to `LSTypeIsPackage`.",
          "type": "boolean"
        },
        "mimeType": {
          "description": "*linux-only.* The mime-type.",
          "type": [
            "null",
            "string"
          ]
        },
        "name": {
          "description": "The name. e.g. `PNG`. Defaults to `ext`.",
          "type": [
            "null",
            "string"
          ]
        },
        "rank": {
          "default": "Default",
          "description": "*macOS-only* The app’s rank with respect to the type. The value can be `Owner`, `Default`, `Alternate`, or `None`. Corresponds to `LSHandlerRank`.",
          "type": "string"
        },
        "role": {
          "default": "Editor",
          "description": "*macOS-only* The app’s role with respect to the type. The value can be `Editor`, `Viewer`, `Shell`, or `None`. Corresponds to `CFBundleTypeRole`.",
          "type": "string"
        }
      },
      "required": [
        "ext"
      ],
      "type": "object"
    },
    "FileSet": {
      "additionalProperties": false,
      "properties": {
        "filter": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ],
          "description": "The [glob patterns](https://www.electron.build/file-patterns). Defaults to \"**\\/*\""
        },
        "from": {
          "description": "The source path relative to and defaults to:\n\n - the [app directory](https://www.electron.build/configuration#directories) for `files`,\n - the project directory for `extraResources` and `extraFiles`.\nIf you don't use two-package.json structure and don't set custom app directory, app directory equals to project directory.",
          "type": "string"
        },
        "to": {
          "description": "The destination path relative to and defaults to:\n\n - the asar archive root for `files`,\n - the app's content directory for `extraFiles`,\n - the app's resource directory for `extraResources`.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "FlatpakOptions": {
      "additionalProperties": false,
      "properties": {
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template).",
          "type": [
            "null",
            "string"
          ]
        },
        "base": {
          "description": "Start with the files from the specified application. This can be used to create applications that extend another application.\nDefaults to [org.electronjs.Electron2.BaseApp](https://github.com/flathub/org.electronjs.Electron2.BaseApp).\n\nSee [flatpak manifest documentation](https://docs.flatpak.org/en/latest/flatpak-builder-command-reference.html#flatpak-manifest).",
          "type": "string"
        },
        "baseVersion": {
          "description": "Use this specific version of the application specified in base. Defaults to `20.08`.\n\nSee [flatpak manifest documentation](https://docs.flatpak.org/en/latest/flatpak-builder-command-reference.html#flatpak-manifest).",
          "type": "string"
        },
        "branch": {
          "description": "The branch to use when exporting the application. Defaults to `master`.\n\nSee [flatpak manifest documentation](https://docs.flatpak.org/en/latest/flatpak-builder-command-reference.html#flatpak-manifest).",
          "type": "string"
        },
        "category": {
          "description": "The [application category](https://specifications.freedesktop.org/menu-spec/latest/apa.html#main-category-registry).",
          "type": [
            "null",
            "string"
          ]
        },
        "description": {
          "description": "As [description](https://www.electron.build/configuration#description) from application package.json, but allows you to specify different for Linux.",
          "type": [
            "null",
            "string"
          ]
        },
        "desktop": {
          "anyOf": [
            {
              "$ref": "#/definitions/LinuxDesktopFile"
            },
            {
              "type": "null"
            }
          ],
          "description": "The [Desktop file](https://developer.gnome.org/documentation/guidelines/maintainer/integrating.html#desktop-files)"
        },
        "executableArgs": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "The executable parameters. Pass to executableName"
        },
        "files": {
          "description": "Files to copy directly into the app. Should be a list of [source, dest] tuples. Source should be a relative/absolute path to a file/directory to copy into the flatpak, and dest should be the path inside the app install prefix (e.g. /share/applications/).\n\nSee [@malept/flatpak-bundler documentation](https://github.com/malept/flatpak-bundler#build-options).",
          "items": {
            "items": [
              {
                "type": "string"
              },
              {
                "type": "string"
              }
            ],
            "maxItems": 2,
            "minItems": 2,
            "type": "array"
          },
          "type": "array"
        },
        "finishArgs": {
          "description": "An array of arguments passed to the flatpak build-finish command. Defaults to:\n```json\n[\n  // Wayland/X11 Rendering\n  \"--socket=wayland\",\n  \"--socket=x11\",\n  \"--share=ipc\",\n  // Open GL\n  \"--device=dri\",\n  // Audio output\n  \"--socket=pulseaudio\",\n  // Read/write home directory access\n  \"--filesystem=home\",\n  // Allow communication with network\n  \"--share=network\",\n  // System notifications with libnotify\n  \"--talk-name=org.freedesktop.Notifications\",\n]\n```\n\nSee [flatpak manifest documentation](https://docs.flatpak.org/en/latest/flatpak-builder-command-reference.html#flatpak-manifest).",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "license": {
          "description": "The path to EULA license file. Defaults to `license.txt` or `eula.txt` (or uppercase variants). Only plain text is supported.",
          "type": [
            "null",
            "string"
          ]
        },
        "mimeTypes": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "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."
        },
        "modules": {
          "description": "An array of objects specifying the modules to be built in order.\n\nSee [flatpak manifest documentation](https://docs.flatpak.org/en/latest/flatpak-builder-command-reference.html#flatpak-manifest).",
          "items": {},
          "type": "array"
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        },
        "runtime": {
          "description": "The name of the runtime that the application uses. Defaults to `org.freedesktop.Platform`.\n\nSee [flatpak manifest documentation](https://docs.flatpak.org/en/latest/flatpak-builder-command-reference.html#flatpak-manifest).",
          "type": "string"
        },
        "runtimeVersion": {
          "description": "The version of the runtime that the application uses. Defaults to `20.08`.\n\nSee [flatpak manifest documentation](https://docs.flatpak.org/en/latest/flatpak-builder-command-reference.html#flatpak-manifest).",
          "type": "string"
        },
        "sdk": {
          "description": "The name of the development runtime that the application builds with. Defaults to `org.freedesktop.Sdk`.\n\nSee [flatpak manifest documentation](https://docs.flatpak.org/en/latest/flatpak-builder-command-reference.html#flatpak-manifest).",
          "type": "string"
        },
        "symlinks": {
          "description": "Symlinks to create in the app files. Should be a list of [target, location] symlink tuples. Target can be either a relative or absolute path inside the app install prefix, and location should be a absolute path inside the prefix to create the symlink at.\n\nSee [@malept/flatpak-bundler documentation](https://github.com/malept/flatpak-bundler#build-options).",
          "items": {
            "items": [
              {
                "type": "string"
              },
              {
                "type": "string"
              }
            ],
            "maxItems": 2,
            "minItems": 2,
            "type": "array"
          },
          "type": "array"
        },
        "synopsis": {
          "description": "The [short description](https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Description).",
          "type": [
            "null",
            "string"
          ]
        },
        "useWaylandFlags": {
          "description": "Whether to enable the Wayland specific flags (`--enable-features=UseOzonePlatform --ozone-platform=wayland`) in the wrapper script. These flags are only available starting with Electron version 12. Defaults to `false`.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "FuseOptionsV1": {
      "additionalProperties": false,
      "description": "Feature flags (\"fuses\") baked into the Electron binary at build time.\n\nAll options map 1:1 to the flags documented by\n[`@electron/fuses`](https://github.com/electron/fuses) and the upstream\n[Electron fuses guide](https://www.electronjs.org/docs/latest/tutorial/fuses).\n\nelectron-builder flips fuses after packaging and **before** signing so that the final\ncode signature covers the modified binary. On Apple Silicon, the ad-hoc signature is\nre-applied automatically after flipping fuses.",
      "properties": {
        "enableCookieEncryption": {
          "description": "Controls whether the Chromium cookie store is encrypted using OS-level cryptography keys.\n\nWhen enabled, cookies are stored encrypted on disk (the same mechanism Chrome uses).\n**This is a one-way transition**: existing unencrypted cookies are re-encrypted on write, but\ndisabling the fuse afterwards will leave the cookie database unreadable.\n\nMost production apps can safely enable this fuse.",
          "type": "boolean"
        },
        "enableEmbeddedAsarIntegrityValidation": {
          "description": "Enables ASAR integrity validation — Electron verifies the embedded SHA-256 hash of\n`app.asar` before loading it.\n\nPlatform support:\n- macOS: Electron ≥ 16.0.0\n- Windows: Electron ≥ 30.0.0\n\nFor this fuse to be meaningful, `asar.disableIntegrity` must **not** be\n`true` (otherwise the hash is not embedded).",
          "type": "boolean"
        },
        "enableNodeCliInspectArguments": {
          "description": "Controls whether the `--inspect`, `--inspect-brk`, and related Node.js debugger flags are\nhonoured.\n\nWhen disabled, `SIGUSR1` no longer opens the V8 inspector in the main process either.\nMost production apps can safely disable this fuse.",
          "type": "boolean"
        },
        "enableNodeOptionsEnvironmentVariable": {
          "description": "Controls whether the [`NODE_OPTIONS`](https://nodejs.org/api/cli.html#node_optionsoptions)\nand `NODE_EXTRA_CA_CERTS` environment variables are respected.\n\n`NODE_OPTIONS` allows injecting arbitrary Node.js runtime flags (e.g. `--require`) and is\nrarely needed in production. Most apps can safely disable this fuse.",
          "type": "boolean"
        },
        "grantFileProtocolExtraPrivileges": {
          "description": "Controls whether pages loaded from the `file://` protocol receive elevated privileges\nbeyond what a standard web browser would grant.\n\nThese extra privileges include `fetch` to other `file://` URLs, service workers, and\nuniversal frame access for child frames also on `file://`. This behaviour pre-dates modern\nElectron security best practices.\n\nDisable this fuse if your app does not load content directly from `file://` (i.e. you use\na [custom protocol](https://www.electronjs.org/docs/latest/tutorial/security#18-avoid-usage-of-the-file-protocol-and-prefer-usage-of-custom-protocols)).",
          "type": "boolean"
        },
        "loadBrowserProcessSpecificV8Snapshot": {
          "description": "When enabled, the browser (main) process uses a separate V8 snapshot file\n(`browser_v8_context_snapshot.bin`) instead of the shared one.\n\nThis is only useful when you ship a custom V8 snapshot for the main process that differs\nfrom the renderer snapshot. Standard apps do not need this.",
          "type": "boolean"
        },
        "onlyLoadAppFromAsar": {
          "description": "When enabled, Electron searches for the app exclusively in `app.asar`, skipping the `app`\ndirectory and `default_app.asar` fallbacks.\n\nCombined with `enableEmbeddedAsarIntegrityValidation`, this makes it impossible to side-load\nunverified code by replacing `app.asar` with an unarchived `app/` directory.",
          "type": "boolean"
        },
        "resetAdHocDarwinSignature": {
          "description": "Re-applies the ad-hoc codesignature on macOS after fuses are flipped.\n\nelectron-builder already re-signs the app after flipping fuses, so this flag is\ngenerally not needed and exists only as a compatibility shim for edge cases.",
          "type": "boolean"
        },
        "runAsNode": {
          "description": "Controls whether the `ELECTRON_RUN_AS_NODE` environment variable is respected.\n\nWhen `true` (the Electron default), setting `ELECTRON_RUN_AS_NODE=1` in the environment\nmakes Electron behave like a plain Node.js process, bypassing the app entirely. Disable\nthis fuse in production apps to prevent that escape path.\n\n**Note:** Disabling this fuse also breaks `process.fork()` in the main process because\nit relies on `ELECTRON_RUN_AS_NODE` internally. Use\n[Utility Processes](https://www.electronjs.org/docs/latest/api/utility-process) as a\nreplacement.",
          "type": "boolean"
        },
        "wasmTrapHandlers": {
          "description": "Enables V8 signal-based trap handlers for out-of-bounds WebAssembly memory accesses.\n\nWhen enabled, Electron uses OS signals (e.g. `SIGSEGV` on Linux/macOS) to catch Wasm\nOOB accesses at the hardware level rather than inserting explicit bounds checks in JIT'd\ncode. This improves Wasm performance and is enabled by default in Electron.\n\nDisable only if the host environment restricts signal handlers (e.g. certain sandboxing\nconfigurations) and you observe crashes in Wasm-heavy workloads.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "GenericServerOptions": {
      "additionalProperties": false,
      "description": "Generic (any HTTP(S) server) options.\nIn all publish options [File Macros](https://www.electron.build/file-patterns#file-macros) are supported.",
      "properties": {
        "channel": {
          "default": "latest",
          "description": "The channel.",
          "type": [
            "null",
            "string"
          ]
        },
        "provider": {
          "const": "generic",
          "description": "The provider. Must be `generic`.",
          "type": "string"
        },
        "publishAutoUpdate": {
          "default": true,
          "description": "Whether to publish auto update info files.\n\nAuto update relies only on the first provider in the list (you can specify several publishers).\nThus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.",
          "type": "boolean"
        },
        "publisherName": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ]
        },
        "requestHeaders": {
          "$ref": "#/definitions/OutgoingHttpHeaders",
          "description": "Any custom request headers"
        },
        "timeout": {
          "default": 120000,
          "description": "Request timeout in milliseconds. (Default is 2 minutes; O is ignored)",
          "type": [
            "null",
            "number"
          ]
        },
        "updaterCacheDirName": {
          "type": [
            "null",
            "string"
          ]
        },
        "url": {
          "description": "The base url. e.g. `https://bucket_name.s3.amazonaws.com`.",
          "type": "string"
        },
        "useMultipleRangeRequest": {
          "description": "Whether to use multiple range requests for differential update. Defaults to `true` if `url` doesn't contain `s3.amazonaws.com`.",
          "type": "boolean"
        }
      },
      "required": [
        "provider",
        "url"
      ],
      "type": "object"
    },
    "GithubOptions": {
      "additionalProperties": false,
      "description": "[GitHub](https://help.github.com/articles/about-releases/) options.\n\nGitHub [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.\nDefine `GH_TOKEN` environment variable.",
      "properties": {
        "channel": {
          "default": "latest",
          "description": "The channel.",
          "type": [
            "null",
            "string"
          ]
        },
        "host": {
          "default": "github.com",
          "description": "The host (including the port if need).",
          "type": [
            "null",
            "string"
          ]
        },
        "owner": {
          "description": "The owner.",
          "type": [
            "null",
            "string"
          ]
        },
        "private": {
          "description": "Whether to use private github auto-update provider if `GH_TOKEN` environment variable is defined. See [Private GitHub Update Repo](https://www.electron.build/auto-update#private-github-update-repo).",
          "type": [
            "null",
            "boolean"
          ]
        },
        "protocol": {
          "anyOf": [
            {
              "enum": [
                "http",
                "https"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "https",
          "description": "The protocol. GitHub Publisher supports only `https`."
        },
        "provider": {
          "const": "github",
          "description": "The provider. Must be `github`.",
          "type": "string"
        },
        "publishAutoUpdate": {
          "default": true,
          "description": "Whether to publish auto update info files.\n\nAuto update relies only on the first provider in the list (you can specify several publishers).\nThus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.",
          "type": "boolean"
        },
        "publisherName": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ]
        },
        "releaseType": {
          "anyOf": [
            {
              "enum": [
                "draft",
                "prerelease",
                "release"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "draft",
          "description": "The type of release. By default `draft` release will be created.\n\nAlso 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`."
        },
        "repo": {
          "description": "The repository name. [Detected automatically](#github-repository-and-bintray-package).",
          "type": [
            "null",
            "string"
          ]
        },
        "requestHeaders": {
          "$ref": "#/definitions/OutgoingHttpHeaders",
          "description": "Any custom request headers"
        },
        "tagNamePrefix": {
          "default": "v",
          "description": "If defined, sets the prefix of the tag name that comes before the semver number.\ne.g. \"v\" in \"v1.2.3\" or \"test\" of \"test1.2.3\".",
          "type": "string"
        },
        "timeout": {
          "default": 120000,
          "description": "Request timeout in milliseconds. (Default is 2 minutes; O is ignored)",
          "type": [
            "null",
            "number"
          ]
        },
        "token": {
          "description": "The access token to support auto-update from private github repositories. Never specify it in the configuration files. Only for [setFeedURL](https://www.electron.build/auto-update#appupdatersetfeedurloptions).",
          "type": [
            "null",
            "string"
          ]
        },
        "updaterCacheDirName": {
          "type": [
            "null",
            "string"
          ]
        }
      },
      "required": [
        "provider"
      ],
      "type": "object"
    },
    "GitlabOptions": {
      "additionalProperties": false,
      "description": "[GitLab](https://docs.gitlab.com/ee/user/project/releases/) options.\n\nGitLab [personal access token](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html) is required for private repositories. You can generate one by going to your GitLab profile settings.\nDefine `GITLAB_TOKEN` environment variable.",
      "properties": {
        "channel": {
          "default": "latest",
          "description": "The channel.",
          "type": [
            "null",
            "string"
          ]
        },
        "host": {
          "default": "gitlab.com",
          "description": "The GitLab host (including the port if need).",
          "type": [
            "null",
            "string"
          ]
        },
        "projectId": {
          "description": "The GitLab project ID or path (e.g., \"12345678\" or \"namespace/project\").",
          "type": [
            "null",
            "string",
            "number"
          ]
        },
        "provider": {
          "const": "gitlab",
          "description": "The provider. Must be `gitlab`.",
          "type": "string"
        },
        "publishAutoUpdate": {
          "default": true,
          "description": "Whether to publish auto update info files.\n\nAuto update relies only on the first provider in the list (you can specify several publishers).\nThus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.",
          "type": "boolean"
        },
        "publisherName": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ]
        },
        "requestHeaders": {
          "$ref": "#/definitions/OutgoingHttpHeaders",
          "description": "Any custom request headers"
        },
        "timeout": {
          "default": 120000,
          "description": "Request timeout in milliseconds. (Default is 2 minutes; O is ignored)",
          "type": [
            "null",
            "number"
          ]
        },
        "token": {
          "description": "The access token to support auto-update from private GitLab repositories. Never specify it in the configuration files.",
          "type": [
            "null",
            "string"
          ]
        },
        "updaterCacheDirName": {
          "type": [
            "null",
            "string"
          ]
        },
        "uploadTarget": {
          "anyOf": [
            {
              "enum": [
                "generic_package",
                "project_upload"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "project_upload",
          "description": "Upload target method. Can be \"project_upload\" for GitLab project uploads or \"generic_package\" for GitLab generic packages."
        },
        "vPrefixedTagName": {
          "default": true,
          "description": "Whether to use `v`-prefixed tag name.",
          "type": "boolean"
        }
      },
      "required": [
        "provider"
      ],
      "type": "object"
    },
    "KeygenOptions": {
      "additionalProperties": false,
      "description": "Keygen options.\nhttps://keygen.sh/\nDefine `KEYGEN_TOKEN` environment variable.",
      "properties": {
        "account": {
          "description": "Keygen account's UUID",
          "type": "string"
        },
        "channel": {
          "anyOf": [
            {
              "enum": [
                "alpha",
                "beta",
                "dev",
                "rc",
                "stable"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "stable",
          "description": "The channel."
        },
        "host": {
          "default": "api.keygen.sh",
          "description": "Keygen host for self-hosted instances",
          "type": "string"
        },
        "platform": {
          "description": "The target Platform. Is set programmatically explicitly during publishing.",
          "type": [
            "null",
            "string"
          ]
        },
        "product": {
          "description": "Keygen product's UUID",
          "type": "string"
        },
        "provider": {
          "const": "keygen",
          "description": "The provider. Must be `keygen`.",
          "type": "string"
        },
        "publishAutoUpdate": {
          "default": true,
          "description": "Whether to publish auto update info files.\n\nAuto update relies only on the first provider in the list (you can specify several publishers).\nThus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.",
          "type": "boolean"
        },
        "publisherName": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ]
        },
        "requestHeaders": {
          "$ref": "#/definitions/OutgoingHttpHeaders",
          "description": "Any custom request headers"
        },
        "timeout": {
          "default": 120000,
          "description": "Request timeout in milliseconds. (Default is 2 minutes; O is ignored)",
          "type": [
            "null",
            "number"
          ]
        },
        "updaterCacheDirName": {
          "type": [
            "null",
            "string"
          ]
        }
      },
      "required": [
        "account",
        "product",
        "provider"
      ],
      "type": "object"
    },
    "LinuxConfiguration": {
      "additionalProperties": false,
      "properties": {
        "appId": {
          "default": "com.electron.${name}",
          "description": "The application id. Used as [CFBundleIdentifier](https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-102070) for MacOS and as\n[Application User Model ID](https://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx) for Windows (NSIS target only, Squirrel.Windows not supported). It is strongly recommended that an explicit ID is set.",
          "type": [
            "null",
            "string"
          ]
        },
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template). Defaults to `${productName}-${version}.${ext}` (some target can have other defaults, see corresponding options).",
          "type": [
            "null",
            "string"
          ]
        },
        "asar": {
          "anyOf": [
            {
              "$ref": "#/definitions/AsarOptions"
            },
            {
              "type": [
                "null",
                "boolean"
              ]
            }
          ],
          "default": true,
          "description": "Whether to package the application's source code into an archive, using [Electron's archive format](http://electron.atom.io/docs/tutorial/application-packaging/).\n\nNode modules that must be unpacked will be detected automatically. Use {@link AsarOptions.unpack} to specify additional files to unpack."
        },
        "category": {
          "description": "The [application category](https://specifications.freedesktop.org/menu-spec/latest/apa.html#main-category-registry).",
          "type": [
            "null",
            "string"
          ]
        },
        "compression": {
          "anyOf": [
            {
              "enum": [
                "maximum",
                "normal",
                "store"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "normal",
          "description": "The compression level. If you want to rapidly test build, `store` can reduce build time significantly. `maximum` doesn't lead to noticeable size difference, but increase build time."
        },
        "cscKeyPassword": {
          "type": [
            "null",
            "string"
          ]
        },
        "cscLink": {
          "type": [
            "null",
            "string"
          ]
        },
        "defaultArch": {
          "description": "The default architecture to build for when no `--arch` flag is specified.\nDefaults to the current machine's architecture.",
          "type": "string"
        },
        "description": {
          "description": "As [description](https://www.electron.build/configuration#description) from application package.json, but allows you to specify different for Linux.",
          "type": [
            "null",
            "string"
          ]
        },
        "desktop": {
          "anyOf": [
            {
              "$ref": "#/definitions/LinuxDesktopFile"
            },
            {
              "type": "null"
            }
          ],
          "description": "The [Desktop file](https://developer.gnome.org/documentation/guidelines/maintainer/integrating.html#desktop-files)"
        },
        "detectUpdateChannel": {
          "default": true,
          "description": "Whether to infer update channel from application version pre-release components. e.g. if version `0.12.1-alpha.1`, channel will be set to `alpha`. Otherwise to `latest`.\nThis does *not* apply to github publishing, which will [never auto-detect the update channel](https://github.com/electron-userland/electron-builder/issues/8589).",
          "type": "boolean"
        },
        "electronLanguages": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ],
          "description": "The electron locales to keep. By default, all Electron locales used as-is."
        },
        "electronUpdaterCompatibility": {
          "description": "The [electron-updater compatibility](https://www.electron.build/auto-update#compatibility) semver range.",
          "type": [
            "null",
            "string"
          ]
        },
        "executableArgs": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "The executable parameters. Pass to executableName"
        },
        "executableName": {
          "description": "The executable name. Defaults to `productName`\nNote: Except for Linux, where this would constitute a breaking change in previous behavior and lead to both invalid executable names and Desktop files. Ref comments in: https://github.com/electron-userland/electron-builder/pull/9068",
          "type": [
            "null",
            "string"
          ]
        },
        "extraFiles": {
          "anyOf": [
            {
              "$ref": "#/definitions/FileSet"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/FileSet"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "The same as [extraResources](#extraresources) but copy into the app's content directory (`Contents` for MacOS, root directory for Linux and Windows)."
        },
        "extraResources": {
          "anyOf": [
            {
              "$ref": "#/definitions/FileSet"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/FileSet"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "A [glob patterns](https://www.electron.build/file-patterns) 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).\n\nFile patterns (and support for `from` and `to` fields) the same as for [files](#files)."
        },
        "fileAssociations": {
          "anyOf": [
            {
              "$ref": "#/definitions/FileAssociation"
            },
            {
              "items": {
                "$ref": "#/definitions/FileAssociation"
              },
              "type": "array"
            }
          ],
          "description": "The file associations."
        },
        "files": {
          "anyOf": [
            {
              "$ref": "#/definitions/FileSet"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/FileSet"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "A [glob patterns](https://www.electron.build/file-patterns) relative to the [app directory](https://www.electron.build/configuration#directories), which specifies which files to include when copying files to create the package.\n\nDefaults to:\n```json\n[\n\"**\\/*\",\n\"!**\\/node_modules/*\\/{CHANGELOG.md,README.md,README,readme.md,readme}\",\n\"!**\\/node_modules/*\\/{test,__tests__,tests,powered-test,example,examples}\",\n\"!**\\/node_modules/*.d.ts\",\n\"!**\\/node_modules/.bin\",\n\"!**\\/*.{iml,o,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,xproj}\",\n\"!.editorconfig\",\n\"!**\\/._*\",\n\"!**\\/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,.gitignore,.gitattributes}\",\n\"!**\\/{__pycache__,thumbs.db,.flowconfig,.idea,.vs,.nyc_output}\",\n\"!**\\/{appveyor.yml,.travis.yml,circle.yml}\",\n\"!**\\/{npm-debug.log,yarn.lock,.yarn-integrity,.yarn-metadata.json}\"\n]\n```\n\nDevelopment 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.\n\nDefault 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.\n\nMay be specified in the platform options (e.g. in the [mac](https://www.electron.build/mac)).\n\nYou may also specify custom source and destination directories by using `FileSet` objects instead of simple glob patterns.\n\n```json\n[\n{\n\"from\": \"path/to/source\",\n\"to\": \"path/to/destination\",\n\"filter\": [\"**\\/*\", \"!foo/*.js\"]\n}\n]\n```\n\nYou can use [file macros](https://www.electron.build/file-patterns#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."
        },
        "forceCodeSigning": {
          "default": false,
          "description": "Whether to fail if app will be not code signed.",
          "type": "boolean"
        },
        "generateUpdatesFilesForAllChannels": {
          "default": false,
          "description": "Please see [Building and Releasing using Channels](https://github.com/electron-userland/electron-builder/issues/1182#issuecomment-324947139).",
          "type": "boolean"
        },
        "icon": {
          "description": "The path to icon set directory or one png file, relative to the [build resources](https://www.electron.build/contents#extraresources) or to the project directory. The icon filename must contain the size (e.g. 32x32.png) of the icon.\nBy default will be generated automatically based on the macOS icns file.",
          "type": "string"
        },
        "maintainer": {
          "description": "The maintainer. Defaults to [author](https://www.electron.build/configuration#author).",
          "type": [
            "null",
            "string"
          ]
        },
        "mimeTypes": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "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."
        },
        "packageCategory": {
          "type": [
            "null",
            "string"
          ]
        },
        "protocols": {
          "anyOf": [
            {
              "$ref": "#/definitions/Protocol"
            },
            {
              "items": {
                "$ref": "#/definitions/Protocol"
              },
              "type": "array"
            }
          ],
          "description": "The URL protocol schemes."
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "Publisher configuration. See [Auto Update](https://www.electron.build/publish) for more information."
        },
        "releaseInfo": {
          "$ref": "#/definitions/ReleaseInfo",
          "description": "The release info. Intended for command line usage:\n\n```\n-c.releaseInfo.releaseNotes=\"new features\"\n```"
        },
        "synopsis": {
          "description": "The [short description](https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Description).",
          "type": [
            "null",
            "string"
          ]
        },
        "target": {
          "anyOf": [
            {
              "$ref": "#/definitions/TargetConfiguration"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/TargetConfiguration"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "default": "AppImage",
          "description": "Target package type: list of `AppImage`, `flatpak`, `snap`, `deb`, `rpm`, `freebsd`, `pacman`, `p5p`, `apk`, `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir`.\n\nelectron-builder [docker image](https://www.electron.build/multi-platform-build#docker) can be used to build Linux targets on any platform.\n\nPlease [do not put an AppImage into another archive](https://github.com/probonopd/AppImageKit/wiki/Creating-AppImages#common-mistake) like a .zip or .tar.gz."
        },
        "vendor": {
          "description": "The vendor. Defaults to [author](https://www.electron.build/configuration#author).",
          "type": [
            "null",
            "string"
          ]
        }
      },
      "type": "object"
    },
    "LinuxDesktopFile": {
      "additionalProperties": false,
      "description": "Example Spec: https://specifications.freedesktop.org/desktop-entry-spec/latest/example.html",
      "properties": {
        "desktopActions": {
          "anyOf": [
            {
              "typeof": "function"
            },
            {
              "type": "null"
            }
          ],
          "description": "`[Desktop Actions <ActionName>]` metadata entries (name to value).\n\nConfig Example:\n```js\ndesktopActions: {\n   NewWindow: {\n      Name: 'New Window',\n      Exec: 'app --new-window',\n   }\n}\n```"
        },
        "entry": {
          "anyOf": [
            {
              "typeof": "function"
            },
            {
              "type": "null"
            }
          ],
          "description": "`[Desktop Entry]` metadata entries (name to value). Overwrites default values calculated by electron-builder"
        }
      },
      "type": "object"
    },
    "LinuxTargetSpecificOptions": {
      "additionalProperties": false,
      "properties": {
        "afterInstall": {
          "description": "File path to script to be passed to FPM for `--after-install` arg.",
          "type": [
            "null",
            "string"
          ]
        },
        "afterRemove": {
          "description": "File path to script to be passed to FPM for `--after-remove` arg.",
          "type": [
            "null",
            "string"
          ]
        },
        "appArmorProfile": {
          "description": "File path to custom AppArmor profile (Ubuntu 24+)",
          "type": [
            "null",
            "string"
          ]
        },
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template).",
          "type": [
            "null",
            "string"
          ]
        },
        "category": {
          "description": "The [application category](https://specifications.freedesktop.org/menu-spec/latest/apa.html#main-category-registry).",
          "type": [
            "null",
            "string"
          ]
        },
        "compression": {
          "anyOf": [
            {
              "enum": [
                "bzip2",
                "gz",
                "gzip",
                "xz",
                "xzmt",
                "zst",
                "zstd"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "xz",
          "description": "The compression type passed to fpm. For `deb`, `rpm`, and `pacman` targets prefer the\ntyped per-format interfaces (`DebOptions`, `RpmOptions`, `PacmanOptions`) which narrow\nthis to only the values that fpm actually accepts for that format."
        },
        "depends": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Package dependencies.\n`rpm` defaults to `[\"gtk3\", \"libnotify\", \"nss\", \"libXScrnSaver\", \"(libXtst or libXtst6)\", \"xdg-utils\", \"at-spi2-core\", \"(libuuid or libuuid1)\"]`\n`pacman` defaults to `[\"c-ares\", \"ffmpeg\", \"gtk3\", \"http-parser\", \"libevent\", \"libvpx\", \"libxslt\", \"libxss\", \"minizip\", \"nss\", \"re2\", \"snappy\", \"libnotify\", \"libappindicator-gtk3\"]`"
        },
        "description": {
          "description": "As [description](https://www.electron.build/configuration#description) from application package.json, but allows you to specify different for Linux.",
          "type": [
            "null",
            "string"
          ]
        },
        "desktop": {
          "anyOf": [
            {
              "$ref": "#/definitions/LinuxDesktopFile"
            },
            {
              "type": "null"
            }
          ],
          "description": "The [Desktop file](https://developer.gnome.org/documentation/guidelines/maintainer/integrating.html#desktop-files)"
        },
        "executableArgs": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "The executable parameters. Pass to executableName"
        },
        "fpm": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "*Advanced only* The [fpm](https://fpm.readthedocs.io/en/latest/cli-reference.html) options.\n\nExample: `[\"--before-install=build/deb-preinstall.sh\", \"--after-upgrade=build/deb-postinstall.sh\"]`"
        },
        "icon": {
          "type": "string"
        },
        "maintainer": {
          "type": [
            "null",
            "string"
          ]
        },
        "mimeTypes": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "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."
        },
        "packageCategory": {
          "description": "The package category.",
          "type": [
            "null",
            "string"
          ]
        },
        "packageName": {
          "description": "The name of the package.",
          "type": [
            "null",
            "string"
          ]
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        },
        "synopsis": {
          "description": "The [short description](https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Description).",
          "type": [
            "null",
            "string"
          ]
        },
        "vendor": {
          "type": [
            "null",
            "string"
          ]
        }
      },
      "type": "object"
    },
    "MacConfiguration": {
      "additionalProperties": false,
      "properties": {
        "appId": {
          "default": "com.electron.${name}",
          "description": "The application id. Used as [CFBundleIdentifier](https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-102070) for MacOS and as\n[Application User Model ID](https://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx) for Windows (NSIS target only, Squirrel.Windows not supported). It is strongly recommended that an explicit ID is set.",
          "type": [
            "null",
            "string"
          ]
        },
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template). Defaults to `${productName}-${version}.${ext}` (some target can have other defaults, see corresponding options).",
          "type": [
            "null",
            "string"
          ]
        },
        "asar": {
          "anyOf": [
            {
              "$ref": "#/definitions/AsarOptions"
            },
            {
              "type": [
                "null",
                "boolean"
              ]
            }
          ],
          "default": true,
          "description": "Whether to package the application's source code into an archive, using [Electron's archive format](http://electron.atom.io/docs/tutorial/application-packaging/).\n\nNode modules that must be unpacked will be detected automatically. Use {@link AsarOptions.unpack} to specify additional files to unpack."
        },
        "bundleShortVersion": {
          "description": "The `CFBundleShortVersionString`. Do not use it unless you need to.",
          "type": [
            "null",
            "string"
          ]
        },
        "bundleVersion": {
          "description": "The `CFBundleVersion`. Do not use it unless [you need to](https://github.com/electron-userland/electron-builder/issues/565#issuecomment-230678643).",
          "type": [
            "null",
            "string"
          ]
        },
        "category": {
          "description": "The application category type, as shown in the Finder via *View -> Arrange by Application Category* when viewing the Applications directory.\n\nFor example, `\"category\": \"public.app-category.developer-tools\"` will set the application category to *Developer Tools*.\n\nValid values are listed in [Apple's documentation](https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html#//apple_ref/doc/uid/TP40009250-SW8).",
          "type": [
            "null",
            "string"
          ]
        },
        "compression": {
          "anyOf": [
            {
              "enum": [
                "maximum",
                "normal",
                "store"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "normal",
          "description": "The compression level. If you want to rapidly test build, `store` can reduce build time significantly. `maximum` doesn't lead to noticeable size difference, but increase build time."
        },
        "cscInstallerKeyPassword": {
          "type": [
            "null",
            "string"
          ]
        },
        "cscInstallerLink": {
          "type": [
            "null",
            "string"
          ]
        },
        "cscKeyPassword": {
          "type": [
            "null",
            "string"
          ]
        },
        "cscLink": {
          "type": [
            "null",
            "string"
          ]
        },
        "darkModeSupport": {
          "default": false,
          "description": "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.",
          "type": "boolean"
        },
        "defaultArch": {
          "description": "The default architecture to build for when no `--arch` flag is specified.\nDefaults to the current machine's architecture.",
          "type": "string"
        },
        "detectUpdateChannel": {
          "default": true,
          "description": "Whether to infer update channel from application version pre-release components. e.g. if version `0.12.1-alpha.1`, channel will be set to `alpha`. Otherwise to `latest`.\nThis does *not* apply to github publishing, which will [never auto-detect the update channel](https://github.com/electron-userland/electron-builder/issues/8589).",
          "type": "boolean"
        },
        "electronLanguages": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ],
          "description": "The electron locales to keep. By default, all Electron locales used as-is."
        },
        "electronUpdaterCompatibility": {
          "description": "The [electron-updater compatibility](https://www.electron.build/auto-update#compatibility) semver range.",
          "type": [
            "null",
            "string"
          ]
        },
        "executableName": {
          "description": "The executable name. Defaults to `productName`\nNote: Except for Linux, where this would constitute a breaking change in previous behavior and lead to both invalid executable names and Desktop files. Ref comments in: https://github.com/electron-userland/electron-builder/pull/9068",
          "type": [
            "null",
            "string"
          ]
        },
        "extendInfo": {
          "description": "The extra entries for `Info.plist`."
        },
        "extraDistFiles": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "Extra files to put in archive. Not applicable for `tar.*`."
        },
        "extraFiles": {
          "anyOf": [
            {
              "$ref": "#/definitions/FileSet"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/FileSet"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "The same as [extraResources](#extraresources) but copy into the app's content directory (`Contents` for MacOS, root directory for Linux and Windows)."
        },
        "extraResources": {
          "anyOf": [
            {
              "$ref": "#/definitions/FileSet"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/FileSet"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "A [glob patterns](https://www.electron.build/file-patterns) 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).\n\nFile patterns (and support for `from` and `to` fields) the same as for [files](#files)."
        },
        "fileAssociations": {
          "anyOf": [
            {
              "$ref": "#/definitions/FileAssociation"
            },
            {
              "items": {
                "$ref": "#/definitions/FileAssociation"
              },
              "type": "array"
            }
          ],
          "description": "The file associations."
        },
        "files": {
          "anyOf": [
            {
              "$ref": "#/definitions/FileSet"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/FileSet"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "A [glob patterns](https://www.electron.build/file-patterns) relative to the [app directory](https://www.electron.build/configuration#directories), which specifies which files to include when copying files to create the package.\n\nDefaults to:\n```json\n[\n\"**\\/*\",\n\"!**\\/node_modules/*\\/{CHANGELOG.md,README.md,README,readme.md,readme}\",\n\"!**\\/node_modules/*\\/{test,__tests__,tests,powered-test,example,examples}\",\n\"!**\\/node_modules/*.d.ts\",\n\"!**\\/node_modules/.bin\",\n\"!**\\/*.{iml,o,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,xproj}\",\n\"!.editorconfig\",\n\"!**\\/._*\",\n\"!**\\/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,.gitignore,.gitattributes}\",\n\"!**\\/{__pycache__,thumbs.db,.flowconfig,.idea,.vs,.nyc_output}\",\n\"!**\\/{appveyor.yml,.travis.yml,circle.yml}\",\n\"!**\\/{npm-debug.log,yarn.lock,.yarn-integrity,.yarn-metadata.json}\"\n]\n```\n\nDevelopment 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.\n\nDefault 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.\n\nMay be specified in the platform options (e.g. in the [mac](https://www.electron.build/mac)).\n\nYou may also specify custom source and destination directories by using `FileSet` objects instead of simple glob patterns.\n\n```json\n[\n{\n\"from\": \"path/to/source\",\n\"to\": \"path/to/destination\",\n\"filter\": [\"**\\/*\", \"!foo/*.js\"]\n}\n]\n```\n\nYou can use [file macros](https://www.electron.build/file-patterns#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."
        },
        "forceCodeSigning": {
          "default": false,
          "description": "Whether to fail if app will be not code signed.",
          "type": "boolean"
        },
        "generateUpdatesFilesForAllChannels": {
          "default": false,
          "description": "Please see [Building and Releasing using Channels](https://github.com/electron-userland/electron-builder/issues/1182#issuecomment-324947139).",
          "type": "boolean"
        },
        "helperBundleId": {
          "default": "${appBundleIdentifier}.helper",
          "description": "The bundle identifier to use in the application helper's plist.",
          "type": [
            "null",
            "string"
          ]
        },
        "helperEHBundleId": {
          "default": "${appBundleIdentifier}.helper.EH",
          "description": "The bundle identifier to use in the EH helper's plist.",
          "type": [
            "null",
            "string"
          ]
        },
        "helperGPUBundleId": {
          "default": "${appBundleIdentifier}.helper.GPU",
          "description": "The bundle identifier to use in the GPU helper's plist.",
          "type": [
            "null",
            "string"
          ]
        },
        "helperNPBundleId": {
          "default": "${appBundleIdentifier}.helper.NP",
          "description": "The bundle identifier to use in the NP helper's plist.",
          "type": [
            "null",
            "string"
          ]
        },
        "helperPluginBundleId": {
          "default": "${appBundleIdentifier}.helper.Plugin",
          "description": "The bundle identifier to use in the Plugin helper's plist.",
          "type": [
            "null",
            "string"
          ]
        },
        "helperRendererBundleId": {
          "default": "${appBundleIdentifier}.helper.Renderer",
          "description": "The bundle identifier to use in the Renderer helper's plist.",
          "type": [
            "null",
            "string"
          ]
        },
        "icon": {
          "default": "build/icon.icns",
          "description": "The path to application icon.\nAccepts `.icns` (legacy) or `.icon` (Icon Composer asset).\nIf a `.icon` asset is provided, it will be preferred and compiled to an asset catalog.",
          "type": [
            "null",
            "string"
          ]
        },
        "minimumSystemVersion": {
          "description": "The minimum version of macOS required for the app to run. Corresponds to `LSMinimumSystemVersion`.",
          "type": [
            "null",
            "string"
          ]
        },
        "notarize": {
          "description": "Whether to disable electron-builder's [@electron/notarize](https://github.com/electron/notarize) integration.\n\nNote: In order to activate the notarization step You MUST specify one of the following via environment variables:\n\n1. `APPLE_API_KEY`, `APPLE_API_KEY_ID` and `APPLE_API_ISSUER`.\n2. `APPLE_ID`, `APPLE_APP_SPECIFIC_PASSWORD`, and `APPLE_TEAM_ID`\n3. `APPLE_KEYCHAIN` and `APPLE_KEYCHAIN_PROFILE`\n\nFor security reasons it is recommended to use the first option (see https://github.com/electron-userland/electron-builder/issues/7859)",
          "type": "boolean"
        },
        "protocols": {
          "anyOf": [
            {
              "$ref": "#/definitions/Protocol"
            },
            {
              "items": {
                "$ref": "#/definitions/Protocol"
              },
              "type": "array"
            }
          ],
          "description": "The URL protocol schemes."
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "Publisher configuration. See [Auto Update](https://www.electron.build/publish) for more information."
        },
        "releaseInfo": {
          "$ref": "#/definitions/ReleaseInfo",
          "description": "The release info. Intended for command line usage:\n\n```\n-c.releaseInfo.releaseNotes=\"new features\"\n```"
        },
        "sign": {
          "anyOf": [
            {
              "$ref": "#/definitions/ElectronSignOptions"
            },
            {
              "typeof": "function"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "Codesigning configuration. The signing certificate is selected via `sign.identity` (or the\n`CSC_LINK` / `CSC_NAME` environment variables).\n\n- **Not set** (default): electron-builder auto-discovers a valid certificate in the keychain. If none is found, signing is skipped.\n- **`null`**: skip signing entirely.\n- **`string`**: path or module ID of a file that exports a {@link CustomMacSign} function.\n- **{@link CustomMacSign}**: inline custom signing function (JS/TS config only).\n- **{@link ElectronSignOptions}**: options forwarded directly to `@electron/osx-sign`."
        },
        "target": {
          "anyOf": [
            {
              "$ref": "#/definitions/TargetConfiguration"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/TargetConfiguration"
                  },
                  {
                    "enum": [
                      "7z",
                      "default",
                      "dir",
                      "dmg",
                      "mas",
                      "mas-dev",
                      "pkg",
                      "tar.bz2",
                      "tar.gz",
                      "tar.lz",
                      "tar.xz",
                      "zip"
                    ],
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "enum": [
                "7z",
                "default",
                "dir",
                "dmg",
                "mas",
                "mas-dev",
                "pkg",
                "tar.bz2",
                "tar.gz",
                "tar.lz",
                "tar.xz",
                "zip"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "default (dmg and zip for Squirrel.Mac)",
          "description": "The target package type: list of `default`, `dmg`, `mas`, `mas-dev`, `pkg`, `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir`.\nNote: Squirrel.Mac auto update mechanism requires both `dmg` and `zip` to be enabled, even when only `dmg` is used. Disabling `zip` will break auto update in `dmg` packages."
        },
        "universal": {
          "anyOf": [
            {
              "$ref": "#/definitions/ElectronUniversalOptions"
            },
            {
              "type": "null"
            }
          ],
          "description": "Options forwarded to `@electron/universal` when building a universal (multi-arch) app.\nHas no effect unless the target arch is `universal`."
        }
      },
      "type": "object"
    },
    "MasConfiguration": {
      "additionalProperties": false,
      "properties": {
        "appId": {
          "default": "com.electron.${name}",
          "description": "The application id. Used as [CFBundleIdentifier](https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-102070) for MacOS and as\n[Application User Model ID](https://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx) for Windows (NSIS target only, Squirrel.Windows not supported). It is strongly recommended that an explicit ID is set.",
          "type": [
            "null",
            "string"
          ]
        },
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template). Defaults to `${productName}-${version}.${ext}` (some target can have other defaults, see corresponding options).",
          "type": [
            "null",
            "string"
          ]
        },
        "asar": {
          "anyOf": [
            {
              "$ref": "#/definitions/AsarOptions"
            },
            {
              "type": [
                "null",
                "boolean"
              ]
            }
          ],
          "default": true,
          "description": "Whether to package the application's source code into an archive, using [Electron's archive format](http://electron.atom.io/docs/tutorial/application-packaging/).\n\nNode modules that must be unpacked will be detected automatically. Use {@link AsarOptions.unpack} to specify additional files to unpack."
        },
        "bundleShortVersion": {
          "description": "The `CFBundleShortVersionString`. Do not use it unless you need to.",
          "type": [
            "null",
            "string"
          ]
        },
        "bundleVersion": {
          "description": "The `CFBundleVersion`. Do not use it unless [you need to](https://github.com/electron-userland/electron-builder/issues/565#issuecomment-230678643).",
          "type": [
            "null",
            "string"
          ]
        },
        "category": {
          "description": "The application category type, as shown in the Finder via *View -> Arrange by Application Category* when viewing the Applications directory.\n\nFor example, `\"category\": \"public.app-category.developer-tools\"` will set the application category to *Developer Tools*.\n\nValid values are listed in [Apple's documentation](https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/LaunchServicesKeys.html#//apple_ref/doc/uid/TP40009250-SW8).",
          "type": [
            "null",
            "string"
          ]
        },
        "compression": {
          "anyOf": [
            {
              "enum": [
                "maximum",
                "normal",
                "store"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "normal",
          "description": "The compression level. If you want to rapidly test build, `store` can reduce build time significantly. `maximum` doesn't lead to noticeable size difference, but increase build time."
        },
        "cscInstallerKeyPassword": {
          "type": [
            "null",
            "string"
          ]
        },
        "cscInstallerLink": {
          "type": [
            "null",
            "string"
          ]
        },
        "cscKeyPassword": {
          "type": [
            "null",
            "string"
          ]
        },
        "cscLink": {
          "type": [
            "null",
            "string"
          ]
        },
        "darkModeSupport": {
          "default": false,
          "description": "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.",
          "type": "boolean"
        },
        "defaultArch": {
          "description": "The default architecture to build for when no `--arch` flag is specified.\nDefaults to the current machine's architecture.",
          "type": "string"
        },
        "detectUpdateChannel": {
          "default": true,
          "description": "Whether to infer update channel from application version pre-release components. e.g. if version `0.12.1-alpha.1`, channel will be set to `alpha`. Otherwise to `latest`.\nThis does *not* apply to github publishing, which will [never auto-detect the update channel](https://github.com/electron-userland/electron-builder/issues/8589).",
          "type": "boolean"
        },
        "electronLanguages": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ],
          "description": "The electron locales to keep. By default, all Electron locales used as-is."
        },
        "electronUpdaterCompatibility": {
          "description": "The [electron-updater compatibility](https://www.electron.build/auto-update#compatibility) semver range.",
          "type": [
            "null",
            "string"
          ]
        },
        "executableName": {
          "description": "The executable name. Defaults to `productName`\nNote: Except for Linux, where this would constitute a breaking change in previous behavior and lead to both invalid executable names and Desktop files. Ref comments in: https://github.com/electron-userland/electron-builder/pull/9068",
          "type": [
            "null",
            "string"
          ]
        },
        "extendInfo": {
          "description": "The extra entries for `Info.plist`."
        },
        "extraDistFiles": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "Extra files to put in archive. Not applicable for `tar.*`."
        },
        "extraFiles": {
          "anyOf": [
            {
              "$ref": "#/definitions/FileSet"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/FileSet"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "The same as [extraResources](#extraresources) but copy into the app's content directory (`Contents` for MacOS, root directory for Linux and Windows)."
        },
        "extraResources": {
          "anyOf": [
            {
              "$ref": "#/definitions/FileSet"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/FileSet"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "A [glob patterns](https://www.electron.build/file-patterns) 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).\n\nFile patterns (and support for `from` and `to` fields) the same as for [files](#files)."
        },
        "fileAssociations": {
          "anyOf": [
            {
              "$ref": "#/definitions/FileAssociation"
            },
            {
              "items": {
                "$ref": "#/definitions/FileAssociation"
              },
              "type": "array"
            }
          ],
          "description": "The file associations."
        },
        "files": {
          "anyOf": [
            {
              "$ref": "#/definitions/FileSet"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/FileSet"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "A [glob patterns](https://www.electron.build/file-patterns) relative to the [app directory](https://www.electron.build/configuration#directories), which specifies which files to include when copying files to create the package.\n\nDefaults to:\n```json\n[\n\"**\\/*\",\n\"!**\\/node_modules/*\\/{CHANGELOG.md,README.md,README,readme.md,readme}\",\n\"!**\\/node_modules/*\\/{test,__tests__,tests,powered-test,example,examples}\",\n\"!**\\/node_modules/*.d.ts\",\n\"!**\\/node_modules/.bin\",\n\"!**\\/*.{iml,o,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,xproj}\",\n\"!.editorconfig\",\n\"!**\\/._*\",\n\"!**\\/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,.gitignore,.gitattributes}\",\n\"!**\\/{__pycache__,thumbs.db,.flowconfig,.idea,.vs,.nyc_output}\",\n\"!**\\/{appveyor.yml,.travis.yml,circle.yml}\",\n\"!**\\/{npm-debug.log,yarn.lock,.yarn-integrity,.yarn-metadata.json}\"\n]\n```\n\nDevelopment 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.\n\nDefault 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.\n\nMay be specified in the platform options (e.g. in the [mac](https://www.electron.build/mac)).\n\nYou may also specify custom source and destination directories by using `FileSet` objects instead of simple glob patterns.\n\n```json\n[\n{\n\"from\": \"path/to/source\",\n\"to\": \"path/to/destination\",\n\"filter\": [\"**\\/*\", \"!foo/*.js\"]\n}\n]\n```\n\nYou can use [file macros](https://www.electron.build/file-patterns#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."
        },
        "forceCodeSigning": {
          "default": false,
          "description": "Whether to fail if app will be not code signed.",
          "type": "boolean"
        },
        "generateUpdatesFilesForAllChannels": {
          "default": false,
          "description": "Please see [Building and Releasing using Channels](https://github.com/electron-userland/electron-builder/issues/1182#issuecomment-324947139).",
          "type": "boolean"
        },
        "helperBundleId": {
          "default": "${appBundleIdentifier}.helper",
          "description": "The bundle identifier to use in the application helper's plist.",
          "type": [
            "null",
            "string"
          ]
        },
        "helperEHBundleId": {
          "default": "${appBundleIdentifier}.helper.EH",
          "description": "The bundle identifier to use in the EH helper's plist.",
          "type": [
            "null",
            "string"
          ]
        },
        "helperGPUBundleId": {
          "default": "${appBundleIdentifier}.helper.GPU",
          "description": "The bundle identifier to use in the GPU helper's plist.",
          "type": [
            "null",
            "string"
          ]
        },
        "helperNPBundleId": {
          "default": "${appBundleIdentifier}.helper.NP",
          "description": "The bundle identifier to use in the NP helper's plist.",
          "type": [
            "null",
            "string"
          ]
        },
        "helperPluginBundleId": {
          "default": "${appBundleIdentifier}.helper.Plugin",
          "description": "The bundle identifier to use in the Plugin helper's plist.",
          "type": [
            "null",
            "string"
          ]
        },
        "helperRendererBundleId": {
          "default": "${appBundleIdentifier}.helper.Renderer",
          "description": "The bundle identifier to use in the Renderer helper's plist.",
          "type": [
            "null",
            "string"
          ]
        },
        "icon": {
          "default": "build/icon.icns",
          "description": "The path to application icon.\nAccepts `.icns` (legacy) or `.icon` (Icon Composer asset).\nIf a `.icon` asset is provided, it will be preferred and compiled to an asset catalog.",
          "type": [
            "null",
            "string"
          ]
        },
        "minimumSystemVersion": {
          "description": "The minimum version of macOS required for the app to run. Corresponds to `LSMinimumSystemVersion`.",
          "type": [
            "null",
            "string"
          ]
        },
        "notarize": {
          "description": "Whether to disable electron-builder's [@electron/notarize](https://github.com/electron/notarize) integration.\n\nNote: In order to activate the notarization step You MUST specify one of the following via environment variables:\n\n1. `APPLE_API_KEY`, `APPLE_API_KEY_ID` and `APPLE_API_ISSUER`.\n2. `APPLE_ID`, `APPLE_APP_SPECIFIC_PASSWORD`, and `APPLE_TEAM_ID`\n3. `APPLE_KEYCHAIN` and `APPLE_KEYCHAIN_PROFILE`\n\nFor security reasons it is recommended to use the first option (see https://github.com/electron-userland/electron-builder/issues/7859)",
          "type": "boolean"
        },
        "protocols": {
          "anyOf": [
            {
              "$ref": "#/definitions/Protocol"
            },
            {
              "items": {
                "$ref": "#/definitions/Protocol"
              },
              "type": "array"
            }
          ],
          "description": "The URL protocol schemes."
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "Publisher configuration. See [Auto Update](https://www.electron.build/publish) for more information."
        },
        "releaseInfo": {
          "$ref": "#/definitions/ReleaseInfo",
          "description": "The release info. Intended for command line usage:\n\n```\n-c.releaseInfo.releaseNotes=\"new features\"\n```"
        },
        "sign": {
          "anyOf": [
            {
              "$ref": "#/definitions/ElectronSignOptions"
            },
            {
              "typeof": "function"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "Codesigning configuration. The signing certificate is selected via `sign.identity` (or the\n`CSC_LINK` / `CSC_NAME` environment variables).\n\n- **Not set** (default): electron-builder auto-discovers a valid certificate in the keychain. If none is found, signing is skipped.\n- **`null`**: skip signing entirely.\n- **`string`**: path or module ID of a file that exports a {@link CustomMacSign} function.\n- **{@link CustomMacSign}**: inline custom signing function (JS/TS config only).\n- **{@link ElectronSignOptions}**: options forwarded directly to `@electron/osx-sign`."
        },
        "target": {
          "anyOf": [
            {
              "$ref": "#/definitions/TargetConfiguration"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/TargetConfiguration"
                  },
                  {
                    "enum": [
                      "7z",
                      "default",
                      "dir",
                      "dmg",
                      "mas",
                      "mas-dev",
                      "pkg",
                      "tar.bz2",
                      "tar.gz",
                      "tar.lz",
                      "tar.xz",
                      "zip"
                    ],
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "enum": [
                "7z",
                "default",
                "dir",
                "dmg",
                "mas",
                "mas-dev",
                "pkg",
                "tar.bz2",
                "tar.gz",
                "tar.lz",
                "tar.xz",
                "zip"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "default (dmg and zip for Squirrel.Mac)",
          "description": "The target package type: list of `default`, `dmg`, `mas`, `mas-dev`, `pkg`, `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir`.\nNote: Squirrel.Mac auto update mechanism requires both `dmg` and `zip` to be enabled, even when only `dmg` is used. Disabling `zip` will break auto update in `dmg` packages."
        },
        "universal": {
          "anyOf": [
            {
              "$ref": "#/definitions/ElectronUniversalOptions"
            },
            {
              "type": "null"
            }
          ],
          "description": "Options forwarded to `@electron/universal` when building a universal (multi-arch) app.\nHas no effect unless the target arch is `universal`."
        }
      },
      "type": "object"
    },
    "MetadataDirectories": {
      "additionalProperties": false,
      "description": "Overrides for the input and output directories used during the build.",
      "properties": {
        "app": {
          "description": "The directory that contains the application's `package.json` and source code.\n\nDefaults to `app`, then `www`, then the project root. Set this when your packagable app\nlives in a subdirectory (common in monorepos or when using a separate frontend build step).",
          "type": [
            "null",
            "string"
          ]
        },
        "buildResources": {
          "default": "build",
          "description": "The directory that contains static build resources (icons, background images, license files,\ncustom NSIS scripts, etc.) that electron-builder reads during packaging.\n\n**Build resources are not copied into the packaged app.** If you need runtime access to a\nfile (e.g. a tray icon), include it explicitly via the `files` option:\n```json\n{ \"files\": [\"**\\/*\", \"build/icon.*\"] }\n```",
          "type": [
            "null",
            "string"
          ]
        },
        "output": {
          "default": "dist",
          "description": "The directory where electron-builder writes its output (installers, zip archives, etc.).\n\n[File macros](https://www.electron.build/file-patterns#file-macros) are supported, e.g.\n`\"dist/${os}-${arch}\"` to separate outputs by platform and architecture.",
          "type": [
            "null",
            "string"
          ]
        }
      },
      "type": "object"
    },
    "MsiOptions": {
      "additionalProperties": false,
      "properties": {
        "additionalLightArgs": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Any additional arguments to be passed to the light.ext, such as `[\"-cultures:ja-jp\"]`"
        },
        "additionalWixArgs": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Any additional arguments to be passed to the WiX installer compiler, such as `[\"-ext\", \"WixUtilExtension\"]`"
        },
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template).",
          "type": [
            "null",
            "string"
          ]
        },
        "createDesktopShortcut": {
          "default": true,
          "description": "Whether to create desktop shortcut. Set to `always` if to recreate also on reinstall (even if removed by user).",
          "enum": [
            "always",
            false,
            true
          ]
        },
        "createStartMenuShortcut": {
          "default": true,
          "description": "Whether to create start menu shortcut.",
          "type": "boolean"
        },
        "menuCategory": {
          "default": false,
          "description": "Whether to create submenu for start menu shortcut and program files directory. If `true`, company name will be used. Or string value.",
          "type": [
            "string",
            "boolean"
          ]
        },
        "oneClick": {
          "default": true,
          "description": "One-click installation.",
          "type": "boolean"
        },
        "perMachine": {
          "default": false,
          "description": "Whether to install per all users (per-machine).",
          "type": "boolean"
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        },
        "runAfterFinish": {
          "default": true,
          "description": "Whether to run the installed application after finish. For assisted installer corresponding checkbox will be removed.",
          "type": "boolean"
        },
        "shortcutName": {
          "description": "The name that will be used for all shortcuts. Defaults to the application name.",
          "type": [
            "null",
            "string"
          ]
        },
        "upgradeCode": {
          "description": "The [upgrade code](https://msdn.microsoft.com/en-us/library/windows/desktop/aa372375(v=vs.85).aspx). Optional, by default generated using app id.",
          "type": [
            "null",
            "string"
          ]
        },
        "warningsAsErrors": {
          "default": true,
          "description": "If `warningsAsErrors` is `true` (default): treat warnings as errors. If `warningsAsErrors` is `false`: allow warnings.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "MsiWrappedOptions": {
      "additionalProperties": false,
      "properties": {
        "additionalWixArgs": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Any additional arguments to be passed to the WiX installer compiler, such as `[\"-ext\", \"WixUtilExtension\"]`"
        },
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template).",
          "type": [
            "null",
            "string"
          ]
        },
        "createDesktopShortcut": {
          "default": true,
          "description": "Whether to create desktop shortcut. Set to `always` if to recreate also on reinstall (even if removed by user).",
          "enum": [
            "always",
            false,
            true
          ]
        },
        "createStartMenuShortcut": {
          "default": true,
          "description": "Whether to create start menu shortcut.",
          "type": "boolean"
        },
        "impersonate": {
          "default": false,
          "description": "Determines if the wrapped installer should be executed with impersonation",
          "type": "boolean"
        },
        "menuCategory": {
          "default": false,
          "description": "Whether to create submenu for start menu shortcut and program files directory. If `true`, company name will be used. Or string value.",
          "type": [
            "string",
            "boolean"
          ]
        },
        "oneClick": {
          "type": "boolean"
        },
        "perMachine": {
          "default": false,
          "description": "Whether to install per all users (per-machine).",
          "type": "boolean"
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        },
        "runAfterFinish": {
          "default": true,
          "description": "Whether to run the installed application after finish. For assisted installer corresponding checkbox will be removed.",
          "type": "boolean"
        },
        "shortcutName": {
          "description": "The name that will be used for all shortcuts. Defaults to the application name.",
          "type": [
            "null",
            "string"
          ]
        },
        "upgradeCode": {
          "description": "The [upgrade code](https://msdn.microsoft.com/en-us/library/windows/desktop/aa372375(v=vs.85).aspx). Optional, by default generated using app id.",
          "type": [
            "null",
            "string"
          ]
        },
        "warningsAsErrors": {
          "default": true,
          "description": "If `warningsAsErrors` is `true` (default): treat warnings as errors. If `warningsAsErrors` is `false`: allow warnings.",
          "type": "boolean"
        },
        "wrappedInstallerArgs": {
          "description": "Extra arguments to provide to the wrapped installer (ie: /S for silent install)",
          "type": [
            "null",
            "string"
          ]
        }
      },
      "type": "object"
    },
    "MsixOptions": {
      "additionalProperties": false,
      "properties": {
        "addAutoLaunchExtension": {
          "description": "Whether to add auto launch extension. Defaults to `true` if electron-winstore-auto-launch is in the dependencies.",
          "type": "boolean"
        },
        "applicationId": {
          "description": "The application id. Defaults to `identityName`. This string contains alpha-numeric fields separated by periods.\nEach field must begin with an ASCII alphabetic character.",
          "type": "string"
        },
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template).",
          "type": [
            "null",
            "string"
          ]
        },
        "backgroundColor": {
          "default": "#464646",
          "description": "The background color of the app tile.",
          "type": [
            "null",
            "string"
          ]
        },
        "capabilities": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": [
            "runFullTrust"
          ],
          "description": "The list of capabilities to be added to the AppxManifest.xml.\nThe `runFullTrust` capability is obligatory for Electron apps and will be auto-added if not specified."
        },
        "createMsixbundle": {
          "default": true,
          "description": "Whether to produce a .msixbundle when more than one architecture is built.",
          "type": "boolean"
        },
        "createMsixupload": {
          "default": false,
          "description": "Whether to produce a .msixupload archive suitable for submission to the Microsoft Store Partner Center.",
          "type": "boolean"
        },
        "customExtensionsPath": {
          "description": "Relative path to custom extensions xml to be included in the AppxManifest.xml.",
          "type": "string"
        },
        "customManifestPath": {
          "description": "Relative path to a custom AppxManifest.xml template located in the build resources directory.\nSupports the same `${}` template macros as the default template, including the MSIX-specific\n`${packageIntegrity}` macro. Windows services are injected via the `${extensions}` macro\nalongside protocol/file-association extensions.",
          "type": "string"
        },
        "displayName": {
          "description": "A friendly name displayed to users. Corresponds to Properties.DisplayName. Defaults to the application product name.",
          "type": [
            "null",
            "string"
          ]
        },
        "electronUpdaterAware": {
          "type": "boolean"
        },
        "enforcePackageIntegrity": {
          "default": false,
          "description": "Enforce package integrity (uap10:PackageIntegrity). Requires Windows 10 version 2004 (build 19041) or later.\nWhen enabled, Windows verifies that no files have been tampered with after the package was signed.",
          "type": "boolean"
        },
        "identityName": {
          "description": "The package identity name. Corresponds to Identity.Name. Defaults to the application name.",
          "type": [
            "null",
            "string"
          ]
        },
        "languages": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "default": [
            "en-US"
          ],
          "description": "The list of supported languages listed in the Windows Store. The first entry (index 0) will be the default language."
        },
        "makeappxArgs": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ]
        },
        "maxVersionTested": {
          "default": "same as minVersion",
          "description": "Set the MaxVersionTested field in the AppxManifest.xml.",
          "type": [
            "null",
            "string"
          ]
        },
        "minVersion": {
          "default": "\"10.0.17763.0\" (Windows 10 version 1809 — minimum for Store submissions)",
          "description": "Set the MinVersion field in the AppxManifest.xml.",
          "type": [
            "null",
            "string"
          ]
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        },
        "publisher": {
          "description": "The Windows Store publisher. Not used if MSIX is built for testing.",
          "type": [
            "null",
            "string"
          ]
        },
        "publisherDisplayName": {
          "description": "A friendly name for the publisher displayed to users. Corresponds to Properties.PublisherDisplayName.\nDefaults to company name from the application metadata.",
          "type": [
            "null",
            "string"
          ]
        },
        "setBuildNumber": {
          "default": false,
          "description": "Whether to set the build number in the version field.",
          "type": "boolean"
        },
        "showNameOnTiles": {
          "default": false,
          "description": "Whether to overlay the app's name on top of tile images on the Start screen.",
          "type": "boolean"
        },
        "windowsServices": {
          "description": "Windows Services to register with the MSIX package (desktop6 namespace).\nRequires Windows 10 version 1903 or later, and the `packagedServices` (or `localSystemServices`)\nrestricted capability declared via `capabilities`.",
          "items": {
            "$ref": "#/definitions/MsixWindowsService"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "MsixWindowsService": {
      "additionalProperties": false,
      "properties": {
        "arguments": {
          "description": "Optional command-line arguments passed to the service executable.",
          "type": "string"
        },
        "executable": {
          "description": "Relative path to the service executable within the package.\nDefaults to the main app executable.",
          "type": "string"
        },
        "name": {
          "description": "The service name used in the Windows Service Control Manager.",
          "type": "string"
        },
        "startAccount": {
          "default": "localSystem",
          "description": "The account the service runs under. Required by the desktop6 schema.",
          "enum": [
            "localService",
            "localSystem",
            "networkService"
          ],
          "type": "string"
        },
        "startupType": {
          "default": "manual",
          "description": "How Windows starts the service. Required by the desktop6 schema.",
          "enum": [
            "auto",
            "disabled",
            "manual"
          ],
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "type": "object"
    },
    "NativeModulesConfig": {
      "additionalProperties": false,
      "description": "Configuration for native Node.js module installation and rebuilding.\n\nAll options that control how electron-builder handles native modules — from forcing source\nbuilds at install time through to the `@electron/rebuild` compilation mode.",
      "properties": {
        "buildDependenciesFromSource": {
          "default": false,
          "description": "Whether to pass `--build-from-source` to the package manager when installing native\ndependencies, forcing them to compile from source rather than using pre-built binaries.\n\nUseful when pre-built binaries are not available for the target platform/arch combination,\nor when you need to ensure native modules are compiled against the exact Electron ABI.",
          "type": "boolean"
        },
        "nodeGypRebuild": {
          "default": false,
          "description": "Whether to run `node-gyp rebuild` with Electron headers before packaging.\n\nThis is a low-level escape hatch for cases where the standard `@electron/rebuild` path\n(controlled by {@link npmRebuild}) is insufficient. Most projects should leave this `false`\nand rely on `@electron/rebuild` instead.\n\nWhen `true`, electron-builder runs `node-gyp rebuild` with the correct `npm_config_*`\nenvironment variables set for the target Electron version and architecture before the\nnormal rebuild step.",
          "type": "boolean"
        },
        "npmRebuild": {
          "default": true,
          "description": "Whether to rebuild native Node.js modules for the target Electron version and architecture\nbefore packaging.\n\nWhen `true` (the default), electron-builder runs `@electron/rebuild` against the app's\n`node_modules` directory to ensure all native modules are compiled against the correct Electron\nABI. Set to `false` to skip this step entirely — useful when native modules are pre-built\nelsewhere in your pipeline or when the app has no native dependencies.\n\nThe compilation mode (`sequential` vs `parallel`) is controlled by {@link rebuildMode}.",
          "type": "boolean"
        },
        "rebuildMode": {
          "anyOf": [
            {
              "enum": [
                "parallel",
                "sequential"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "sequential",
          "description": "Compilation mode for `@electron/rebuild`.\n\n- `\"sequential\"` — rebuilds native modules one at a time. Safer in memory-constrained\n  environments and produces cleaner log output.\n- `\"parallel\"` — rebuilds all native modules concurrently. Faster on machines with many cores\n  and plentiful memory, but may exhaust resources on CI agents with limited RAM."
        }
      },
      "type": "object"
    },
    "NsisOptions": {
      "additionalProperties": false,
      "properties": {
        "allowElevation": {
          "default": true,
          "description": "*assisted installer only.* Allow requesting for elevation. If false, user will have to restart installer with elevated permissions.",
          "type": "boolean"
        },
        "allowToChangeInstallationDirectory": {
          "default": false,
          "description": "*assisted installer only.* Whether to allow user to change installation directory.",
          "type": "boolean"
        },
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/docs/configuration#artifact-file-name-template). Defaults to `${productName} Setup ${version}.${ext}`.",
          "type": [
            "null",
            "string"
          ]
        },
        "buildUniversalInstaller": {
          "default": true,
          "description": "Disable building an universal installer of the archs specified in the target configuration\n*Not supported for nsis-web*",
          "type": "boolean"
        },
        "createDesktopShortcut": {
          "default": true,
          "description": "Whether to create desktop shortcut. Set to `always` if to recreate also on reinstall (even if removed by user).",
          "enum": [
            "always",
            false,
            true
          ]
        },
        "createStartMenuShortcut": {
          "default": true,
          "description": "Whether to create start menu shortcut.",
          "type": "boolean"
        },
        "customNsisBinary": {
          "anyOf": [
            {
              "$ref": "#/definitions/CustomNsisBinary"
            },
            {
              "type": "null"
            }
          ],
          "description": "Allows you to provide your own `makensis`, such as one with support for debug logging via LogSet and LogText. (Logging also requires option `debugLogging = true`)"
        },
        "customNsisResources": {
          "anyOf": [
            {
              "$ref": "#/definitions/CustomNsisResources"
            },
            {
              "type": "null"
            }
          ],
          "description": "Allows you to provide your own `nsis-resources`"
        },
        "deleteAppDataOnUninstall": {
          "default": false,
          "description": "*one-click installer only.* Whether to delete app data on uninstall.",
          "type": "boolean"
        },
        "differentialPackage": {
          "description": "Marks the package as built with differential download support for the update server.",
          "type": "boolean"
        },
        "displayLanguageSelector": {
          "default": false,
          "description": "Whether to display a language selection dialog. Not recommended (by default will be detected using OS language).",
          "type": "boolean"
        },
        "guid": {
          "description": "The GUID for the installer. Used to identify the application for upgrade and uninstall operations.\nIf not specified, a deterministic GUID is generated from the app ID (`appId`) — but this means\nchanging your `appId` will break silent upgrades of existing installs.",
          "type": [
            "null",
            "string"
          ]
        },
        "include": {
          "description": "The path to NSIS include script to customize installer. Defaults to `build/installer.nsh`. See [Custom NSIS script](#custom-nsis-script).",
          "type": [
            "null",
            "string"
          ]
        },
        "installerHeader": {
          "default": "build/installerHeader.bmp",
          "description": "*assisted installer only.* `MUI_HEADERIMAGE`, relative to the [build resources](https://www.electron.build/docs/contents#extraresources) or to the project directory.",
          "type": [
            "null",
            "string"
          ]
        },
        "installerHeaderIcon": {
          "description": "*one-click installer only.* The path to header icon (above the progress bar), relative to the [build resources](https://www.electron.build/docs/contents#extraresources) or to the project directory.\nDefaults to `build/installerHeaderIcon.ico` or application icon.",
          "type": [
            "null",
            "string"
          ]
        },
        "installerIcon": {
          "description": "The path to installer icon, relative to the [build resources](https://www.electron.build/docs/contents#extraresources) or to the project directory.\nDefaults to `build/installerIcon.ico` or application icon.",
          "type": [
            "null",
            "string"
          ]
        },
        "installerLanguages": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "The installer languages (e.g. `en_US`, `de_DE`). Change only if you understand what do you do and for what."
        },
        "installerSidebar": {
          "description": "*assisted installer only.* `MUI_WELCOMEFINISHPAGE_BITMAP`, relative to the [build resources](https://www.electron.build/docs/contents#extraresources) or to the project directory.\nDefaults to `build/installerSidebar.bmp` or `${NSISDIR}\\\\Contrib\\\\Graphics\\\\Wizard\\\\nsis3-metro.bmp`. Image size 164 × 314 pixels.",
          "type": [
            "null",
            "string"
          ]
        },
        "language": {
          "description": "[LCID Dec](https://msdn.microsoft.com/en-au/goglobal/bb964664.aspx), defaults to `1033`(`English - United States`).",
          "type": [
            "null",
            "string"
          ]
        },
        "license": {
          "description": "The path to EULA license file. Defaults to `license.txt` or `eula.txt` (or uppercase variants). In addition to `txt`, `rtf` and `html` supported (don't forget to use `target=\"_blank\"` for links).\n\nMultiple 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.\nIf 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).\n\nAppropriate license file will be selected by user OS language.",
          "type": [
            "null",
            "string"
          ]
        },
        "menuCategory": {
          "default": false,
          "description": "Whether to create submenu for start menu shortcut and program files directory. If `true`, company name will be used. Or string value.",
          "type": [
            "string",
            "boolean"
          ]
        },
        "multiLanguageInstaller": {
          "description": "Whether to create multi-language installer. Defaults to `unicode` option value.",
          "type": "boolean"
        },
        "oneClick": {
          "default": true,
          "description": "Whether to create one-click installer or assisted.",
          "type": "boolean"
        },
        "packElevateHelper": {
          "default": true,
          "description": "Whether to pack the elevate executable (required for electron-updater if per-machine installer used or can be used in the future). Ignored if `perMachine` is set to `true`.",
          "type": "boolean"
        },
        "perMachine": {
          "default": false,
          "description": "Whether to show install mode installer page (choice per-machine or per-user) for assisted installer. Or whether installation always per all users (per-machine).\n\nIf `oneClick` is `true` (default): Whether to install per all users (per-machine).\n\nIf `oneClick` is `false` and `perMachine` is `true`: no install mode installer page, always install per-machine.\n\nIf `oneClick` is `false` and `perMachine` is `false` (default): install mode installer page.",
          "type": "boolean"
        },
        "preCompressedFileExtensions": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "default": [
            ".avi",
            ".mov",
            ".m4v",
            ".mp4",
            ".m4p",
            ".qt",
            ".mkv",
            ".webm",
            ".vmdk"
          ],
          "description": "The file extension of files that will be not compressed. Applicable only for `extraResources` and `extraFiles` files."
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        },
        "removeDefaultUninstallWelcomePage": {
          "default": false,
          "description": "*assisted installer only.* remove the default uninstall welcome page.",
          "type": "boolean"
        },
        "runAfterFinish": {
          "default": true,
          "description": "Whether to run the installed application after finish. For assisted installer corresponding checkbox will be removed.",
          "type": "boolean"
        },
        "script": {
          "description": "The path to NSIS script to customize installer. Defaults to `build/installer.nsi`. See [Custom NSIS script](#custom-nsis-script).",
          "type": [
            "null",
            "string"
          ]
        },
        "selectPerMachineByDefault": {
          "default": false,
          "description": "Whether to set per-machine or per-user installation as default selection on the install mode installer page.",
          "type": "boolean"
        },
        "shortcutName": {
          "description": "The name that will be used for all shortcuts. Defaults to the application name.",
          "type": [
            "null",
            "string"
          ]
        },
        "unicode": {
          "default": true,
          "description": "Whether to create [Unicode installer](http://nsis.sourceforge.net/Docs/Chapter1.html#intro-unicode).",
          "type": "boolean"
        },
        "uninstallDisplayName": {
          "default": "${productName} ${version}",
          "description": "The uninstaller display name in the control panel.",
          "type": [
            "null",
            "string"
          ]
        },
        "uninstallUrlHelp": {
          "description": "The URL to the uninstaller help page in the control panel. Defaults to [homepage](https://www.electron.build/docs/configuration#homepage) from application package.json.",
          "type": [
            "null",
            "string"
          ]
        },
        "uninstallUrlInfoAbout": {
          "description": "The URL to the uninstaller info about page in the control panel. Defaults to [homepage](https://www.electron.build/docs/configuration#homepage) from application package.json.",
          "type": [
            "null",
            "string"
          ]
        },
        "uninstallUrlReadme": {
          "description": "The URL to the uninstaller readme page in the control panel. Defaults to [homepage](https://www.electron.build/docs/configuration#homepage) from application package.json.",
          "type": [
            "null",
            "string"
          ]
        },
        "uninstallUrlUpdateInfo": {
          "description": "The URL to the uninstaller update info page in the control panel. Defaults to [homepage](https://www.electron.build/docs/configuration#homepage) from application package.json.",
          "type": [
            "null",
            "string"
          ]
        },
        "uninstallerIcon": {
          "description": "The path to uninstaller icon, relative to the [build resources](https://www.electron.build/docs/contents#extraresources) or to the project directory.\nDefaults to `build/uninstallerIcon.ico` or application icon.",
          "type": [
            "null",
            "string"
          ]
        },
        "uninstallerSidebar": {
          "description": "*assisted installer only.* `MUI_UNWELCOMEFINISHPAGE_BITMAP`, relative to the [build resources](https://www.electron.build/docs/contents#extraresources) or to the project directory.\nDefaults to `installerSidebar` option or `build/uninstallerSidebar.bmp` or `build/installerSidebar.bmp` or `${NSISDIR}\\\\Contrib\\\\Graphics\\\\Wizard\\\\nsis3-metro.bmp`",
          "type": [
            "null",
            "string"
          ]
        },
        "useZip": {
          "default": false,
          "description": "Forces zip compression format instead of LZMA. Used internally for differential update packages.",
          "type": "boolean"
        },
        "warningsAsErrors": {
          "default": true,
          "description": "If `warningsAsErrors` is `true` (default): NSIS will treat warnings as errors. If `warningsAsErrors` is `false`: NSIS will allow warnings.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "NsisWebOptions": {
      "additionalProperties": false,
      "description": "Web Installer options.",
      "properties": {
        "allowElevation": {
          "default": true,
          "description": "*assisted installer only.* Allow requesting for elevation. If false, user will have to restart installer with elevated permissions.",
          "type": "boolean"
        },
        "allowToChangeInstallationDirectory": {
          "default": false,
          "description": "*assisted installer only.* Whether to allow user to change installation directory.",
          "type": "boolean"
        },
        "appPackageUrl": {
          "description": "The application package download URL. Optional — by default computed using publish configuration.\n\nURL like `https://example.com/download/latest` allows web installer to be version independent (installer will download latest application package).\nPlease note — it is [full URL](https://github.com/electron-userland/electron-builder/issues/1810#issuecomment-317650878).\n\nCustom `X-Arch` http header is set to `32` or `64`.",
          "type": [
            "null",
            "string"
          ]
        },
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/docs/configuration#artifact-file-name-template). Defaults to `${productName} Web Setup ${version}.${ext}`.",
          "type": [
            "null",
            "string"
          ]
        },
        "buildUniversalInstaller": {
          "const": true,
          "default": true,
          "description": "Override for `NsisOptions.buildUniversalInstaller`. nsis-web requires universal installer",
          "type": "boolean"
        },
        "createDesktopShortcut": {
          "default": true,
          "description": "Whether to create desktop shortcut. Set to `always` if to recreate also on reinstall (even if removed by user).",
          "enum": [
            "always",
            false,
            true
          ]
        },
        "createStartMenuShortcut": {
          "default": true,
          "description": "Whether to create start menu shortcut.",
          "type": "boolean"
        },
        "customNsisBinary": {
          "anyOf": [
            {
              "$ref": "#/definitions/CustomNsisBinary"
            },
            {
              "type": "null"
            }
          ],
          "description": "Allows you to provide your own `makensis`, such as one with support for debug logging via LogSet and LogText. (Logging also requires option `debugLogging = true`)"
        },
        "customNsisResources": {
          "anyOf": [
            {
              "$ref": "#/definitions/CustomNsisResources"
            },
            {
              "type": "null"
            }
          ],
          "description": "Allows you to provide your own `nsis-resources`"
        },
        "deleteAppDataOnUninstall": {
          "default": false,
          "description": "*one-click installer only.* Whether to delete app data on uninstall.",
          "type": "boolean"
        },
        "differentialPackage": {
          "description": "Marks the package as built with differential download support for the update server.",
          "type": "boolean"
        },
        "displayLanguageSelector": {
          "default": false,
          "description": "Whether to display a language selection dialog. Not recommended (by default will be detected using OS language).",
          "type": "boolean"
        },
        "guid": {
          "description": "The GUID for the installer. Used to identify the application for upgrade and uninstall operations.\nIf not specified, a deterministic GUID is generated from the app ID (`appId`) — but this means\nchanging your `appId` will break silent upgrades of existing installs.",
          "type": [
            "null",
            "string"
          ]
        },
        "include": {
          "description": "The path to NSIS include script to customize installer. Defaults to `build/installer.nsh`. See [Custom NSIS script](#custom-nsis-script).",
          "type": [
            "null",
            "string"
          ]
        },
        "installerHeader": {
          "default": "build/installerHeader.bmp",
          "description": "*assisted installer only.* `MUI_HEADERIMAGE`, relative to the [build resources](https://www.electron.build/docs/contents#extraresources) or to the project directory.",
          "type": [
            "null",
            "string"
          ]
        },
        "installerHeaderIcon": {
          "description": "*one-click installer only.* The path to header icon (above the progress bar), relative to the [build resources](https://www.electron.build/docs/contents#extraresources) or to the project directory.\nDefaults to `build/installerHeaderIcon.ico` or application icon.",
          "type": [
            "null",
            "string"
          ]
        },
        "installerIcon": {
          "description": "The path to installer icon, relative to the [build resources](https://www.electron.build/docs/contents#extraresources) or to the project directory.\nDefaults to `build/installerIcon.ico` or application icon.",
          "type": [
            "null",
            "string"
          ]
        },
        "installerLanguages": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "The installer languages (e.g. `en_US`, `de_DE`). Change only if you understand what do you do and for what."
        },
        "installerSidebar": {
          "description": "*assisted installer only.* `MUI_WELCOMEFINISHPAGE_BITMAP`, relative to the [build resources](https://www.electron.build/docs/contents#extraresources) or to the project directory.\nDefaults to `build/installerSidebar.bmp` or `${NSISDIR}\\\\Contrib\\\\Graphics\\\\Wizard\\\\nsis3-metro.bmp`. Image size 164 × 314 pixels.",
          "type": [
            "null",
            "string"
          ]
        },
        "language": {
          "description": "[LCID Dec](https://msdn.microsoft.com/en-au/goglobal/bb964664.aspx), defaults to `1033`(`English - United States`).",
          "type": [
            "null",
            "string"
          ]
        },
        "license": {
          "description": "The path to EULA license file. Defaults to `license.txt` or `eula.txt` (or uppercase variants). In addition to `txt`, `rtf` and `html` supported (don't forget to use `target=\"_blank\"` for links).\n\nMultiple 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.\nIf 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).\n\nAppropriate license file will be selected by user OS language.",
          "type": [
            "null",
            "string"
          ]
        },
        "menuCategory": {
          "default": false,
          "description": "Whether to create submenu for start menu shortcut and program files directory. If `true`, company name will be used. Or string value.",
          "type": [
            "string",
            "boolean"
          ]
        },
        "multiLanguageInstaller": {
          "description": "Whether to create multi-language installer. Defaults to `unicode` option value.",
          "type": "boolean"
        },
        "oneClick": {
          "default": true,
          "description": "Whether to create one-click installer or assisted.",
          "type": "boolean"
        },
        "packElevateHelper": {
          "default": true,
          "description": "Whether to pack the elevate executable (required for electron-updater if per-machine installer used or can be used in the future). Ignored if `perMachine` is set to `true`.",
          "type": "boolean"
        },
        "perMachine": {
          "default": false,
          "description": "Whether to show install mode installer page (choice per-machine or per-user) for assisted installer. Or whether installation always per all users (per-machine).\n\nIf `oneClick` is `true` (default): Whether to install per all users (per-machine).\n\nIf `oneClick` is `false` and `perMachine` is `true`: no install mode installer page, always install per-machine.\n\nIf `oneClick` is `false` and `perMachine` is `false` (default): install mode installer page.",
          "type": "boolean"
        },
        "preCompressedFileExtensions": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "default": [
            ".avi",
            ".mov",
            ".m4v",
            ".mp4",
            ".m4p",
            ".qt",
            ".mkv",
            ".webm",
            ".vmdk"
          ],
          "description": "The file extension of files that will be not compressed. Applicable only for `extraResources` and `extraFiles` files."
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        },
        "removeDefaultUninstallWelcomePage": {
          "default": false,
          "description": "*assisted installer only.* remove the default uninstall welcome page.",
          "type": "boolean"
        },
        "runAfterFinish": {
          "default": true,
          "description": "Whether to run the installed application after finish. For assisted installer corresponding checkbox will be removed.",
          "type": "boolean"
        },
        "script": {
          "description": "The path to NSIS script to customize installer. Defaults to `build/installer.nsi`. See [Custom NSIS script](#custom-nsis-script).",
          "type": [
            "null",
            "string"
          ]
        },
        "selectPerMachineByDefault": {
          "default": false,
          "description": "Whether to set per-machine or per-user installation as default selection on the install mode installer page.",
          "type": "boolean"
        },
        "shortcutName": {
          "description": "The name that will be used for all shortcuts. Defaults to the application name.",
          "type": [
            "null",
            "string"
          ]
        },
        "unicode": {
          "default": true,
          "description": "Whether to create [Unicode installer](http://nsis.sourceforge.net/Docs/Chapter1.html#intro-unicode).",
          "type": "boolean"
        },
        "uninstallDisplayName": {
          "default": "${productName} ${version}",
          "description": "The uninstaller display name in the control panel.",
          "type": [
            "null",
            "string"
          ]
        },
        "uninstallUrlHelp": {
          "description": "The URL to the uninstaller help page in the control panel. Defaults to [homepage](https://www.electron.build/docs/configuration#homepage) from application package.json.",
          "type": [
            "null",
            "string"
          ]
        },
        "uninstallUrlInfoAbout": {
          "description": "The URL to the uninstaller info about page in the control panel. Defaults to [homepage](https://www.electron.build/docs/configuration#homepage) from application package.json.",
          "type": [
            "null",
            "string"
          ]
        },
        "uninstallUrlReadme": {
          "description": "The URL to the uninstaller readme page in the control panel. Defaults to [homepage](https://www.electron.build/docs/configuration#homepage) from application package.json.",
          "type": [
            "null",
            "string"
          ]
        },
        "uninstallUrlUpdateInfo": {
          "description": "The URL to the uninstaller update info page in the control panel. Defaults to [homepage](https://www.electron.build/docs/configuration#homepage) from application package.json.",
          "type": [
            "null",
            "string"
          ]
        },
        "uninstallerIcon": {
          "description": "The path to uninstaller icon, relative to the [build resources](https://www.electron.build/docs/contents#extraresources) or to the project directory.\nDefaults to `build/uninstallerIcon.ico` or application icon.",
          "type": [
            "null",
            "string"
          ]
        },
        "uninstallerSidebar": {
          "description": "*assisted installer only.* `MUI_UNWELCOMEFINISHPAGE_BITMAP`, relative to the [build resources](https://www.electron.build/docs/contents#extraresources) or to the project directory.\nDefaults to `installerSidebar` option or `build/uninstallerSidebar.bmp` or `build/installerSidebar.bmp` or `${NSISDIR}\\\\Contrib\\\\Graphics\\\\Wizard\\\\nsis3-metro.bmp`",
          "type": [
            "null",
            "string"
          ]
        },
        "useZip": {
          "default": false,
          "description": "Forces zip compression format instead of LZMA. Used internally for differential update packages.",
          "type": "boolean"
        },
        "warningsAsErrors": {
          "default": true,
          "description": "If `warningsAsErrors` is `true` (default): NSIS will treat warnings as errors. If `warningsAsErrors` is `false`: NSIS will allow warnings.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "Omit<MirrorOptions,\"customFilename\"|\"customDir\"|\"customVersion\">": {
      "additionalProperties": false,
      "properties": {
        "mirror": {
          "description": "The base URL of the mirror to download from.\ne.g https://github.com/electron/electron/releases/download",
          "type": "string"
        },
        "nightlyMirror": {
          "description": "The mirror URL for [`electron-nightly`](https://npmjs.com/package/electron-nightly),\nwhich lives in a separate npm package.",
          "type": "string"
        },
        "resolveAssetURL": {
          "description": "A function allowing customization of the url returned\nfrom getArtifactRemoteURL().",
          "typeof": "function"
        }
      },
      "type": "object"
    },
    "OutgoingHttpHeaders": {
      "additionalProperties": {
        "anyOf": [
          {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          {
            "type": [
              "string",
              "number"
            ]
          }
        ]
      },
      "properties": {
        "accept": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ]
        },
        "accept-charset": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ]
        },
        "accept-encoding": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ]
        },
        "accept-language": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ]
        },
        "accept-ranges": {
          "type": "string"
        },
        "access-control-allow-credentials": {
          "type": "string"
        },
        "access-control-allow-headers": {
          "type": "string"
        },
        "access-control-allow-methods": {
          "type": "string"
        },
        "access-control-allow-origin": {
          "type": "string"
        },
        "access-control-expose-headers": {
          "type": "string"
        },
        "access-control-max-age": {
          "type": "string"
        },
        "access-control-request-headers": {
          "type": "string"
        },
        "access-control-request-method": {
          "type": "string"
        },
        "age": {
          "type": "string"
        },
        "allow": {
          "type": "string"
        },
        "authorization": {
          "type": "string"
        },
        "cache-control": {
          "type": "string"
        },
        "cdn-cache-control": {
          "type": "string"
        },
        "connection": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ]
        },
        "content-disposition": {
          "type": "string"
        },
        "content-encoding": {
          "type": "string"
        },
        "content-language": {
          "type": "string"
        },
        "content-length": {
          "type": [
            "string",
            "number"
          ]
        },
        "content-location": {
          "type": "string"
        },
        "content-range": {
          "type": "string"
        },
        "content-security-policy": {
          "type": "string"
        },
        "content-security-policy-report-only": {
          "type": "string"
        },
        "content-type": {
          "type": "string"
        },
        "cookie": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ]
        },
        "date": {
          "type": "string"
        },
        "dav": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ]
        },
        "dnt": {
          "type": "string"
        },
        "etag": {
          "type": "string"
        },
        "expect": {
          "type": "string"
        },
        "expires": {
          "type": "string"
        },
        "forwarded": {
          "type": "string"
        },
        "from": {
          "type": "string"
        },
        "host": {
          "type": "string"
        },
        "if-match": {
          "type": "string"
        },
        "if-modified-since": {
          "type": "string"
        },
        "if-none-match": {
          "type": "string"
        },
        "if-range": {
          "type": "string"
        },
        "if-unmodified-since": {
          "type": "string"
        },
        "last-modified": {
          "type": "string"
        },
        "link": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ]
        },
        "location": {
          "type": "string"
        },
        "max-forwards": {
          "type": "string"
        },
        "origin": {
          "type": "string"
        },
        "pragma": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ]
        },
        "proxy-authenticate": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ]
        },
        "proxy-authorization": {
          "type": "string"
        },
        "public-key-pins": {
          "type": "string"
        },
        "public-key-pins-report-only": {
          "type": "string"
        },
        "range": {
          "type": "string"
        },
        "referer": {
          "type": "string"
        },
        "referrer-policy": {
          "type": "string"
        },
        "refresh": {
          "type": "string"
        },
        "retry-after": {
          "type": "string"
        },
        "sec-websocket-accept": {
          "type": "string"
        },
        "sec-websocket-extensions": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ]
        },
        "sec-websocket-key": {
          "type": "string"
        },
        "sec-websocket-protocol": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ]
        },
        "sec-websocket-version": {
          "type": "string"
        },
        "server": {
          "type": "string"
        },
        "set-cookie": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ]
        },
        "strict-transport-security": {
          "type": "string"
        },
        "te": {
          "type": "string"
        },
        "trailer": {
          "type": "string"
        },
        "transfer-encoding": {
          "type": "string"
        },
        "upgrade": {
          "type": "string"
        },
        "upgrade-insecure-requests": {
          "type": "string"
        },
        "user-agent": {
          "type": "string"
        },
        "vary": {
          "type": "string"
        },
        "via": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ]
        },
        "warning": {
          "type": "string"
        },
        "www-authenticate": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ]
        },
        "x-content-type-options": {
          "type": "string"
        },
        "x-dns-prefetch-control": {
          "type": "string"
        },
        "x-frame-options": {
          "type": "string"
        },
        "x-xss-protection": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "PacmanOptions": {
      "additionalProperties": false,
      "properties": {
        "afterInstall": {
          "description": "File path to script to be passed to FPM for `--after-install` arg.",
          "type": [
            "null",
            "string"
          ]
        },
        "afterRemove": {
          "description": "File path to script to be passed to FPM for `--after-remove` arg.",
          "type": [
            "null",
            "string"
          ]
        },
        "appArmorProfile": {
          "description": "File path to custom AppArmor profile (Ubuntu 24+)",
          "type": [
            "null",
            "string"
          ]
        },
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template).",
          "type": [
            "null",
            "string"
          ]
        },
        "category": {
          "description": "The [application category](https://specifications.freedesktop.org/menu-spec/latest/apa.html#main-category-registry).",
          "type": [
            "null",
            "string"
          ]
        },
        "compression": {
          "anyOf": [
            {
              "enum": [
                "bzip2",
                "gz",
                "xz",
                "zstd"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "xz",
          "description": "The compression type passed to fpm. For `deb`, `rpm`, and `pacman` targets prefer the\ntyped per-format interfaces (`DebOptions`, `RpmOptions`, `PacmanOptions`) which narrow\nthis to only the values that fpm actually accepts for that format."
        },
        "depends": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Package dependencies.\n`rpm` defaults to `[\"gtk3\", \"libnotify\", \"nss\", \"libXScrnSaver\", \"(libXtst or libXtst6)\", \"xdg-utils\", \"at-spi2-core\", \"(libuuid or libuuid1)\"]`\n`pacman` defaults to `[\"c-ares\", \"ffmpeg\", \"gtk3\", \"http-parser\", \"libevent\", \"libvpx\", \"libxslt\", \"libxss\", \"minizip\", \"nss\", \"re2\", \"snappy\", \"libnotify\", \"libappindicator-gtk3\"]`"
        },
        "description": {
          "description": "As [description](https://www.electron.build/configuration#description) from application package.json, but allows you to specify different for Linux.",
          "type": [
            "null",
            "string"
          ]
        },
        "desktop": {
          "anyOf": [
            {
              "$ref": "#/definitions/LinuxDesktopFile"
            },
            {
              "type": "null"
            }
          ],
          "description": "The [Desktop file](https://developer.gnome.org/documentation/guidelines/maintainer/integrating.html#desktop-files)"
        },
        "executableArgs": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "The executable parameters. Pass to executableName"
        },
        "fpm": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "*Advanced only* The [fpm](https://fpm.readthedocs.io/en/latest/cli-reference.html) options.\n\nExample: `[\"--before-install=build/deb-preinstall.sh\", \"--after-upgrade=build/deb-postinstall.sh\"]`"
        },
        "icon": {
          "type": "string"
        },
        "maintainer": {
          "type": [
            "null",
            "string"
          ]
        },
        "mimeTypes": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "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."
        },
        "packageCategory": {
          "description": "The package category.",
          "type": [
            "null",
            "string"
          ]
        },
        "packageName": {
          "description": "The name of the package.",
          "type": [
            "null",
            "string"
          ]
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        },
        "synopsis": {
          "description": "The [short description](https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Description).",
          "type": [
            "null",
            "string"
          ]
        },
        "vendor": {
          "type": [
            "null",
            "string"
          ]
        }
      },
      "type": "object"
    },
    "PkgBackgroundOptions": {
      "additionalProperties": false,
      "description": "Options for the background image in a PKG installer",
      "properties": {
        "alignment": {
          "anyOf": [
            {
              "enum": [
                "bottom",
                "bottomleft",
                "bottomright",
                "center",
                "left",
                "right",
                "top",
                "topleft",
                "topright"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "center",
          "description": "Alignment of the background image.\nOptions are: center, left, right, top, bottom, topleft, topright, bottomleft, bottomright"
        },
        "file": {
          "description": "Path to the image to use as an installer background.",
          "type": "string"
        },
        "scaling": {
          "anyOf": [
            {
              "enum": [
                "none",
                "proportional",
                "tofit"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "tofit",
          "description": "Scaling of the background image.\nOptions are: tofit, none, proportional"
        }
      },
      "type": "object"
    },
    "PkgOptions": {
      "additionalProperties": false,
      "description": "macOS product archive options.",
      "properties": {
        "allowAnywhere": {
          "default": true,
          "description": "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.\n\nCorresponds to [enable_anywhere](https://developer.apple.com/library/content/documentation/DeveloperTools/Reference/DistributionDefinitionRef/Chapters/Distribution_XML_Ref.html#//apple_ref/doc/uid/TP40005370-CH100-SW70).",
          "type": [
            "null",
            "boolean"
          ]
        },
        "allowCurrentUserHome": {
          "default": true,
          "description": "Whether can be installed into the current user’s home directory.\nA home directory installation is done as the current user (not as root), and it cannot write outside of the home directory.\nIf the product cannot be installed in the user’s home directory and be not completely functional from user’s home directory.\n\nCorresponds to [enable_currentUserHome](https://developer.apple.com/library/content/documentation/DeveloperTools/Reference/DistributionDefinitionRef/Chapters/Distribution_XML_Ref.html#//apple_ref/doc/uid/TP40005370-CH100-SW70).",
          "type": [
            "null",
            "boolean"
          ]
        },
        "allowRootDirectory": {
          "default": true,
          "description": "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.\n\nCorresponds to [enable_localSystem](https://developer.apple.com/library/content/documentation/DeveloperTools/Reference/DistributionDefinitionRef/Chapters/Distribution_XML_Ref.html#//apple_ref/doc/uid/TP40005370-CH100-SW70).",
          "type": [
            "null",
            "boolean"
          ]
        },
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template).",
          "type": [
            "null",
            "string"
          ]
        },
        "background": {
          "anyOf": [
            {
              "$ref": "#/definitions/PkgBackgroundOptions"
            },
            {
              "type": "null"
            }
          ],
          "description": "Options for the background image for the installer."
        },
        "conclusion": {
          "description": "The path to the conclusion file. This may be used to customize the text on the final \"Summary\" page of the installer.",
          "type": [
            "null",
            "string"
          ]
        },
        "extraPkgsDir": {
          "description": "The extra component packages directory (relative to build resources directory) for MacOS product archive\nAutoscans directory for any `.pkg` files and adds to `productbuild` command as `--package-path` and `--package` accordingly",
          "type": [
            "null",
            "string"
          ]
        },
        "hasStrictIdentifier": {
          "default": true,
          "description": "Require identical bundle identifiers at install path?",
          "type": [
            "null",
            "boolean"
          ]
        },
        "identity": {
          "description": "The name of certificate to use when signing. Consider using environment variables [CSC_LINK or CSC_NAME](https://www.electron.build/code-signing) instead of specifying this option.",
          "type": [
            "null",
            "string"
          ]
        },
        "installLocation": {
          "default": "/Applications",
          "description": "The install location. [Do not use it](https://stackoverflow.com/questions/12863944/how-do-you-specify-a-default-install-location-to-home-with-pkgbuild) to create per-user package.\nMostly 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.",
          "type": [
            "null",
            "string"
          ]
        },
        "isRelocatable": {
          "default": true,
          "description": "Install bundle over previous version if moved by user?",
          "type": [
            "null",
            "boolean"
          ]
        },
        "isVersionChecked": {
          "default": true,
          "description": "Don't install bundle if newer version on disk?",
          "type": [
            "null",
            "boolean"
          ]
        },
        "license": {
          "description": "The path to EULA license file. Defaults to `license.txt` or `eula.txt` (or uppercase variants). In addition to `txt`, `rtf` and `html` supported (don't forget to use `target=\"_blank\"` for links).",
          "type": [
            "null",
            "string"
          ]
        },
        "mustClose": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Identifies applications that must be closed before the package is installed.\n\nCorresponds to [must-close](https://developer.apple.com/library/archive/documentation/DeveloperTools/Reference/DistributionDefinitionRef/Chapters/Distribution_XML_Ref.html#//apple_ref/doc/uid/TP40005370-CH100-SW77)."
        },
        "overwriteAction": {
          "anyOf": [
            {
              "enum": [
                "update",
                "upgrade"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "upgrade",
          "description": "Specifies how an existing version of the bundle on disk should be handled when the version in\nthe package is installed.\n\nIf you specify upgrade, the bundle in the package atomi-cally replaces any version on disk;\nthis has the effect of deleting old paths that no longer exist in the new version of\nthe bundle.\n\nIf you specify update, the bundle in the package overwrites the version on disk, and any files\nnot contained in the package will be left intact; this is appropriate when you are delivering\nan update-only package.\n\nAnother effect of update is that the package bundle will not be installed at all if there is\nnot already a version on disk; this allows a package to deliver an update for an app that\nthe user might have deleted."
        },
        "productbuild": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "should be not documented, only to experiment"
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        },
        "scripts": {
          "default": "build/pkg-scripts",
          "description": "The scripts directory, relative to `build` (build resources directory).\nThe 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.\nScripts are required to be executable (`chmod +x file`).",
          "type": [
            "null",
            "string"
          ]
        },
        "welcome": {
          "description": "The path to the welcome file. This may be used to customize the text on the Introduction page of the installer.",
          "type": [
            "null",
            "string"
          ]
        }
      },
      "type": "object"
    },
    "PlugDescriptor": {
      "additionalProperties": {
        "anyOf": [
          {
            "type": "object"
          },
          {
            "type": "null"
          }
        ]
      },
      "description": "Maps a named plug to its attribute object.\n`null` uses snapd defaults for that interface.",
      "type": "object"
    },
    "PortableOptions": {
      "additionalProperties": false,
      "description": "Portable options.",
      "properties": {
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template).",
          "type": [
            "null",
            "string"
          ]
        },
        "buildUniversalInstaller": {
          "default": true,
          "description": "Disable building an universal installer of the archs specified in the target configuration",
          "type": "boolean"
        },
        "customNsisBinary": {
          "anyOf": [
            {
              "$ref": "#/definitions/CustomNsisBinary"
            },
            {
              "type": "null"
            }
          ],
          "description": "Allows you to provide your own `makensis`, such as one with support for debug logging via LogSet and LogText. (Logging also requires option `debugLogging = true`)"
        },
        "customNsisResources": {
          "anyOf": [
            {
              "$ref": "#/definitions/CustomNsisResources"
            },
            {
              "type": "null"
            }
          ],
          "description": "Allows you to provide your own `nsis-resources`"
        },
        "guid": {
          "description": "The GUID for the installer. Used to identify the application for upgrade and uninstall operations.\nIf not specified, a deterministic GUID is generated from the app ID (`appId`) — but this means\nchanging your `appId` will break silent upgrades of existing installs.",
          "type": [
            "null",
            "string"
          ]
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        },
        "requestExecutionLevel": {
          "default": "user",
          "description": "The [requested execution level](http://nsis.sourceforge.net/Reference/RequestExecutionLevel) for Windows.",
          "enum": [
            "admin",
            "highest",
            "user"
          ],
          "type": "string"
        },
        "splashImage": {
          "description": "The image to show while the portable executable is extracting. This image must be a bitmap (`.bmp`) image.",
          "type": [
            "null",
            "string"
          ]
        },
        "unicode": {
          "default": true,
          "description": "Whether to create [Unicode installer](http://nsis.sourceforge.net/Docs/Chapter1.html#intro-unicode).",
          "type": "boolean"
        },
        "unpackDirName": {
          "description": "The unpack directory for the portable app resources.\n\nIf set to a string, it will be the name in [TEMP](https://www.askvg.com/where-does-windows-store-temporary-files-and-how-to-change-temp-folder-location/) directory\nIf set explicitly to `false`, it will use the Windows temp directory ($PLUGINSDIR) that is unique to each launch of the portable application.\n\nDefaults to [uuid](https://github.com/segmentio/ksuid) of build (changed on each build of portable executable).",
          "type": [
            "string",
            "boolean"
          ]
        },
        "useZip": {
          "default": false,
          "description": "Forces zip compression format instead of LZMA. Used internally for differential update packages.",
          "type": "boolean"
        },
        "warningsAsErrors": {
          "default": true,
          "description": "If `warningsAsErrors` is `true` (default): NSIS will treat warnings as errors. If `warningsAsErrors` is `false`: NSIS will allow warnings.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "Protocol": {
      "additionalProperties": false,
      "description": "URL Protocol Schemes. Protocols to associate the app with. macOS only.\n\nPlease note — on macOS [you need to register an `open-url` event handler](http://electron.atom.io/docs/api/app/#event-open-url-macos).",
      "properties": {
        "name": {
          "description": "The name. e.g. `IRC server URL`.",
          "type": "string"
        },
        "role": {
          "default": "Editor",
          "description": "*macOS-only* The app’s role with respect to the type.",
          "enum": [
            "Editor",
            "None",
            "Shell",
            "Viewer"
          ],
          "type": "string"
        },
        "schemes": {
          "description": "The schemes. e.g. `[\"irc\", \"ircs\"]`.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "required": [
        "name",
        "schemes"
      ],
      "type": "object"
    },
    "R2Options": {
      "additionalProperties": false,
      "description": "[Cloudflare R2](https://developers.cloudflare.com/r2/) options.\nCredentials are required; define `CF_R2_ACCESS_KEY_ID` and `CF_R2_SECRET_ACCESS_KEY` environment variables\nwith an R2 API token (see https://developers.cloudflare.com/r2/api/s3/tokens/).\n\n**Public access for auto-updates:** R2 buckets are private by default. The S3-compatible API endpoint\nalways requires authentication, so `electron-updater` cannot download updates directly from it.\nYou must either enable a custom domain or an r2.dev subdomain for the bucket in the Cloudflare\ndashboard (see https://developers.cloudflare.com/r2/buckets/public-buckets/) and then set\n`publicUrl` to that base URL so the updater knows where to fetch update metadata and binaries.\n\n**ACLs:** R2 does not support S3 ACLs. The `acl` option from `BaseS3Options` is intentionally\nexcluded here. Configure public bucket access in the Cloudflare dashboard instead.\n\nExample configuration:\n\n```json\n{\n\"build\": {\n \"publish\": {\n   \"provider\": \"r2\",\n   \"bucket\": \"my-releases\",\n   \"accountId\": \"abcdef1234567890abcdef1234567890\",\n   \"publicUrl\": \"https://pub-abcdef1234567890abcdef1234567890.r2.dev\"\n }\n}\n}\n```",
      "properties": {
        "accountId": {
          "description": "Your Cloudflare account ID (32-character hex string). Found on the R2 overview page\nin the Cloudflare dashboard. Used to construct the S3-compatible upload endpoint:\n`https://<accountId>.r2.cloudflarestorage.com`",
          "type": "string"
        },
        "bucket": {
          "description": "The R2 bucket name.",
          "type": "string"
        },
        "channel": {
          "default": "latest",
          "description": "The update channel.",
          "type": [
            "null",
            "string"
          ]
        },
        "jurisdiction": {
          "anyOf": [
            {
              "enum": [
                "eu",
                "fedramp"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "The jurisdiction of the R2 bucket, if the bucket was created with a jurisdictional\nrestriction. Buckets created in a jurisdiction live on a separate endpoint —\n`https://<accountId>.<jurisdiction>.r2.cloudflarestorage.com` — so this must match\nthe jurisdiction the bucket was created with. Omit for regular buckets.\n\nSee https://developers.cloudflare.com/r2/reference/data-location/#jurisdictional-restrictions"
        },
        "path": {
          "default": "/",
          "description": "The directory path.",
          "type": [
            "null",
            "string"
          ]
        },
        "provider": {
          "const": "r2",
          "description": "The provider. Must be `r2`.",
          "type": "string"
        },
        "publicUrl": {
          "description": "The public base URL from which `electron-updater` will download update metadata and\nbinaries. This must be the URL of your bucket's **custom domain** or **r2.dev subdomain**\n(e.g. `https://pub-xxx.r2.dev` or `https://cdn.example.com`).\n\nRequired when `publishAutoUpdate` is not `false`. The R2 S3 API endpoint requires\nauthentication and cannot serve unauthenticated download requests.\n\nSee https://developers.cloudflare.com/r2/buckets/public-buckets/",
          "type": [
            "null",
            "string"
          ]
        },
        "publishAutoUpdate": {
          "default": true,
          "description": "Whether to publish auto update info files.\n\nAuto update relies only on the first provider in the list (you can specify several publishers).\nThus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.",
          "type": "boolean"
        },
        "publisherName": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ]
        },
        "requestHeaders": {
          "$ref": "#/definitions/OutgoingHttpHeaders",
          "description": "Any custom request headers"
        },
        "timeout": {
          "default": 120000,
          "description": "Request timeout in milliseconds. (Default is 2 minutes; O is ignored)",
          "type": [
            "null",
            "number"
          ]
        },
        "updaterCacheDirName": {
          "type": [
            "null",
            "string"
          ]
        }
      },
      "required": [
        "accountId",
        "bucket",
        "provider"
      ],
      "type": "object"
    },
    "Record<string,App>": {
      "type": "object",
      "additionalProperties": {}
    },
    "Record<string,Component>": {
      "type": "object",
      "additionalProperties": {}
    },
    "Record<string,Hook>": {
      "type": "object",
      "additionalProperties": {}
    },
    "Record<string,Part>": {
      "type": "object",
      "additionalProperties": {}
    },
    "Record<string,Platform>": {
      "type": "object",
      "additionalProperties": {}
    },
    "Record<string,Record<string,string>>": {
      "type": "object",
      "additionalProperties": {
        "type": "object",
        "additionalProperties": {
          "type": "string"
        }
      }
    },
    "Record<string,string>": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    },
    "Record<string,string|null>": {
      "type": "object",
      "additionalProperties": {
        "type": [
          "string",
          "null"
        ]
      }
    },
    "Record<string,unknown>": {
      "type": "object",
      "additionalProperties": {}
    },
    "ReleaseInfo": {
      "additionalProperties": false,
      "properties": {
        "releaseDate": {
          "description": "The release date.",
          "type": "string"
        },
        "releaseName": {
          "description": "The release name.",
          "type": [
            "null",
            "string"
          ]
        },
        "releaseNotes": {
          "description": "The release notes.",
          "type": [
            "null",
            "string"
          ]
        },
        "releaseNotesFile": {
          "description": "The path to release notes file. Defaults to `release-notes-${platform}.md` (where `platform` it is current platform — `mac`, `linux` or `windows`) or `release-notes.md` in the [build resources](https://www.electron.build/contents#extraresources).",
          "type": [
            "null",
            "string"
          ]
        },
        "vendor": {
          "anyOf": [
            {
              "typeof": "function"
            },
            {
              "type": "null"
            }
          ],
          "description": "Vendor specific information."
        }
      },
      "type": "object"
    },
    "RemoteBuildOptions": {
      "additionalProperties": false,
      "description": "Configuration for a remote snap build on [Launchpad](https://launchpad.net/).\nRemote builds run on Canonical's infrastructure without requiring native hardware or nested virtualisation.\n\nEach electron-builder build invocation targets exactly one architecture — to build for multiple\narchitectures, configure the top-level `arch` option (e.g. `arch: [\"x64\", \"arm64\"]`); each arch\nspawns a separate `snapcraft remote-build` job on Launchpad.\n\nAuthentication is resolved in this order:\n1. `cscLink` config field — base64-encoded credentials or a file path\n2. `SNAP_CSC_LINK` environment variable — same format as `cscLink`\n   (CI-recommended; follows the same pattern as `WIN_CSC_LINK` for Windows code signing)\n3. `SNAPCRAFT_STORE_CREDENTIALS` environment variable (read directly by snapcraft)\n4. An active interactive `snapcraft login` session\n\n**CI setup** (set once as a CI secret):\n```sh\nexport SNAP_CSC_LINK=$(snapcraft export-login - | base64 -w0)\n```\nThe resolved credentials are injected only into the spawned `snapcraft` subprocess\nenvironment and never exposed through `process.env`.",
      "properties": {
        "acceptPublicUpload": {
          "description": "Suppress the Launchpad public-upload consent prompt by automatically accepting it.\nYour source code will be uploaded to a **public** Launchpad repository.\nSet to `true` in CI once you understand the implications.",
          "type": "boolean"
        },
        "buildFor": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ],
          "description": "Target architecture (or architectures) for the remote build.\n\n- **Single string** (e.g. `\"amd64\"`): one Launchpad job, one output snap.\n- **Array** (e.g. `[\"amd64\", \"arm64\"]`): one Launchpad job that builds all listed\n  architectures and downloads each resulting snap. All produced snaps are emitted as\n  separate build artifacts.\n\nUsing an array here is mutually exclusive with setting `arch: [\"x64\", \"arm64\"]` at the\nelectron-builder top level — the top-level `arch` option spawns a separate remote-build\njob per architecture, which would duplicate work."
        },
        "enabled": {
          "description": "Whether to enable remote build on Launchpad. Must be set explicitly to `true` to opt in.",
          "type": "boolean"
        },
        "launchpadUsername": {
          "description": "Your Launchpad username. Used to select the correct Launchpad account when more than\none set of credentials is available.",
          "type": "string"
        },
        "privateProject": {
          "description": "Launchpad project name to use for a **private** source upload.\nThe project must already exist and you must have write access.",
          "type": "string"
        },
        "recover": {
          "description": "Resume a previously interrupted remote build rather than starting a new one.",
          "type": "boolean"
        },
        "strategy": {
          "description": "Controls whether snapcraft may fall back to a different remote build strategy.\n- `\"disable-fallback\"` — always use the primary strategy, fail if unavailable.\n- `\"force-fallback\"` — always use the fallback strategy.",
          "enum": [
            "disable-fallback",
            "force-fallback"
          ],
          "type": "string"
        },
        "timeout": {
          "description": "Maximum time in seconds to wait for the remote build to complete before aborting.\nPassed to `snapcraft remote-build` as `--timeout <seconds>`.",
          "type": "number"
        }
      },
      "required": [
        "enabled"
      ],
      "type": "object"
    },
    "RpmOptions": {
      "additionalProperties": false,
      "properties": {
        "afterInstall": {
          "description": "File path to script to be passed to FPM for `--after-install` arg.",
          "type": [
            "null",
            "string"
          ]
        },
        "afterRemove": {
          "description": "File path to script to be passed to FPM for `--after-remove` arg.",
          "type": [
            "null",
            "string"
          ]
        },
        "appArmorProfile": {
          "description": "File path to custom AppArmor profile (Ubuntu 24+)",
          "type": [
            "null",
            "string"
          ]
        },
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template).",
          "type": [
            "null",
            "string"
          ]
        },
        "category": {
          "description": "The [application category](https://specifications.freedesktop.org/menu-spec/latest/apa.html#main-category-registry).",
          "type": [
            "null",
            "string"
          ]
        },
        "compression": {
          "anyOf": [
            {
              "enum": [
                "bzip2",
                "gzip",
                "xz",
                "xzmt"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "xzmt",
          "description": "Passed to fpm via `--rpm-compression`. `\"xzmt\"` uses multi-threaded xz (fpm's RPM default).\n`\"xz\"` is automatically promoted to `\"xzmt\"`. `\"gzip\"` and `\"bzip2\"` pass through as-is."
        },
        "depends": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Package dependencies.\n`rpm` defaults to `[\"gtk3\", \"libnotify\", \"nss\", \"libXScrnSaver\", \"(libXtst or libXtst6)\", \"xdg-utils\", \"at-spi2-core\", \"(libuuid or libuuid1)\"]`\n`pacman` defaults to `[\"c-ares\", \"ffmpeg\", \"gtk3\", \"http-parser\", \"libevent\", \"libvpx\", \"libxslt\", \"libxss\", \"minizip\", \"nss\", \"re2\", \"snappy\", \"libnotify\", \"libappindicator-gtk3\"]`"
        },
        "description": {
          "description": "As [description](https://www.electron.build/configuration#description) from application package.json, but allows you to specify different for Linux.",
          "type": [
            "null",
            "string"
          ]
        },
        "desktop": {
          "anyOf": [
            {
              "$ref": "#/definitions/LinuxDesktopFile"
            },
            {
              "type": "null"
            }
          ],
          "description": "The [Desktop file](https://developer.gnome.org/documentation/guidelines/maintainer/integrating.html#desktop-files)"
        },
        "executableArgs": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "The executable parameters. Pass to executableName"
        },
        "fpm": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "*Advanced only* The [fpm](https://fpm.readthedocs.io/en/latest/cli-reference.html) options.\n\nExample: `[\"--before-install=build/deb-preinstall.sh\", \"--after-upgrade=build/deb-postinstall.sh\"]`"
        },
        "icon": {
          "type": "string"
        },
        "maintainer": {
          "type": [
            "null",
            "string"
          ]
        },
        "mimeTypes": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "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."
        },
        "packageCategory": {
          "description": "The package category.",
          "type": [
            "null",
            "string"
          ]
        },
        "packageName": {
          "description": "The name of the package.",
          "type": [
            "null",
            "string"
          ]
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        },
        "synopsis": {
          "description": "The [short description](https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Description).",
          "type": [
            "null",
            "string"
          ]
        },
        "vendor": {
          "type": [
            "null",
            "string"
          ]
        }
      },
      "type": "object"
    },
    "S3Options": {
      "additionalProperties": false,
      "description": "[Amazon S3](https://aws.amazon.com/s3/) options.\nAWS credentials are required, please see [getting your credentials](http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/getting-your-credentials.html).\nTo set credentials define `AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY` [environment variables](http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-environment.html) directly,\nor use [~/.aws/credentials](http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/loading-node-credentials-shared.html) file,\nor use [~/.aws/config](https://docs.aws.amazon.com/sdkref/latest/guide/file-format.html) file. For the last method to work you will also need to define `AWS_SDK_LOAD_CONFIG=1` environment variable.\n\nExample configuration:\n\n```json\n{\n\"build\":\n \"publish\": {\n   \"provider\": \"s3\",\n   \"bucket\": \"bucket-name\"\n }\n}\n}\n```",
      "properties": {
        "accelerate": {
          "description": "If set to true, this will enable the s3 accelerated endpoint\nThese endpoints have a particular format of:\n ${bucketname}.s3-accelerate.amazonaws.com",
          "type": "boolean"
        },
        "acl": {
          "anyOf": [
            {
              "enum": [
                "private",
                "public-read"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "public-read",
          "description": "The ACL. Set to `null` to not [add](https://github.com/electron-userland/electron-builder/issues/1822).\n\nPlease see [required permissions for the S3 provider](https://github.com/electron-userland/electron-builder/issues/1618#issuecomment-314679128)."
        },
        "bucket": {
          "description": "The bucket name.",
          "type": "string"
        },
        "channel": {
          "default": "latest",
          "description": "The update channel.",
          "type": [
            "null",
            "string"
          ]
        },
        "encryption": {
          "anyOf": [
            {
              "enum": [
                "AES256",
                "aws:kms"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Server-side encryption algorithm to use for the object."
        },
        "endpoint": {
          "description": "The endpoint URI to send requests to. The default endpoint is built from the configured region.\nThe endpoint should be a string like `https://{service}.{region}.amazonaws.com`.",
          "type": [
            "null",
            "string"
          ]
        },
        "forcePathStyle": {
          "description": "When true, force a path-style endpoint to be used where the bucket name is part of the path.\n[Path-style Access](https://docs.aws.amazon.com/AmazonS3/latest/userguide/VirtualHosting.html#path-style-access)",
          "type": "boolean"
        },
        "path": {
          "default": "/",
          "description": "The directory path.",
          "type": [
            "null",
            "string"
          ]
        },
        "provider": {
          "const": "s3",
          "description": "The provider. Must be `s3`.",
          "type": "string"
        },
        "publishAutoUpdate": {
          "default": true,
          "description": "Whether to publish auto update info files.\n\nAuto update relies only on the first provider in the list (you can specify several publishers).\nThus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.",
          "type": "boolean"
        },
        "publisherName": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ]
        },
        "region": {
          "description": "The region. Is determined and set automatically when publishing.",
          "type": [
            "null",
            "string"
          ]
        },
        "requestHeaders": {
          "$ref": "#/definitions/OutgoingHttpHeaders",
          "description": "Any custom request headers"
        },
        "storageClass": {
          "anyOf": [
            {
              "enum": [
                "REDUCED_REDUNDANCY",
                "STANDARD",
                "STANDARD_IA"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "STANDARD",
          "description": "The type of storage to use for the object."
        },
        "timeout": {
          "default": 120000,
          "description": "Request timeout in milliseconds. (Default is 2 minutes; O is ignored)",
          "type": [
            "null",
            "number"
          ]
        },
        "updaterCacheDirName": {
          "type": [
            "null",
            "string"
          ]
        }
      },
      "required": [
        "bucket",
        "provider"
      ],
      "type": "object"
    },
    "SlotDescriptor": {
      "additionalProperties": {
        "anyOf": [
          {
            "typeof": "function"
          },
          {
            "type": "null"
          }
        ]
      },
      "description": "Maps a named slot to its attribute object.\n`null` uses snapd defaults for that interface.",
      "type": "object"
    },
    "SnapOptions24": {
      "additionalProperties": false,
      "description": "Options for building a core24 snap. This interface does not extend the legacy\n`SnapBaseOptions` — it uses the snapcraft CLI directly.\n\nFields inherited from {@link CommonLinuxOptions} (`description`, `category`, `mimeTypes`,\n`executableArgs`, `desktop`, `synopsis`) are automatically populated from the root `linux.*`\nconfiguration. You do not need to duplicate them here; values set directly on this interface\ntake precedence over the cascaded `linux.*` values.",
      "properties": {
        "after": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Names of other snapcraft parts that must be built before the app part."
        },
        "appPartStage": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Filesets controlling which files from the app part are staged into the snap.\nSupports glob patterns and exclusions. See [filesets](https://snapcraft.io/docs/snapcraft-filesets)."
        },
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template).",
          "type": [
            "null",
            "string"
          ]
        },
        "assumes": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "Features that must be supported by the host snapd before the snap can be installed.\nSee [assumes](https://snapcraft.io/docs/snapcraft-yaml-reference#assumes)."
        },
        "autoStart": {
          "default": false,
          "description": "Whether the app should auto-start on login (creates an autostart desktop entry).",
          "type": "boolean"
        },
        "buildPackages": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Debian packages required at **build** time (installed inside the build environment)."
        },
        "category": {
          "description": "The [application category](https://specifications.freedesktop.org/menu-spec/latest/apa.html#main-category-registry).",
          "type": [
            "null",
            "string"
          ]
        },
        "compression": {
          "anyOf": [
            {
              "enum": [
                "lzo",
                "xz"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Compression algorithm for the snap SquashFS image.\n- `xz` — smaller file, slower decompression (recommended for distribution).\n- `lzo` — larger file, faster decompression (useful for development iteration).\nOmit to use snapcraft's default (`xz`).\n\nWhen not set, `linux.compression` is mapped automatically:\n`\"store\"` → `\"lzo\"`, `\"maximum\"` → `\"xz\"`, `\"normal\"` → snapcraft default.\nExplicitly setting this field always overrides the mapped value."
        },
        "confinement": {
          "anyOf": [
            {
              "enum": [
                "classic",
                "devmode",
                "strict"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "strict",
          "description": "The type of [confinement](https://snapcraft.io/docs/reference/confinement) supported by the snap."
        },
        "description": {
          "description": "As [description](https://www.electron.build/configuration#description) from application package.json, but allows you to specify different for Linux.",
          "type": [
            "null",
            "string"
          ]
        },
        "desktop": {
          "anyOf": [
            {
              "$ref": "#/definitions/LinuxDesktopFile"
            },
            {
              "type": "null"
            }
          ],
          "description": "The [Desktop file](https://developer.gnome.org/documentation/guidelines/maintainer/integrating.html#desktop-files)"
        },
        "environment": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "description": "Additional environment variables injected into the snap's runtime environment.\nMerged with the electron-builder defaults (`TMPDIR=$XDG_RUNTIME_DIR`).\nUser-supplied values take precedence."
        },
        "executableArgs": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "The executable parameters. Pass to executableName"
        },
        "extensions": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "[Snapcraft extensions](https://snapcraft.io/docs/snapcraft-extensions) to apply to the app.\nDefaults to `[\"gnome\"]` in normal builds (recommended for Electron apps on Ubuntu 24.04+).\nAutomatically set to `[]` in `useDestructiveMode` builds, where the gnome extension is\nincompatible. Explicitly including `\"gnome\"` while `useDestructiveMode` is set will throw.\nSee: https://snapcraft.io/docs/gnome-extension"
        },
        "forceX11": {
          "description": "Set to `true` to force X11 by injecting `--ozone-platform=x11` into the snap command line.\nWhen unset or `false`, no flag is injected and native Wayland is allowed.\nUnlike the legacy `snap.allowNativeWayland`, there is no electron-version-based default here —\ncore24 always allows Wayland unless this is explicitly `true`.",
          "type": [
            "null",
            "boolean"
          ]
        },
        "grade": {
          "anyOf": [
            {
              "enum": [
                "devel",
                "stable"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "stable",
          "description": "The quality grade of the snap.\n`devel` — not publishable to stable/candidate channels.\n`stable` — suitable for all channels."
        },
        "hooks": {
          "default": "build/snap-hooks",
          "description": "Directory containing [snap hooks](https://snapcraft.io/docs/snap-hooks), relative to\nthe build resources directory.",
          "type": [
            "null",
            "string"
          ]
        },
        "layout": {
          "anyOf": [
            {
              "typeof": "function"
            },
            {
              "type": "null"
            }
          ],
          "description": "[Snap layouts](https://snapcraft.io/docs/snap-layouts) — bind-mount or symlink host paths\ninto the snap's namespace. User-provided layouts always override the extension defaults."
        },
        "mimeTypes": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "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."
        },
        "plugs": {
          "anyOf": [
            {
              "$ref": "#/definitions/PlugDescriptor"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/PlugDescriptor"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "[Plugs](https://snapcraft.io/docs/reference/interfaces) (consumed interfaces) for the app.\nWhen the `gnome` extension is active, content-snap plugs (themes, GNOME platform, GPU)\nare added automatically — only list custom plugs here.\nWithout any extension, defaults to the standard Electron plug set.\n\nSupports descriptor objects for plugs with attributes:\n```json\n[{ \"browser-sandbox\": { \"interface\": \"browser-support\", \"allow-sandbox\": true } }]\n```"
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        },
        "remoteBuild": {
          "anyOf": [
            {
              "$ref": "#/definitions/RemoteBuildOptions"
            },
            {
              "type": "null"
            }
          ],
          "description": "Configuration for a remote build on [Launchpad](https://launchpad.net/).\nEnables cross-architecture builds in CI without native hardware or nested virtualisation.\nEach build invocation targets one arch; use `arch: [\"x64\", \"arm64\"]` to build for multiple."
        },
        "slots": {
          "anyOf": [
            {
              "$ref": "#/definitions/SlotDescriptor"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/SlotDescriptor"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "[Slots](https://snapcraft.io/docs/reference/interfaces) (provided interfaces) for the app.\nUse for MPRIS, D-Bus services, etc.\n\nExample — expose MPRIS under the Chromium bus name:\n```json\n[{ \"mpris\": { \"name\": \"chromium\" } }]\n```"
        },
        "stagePackages": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Ubuntu packages to **stage** alongside the app (equivalent to `depends` for deb).\nDefaults to `[\"libnspr4\", \"libnss3\", \"libxss1\", \"libappindicator3-1\", \"libsecret-1-0\"]`.\nSupports the `\"default\"` keyword to reference the default list:\n`[\"default\", \"my-extra-lib\"]` appends `my-extra-lib` to the defaults."
        },
        "summary": {
          "description": "A short summary of the snap (max 78 characters). Defaults to `productName`.",
          "type": [
            "null",
            "string"
          ]
        },
        "synopsis": {
          "description": "The [short description](https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Description).",
          "type": [
            "null",
            "string"
          ]
        },
        "title": {
          "description": "An optional display title (may contain uppercase letters and spaces). Defaults to `productName`.\nSee [snap format](https://snapcraft.io/docs/snap-format).",
          "type": [
            "null",
            "string"
          ]
        },
        "useDestructiveMode": {
          "description": "Build directly on the host without an isolated VM or container (snapcraft `--destructive-mode`).\nEquivalent to setting `SNAPCRAFT_BUILD_ENVIRONMENT=host`.\n\n**Not recommended for most use cases.** Destructive mode pollutes the host environment\nand produces builds that are difficult to reproduce — any library or tool present on the\nhost at build time can silently end up in the snap. Prefer `useLXD` or `useMultipass`\nfor clean, reproducible builds; use `remoteBuild` for multi-architecture CI.\n\nValid reasons to enable this option:\n- Building inside a Docker container where nested virtualisation (LXD / Multipass) is\n  unavailable and a remote Launchpad build is not acceptable.\n- Running test suites in CI where the environment is already fully controlled.\n\nThe `gnome` extension is incompatible with this mode enabled — do not include it in `extensions`.",
          "type": [
            "null",
            "boolean"
          ]
        },
        "useLXD": {
          "description": "Use [LXD](https://canonical.com/lxd) as the isolated build environment.\nPreferred over Multipass on most Linux CI systems where nested virtualisation is unavailable.\nMutually exclusive with `useMultipass` and `useDestructiveMode`.",
          "type": [
            "null",
            "boolean"
          ]
        },
        "useMultipass": {
          "description": "Use [Multipass](https://multipass.run/) as the isolated build environment.\nMutually exclusive with `useLXD` and `useDestructiveMode`.",
          "type": [
            "null",
            "boolean"
          ]
        }
      },
      "type": "object"
    },
    "SnapOptionsCustom": {
      "additionalProperties": false,
      "properties": {
        "yaml": {
          "anyOf": [
            {
              "$ref": "#/definitions/SnapcraftYAML"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "Supports 2 routes:\n- Path to an existing `snapcraft.yaml` file, relative to `buildResourcesDir`. electron-builder reads the file and passes it through without modification.\n- A `SnapcraftYAML` object directly in the configuration. electron-builder uses the object to generate a `snapcraft.yaml` file, which is then passed through without modification."
        }
      },
      "type": "object"
    },
    "SnapOptionsLegacy": {
      "additionalProperties": false,
      "properties": {
        "after": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Names of snapcraft parts that must be built before the app part.\nDefaults to `[\"desktop-gtk2\"]`.\n\nUse `\"default\"` to keep the default and add extras:\n`[\"default\", \"my-helper-part\"]`."
        },
        "allowNativeWayland": {
          "description": "Allow the snap to run with native Wayland support (`--ozone-platform=wayland`).\nDefaults to `false` for Electron < 38 (legacy behaviour); `true` for Electron ≥ 38.\nSet explicitly to override the version-based default.",
          "type": [
            "null",
            "boolean"
          ]
        },
        "appPartStage": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Filesets controlling which files from the app part are staged into the snap.\nSupports individual files, directories, globs, globstars, and exclusions (prefix `!`).\nSee [Snapcraft filesets](https://snapcraft.io/docs/snapcraft-filesets).\nWhen not set, the snap template's default stage list is used for legacy bases (core18/core20/core22)."
        },
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template).",
          "type": [
            "null",
            "string"
          ]
        },
        "assumes": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "[Snapd features](https://snapcraft.io/docs/snapcraft-yaml-reference#assumes) that must\nbe present on the host before the snap can be installed."
        },
        "autoStart": {
          "default": false,
          "description": "Whether the snap should automatically start on login.",
          "type": "boolean"
        },
        "buildPackages": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Debian packages required at **build** time (installed inside the build environment)."
        },
        "category": {
          "description": "The [application category](https://specifications.freedesktop.org/menu-spec/latest/apa.html#main-category-registry).",
          "type": [
            "null",
            "string"
          ]
        },
        "compression": {
          "anyOf": [
            {
              "enum": [
                "lzo",
                "xz"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "description": "Compression algorithm for the snap SquashFS image.\n- `xz` — smaller file, slower decompression (good for distribution).\n- `lzo` — larger file, faster decompression (good for development iteration).\nOmit to use snapcraft's default (`xz`).\n\nWhen not set, `linux.compression` is mapped automatically:\n`\"store\"` → `\"lzo\"`, `\"maximum\"` → `\"xz\"`, `\"normal\"` → snapcraft default.\nExplicitly setting this field always overrides the mapped value."
        },
        "confinement": {
          "anyOf": [
            {
              "enum": [
                "classic",
                "devmode",
                "strict"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "strict",
          "description": "The type of [snap confinement](https://snapcraft.io/docs/reference/confinement).\n- `strict` — recommended; the snap runs in a fully isolated sandbox.\n- `devmode` — sandbox violations are logged but not enforced; for development only.\n- `classic` — no confinement; equivalent to a traditionally packaged application.\n  Requires Snap Store approval before publishing."
        },
        "description": {
          "description": "As [description](https://www.electron.build/configuration#description) from application package.json, but allows you to specify different for Linux.",
          "type": [
            "null",
            "string"
          ]
        },
        "desktop": {
          "anyOf": [
            {
              "$ref": "#/definitions/LinuxDesktopFile"
            },
            {
              "type": "null"
            }
          ],
          "description": "The [Desktop file](https://developer.gnome.org/documentation/guidelines/maintainer/integrating.html#desktop-files)"
        },
        "environment": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "description": "Environment variables injected into the snap's runtime environment.\nMerged with the electron-builder default `{ TMPDIR: \"$XDG_RUNTIME_DIR\" }`.\nUser-supplied values take precedence."
        },
        "executableArgs": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "The executable parameters. Pass to executableName"
        },
        "grade": {
          "anyOf": [
            {
              "enum": [
                "devel",
                "stable"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "stable",
          "description": "The quality grade of the snap.\n- `stable` — suitable for all channels, including `stable` and `candidate`.\n- `devel` — development snapshot; cannot be promoted to `stable` or `candidate`."
        },
        "hooks": {
          "default": "build/snap-hooks",
          "description": "Directory containing [snap hooks](https://snapcraft.io/docs/snap-hooks), relative to\nthe build resources directory (`build/`).",
          "type": [
            "null",
            "string"
          ]
        },
        "layout": {
          "anyOf": [
            {
              "typeof": "function"
            },
            {
              "type": "null"
            }
          ],
          "description": "[Snap layouts](https://snapcraft.io/docs/snap-layouts) — bind-mount or symlink host paths\ninto the snap's namespace, making libraries or config at `/usr`, `/var`, `/etc`, etc.\naccessible inside the confined environment."
        },
        "mimeTypes": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "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."
        },
        "plugs": {
          "anyOf": [
            {
              "$ref": "#/definitions/PlugDescriptor"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/PlugDescriptor"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "[Plugs](https://snapcraft.io/docs/reference/interfaces) (consumed interfaces) to declare\nfor the app entry point.\nDefaults to `[\"desktop\", \"desktop-legacy\", \"home\", \"x11\", \"wayland\", \"unity7\",\n\"browser-support\", \"network\", \"gsettings\", \"audio-playback\", \"pulseaudio\", \"opengl\"]`.\n\nUse `\"default\"` in the list to keep the defaults and append extras:\n`[\"default\", \"camera\"]` adds `camera` to the standard set.\n\nTo configure plug attributes (e.g. `allow-sandbox` for Chromium's internal sandbox),\nuse a descriptor object:\n```json\n[\n  { \"browser-sandbox\": { \"interface\": \"browser-support\", \"allow-sandbox\": true } },\n  \"another-simple-plug-name\"\n]\n```"
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        },
        "slots": {
          "anyOf": [
            {
              "$ref": "#/definitions/SlotDescriptor"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/SlotDescriptor"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "[Slots](https://snapcraft.io/docs/reference/interfaces) (provided interfaces) to declare\nfor the app.\n\nTo expose an MPRIS player under the Chromium bus name (required for strict confinement):\n```json\n[{ \"mpris\": { \"name\": \"chromium\" } }]\n```\nChromium [hard-codes](https://source.chromium.org/chromium/chromium/src/+/master:components/system_media_controls/linux/system_media_controls_linux.cc;l=51;bpv=0;bpt=1)\nthe bus name `chromium`, so the slot name must match for snapd to\n[allow it](https://forum.snapcraft.io/t/unable-to-use-mpris-interface/15360/7)."
        },
        "stagePackages": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Ubuntu packages to **stage** alongside the app (equivalent to `depends` for deb).\nDefaults to `[\"libnspr4\", \"libnss3\", \"libxss1\", \"libappindicator3-1\", \"libsecret-1-0\"]`.\n\nUse the `\"default\"` keyword to extend the default list:\n`[\"default\", \"my-extra-lib\"]` appends `my-extra-lib` to the defaults."
        },
        "summary": {
          "description": "A short summary of the snap (max 78 characters).\nDefaults to [productName](./configuration.md#productName).",
          "type": [
            "null",
            "string"
          ]
        },
        "synopsis": {
          "description": "The [short description](https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Description).",
          "type": [
            "null",
            "string"
          ]
        },
        "title": {
          "description": "Display title for the snap (may contain uppercase letters and spaces).\nDefaults to `productName`.\nSee [snap format](https://snapcraft.io/docs/snap-format).",
          "type": [
            "null",
            "string"
          ]
        },
        "useTemplateApp": {
          "description": "Whether to use the pre-built Electron snap template for faster builds.\nWhen `true`, electron-builder delegates snap assembly to the upstream Electron snap\ntemplate rather than running a full snapcraft build, significantly reducing build time.\nDefaults to `true` when `stagePackages` is not customised.\nOnly applicable to x64 and armv7l builds.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "SnapStoreOptions": {
      "additionalProperties": false,
      "description": "[Snap Store](https://snapcraft.io/) options. To publish directly to Snapcraft, see <a href=\"https://snapcraft.io/docs/snapcraft-authentication\">Snapcraft authentication options</a> for local or CI/CD authentication options.",
      "properties": {
        "channels": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "default": [
            "edge"
          ],
          "description": "The list of channels the snap would be released."
        },
        "provider": {
          "const": "snapStore",
          "description": "The provider. Must be `snapStore`.",
          "type": "string"
        },
        "publishAutoUpdate": {
          "default": true,
          "description": "Whether to publish auto update info files.\n\nAuto update relies only on the first provider in the list (you can specify several publishers).\nThus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.",
          "type": "boolean"
        },
        "publisherName": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ]
        },
        "repo": {
          "description": "snapcraft repo name",
          "type": "string"
        },
        "requestHeaders": {
          "$ref": "#/definitions/OutgoingHttpHeaders",
          "description": "Any custom request headers"
        },
        "timeout": {
          "default": 120000,
          "description": "Request timeout in milliseconds. (Default is 2 minutes; O is ignored)",
          "type": [
            "null",
            "number"
          ]
        },
        "updaterCacheDirName": {
          "type": [
            "null",
            "string"
          ]
        }
      },
      "required": [
        "provider"
      ],
      "type": "object"
    },
    "SnapcraftOptions": {
      "additionalProperties": false,
      "description": "New-style snap configuration. Use this via the `snapcraft` key in your build config.\nSelects the snapcraft core version and its per-core options.",
      "properties": {
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template).",
          "type": [
            "null",
            "string"
          ]
        },
        "base": {
          "description": "The snap base to use as the execution environment. Determines which set of per-core options\n(`core18`, `core20`, `core22`, `core24`, `custom`) is active.\n\nOnly one core may be selected per build target.",
          "enum": [
            "core18",
            "core20",
            "core22",
            "core24",
            "custom"
          ],
          "type": "string"
        },
        "core18": {
          "anyOf": [
            {
              "$ref": "#/definitions/SnapOptionsLegacy"
            },
            {
              "type": "null"
            }
          ],
          "description": "Configuration for a core18 build. Only active when `base` is `\"core18\"`."
        },
        "core20": {
          "anyOf": [
            {
              "$ref": "#/definitions/SnapOptionsLegacy"
            },
            {
              "type": "null"
            }
          ],
          "description": "Configuration for a core20 build. Only active when `base` is `\"core20\"`."
        },
        "core22": {
          "anyOf": [
            {
              "$ref": "#/definitions/SnapOptionsLegacy"
            },
            {
              "type": "null"
            }
          ],
          "description": "Configuration for a core22 build. Only active when `base` is `\"core22\"`."
        },
        "core24": {
          "anyOf": [
            {
              "$ref": "#/definitions/SnapOptions24"
            },
            {
              "type": "null"
            }
          ],
          "description": "Options for building a core24 snap. Uses the snapcraft CLI directly.\nInherits desktop-entry fields from `CommonLinuxOptions` and publish config from `TargetSpecificOptions`."
        },
        "cscLink": {
          "description": "Snapcraft Store credentials — base64-encoded credentials string or file path.\nAccepts the same formats as `WIN_CSC_LINK` / `CSC_LINK`: base64 data,\nabsolute/relative/`~/` file paths, and `file://` URIs.\nRelative paths are resolved against the build resources directory.\n\nInjected as `SNAPCRAFT_STORE_CREDENTIALS` into every snapcraft subprocess\n(core18/core20/core22/core24 builds and `snapcraft upload`).\nNot applied for `base: \"custom\"` — inject credentials manually via environment variables.\n\nThe `SNAP_CSC_LINK` environment variable is the CI-friendly alternative.\nGenerate with: `snapcraft export-login - | base64 -w0`",
          "type": "string"
        },
        "custom": {
          "anyOf": [
            {
              "$ref": "#/definitions/SnapOptionsCustom"
            },
            {
              "type": "null"
            }
          ],
          "description": "Pass-through custom snap configuration. electron-builder will read the\nsnapcraft.yaml at `yamlPath` and use it verbatim — no plugs, extensions,\norganize mappings, or desktop files are injected."
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        }
      },
      "required": [
        "base"
      ],
      "type": "object"
    },
    "SnapcraftYAML": {
      "additionalProperties": false,
      "description": "Latest TypeScript types for snapcraft.yaml\nFocuses on the most common Core24 configuration\nBased on https://snapcraft.io/docs/snapcraft-yaml-reference\n   npm install -g json-schema-to-typescript\n   curl -o snapcraft-schema.json https://raw.githubusercontent.com/canonical/snapcraft/refs/heads/main/schema/snapcraft.json\n   npx json2ts -i snapcraft-schema.json -o snapcraft.ts\n(manual edits to simplify and make more strict)",
      "properties": {
        "adopt-info": {
          "description": "Selects a part to inherit metadata from",
          "type": "string"
        },
        "apps": {
          "$ref": "#/definitions/Record<string,App>",
          "description": "The individual programs and services that the snap runs"
        },
        "architectures": {
          "description": "The architectures that the snap builds and runs on (core22 and earlier)",
          "items": {
            "anyOf": [
              {
                "$ref": "#/definitions/Architecture"
              },
              {
                "type": "string"
              }
            ]
          },
          "type": "array"
        },
        "assumes": {
          "description": "The minimum version of snapd and features the snap requires",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "base": {
          "description": "The baseline system that the snap is built in",
          "enum": [
            "bare",
            "core22",
            "core24",
            "core26",
            "devel"
          ],
          "type": "string"
        },
        "build-base": {
          "description": "The baseline system that the snap is built in",
          "type": "string"
        },
        "components": {
          "$ref": "#/definitions/Record<string,Component>",
          "description": "Components to build in conjunction with the snap"
        },
        "compression": {
          "description": "Specifies the algorithm that compresses the snap",
          "enum": [
            "lzo",
            "xz"
          ],
          "type": "string"
        },
        "confinement": {
          "description": "The amount of isolation the snap has from the host system",
          "enum": [
            "classic",
            "devmode",
            "strict"
          ],
          "type": "string"
        },
        "contact": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ],
          "description": "The snap author's contact links and email addresses"
        },
        "description": {
          "type": "string"
        },
        "donation": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ],
          "description": "The snap's donation links"
        },
        "environment": {
          "$ref": "#/definitions/Record<string,string|null>",
          "description": "The snap's runtime environment variables"
        },
        "epoch": {
          "description": "The epoch associated with this version of the snap",
          "type": "string"
        },
        "grade": {
          "enum": [
            "devel",
            "stable"
          ],
          "type": "string"
        },
        "hooks": {
          "$ref": "#/definitions/Record<string,Hook>",
          "description": "Configures the snap's hooks"
        },
        "icon": {
          "description": "The path to the snap's icon file",
          "type": "string"
        },
        "issues": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ],
          "description": "Links for submitting issues, bugs, and feature requests"
        },
        "layout": {
          "$ref": "#/definitions/Record<string,Record<string,string>>",
          "description": "The file layouts in the execution environment"
        },
        "license": {
          "description": "The project's license as an SPDX expression",
          "type": "string"
        },
        "lint": {
          "description": "The linter configuration settings",
          "typeof": "function"
        },
        "name": {
          "description": "The identifying name of the snap",
          "type": "string"
        },
        "package-repositories": {
          "description": "The package repositories to use for build and stage packages",
          "items": {
            "$ref": "#/definitions/Record<string,unknown>"
          },
          "type": "array"
        },
        "parts": {
          "$ref": "#/definitions/Record<string,Part>",
          "description": "The self-contained software pieces needed to create the final artifact"
        },
        "passthrough": {
          "$ref": "#/definitions/Record<string,unknown>",
          "description": "Attributes to pass to snap's metadata file"
        },
        "platforms": {
          "$ref": "#/definitions/Record<string,Platform>",
          "description": "The platforms where the snap can be built and run (core24+)"
        },
        "plugs": {
          "$ref": "#/definitions/Record<string,unknown>",
          "description": "Declares the snap's plugs"
        },
        "provenance": {
          "description": "Primary-key header for snaps signed by third parties",
          "type": "string"
        },
        "slots": {
          "$ref": "#/definitions/Record<string,unknown>",
          "description": "Declares the snap's slots"
        },
        "source-code": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ],
          "description": "Links to the source code"
        },
        "summary": {
          "description": "A short description of the project (max 78 chars)",
          "type": "string"
        },
        "system-usernames": {
          "$ref": "#/definitions/Record<string,unknown>",
          "description": "The system usernames the snap can use"
        },
        "title": {
          "type": "string"
        },
        "type": {
          "description": "Snap type",
          "enum": [
            "app",
            "base",
            "gadget",
            "kernel",
            "snapd"
          ],
          "type": "string"
        },
        "ua-services": {
          "description": "Ubuntu Pro services to enable when building",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "version": {
          "type": "string"
        },
        "website": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ],
          "description": "Links to the original software's web pages"
        }
      },
      "required": [
        "base",
        "confinement",
        "name",
        "parts"
      ],
      "type": "object"
    },
    "SpacesOptions": {
      "additionalProperties": false,
      "description": "[DigitalOcean Spaces](https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-spaces) options.\nAccess key is required, define `DO_KEY_ID` and `DO_SECRET_KEY` environment variables.",
      "properties": {
        "acl": {
          "anyOf": [
            {
              "enum": [
                "private",
                "public-read"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "public-read",
          "description": "The ACL. Set to `null` to not [add](https://github.com/electron-userland/electron-builder/issues/1822)."
        },
        "channel": {
          "default": "latest",
          "description": "The update channel.",
          "type": [
            "null",
            "string"
          ]
        },
        "name": {
          "description": "The space name.",
          "type": "string"
        },
        "path": {
          "default": "/",
          "description": "The directory path.",
          "type": [
            "null",
            "string"
          ]
        },
        "provider": {
          "const": "spaces",
          "description": "The provider. Must be `spaces`.",
          "type": "string"
        },
        "publishAutoUpdate": {
          "default": true,
          "description": "Whether to publish auto update info files.\n\nAuto update relies only on the first provider in the list (you can specify several publishers).\nThus, probably, there`s no need to upload the metadata files for the other configured providers. But by default will be uploaded.",
          "type": "boolean"
        },
        "publisherName": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ]
        },
        "region": {
          "description": "The region (e.g. `nyc3`).",
          "type": "string"
        },
        "requestHeaders": {
          "$ref": "#/definitions/OutgoingHttpHeaders",
          "description": "Any custom request headers"
        },
        "timeout": {
          "default": 120000,
          "description": "Request timeout in milliseconds. (Default is 2 minutes; O is ignored)",
          "type": [
            "null",
            "number"
          ]
        },
        "updaterCacheDirName": {
          "type": [
            "null",
            "string"
          ]
        }
      },
      "required": [
        "name",
        "provider",
        "region"
      ],
      "type": "object"
    },
    "SquirrelWindowsOptions": {
      "additionalProperties": false,
      "properties": {
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template).",
          "type": [
            "null",
            "string"
          ]
        },
        "customSquirrelVendorDir": {
          "description": "The custom squirrel vendor dir. If not specified will use the Squirrel.Windows that is shipped with electron-installer(https://github.com/electron/windows-installer/tree/main/vendor).\nAfter https://github.com/electron-userland/electron-builder-binaries/pull/56 merged, will add `electron-builder-binaries` to get the latest version of squirrel.",
          "type": "string"
        },
        "iconUrl": {
          "description": "A URL to an ICO file to use as the application icon (displayed in Control Panel > Programs and Features). Defaults to the Electron icon.\n\nPlease note — [local icon file url is not accepted](https://github.com/atom/grunt-electron-installer/issues/73), must be https/http.\n\nIf you don't plan to build windows installer, you can omit it.\nIf your project repository is public on GitHub, it will be `https://github.com/${u}/${p}/blob/master/build/icon.ico?raw=true` by default.",
          "type": [
            "null",
            "string"
          ]
        },
        "loadingGif": {
          "description": "The path to a .gif file to display during install. `build/install-spinner.gif` will be used if exists (it is a recommended way to set)\n(otherwise [default](https://github.com/electron/windows-installer/blob/master/resources/install-spinner.gif)).",
          "type": [
            "null",
            "string"
          ]
        },
        "msi": {
          "description": "Whether to create an MSI installer. Defaults to `false` (MSI is not created).",
          "type": "boolean"
        },
        "name": {
          "description": "https://github.com/electron-userland/electron-builder/issues/1743",
          "type": "string"
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ]
        },
        "remoteReleases": {
          "description": "A URL to your existing updates. Or `true` to automatically set to your GitHub repository. If given, these will be downloaded to create delta updates.",
          "type": [
            "null",
            "string",
            "boolean"
          ]
        },
        "remoteToken": {
          "description": "Authentication token for remote updates",
          "type": [
            "null",
            "string"
          ]
        },
        "useAppIdAsId": {
          "description": "Use `appId` to identify package instead of `name`.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "TargetConfiguration": {
      "additionalProperties": false,
      "properties": {
        "arch": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/definitions/ArchType"
              },
              "type": "array"
            },
            {
              "enum": [
                "arm64",
                "armv7l",
                "ia32",
                "universal",
                "x64"
              ],
              "type": "string"
            }
          ],
          "description": "The arch or list of archs."
        },
        "target": {
          "description": "The target name. e.g. `snap`.",
          "type": "string"
        }
      },
      "required": [
        "target"
      ],
      "type": "object"
    },
    "ToolsetConfig": {
      "additionalProperties": false,
      "description": "Version pins and custom bundle overrides for the binary toolsets that electron-builder downloads and caches locally.\n\nEach toolset is a versioned archive hosted at [electron-userland/electron-builder-binaries](https://github.com/electron-userland/electron-builder-binaries/releases).\nOmitting a property (or setting it to `latest`) selects the modern default for that toolset.\n\nTo supply your own bundle, set the property to a {@link ToolsetCustom} object with a `url` (https:// or file://) and a `checksum` for verification. The bundle must mirror the expected directory layout of the corresponding built-in bundle; see the build scripts at\nhttps://github.com/electron-userland/electron-builder-binaries/tree/master/packages.",
      "properties": {
        "appimage": {
          "anyOf": [
            {
              "$ref": "#/definitions/ToolsetCustom"
            },
            {
              "enum": [
                "0.0.0",
                "1.0.3",
                "1.1.0",
                "latest"
              ],
              "type": "string"
            }
          ],
          "default": "latest",
          "description": "Version of the AppImage toolset bundle used for building `.AppImage` files.\n\nThe bundle ships:\n- **`mksquashfs`** — creates the SquashFS filesystem embedded in the AppImage.\n- **`desktop-file-validate`** — validates the generated `.desktop` entry.\n- **AppImage runtime** — the self-executing stub that mounts the SquashFS at launch.\n\nAvailable versions:\n| Version | Runtime date | Notes |\n|---------|-------------|-------|\n| `\"0.0.0\"` | Legacy | FUSE2-based AppImage runtime (pre-v27) |\n| `\"1.0.3\"` | 20251108 | Introduces static AppImage runtime |\n| `\"1.1.0\"` | 20251108 | Adds `unsquashfs` support |\n\nReleases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/appimage/CHANGELOG.md"
        },
        "fpm": {
          "anyOf": [
            {
              "$ref": "#/definitions/ToolsetCustom"
            },
            {
              "enum": [
                "2.2.1",
                "latest"
              ],
              "type": "string"
            }
          ],
          "default": "latest",
          "description": "Version of the FPM bundle used to build Linux packages (`.deb`, `.rpm`, `.pacman`, etc.)\non macOS and Linux hosts.\n\nAvailable versions:\n| Version | FPM version | Notes |\n|---------|------------|-------|\n| `\"2.2.1\"` | 1.17.0 (Ruby 3.4.3) | Current default |\n\nReleases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/fpm/CHANGELOG.md"
        },
        "icons": {
          "anyOf": [
            {
              "$ref": "#/definitions/ToolsetCustom"
            },
            {
              "enum": [
                "1.2.1",
                "latest"
              ],
              "type": "string"
            }
          ],
          "default": "latest",
          "description": "Version of the icons-conversion bundle used to convert source images to `.icns`, `.ico`,\nand PNG icon sets.\n\nSet to a {@link ToolsetCustom} object to supply your own icons bundle directory.\n\nAvailable versions:\n| Version | Notes |\n|---------|-------|\n| `\"1.2.1\"` | `wasm-vips` + `@resvg/resvg-wasm` |\n\nReleases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/icons/CHANGELOG.md"
        },
        "linuxToolsMac": {
          "anyOf": [
            {
              "$ref": "#/definitions/ToolsetCustom"
            },
            {
              "enum": [
                "1.0.0",
                "latest"
              ],
              "type": "string"
            }
          ],
          "default": "latest",
          "description": "Version of the Linux-tools-mac bundle used to produce `.tar.lz` archives and build\nLinux targets on macOS hosts.\n\nThe bundle ships macOS-native builds of `ar`, `lzip`, and `gtar` (GNU tar).\n\nAvailable versions:\n| Version | Notes |\n|---------|-------|\n| `\"1.0.0\"` | gnu-tar, lzip, makedepend, glib, libgsf, libtool, pcre, gettext, binutils |\n\nReleases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/linux-tools-mac/CHANGELOG.md"
        },
        "nsis": {
          "anyOf": [
            {
              "$ref": "#/definitions/ToolsetCustom"
            },
            {
              "enum": [
                "0.0.0",
                "1.2.1",
                "latest"
              ],
              "type": "string"
            }
          ],
          "default": "latest",
          "description": "Version of the NSIS toolset bundle used to compile Windows installers.\n\nThe bundle ships:\n- **`makensis`** — the NSIS compiler invoked to build `.nsi` scripts into `.exe` installers.\n- **NSIS plugins** — the plugin DLLs (`NsisMultiUser`, `UAC`, `StdUtils`, etc.) referenced by\n  electron-builder's default installer scripts.\n- **`elevate.exe`** — UAC elevation helper included in NSIS installers.\n\nAvailable versions:\n| Version | `makensis` version | Notes |\n|---------|------------------|-------|\n| `\"0.0.0\"` | 3.0.4.1 | Legacy split bundle — `nsis` + `nsis-resources` archives (pre-v27) |\n| `\"1.2.1\"` | 3.12 | Unified bundle — single archive, entrypoint scripts auto-set `NSISDIR` |\n\nReleases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/nsis/CHANGELOG.md"
        },
        "sevenZip": {
          "anyOf": [
            {
              "$ref": "#/definitions/ToolsetCustom"
            },
            {
              "enum": [
                "1.0.0",
                "latest"
              ],
              "type": "string"
            }
          ],
          "default": "latest",
          "description": "Version of the 7-Zip binary bundle used internally to extract `.7z` and `.tar.xz` archives.\n\nSet to a {@link ToolsetCustom} object to supply your own 7za binary.\nThe `url` must point to a directory (or a `.tar.gz`/`.zip` archive of one) that contains\n`bin/7za` (macOS/Linux) or `bin/7za.exe` (Windows).\n\n**Bootstrap constraint:** the custom bundle itself must be a `.tar.gz` or `.zip` archive\n(or a bare `file://` directory). `.7z` and `.tar.xz` archives cannot be used here because\nextracting them requires 7za — a circular dependency."
        },
        "winCodeSign": {
          "anyOf": [
            {
              "$ref": "#/definitions/ToolsetCustom"
            },
            {
              "enum": [
                "0.0.0",
                "1.0.0",
                "1.1.0",
                "1.1.1",
                "1.2.1",
                "1.3.0",
                "latest"
              ],
              "type": "string"
            }
          ],
          "default": "latest",
          "description": "Version of the `win-codesign` bundle used for Windows code signing and resource editing.\n\nThe bundle ships:\n- **`signtool.exe`** (Windows) / **`osslsigncode`** (macOS & Linux) — used to sign `.exe`,\n  `.dll`, and `.msix` artifacts.\n- **`rcedit`** — embeds version metadata and icons into `.exe` files (legacy usage, migrated to npm `resedit` package).\n- **Windows Kits** — used by AppX/MSIX packaging (`makeappx`, `signtool`).\n\nAvailable versions:\n| Version | Notes |\n|---------|-------|\n| `\"0.0.0\"` | Legacy bundle — `winCodeSign-2.6.0` (pre-v27) |\n| `\"1.0.0\"` | Windows Kits 10.0.26100.0, `osslsigncode` v2.9 |\n| `\"1.1.1\"` | Updates `osslsigncode` to v2.11 |\n| `\"1.2.1\"` | Adds native `osslsigncode` arm64 |\n| `\"1.3.0\"` | Includes support for Azure Trusted Signing `signtool` via dlib and .NET 8 runtime |\n\nReleases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/win-codesign/CHANGELOG.md"
        },
        "wine": {
          "anyOf": [
            {
              "$ref": "#/definitions/ToolsetCustom"
            },
            {
              "enum": [
                "0.0.0",
                "1.0.1",
                "latest"
              ],
              "type": "string"
            }
          ],
          "default": "latest",
          "description": "Version of the Wine bundle used to run Windows tools (NSIS, rcedit, signtool) on\nnon-Windows hosts (macOS and Linux).\n\nWine is only required when building Windows targets on a non-Windows machine. On Windows,\nthis setting has no effect.\n\nAvailable versions:\n| Version | Wine version | Platform support | Notes |\n|---------|-------------|-----------------|-------|\n| `\"0.0.0\"` | 4.0.1 | macOS | Legacy portable bundle (pre-v27) |\n| `\"1.0.1\"` | 11.0 | macOS | Supports arm64 macOS via Rosetta |\n\nTo use a custom Wine binary, use a `ToolsetCustom` object.\n\nReleases: https://github.com/electron-userland/electron-builder-binaries/blob/master/packages/wine/CHANGELOG.md"
        }
      },
      "type": "object"
    },
    "ToolsetCustom": {
      "additionalProperties": false,
      "description": "A custom toolset bundle supplied by the user in place of a built-in versioned bundle.\n\nThe bundle must mirror the expected directory layout of the corresponding built-in bundle.\nSee the build scripts at\nhttps://github.com/electron-userland/electron-builder-binaries/tree/master/packages.\n\nFile formats supported for `url` archives: `.zip`, `.7z`, `.tar.gz`, `.tar.xz`.",
      "properties": {
        "checksum": {
          "description": "SHA checksum of the custom toolset bundle for verification.\nRequired for remote (`https://`) URLs and local archive files (`file://`).\nNot needed for bare directory paths — the directory is used as-is with no caching.",
          "type": "string"
        },
        "url": {
          "description": "The `https://` URL or `file://` path to load the custom toolset bundle from.\n\n- `https://` — downloaded and cached locally; the archive is extracted before use.\n- `file:///absolute/path` — used directly; relative paths must be within the project resources dir.\n\nArchives (`.zip`, `.7z`, `.tar.gz`, `.tar.xz`) are extracted automatically.\nA bare directory path (no archive) is used as-is.",
          "type": "string"
        },
        "version": {
          "description": "Optional version label used in the local cache directory name.\nFalls back to the first 8 characters of `checksum` when omitted.",
          "type": "string"
        }
      },
      "required": [
        "url"
      ],
      "type": "object"
    },
    "WindowsAzureSigningConfig": {
      "additionalProperties": false,
      "description": "The `signtool /dlib` Azure Trusted Signing integration was introduced in `toolsets.winCodeSign: 1.3.0`.\nThe legacy PowerShell integration is deprecated, but leverages the same underlying Azure APIs, so both interfaces share the same config shape.",
      "properties": {
        "additionalMetadata": {
          "$ref": "#/definitions/Record<string,string>",
          "description": "Additional fields to include verbatim in the `metadata.json` file passed to\n`Azure.CodeSigning.Dlib.dll` via `signtool /dmdf`. Use this for DLib-specific options\nnot covered by the typed fields above (e.g. `ExcludeCredentials`, `CorrelationId`)."
        },
        "certificateProfileName": {
          "description": "The name of the Trusted Signing Certificate Profile to sign with, as created in your Azure\nCode Signing Account. Maps to the DLib metadata field `CertificateProfileName`.",
          "type": "string"
        },
        "codeSigningAccountName": {
          "description": "The name of the Azure Trusted Signing (Code Signing) Account that owns the certificate profile.\nMaps to the DLib metadata field `CodeSigningAccountName`.",
          "type": "string"
        },
        "endpoint": {
          "description": "The Trusted Signing Account endpoint. The URI value must align to the region your Trusted\nSigning Account and Certificate Profile were created in.\n\nRequires Azure Entra ID environment variables per\n[Microsoft's documentation](https://learn.microsoft.com/en-us/dotnet/api/azure.identity.environmentcredential?view=azure-dotnet#definition).",
          "type": "string"
        },
        "fileDigest": {
          "default": "SHA256",
          "description": "The digest algorithm used to hash the files being signed. Maps to the DLib metadata field\n`FileDigest`.",
          "type": "string"
        },
        "publisherName": {
          "description": "The publisher name to associate with the signature, exactly as it appears in the certificate\nissued by your Trusted Signing certificate profile. Required. Used for\n[update verification](#verifyUpdateCodeSignature) (embedded in `app-update.yml` and checked by\nelectron-updater) and must match the certificate subject.",
          "type": "string"
        },
        "timestampDigest": {
          "default": "SHA256",
          "description": "The timestamp digest algorithm. Translates to field: TimestampDigest.",
          "type": "string"
        },
        "timestampRfc3161": {
          "default": "http://timestamp.acs.microsoft.com",
          "description": "The RFC3161 timestamp server. Translates to field: TimestampRfc3161.",
          "type": "string"
        },
        "type": {
          "const": "azure",
          "description": "Discriminator selecting Azure Trusted Signing (cloud signing — no local certificate).",
          "type": "string"
        }
      },
      "required": [
        "certificateProfileName",
        "codeSigningAccountName",
        "endpoint",
        "publisherName",
        "type"
      ],
      "type": "object"
    },
    "WindowsConfiguration": {
      "additionalProperties": false,
      "properties": {
        "appId": {
          "default": "com.electron.${name}",
          "description": "The application id. Used as [CFBundleIdentifier](https://developer.apple.com/library/ios/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html#//apple_ref/doc/uid/20001431-102070) for MacOS and as\n[Application User Model ID](https://msdn.microsoft.com/en-us/library/windows/desktop/dd378459(v=vs.85).aspx) for Windows (NSIS target only, Squirrel.Windows not supported). It is strongly recommended that an explicit ID is set.",
          "type": [
            "null",
            "string"
          ]
        },
        "artifactName": {
          "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template). Defaults to `${productName}-${version}.${ext}` (some target can have other defaults, see corresponding options).",
          "type": [
            "null",
            "string"
          ]
        },
        "asar": {
          "anyOf": [
            {
              "$ref": "#/definitions/AsarOptions"
            },
            {
              "type": [
                "null",
                "boolean"
              ]
            }
          ],
          "default": true,
          "description": "Whether to package the application's source code into an archive, using [Electron's archive format](http://electron.atom.io/docs/tutorial/application-packaging/).\n\nNode modules that must be unpacked will be detected automatically. Use {@link AsarOptions.unpack} to specify additional files to unpack."
        },
        "compression": {
          "anyOf": [
            {
              "enum": [
                "maximum",
                "normal",
                "store"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "normal",
          "description": "The compression level. If you want to rapidly test build, `store` can reduce build time significantly. `maximum` doesn't lead to noticeable size difference, but increase build time."
        },
        "cscKeyPassword": {
          "type": [
            "null",
            "string"
          ]
        },
        "cscLink": {
          "type": [
            "null",
            "string"
          ]
        },
        "defaultArch": {
          "description": "The default architecture to build for when no `--arch` flag is specified.\nDefaults to the current machine's architecture.",
          "type": "string"
        },
        "detectUpdateChannel": {
          "default": true,
          "description": "Whether to infer update channel from application version pre-release components. e.g. if version `0.12.1-alpha.1`, channel will be set to `alpha`. Otherwise to `latest`.\nThis does *not* apply to github publishing, which will [never auto-detect the update channel](https://github.com/electron-userland/electron-builder/issues/8589).",
          "type": "boolean"
        },
        "electronLanguages": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "string"
            }
          ],
          "description": "The electron locales to keep. By default, all Electron locales used as-is."
        },
        "electronUpdaterCompatibility": {
          "description": "The [electron-updater compatibility](https://www.electron.build/auto-update#compatibility) semver range.",
          "type": [
            "null",
            "string"
          ]
        },
        "executableName": {
          "description": "The executable name. Defaults to `productName`\nNote: Except for Linux, where this would constitute a breaking change in previous behavior and lead to both invalid executable names and Desktop files. Ref comments in: https://github.com/electron-userland/electron-builder/pull/9068",
          "type": [
            "null",
            "string"
          ]
        },
        "extraFiles": {
          "anyOf": [
            {
              "$ref": "#/definitions/FileSet"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/FileSet"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "The same as [extraResources](#extraresources) but copy into the app's content directory (`Contents` for MacOS, root directory for Linux and Windows)."
        },
        "extraResources": {
          "anyOf": [
            {
              "$ref": "#/definitions/FileSet"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/FileSet"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "A [glob patterns](https://www.electron.build/file-patterns) 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).\n\nFile patterns (and support for `from` and `to` fields) the same as for [files](#files)."
        },
        "fileAssociations": {
          "anyOf": [
            {
              "$ref": "#/definitions/FileAssociation"
            },
            {
              "items": {
                "$ref": "#/definitions/FileAssociation"
              },
              "type": "array"
            }
          ],
          "description": "The file associations."
        },
        "files": {
          "anyOf": [
            {
              "$ref": "#/definitions/FileSet"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/FileSet"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "A [glob patterns](https://www.electron.build/file-patterns) relative to the [app directory](https://www.electron.build/configuration#directories), which specifies which files to include when copying files to create the package.\n\nDefaults to:\n```json\n[\n\"**\\/*\",\n\"!**\\/node_modules/*\\/{CHANGELOG.md,README.md,README,readme.md,readme}\",\n\"!**\\/node_modules/*\\/{test,__tests__,tests,powered-test,example,examples}\",\n\"!**\\/node_modules/*.d.ts\",\n\"!**\\/node_modules/.bin\",\n\"!**\\/*.{iml,o,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,xproj}\",\n\"!.editorconfig\",\n\"!**\\/._*\",\n\"!**\\/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,.gitignore,.gitattributes}\",\n\"!**\\/{__pycache__,thumbs.db,.flowconfig,.idea,.vs,.nyc_output}\",\n\"!**\\/{appveyor.yml,.travis.yml,circle.yml}\",\n\"!**\\/{npm-debug.log,yarn.lock,.yarn-integrity,.yarn-metadata.json}\"\n]\n```\n\nDevelopment 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.\n\nDefault 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.\n\nMay be specified in the platform options (e.g. in the [mac](https://www.electron.build/mac)).\n\nYou may also specify custom source and destination directories by using `FileSet` objects instead of simple glob patterns.\n\n```json\n[\n{\n\"from\": \"path/to/source\",\n\"to\": \"path/to/destination\",\n\"filter\": [\"**\\/*\", \"!foo/*.js\"]\n}\n]\n```\n\nYou can use [file macros](https://www.electron.build/file-patterns#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."
        },
        "forceCodeSigning": {
          "default": false,
          "description": "Whether to fail if app will be not code signed.",
          "type": "boolean"
        },
        "generateUpdatesFilesForAllChannels": {
          "default": false,
          "description": "Please see [Building and Releasing using Channels](https://github.com/electron-userland/electron-builder/issues/1182#issuecomment-324947139).",
          "type": "boolean"
        },
        "icon": {
          "default": "build/icon.ico",
          "description": "The path to application icon.",
          "type": [
            "null",
            "string"
          ]
        },
        "legalTrademarks": {
          "description": "The trademarks and registered trademarks.",
          "type": [
            "null",
            "string"
          ]
        },
        "protocols": {
          "anyOf": [
            {
              "$ref": "#/definitions/Protocol"
            },
            {
              "items": {
                "$ref": "#/definitions/Protocol"
              },
              "type": "array"
            }
          ],
          "description": "The URL protocol schemes."
        },
        "publish": {
          "anyOf": [
            {
              "$ref": "#/definitions/GithubOptions"
            },
            {
              "$ref": "#/definitions/GitlabOptions"
            },
            {
              "$ref": "#/definitions/S3Options"
            },
            {
              "$ref": "#/definitions/SpacesOptions"
            },
            {
              "$ref": "#/definitions/R2Options"
            },
            {
              "$ref": "#/definitions/GenericServerOptions"
            },
            {
              "$ref": "#/definitions/CustomPublishOptions"
            },
            {
              "$ref": "#/definitions/KeygenOptions"
            },
            {
              "$ref": "#/definitions/SnapStoreOptions"
            },
            {
              "$ref": "#/definitions/BitbucketOptions"
            },
            {
              "items": {
                "$ref": "#/definitions/AllPublishOptions"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "Publisher configuration. See [Auto Update](https://www.electron.build/publish) for more information."
        },
        "releaseInfo": {
          "$ref": "#/definitions/ReleaseInfo",
          "description": "The release info. Intended for command line usage:\n\n```\n-c.releaseInfo.releaseNotes=\"new features\"\n```"
        },
        "requestedExecutionLevel": {
          "anyOf": [
            {
              "enum": [
                "asInvoker",
                "highestAvailable",
                "requireAdministrator"
              ],
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": "asInvoker",
          "description": "The [security level](https://msdn.microsoft.com/en-us/library/6ad1fshk.aspx#Anchor_9) at which the application requests to be executed.\nCannot be specified per target, allowed only in the `win`."
        },
        "sign": {
          "anyOf": [
            {
              "$ref": "#/definitions/WindowsSigntoolSigningConfig"
            },
            {
              "$ref": "#/definitions/WindowsHsmSigningConfig"
            },
            {
              "$ref": "#/definitions/WindowsPkcs11SigningConfig"
            },
            {
              "$ref": "#/definitions/WindowsAzureSigningConfig"
            },
            {
              "const": false,
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "description": "Code signing configuration. Code signing stamps every installer and executable\nelectron-builder produces with an Authenticode signature, so that Windows (SmartScreen / UAC)\nand your auto-updater can verify the publisher and that the files were not tampered with.\n\nHow this option behaves:\n- Leave **unset** to sign using credentials discovered from the environment — primarily a\n  certificate supplied via `WIN_CSC_LINK` (or `CSC_LINK`) with its password in\n  `WIN_CSC_KEY_PASSWORD` (or `CSC_KEY_PASSWORD`). `WIN_CSC_LINK` accepts a file path, an\n  `https://` URL, or a base64-encoded certificate. This is the recommended setup for CI.\n- Set to `false` or `null` to **disable** code signing entirely (executable resources such as\n  the icon and metadata are still edited).\n- Set to an **object** to configure signing explicitly. The `type` field selects the signing\n  backend (`signtool` is the implicit default) and dispatches to a dedicated sign manager;\n  provide exactly one of the modes below. Each output artifact is signed individually, and by\n  default executables are dual-signed (see `signingHashAlgorithms`).\n\n- `{ type: \"signtool\", ... }` — Sign with a local certificate file (.pfx/.p12) or a\n  certificate from the Windows certificate store. Uses Microsoft `signtool.exe` on Windows and\n  `osslsigncode` on macOS/Linux.\n- `{ type: \"hsm\", ... }` — Sign using a Hardware Security Module (HSM) or FIPS-compliant\n  hardware token via signtool's `/csp` (cryptographic service provider) and `/kc` (key\n  container) flags. Requires a modern `winCodeSign` toolset (the default — only the legacy\n  `\"0.0.0\"` pin is unsupported). Windows-only.\n- `{ type: \"pkcs11\", ... }` — Sign using a PKCS#11 hardware token via osslsigncode.\n  Available on macOS and Linux CI without a Windows VM.\n- `{ type: \"azure\", ... }` — Sign via Azure Trusted Signing (cloud service). Requires\n  Azure Entra ID environment variables for authentication.\n\nSee [Code Signing](https://www.electron.build/code-signing)."
        },
        "signExts": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Additional file name suffixes to code sign, beyond the default. By default electron-builder\nonly signs `.exe` files; list extra suffixes here to also sign e.g. `.dll`, `.node`, or\nspecific file names. Advanced option — most apps do not need it.\n\nEach entry is matched with `String.endsWith`, so both bare extensions (`\".dll\"`) and full file\nnames (`\"mybinary.dll\"`) work. Prefix a pattern with `!` to *exclude* a suffix that would\notherwise be signed. Positive patterns are evaluated first, then negative ones. For example,\n`[\"somefilename\", \".dll\", \"!.appx\"]` signs `.dll` files (and anything ending in `somefilename`)\nbut never signs `.appx` files."
        },
        "target": {
          "anyOf": [
            {
              "$ref": "#/definitions/TargetConfiguration"
            },
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/definitions/TargetConfiguration"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "default": "nsis",
          "description": "The target package type: list of `nsis`, `nsis-web` (Web installer), `portable` ([portable app](https://www.electron.build/nsis#portable) without installation), `appx`, `msix`, `msi`, `msi-wrapped`, `squirrel`, `7z`, `zip`, `tar.xz`, `tar.lz`, `tar.gz`, `tar.bz2`, `dir`.\nAppX and MSIX packages can be built on Windows 10 or Windows Server 2012 R2 (version 6.3+) or later, and on macOS via Parallels Desktop.\n\nTo use Squirrel.Windows please install `electron-builder-squirrel-windows` dependency."
        },
        "verifyUpdateCodeSignature": {
          "default": true,
          "description": "Whether the NSIS auto-updater should verify the Authenticode signature of a downloaded update\nbefore installing it. This is a **runtime** check performed by your app via electron-updater,\nnot a build-time check.\n\nWhen enabled (the default), the resolved [publisher name](#publisherName) is embedded into\n`app-update.yml` at build time. At update time electron-updater inspects the certificate that\nsigned the downloaded installer and compares its subject (Distinguished Name / Common Name)\nagainst that publisher name, refusing to install on a mismatch. This prevents a tampered or\nmaliciously substituted update from being installed.\n\nSet to `false` to skip verification — in which case the publisher name is **not** embedded.\nDisable this only if your updates are not Authenticode-signed.",
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "WindowsHsmSigningConfig": {
      "additionalProperties": false,
      "properties": {
        "additionalCertificateFile": {
          "description": "Path to an additional certificate file (typically an intermediate / cross-signing CA\ncertificate) whose contents are added to the signature block via signtool's `/ac` flag. Use\nthis when the signing certificate's full chain is not already present on target machines and\nyou want it embedded in the signature so the chain can be validated.",
          "type": [
            "null",
            "string"
          ]
        },
        "certificateFile": {
          "description": "Path to the certificate file containing the public certificate chain (.crt / .cer / .pfx).\nThe private key is NOT read from this file — it is provided by the HSM via `cryptoServiceProvider`.",
          "type": [
            "null",
            "string"
          ]
        },
        "certificateSha1": {
          "description": "Alternative to `certificateFile`: locate the public certificate in the Windows certificate\nstore by its SHA-1 thumbprint. The private key still comes from the HSM via\n`cryptoServiceProvider` / `keyContainer`; this only identifies which public certificate to sign\nwith.",
          "type": [
            "null",
            "string"
          ]
        },
        "certificateSubjectName": {
          "description": "Alternative to `certificateFile`: locate the public certificate in the Windows certificate\nstore by (a substring of) its subject name. The private key still comes from the HSM via\n`cryptoServiceProvider` / `keyContainer`; this only identifies which public certificate to sign\nwith.",
          "type": [
            "null",
            "string"
          ]
        },
        "cryptoServiceProvider": {
          "description": "The name of the cryptographic service provider (CSP) that holds the private key.\nMaps to signtool's `/csp` flag. Examples:\n- Google Cloud KMS: `\"Google Cloud KMS Provider\"`\n- Smart card / FIPS token: `\"Microsoft Base Smart Card Crypto Provider\"`\n\nRequires a modern `winCodeSign` toolset (the default; only the legacy `\"0.0.0\"` pin is\nunsupported). Windows-only — use `type: \"pkcs11\"` on macOS/Linux.",
          "type": "string"
        },
        "keyContainer": {
          "description": "The key container name within the CSP. Maps to signtool's `/kc` flag.\n\nExample for Google Cloud KMS:\n`\"projects/PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME/cryptoKeyVersions/1\"`",
          "type": "string"
        },
        "publisherName": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "The publisher name(s) to associate with the signature, written exactly as the subject appears\nin your code signing certificate. May be a single string or an array — an array is useful when\nrotating certificates, so updates signed by either the old or the new certificate still verify.\n\nThis value is not a `signtool` argument; it is consumed in two places:\n- **Update verification** — when [verifyUpdateCodeSignature](#verifyUpdateCodeSignature) is\n  enabled, it is written into `app-update.yml` and electron-updater checks it against the\n  certificate that signed each downloaded update.\n- **AppX / MSIX identity** — the package `Publisher` attribute must equal the certificate\n  subject, so electron-builder derives it from this value (or the certificate) to keep them\n  in sync; a mismatch makes packaging fail with `ERROR_BAD_FORMAT`.\n\nDefaults to the Common Name (CN) extracted from your code signing certificate. Set to `null`\nto opt out."
        },
        "rfc3161TimeStampServer": {
          "default": "http://timestamp.digicert.com",
          "description": "The URL of the [RFC 3161](https://www.ietf.org/rfc/rfc3161.txt) timestamp server, used for\nSHA-256 and nested/appended signatures (signtool's `/tr` flag). Timestamping records *when*\nthe file was signed so the signature stays valid after the signing certificate expires.\nIgnored when the build runs with `ELECTRON_BUILDER_OFFLINE=true`.",
          "type": [
            "null",
            "string"
          ]
        },
        "sign": {
          "anyOf": [
            {
              "typeof": "function"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "A custom signing hook that **replaces** electron-builder's built-in `signtool` /\n`osslsigncode` invocation. Provide a function, or the path / module id of a file that exports\na `sign` function (resolved relative to the project, then as a module).\n\nThe hook is invoked once per signing pass (i.e. once per entry in\n[signingHashAlgorithms](#signingHashAlgorithms)) and receives a configuration object describing\nthe file to sign (`path`), the resolved certificate info (`cscInfo`), the current `hash`, and\nwhether this pass is a nested signature (`isNest`), plus a `computeSignToolArgs(isWin)` helper\nthat returns the default arguments electron-builder would otherwise have used. Use this to\nintegrate an external or cloud signing service. See\n[Code Signing](https://www.electron.build/code-signing)."
        },
        "signingHashAlgorithms": {
          "anyOf": [
            {
              "items": {
                "enum": [
                  "sha1",
                  "sha256"
                ],
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": "['sha1', 'sha256']",
          "description": "The digest (hash) algorithms to sign with, applied via signtool's `/fd` flag (or\nosslsigncode's `-h`). One signing pass runs per entry, in order; listing more than one\n**dual-signs** the file, with each additional signature appended as a nested signature\n(signtool `/as`). Signing with both `sha1` and `sha256` lets a single binary validate on\nlegacy (pre-SHA-2) Windows as well as modern Windows.\n\nSome targets override this: `.msi` cannot be dual-signed (a single hash is used) and AppX/MSIX\nis always `sha256` only."
        },
        "timeStampServer": {
          "default": "http://timestamp.digicert.com",
          "description": "The URL of the legacy Authenticode timestamp server, used for SHA-1 signatures (signtool's\n`/t` flag). This is also the timestamp server used by `osslsigncode` (`-t`) when signing on\nmacOS/Linux. See [rfc3161TimeStampServer](#rfc3161TimeStampServer) for SHA-256 / nested\nsignatures. Ignored when the build runs with `ELECTRON_BUILDER_OFFLINE=true`.",
          "type": [
            "null",
            "string"
          ]
        },
        "type": {
          "const": "hsm",
          "description": "Discriminator selecting HSM / hardware-token signing via signtool's `/csp` and `/kc` flags.",
          "type": "string"
        }
      },
      "required": [
        "cryptoServiceProvider",
        "keyContainer",
        "type"
      ],
      "type": "object"
    },
    "WindowsPkcs11SigningConfig": {
      "additionalProperties": false,
      "description": "Sign with a PKCS#11 hardware token (smart card, USB HSM, cloud KMS exposed via a PKCS#11\nprovider) using `osslsigncode`. Unlike `hsm`, this mode does **not** require Windows or a\nWindows VM, so it can sign Windows binaries directly from macOS/Linux CI. The token PIN is read\nfrom the `WIN_CSC_KEY_PASSWORD` (or `CSC_KEY_PASSWORD`) environment variable.",
      "properties": {
        "additionalCertificateFile": {
          "description": "Path to an additional certificate file (typically an intermediate / cross-signing CA\ncertificate) whose contents are added to the signature block via signtool's `/ac` flag. Use\nthis when the signing certificate's full chain is not already present on target machines and\nyou want it embedded in the signature so the chain can be validated.",
          "type": [
            "null",
            "string"
          ]
        },
        "certificateFile": {
          "description": "Optional path to a certificate chain file to accompany the PKCS#11 key.\nIf omitted the certificate embedded in the token is used.",
          "type": [
            "null",
            "string"
          ]
        },
        "pkcs11KeyUri": {
          "description": "RFC 7512 PKCS#11 URI identifying the private key within the module.\nMaps to osslsigncode's `-key` parameter.\n\nExample: `\"pkcs11:token=MyToken;object=MyKey;type=private\"`\n\nMust be paired with `pkcs11Module`.",
          "type": "string"
        },
        "pkcs11Module": {
          "description": "Path to the PKCS#11 shared library (`.so` on Linux, `.dylib` on macOS).\nThe library must be installed separately — electron-builder does not bundle it.\n\nExample: `\"/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so\"`\n\nMust be paired with `pkcs11KeyUri`.",
          "type": "string"
        },
        "publisherName": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "The publisher name(s) to associate with the signature, written exactly as the subject appears\nin your code signing certificate. May be a single string or an array — an array is useful when\nrotating certificates, so updates signed by either the old or the new certificate still verify.\n\nThis value is not a `signtool` argument; it is consumed in two places:\n- **Update verification** — when [verifyUpdateCodeSignature](#verifyUpdateCodeSignature) is\n  enabled, it is written into `app-update.yml` and electron-updater checks it against the\n  certificate that signed each downloaded update.\n- **AppX / MSIX identity** — the package `Publisher` attribute must equal the certificate\n  subject, so electron-builder derives it from this value (or the certificate) to keep them\n  in sync; a mismatch makes packaging fail with `ERROR_BAD_FORMAT`.\n\nDefaults to the Common Name (CN) extracted from your code signing certificate. Set to `null`\nto opt out."
        },
        "rfc3161TimeStampServer": {
          "default": "http://timestamp.digicert.com",
          "description": "The URL of the [RFC 3161](https://www.ietf.org/rfc/rfc3161.txt) timestamp server, used for\nSHA-256 and nested/appended signatures (signtool's `/tr` flag). Timestamping records *when*\nthe file was signed so the signature stays valid after the signing certificate expires.\nIgnored when the build runs with `ELECTRON_BUILDER_OFFLINE=true`.",
          "type": [
            "null",
            "string"
          ]
        },
        "sign": {
          "anyOf": [
            {
              "typeof": "function"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "A custom signing hook that **replaces** electron-builder's built-in `signtool` /\n`osslsigncode` invocation. Provide a function, or the path / module id of a file that exports\na `sign` function (resolved relative to the project, then as a module).\n\nThe hook is invoked once per signing pass (i.e. once per entry in\n[signingHashAlgorithms](#signingHashAlgorithms)) and receives a configuration object describing\nthe file to sign (`path`), the resolved certificate info (`cscInfo`), the current `hash`, and\nwhether this pass is a nested signature (`isNest`), plus a `computeSignToolArgs(isWin)` helper\nthat returns the default arguments electron-builder would otherwise have used. Use this to\nintegrate an external or cloud signing service. See\n[Code Signing](https://www.electron.build/code-signing)."
        },
        "signingHashAlgorithms": {
          "anyOf": [
            {
              "items": {
                "enum": [
                  "sha1",
                  "sha256"
                ],
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": "['sha1', 'sha256']",
          "description": "The digest (hash) algorithms to sign with, applied via signtool's `/fd` flag (or\nosslsigncode's `-h`). One signing pass runs per entry, in order; listing more than one\n**dual-signs** the file, with each additional signature appended as a nested signature\n(signtool `/as`). Signing with both `sha1` and `sha256` lets a single binary validate on\nlegacy (pre-SHA-2) Windows as well as modern Windows.\n\nSome targets override this: `.msi` cannot be dual-signed (a single hash is used) and AppX/MSIX\nis always `sha256` only."
        },
        "timeStampServer": {
          "default": "http://timestamp.digicert.com",
          "description": "The URL of the legacy Authenticode timestamp server, used for SHA-1 signatures (signtool's\n`/t` flag). This is also the timestamp server used by `osslsigncode` (`-t`) when signing on\nmacOS/Linux. See [rfc3161TimeStampServer](#rfc3161TimeStampServer) for SHA-256 / nested\nsignatures. Ignored when the build runs with `ELECTRON_BUILDER_OFFLINE=true`.",
          "type": [
            "null",
            "string"
          ]
        },
        "type": {
          "const": "pkcs11",
          "description": "Discriminator selecting cross-platform PKCS#11 token signing via `osslsigncode`.",
          "type": "string"
        }
      },
      "required": [
        "pkcs11KeyUri",
        "pkcs11Module",
        "type"
      ],
      "type": "object"
    },
    "WindowsSigntoolSigningConfig": {
      "additionalProperties": false,
      "description": "Sign with a certificate file (`.pfx` / `.p12`) or with a certificate from the Windows\ncertificate store, using Microsoft `signtool.exe` on Windows and `osslsigncode` on macOS/Linux.\nThis is the default mode when `win.sign` is unset. Supply the certificate one of four ways:\na file via `certificateFile` (or the `WIN_CSC_LINK` env var), or a store lookup via\n`certificateSubjectName` or `certificateSha1`.",
      "properties": {
        "additionalCertificateFile": {
          "description": "Path to an additional certificate file (typically an intermediate / cross-signing CA\ncertificate) whose contents are added to the signature block via signtool's `/ac` flag. Use\nthis when the signing certificate's full chain is not already present on target machines and\nyou want it embedded in the signature so the chain can be validated.",
          "type": [
            "null",
            "string"
          ]
        },
        "certificateFile": {
          "description": "Path to the PKCS#12 certificate file (`.pfx` or `.p12`) holding both the signing certificate\nand its private key. Passed to signtool via `/f` (or osslsigncode via `-pkcs12`).\n\nPrefer supplying this out-of-band via the `WIN_CSC_LINK` (or `CSC_LINK`) environment variable\ninstead of hardcoding a path — that variable also accepts an `https://` URL or a base64-encoded\ncertificate, which is safer and more convenient on CI. See\n[Code Signing](https://www.electron.build/code-signing).",
          "type": [
            "null",
            "string"
          ]
        },
        "certificatePassword": {
          "description": "The password protecting the private key in `certificateFile`. Passed to signtool via `/p`\n(or osslsigncode via `-pass`).\n\nPrefer the `WIN_CSC_KEY_PASSWORD` (or `CSC_KEY_PASSWORD`) environment variable so the secret\nnever lands in your build configuration.",
          "type": [
            "null",
            "string"
          ]
        },
        "certificateSha1": {
          "description": "Select the signing certificate from the Windows certificate store by its SHA-1 thumbprint,\ninstead of pointing at a `.pfx` file. electron-builder looks the certificate up in the store\nand signs with `/sha1 <thumbprint> /s <store>`. Like\n[certificateSubjectName](#certificateSubjectName), this suits EV certificates backed by a\nhardware token; if both are set, both must resolve to the same certificate.\n\nWorks only on Windows (or macOS with Parallels Desktop, via the bundled Windows VM).",
          "type": [
            "null",
            "string"
          ]
        },
        "certificateSubjectName": {
          "description": "Select the signing certificate from the Windows certificate store by (a substring of) its\nsubject name, instead of pointing at a `.pfx` file. electron-builder enumerates the installed\ncode-signing certificates, picks the match, and signs by its thumbprint\n(`/sha1 <thumbprint> /s <store>`). **Required for EV (Extended Validation) certificates**,\nwhose private keys live on a hardware token and cannot be exported to a file.\n\nWorks only on Windows (or macOS with Parallels Desktop, via the bundled Windows VM).",
          "type": [
            "null",
            "string"
          ]
        },
        "publisherName": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "The publisher name(s) to associate with the signature, written exactly as the subject appears\nin your code signing certificate. May be a single string or an array — an array is useful when\nrotating certificates, so updates signed by either the old or the new certificate still verify.\n\nThis value is not a `signtool` argument; it is consumed in two places:\n- **Update verification** — when [verifyUpdateCodeSignature](#verifyUpdateCodeSignature) is\n  enabled, it is written into `app-update.yml` and electron-updater checks it against the\n  certificate that signed each downloaded update.\n- **AppX / MSIX identity** — the package `Publisher` attribute must equal the certificate\n  subject, so electron-builder derives it from this value (or the certificate) to keep them\n  in sync; a mismatch makes packaging fail with `ERROR_BAD_FORMAT`.\n\nDefaults to the Common Name (CN) extracted from your code signing certificate. Set to `null`\nto opt out."
        },
        "rfc3161TimeStampServer": {
          "default": "http://timestamp.digicert.com",
          "description": "The URL of the [RFC 3161](https://www.ietf.org/rfc/rfc3161.txt) timestamp server, used for\nSHA-256 and nested/appended signatures (signtool's `/tr` flag). Timestamping records *when*\nthe file was signed so the signature stays valid after the signing certificate expires.\nIgnored when the build runs with `ELECTRON_BUILDER_OFFLINE=true`.",
          "type": [
            "null",
            "string"
          ]
        },
        "sign": {
          "anyOf": [
            {
              "typeof": "function"
            },
            {
              "type": [
                "null",
                "string"
              ]
            }
          ],
          "description": "A custom signing hook that **replaces** electron-builder's built-in `signtool` /\n`osslsigncode` invocation. Provide a function, or the path / module id of a file that exports\na `sign` function (resolved relative to the project, then as a module).\n\nThe hook is invoked once per signing pass (i.e. once per entry in\n[signingHashAlgorithms](#signingHashAlgorithms)) and receives a configuration object describing\nthe file to sign (`path`), the resolved certificate info (`cscInfo`), the current `hash`, and\nwhether this pass is a nested signature (`isNest`), plus a `computeSignToolArgs(isWin)` helper\nthat returns the default arguments electron-builder would otherwise have used. Use this to\nintegrate an external or cloud signing service. See\n[Code Signing](https://www.electron.build/code-signing)."
        },
        "signingHashAlgorithms": {
          "anyOf": [
            {
              "items": {
                "enum": [
                  "sha1",
                  "sha256"
                ],
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": "['sha1', 'sha256']",
          "description": "The digest (hash) algorithms to sign with, applied via signtool's `/fd` flag (or\nosslsigncode's `-h`). One signing pass runs per entry, in order; listing more than one\n**dual-signs** the file, with each additional signature appended as a nested signature\n(signtool `/as`). Signing with both `sha1` and `sha256` lets a single binary validate on\nlegacy (pre-SHA-2) Windows as well as modern Windows.\n\nSome targets override this: `.msi` cannot be dual-signed (a single hash is used) and AppX/MSIX\nis always `sha256` only."
        },
        "timeStampServer": {
          "default": "http://timestamp.digicert.com",
          "description": "The URL of the legacy Authenticode timestamp server, used for SHA-1 signatures (signtool's\n`/t` flag). This is also the timestamp server used by `osslsigncode` (`-t`) when signing on\nmacOS/Linux. See [rfc3161TimeStampServer](#rfc3161TimeStampServer) for SHA-256 / nested\nsignatures. Ignored when the build runs with `ELECTRON_BUILDER_OFFLINE=true`.",
          "type": [
            "null",
            "string"
          ]
        },
        "type": {
          "const": "signtool",
          "description": "Discriminator selecting the default file/store signing mode.",
          "type": "string"
        }
      },
      "required": [
        "type"
      ],
      "type": "object"
    }
  },
  "description": "The root build configuration object passed to electron-builder.\n\nExtends {@link CommonConfiguration} with top-level Electron-specific options, configuration\ninheritance/presets, and all per-platform build hooks.",
  "properties": {
    "afterAllArtifactBuild": {
      "anyOf": [
        {
          "typeof": "function"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "Called after **all** artifacts across all platforms/architectures have been built.\n\nMay return an array of additional file paths that should be treated as publish targets\n(i.e. uploaded to the configured publisher).\n\nReceives a {@link BuildResult}."
    },
    "afterExtract": {
      "anyOf": [
        {
          "typeof": "function"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "Called after the prebuilt Electron binary has been extracted to the staging directory but\nbefore the app files have been copied into it.\n\nUse this hook to patch or augment the Electron binary itself (e.g. rename helper processes,\ninject native libraries) before the app payload is laid down on top.\n\nReceives an {@link AfterExtractContext}."
    },
    "afterPack": {
      "anyOf": [
        {
          "typeof": "function"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "Called after the app files have been copied into the staging directory (and ASAR created if\napplicable) but **before** signing and before the output archive/installer is built.\n\nUse this hook to post-process the staged app bundle (e.g. strip debug symbols, inject\nplatform-specific resources).\n\nReceives an {@link AfterPackContext}."
    },
    "afterSign": {
      "anyOf": [
        {
          "typeof": "function"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "Called after code signing but **before** the signed app is packed into the final\ndistributable format (e.g. before `dmg` is created from the signed `.app`).\n\nUse this hook to perform post-sign validation or to add signed resources that are not part of\nthe main app bundle.\n\nReceives an {@link AfterPackContext}."
    },
    "apk": {
      "anyOf": [
        {
          "$ref": "#/definitions/LinuxTargetSpecificOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "Alpine Linux APK package options.\n\nProduces an `.apk` archive installable via `apk add --allow-untrusted ./package.apk`."
    },
    "appId": {
      "default": "com.electron.${name}",
      "description": "The application identifier.\n\nUsed as [`CFBundleIdentifier`](https://developer.apple.com/documentation/bundleresources/information_property_list/cfbundleidentifier)\non macOS and as the\n[Application User Model ID](https://learn.microsoft.com/en-us/windows/win32/shell/appids)\non Windows (NSIS target only; Squirrel.Windows does not support custom Application User Model IDs).\n\nIt is strongly recommended to set an explicit, reverse-DNS-style identifier (e.g. `\"com.example.myapp\"`)\nrather than relying on the generated default.",
      "type": [
        "null",
        "string"
      ]
    },
    "appImage": {
      "anyOf": [
        {
          "$ref": "#/definitions/AppImageOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "AppImage options.\n\nAppImage is a portable application format that bundles the app and its runtime dependencies\ninto a single self-contained executable that runs on most Linux distributions without\ninstallation. The produced `.AppImage` file is executable after `chmod +x`."
    },
    "appx": {
      "anyOf": [
        {
          "$ref": "#/definitions/AppXOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "Windows Store (MSIX/AppX) package options.\n\nProduces a `.appx` or `.msix` package suitable for distribution through the Microsoft Store or\nside-loading."
    },
    "appxManifestCreated": {
      "anyOf": [
        {
          "typeof": "function"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "Called after the AppX/MSIX manifest XML has been written to the staging directory but before\n`makeappx` packages it.\n\nThe hook receives the path to the manifest file as a string. Use it to inject custom manifest\nextensions (capabilities, protocol handlers, etc.) not exposed through {@link AppXOptions}."
    },
    "artifactBuildCompleted": {
      "anyOf": [
        {
          "typeof": "function"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "Called when an individual artifact has been successfully built and written to disk.\n\nUse this hook to collect artifact paths, upload to custom destinations, or trigger\npost-processing steps.\n\nReceives an {@link ArtifactCreated}."
    },
    "artifactBuildStarted": {
      "anyOf": [
        {
          "typeof": "function"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "Called when an individual artifact build starts (e.g. just before a `.dmg` or `.exe` is\nwritten to disk).\n\nReceives an {@link ArtifactBuildStarted}."
    },
    "artifactName": {
      "description": "The [artifact file name template](https://www.electron.build/configuration#artifact-file-name-template). Defaults to `${productName}-${version}.${ext}` (some target can have other defaults, see corresponding options).",
      "type": [
        "null",
        "string"
      ]
    },
    "asar": {
      "anyOf": [
        {
          "$ref": "#/definitions/AsarOptions"
        },
        {
          "type": [
            "null",
            "boolean"
          ]
        }
      ],
      "default": true,
      "description": "Whether to package the application's source code into an archive, using [Electron's archive format](http://electron.atom.io/docs/tutorial/application-packaging/).\n\nNode modules that must be unpacked will be detected automatically. Use {@link AsarOptions.unpack} to specify additional files to unpack."
    },
    "beforeBuild": {
      "anyOf": [
        {
          "typeof": "function"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "Called before dependencies are installed or native modules are rebuilt.\n\nReturn `false` (or a `Promise` that resolves to `false`) to skip the install/rebuild step\nentirely — useful when you manage `node_modules` externally (e.g. in a CI pipeline that\nrestores them from cache). When not set, electron-builder proceeds with the normal\ninstall/rebuild flow.\n\nIf this hook is provided and `node_modules` is missing, electron-builder will not perform\nthe production-dependencies check.\n\nReceives a {@link BeforeBuildContext}."
    },
    "beforePack": {
      "anyOf": [
        {
          "typeof": "function"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "Called immediately before electron-builder begins packing the app for each platform/arch\ncombination.\n\nUse this hook to perform last-minute modifications to source files or build resources before\nthey are read by the packager.\n\nReceives a {@link BeforePackContext}."
    },
    "buildNumber": {
      "description": "The build number.\n\nMaps to the `--iteration` flag for FPM-based Linux targets and is appended to the version\nstring in `CFBundleVersion` (macOS) and `FileVersion` (Windows) when {@link buildVersion} is\nnot set explicitly.\n\nIf not set, falls back to the first defined environment variable among:\n`BUILD_NUMBER`, `TRAVIS_BUILD_NUMBER`, `APPVEYOR_BUILD_NUMBER`, `CIRCLE_BUILD_NUM`,\n`BUILD_BUILDNUMBER`, `CI_PIPELINE_IID`.",
      "type": [
        "null",
        "string"
      ]
    },
    "buildVersion": {
      "description": "The full build version string.\n\nMaps to `CFBundleVersion` on macOS and the `FileVersion` metadata field on Windows.\nDefaults to the `version` field from `package.json`.\n\nIf `buildVersion` is not set but {@link buildNumber} is defined (or resolved from an\nenvironment variable), the effective build version becomes `${version}.${buildNumber}`.",
      "type": [
        "null",
        "string"
      ]
    },
    "compression": {
      "anyOf": [
        {
          "enum": [
            "maximum",
            "normal",
            "store"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": "normal",
      "description": "The compression level. If you want to rapidly test build, `store` can reduce build time significantly. `maximum` doesn't lead to noticeable size difference, but increase build time."
    },
    "concurrency": {
      "anyOf": [
        {
          "$ref": "#/definitions/Concurrency"
        },
        {
          "type": "null"
        }
      ],
      "description": "Configuration for experimental concurrent (multi-platform / multi-arch) builds.\n\nWhen `jobs > 1`, electron-builder runs up to `jobs` platform builds in parallel. This is an\nexperimental feature — use with caution and verify that your hook functions and build resources\nare safe to execute concurrently."
    },
    "copyright": {
      "default": "Copyright © ${year} ${author}",
      "description": "The copyright string embedded in the built artifacts.\n\nAppears in the Windows `LegalCopyright` version-info field and the macOS `NSHumanReadableCopyright`\nInfo.plist key.",
      "type": [
        "null",
        "string"
      ]
    },
    "cscKeyPassword": {
      "type": [
        "null",
        "string"
      ]
    },
    "cscLink": {
      "type": [
        "null",
        "string"
      ]
    },
    "deb": {
      "anyOf": [
        {
          "$ref": "#/definitions/DebOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "Debian package options.\n\nTargets Debian, Ubuntu, and Debian-based distributions. Produces a `.deb` archive\ninstallable via `dpkg -i` or `apt install ./package.deb`."
    },
    "defaultArch": {
      "description": "The default architecture to build for when no `--arch` flag is specified.\nDefaults to the current machine's architecture.",
      "type": "string"
    },
    "detectUpdateChannel": {
      "default": true,
      "description": "Whether to infer update channel from application version pre-release components. e.g. if version `0.12.1-alpha.1`, channel will be set to `alpha`. Otherwise to `latest`.\nThis does *not* apply to github publishing, which will [never auto-detect the update channel](https://github.com/electron-userland/electron-builder/issues/8589).",
      "type": "boolean"
    },
    "directories": {
      "anyOf": [
        {
          "$ref": "#/definitions/MetadataDirectories"
        },
        {
          "type": "null"
        }
      ],
      "description": "Overrides for input/output directory paths used during the build."
    },
    "dmg": {
      "anyOf": [
        {
          "$ref": "#/definitions/DmgOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "macOS DMG disk image options (background image, window position, icon layout, licence, etc.)."
    },
    "downloadAlternateFFmpeg": {
      "description": "Whether to download the FFmpeg library variant from Electron's release assets and replace the\ndefault (proprietary codec) FFmpeg library before signing.\n\nThe alternate FFmpeg is compiled without proprietary codec support (H.264, AAC, etc.) and is\nrequired for distributing on certain platforms (e.g., Linux distributions that prohibit\nproprietary codecs). Enabling this swaps the bundled `ffmpeg` dynamic library before the app\nis signed.",
      "type": "boolean"
    },
    "electronBranding": {
      "$ref": "#/definitions/ElectronBrandingOptions",
      "description": "Electron branding overrides.\n\nRequired only when packaging a custom Electron fork that ships a modified `BRANDING.json`\n(e.g., a fork that renames the `Electron Helper` process or the `Electron Framework`).\nStandard Electron builds do not need this."
    },
    "electronDist": {
      "anyOf": [
        {
          "typeof": "function"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "Override the source of the Electron distribution to stage.\n\nShould return the path to either:\n- A **directory** containing a pre-built, unpacked Electron app (e.g. `~/electron/out/R`).\n- A **directory** containing Electron zip archives following the naming convention\n  `electron-v${version}-${platformName}-${arch}.zip`.\n\nWhen not set, electron-builder downloads the official Electron release from GitHub (or the\nmirror configured via `electronDownload`).\n\nReceives a {@link PrepareApplicationStageDirectoryOptions}."
    },
    "electronFuses": {
      "anyOf": [
        {
          "$ref": "#/definitions/FuseOptionsV1"
        },
        {
          "type": "null"
        }
      ],
      "description": "Options forwarded to [`@electron/fuses`](https://github.com/electron/fuses) to flip Electron\nfeature flags in the binary.\n\nFuses are compile-time-like flags baked into the Electron binary that cannot be changed at\nruntime. Flipping them is the approved mechanism for hardening Electron apps (e.g., disabling\n`ELECTRON_RUN_AS_NODE`, enabling ASAR integrity, etc.).\n\nelectron-builder flips fuses after packaging but before signing so that the final signature\ncovers the modified binary."
    },
    "electronGet": {
      "anyOf": [
        {
          "$ref": "#/definitions/ElectronGetOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "Options forwarded to [`@electron/get`](https://github.com/electron/get) when downloading the\nElectron distribution to package."
    },
    "electronLanguages": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "string"
        }
      ],
      "description": "The electron locales to keep. By default, all Electron locales used as-is."
    },
    "electronUpdaterCompatibility": {
      "description": "The [electron-updater compatibility](https://www.electron.build/auto-update#compatibility) semver range.",
      "type": [
        "null",
        "string"
      ]
    },
    "electronVersion": {
      "description": "The Electron version to package against.\n\nDefaults to the version of the `electron` (or `electron-prebuilt`) dependency declared in\n`package.json`. Set this explicitly only when the installed Electron version is not the one\nyou want to package against (e.g., in monorepos where the Electron dependency lives in a\ndifferent workspace).",
      "type": [
        "null",
        "string"
      ]
    },
    "executableName": {
      "description": "The executable name. Defaults to `productName`\nNote: Except for Linux, where this would constitute a breaking change in previous behavior and lead to both invalid executable names and Desktop files. Ref comments in: https://github.com/electron-userland/electron-builder/pull/9068",
      "type": [
        "null",
        "string"
      ]
    },
    "extends": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "One or more configuration presets or file paths to merge into this configuration.\n\nAccepts a string or array of strings, each of which is either:\n- A built-in preset name (`\"react-cra\"` is the only currently supported value).\n- A path to a JS/JSON config file relative to the project directory.\n\nConfigs are merged left-to-right using a deep-assign strategy that properly combines `files`\nglob patterns rather than replacing them.\n\nThe `react-cra` preset is applied automatically when `react-scripts` is found in\n`dependencies`. Set `extends: null` to opt out of automatic preset detection."
    },
    "extraFiles": {
      "anyOf": [
        {
          "$ref": "#/definitions/FileSet"
        },
        {
          "items": {
            "anyOf": [
              {
                "$ref": "#/definitions/FileSet"
              },
              {
                "type": "string"
              }
            ]
          },
          "type": "array"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "The same as [extraResources](#extraresources) but copy into the app's content directory (`Contents` for MacOS, root directory for Linux and Windows)."
    },
    "extraMetadata": {
      "description": "Additional properties to deep-merge into the app's `package.json` at build time.\n\nUseful for injecting build-time metadata (e.g., a git commit hash or CI build URL) that\nshould be readable at runtime via `require('./package.json')` or `import.meta.url`."
    },
    "extraResources": {
      "anyOf": [
        {
          "$ref": "#/definitions/FileSet"
        },
        {
          "items": {
            "anyOf": [
              {
                "$ref": "#/definitions/FileSet"
              },
              {
                "type": "string"
              }
            ]
          },
          "type": "array"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "A [glob patterns](https://www.electron.build/file-patterns) 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).\n\nFile patterns (and support for `from` and `to` fields) the same as for [files](#files)."
    },
    "fileAssociations": {
      "anyOf": [
        {
          "$ref": "#/definitions/FileAssociation"
        },
        {
          "items": {
            "$ref": "#/definitions/FileAssociation"
          },
          "type": "array"
        }
      ],
      "description": "The file associations."
    },
    "files": {
      "anyOf": [
        {
          "$ref": "#/definitions/FileSet"
        },
        {
          "items": {
            "anyOf": [
              {
                "$ref": "#/definitions/FileSet"
              },
              {
                "type": "string"
              }
            ]
          },
          "type": "array"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "A [glob patterns](https://www.electron.build/file-patterns) relative to the [app directory](https://www.electron.build/configuration#directories), which specifies which files to include when copying files to create the package.\n\nDefaults to:\n```json\n[\n\"**\\/*\",\n\"!**\\/node_modules/*\\/{CHANGELOG.md,README.md,README,readme.md,readme}\",\n\"!**\\/node_modules/*\\/{test,__tests__,tests,powered-test,example,examples}\",\n\"!**\\/node_modules/*.d.ts\",\n\"!**\\/node_modules/.bin\",\n\"!**\\/*.{iml,o,hprof,orig,pyc,pyo,rbc,swp,csproj,sln,xproj}\",\n\"!.editorconfig\",\n\"!**\\/._*\",\n\"!**\\/{.DS_Store,.git,.hg,.svn,CVS,RCS,SCCS,.gitignore,.gitattributes}\",\n\"!**\\/{__pycache__,thumbs.db,.flowconfig,.idea,.vs,.nyc_output}\",\n\"!**\\/{appveyor.yml,.travis.yml,circle.yml}\",\n\"!**\\/{npm-debug.log,yarn.lock,.yarn-integrity,.yarn-metadata.json}\"\n]\n```\n\nDevelopment 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.\n\nDefault 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.\n\nMay be specified in the platform options (e.g. in the [mac](https://www.electron.build/mac)).\n\nYou may also specify custom source and destination directories by using `FileSet` objects instead of simple glob patterns.\n\n```json\n[\n{\n\"from\": \"path/to/source\",\n\"to\": \"path/to/destination\",\n\"filter\": [\"**\\/*\", \"!foo/*.js\"]\n}\n]\n```\n\nYou can use [file macros](https://www.electron.build/file-patterns#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."
    },
    "flatpak": {
      "anyOf": [
        {
          "$ref": "#/definitions/FlatpakOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "Flatpak options.\n\nFlatpak is a sandboxed application distribution format for Linux distributed via\n[Flathub](https://flathub.org/) or self-hosted OSTree repositories."
    },
    "forceCodeSigning": {
      "default": false,
      "description": "Whether to throw an error and abort the build if the app could not be code-signed.\n\nSet to `true` in release pipelines to catch missing or misconfigured signing credentials\nbefore producing unsigned artifacts. When `false` (the default), missing signing credentials\nproduce a warning and the build continues unsigned.",
      "type": "boolean"
    },
    "freebsd": {
      "anyOf": [
        {
          "$ref": "#/definitions/LinuxTargetSpecificOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "FreeBSD `pkg` package options.\n\nProduces a `.pkg` archive for the FreeBSD package manager."
    },
    "generateUpdatesFilesForAllChannels": {
      "default": false,
      "description": "Please see [Building and Releasing using Channels](https://github.com/electron-userland/electron-builder/issues/1182#issuecomment-324947139).",
      "type": "boolean"
    },
    "icon": {
      "type": [
        "null",
        "string"
      ]
    },
    "ignoredProductionDependencies": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": "null"
        }
      ],
      "default": [
        "electron",
        "electron-builder"
      ],
      "description": "Names of production dependencies that are excluded from the copied `node_modules`, even if they\nare declared in the `dependencies` section of `package.json`.\n\nelectron-builder copies the resolved production dependency tree into the app. Some packages —\nnotably `electron` — are already provided another way (the Electron runtime is embedded\nseparately), so copying them would just duplicate what is already there. Such packages are\nexcluded from the copy rather than rejected: they remain valid production dependencies for\ntooling purposes (e.g. SBOM, license, and vulnerability tracking) without being shipped twice.\n\nOnly dependencies **declared by the app itself** are eligible: a listed name and the transitive\ndependencies required *only* by it are dropped, while anything also required by another (kept)\nproduction dependency stays bundled. A matching name that appears solely as a transitive\ndependency of a kept package is never excluded. Note that a kept package which `require()`s an\nexcluded name at runtime *without declaring it* (relying on hoisting) will fail with\n`MODULE_NOT_FOUND` — declare such a dependency properly or remove the name from this list.\n\nMatching is by the dependency name as declared in `package.json`: an npm alias\n(`\"custom-electron\": \"npm:electron@^30.0.0\"`) is matched by its alias key (`custom-electron`),\nnever by the underlying package name.\n\nOverriding this option **replaces** the default list, so include `electron` and `electron-builder`\nunless you intend to ship them. The most common reason to override is to *add* a dependency that a\nbundler (Vite, webpack, esbuild, …) already inlines into your app code: keep it in `dependencies`\nso SBOM/license tooling still sees it, and list it here so a duplicate copy is not packaged — e.g.\n`[\"electron\", \"electron-builder\", \"react\", \"react-dom\"]`. Removing a default name keeps that\npackage in the copied `node_modules`. Setting the option to `null` (or omitting it) applies the\ndefault list; to disable exclusion entirely, set it to an empty array `[]`. Each excluded package\nis logged once during packaging."
    },
    "includePdb": {
      "default": false,
      "description": "Whether to include `.pdb` (Program Database) symbol files in the output.\n\nPDB files enable Windows crash-dump analysis but significantly increase artifact size. Enable\nfor internal builds where you want symbol information; disable for public distribution.",
      "type": "boolean"
    },
    "linux": {
      "anyOf": [
        {
          "$ref": "#/definitions/LinuxConfiguration"
        },
        {
          "type": "null"
        }
      ],
      "description": "General Linux build options shared across all Linux targets (icon, category, desktop entry,\nexecutable name, etc.). Target-specific compression and packaging options live in the\nper-format interfaces (`DebOptions`, `RpmOptions`, `PacmanOptions`, etc.)."
    },
    "mac": {
      "anyOf": [
        {
          "$ref": "#/definitions/MacConfiguration"
        },
        {
          "type": "null"
        }
      ],
      "description": "macOS-specific build options (signing, entitlements, notarization, target categories, etc.)."
    },
    "mas": {
      "anyOf": [
        {
          "$ref": "#/definitions/MasConfiguration"
        },
        {
          "type": "null"
        }
      ],
      "description": "macOS App Store (MAS) submission options."
    },
    "masDev": {
      "anyOf": [
        {
          "$ref": "#/definitions/MasConfiguration"
        },
        {
          "type": "null"
        }
      ],
      "description": "macOS App Store development-signing options (`mas-dev` target).\nUsed for local testing of MAS builds without submitting to the store."
    },
    "msi": {
      "anyOf": [
        {
          "$ref": "#/definitions/MsiOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "WiX-based MSI installer options.\n\nProduces a traditional `.msi` package built with the WiX Toolset. Best for enterprise\ndeployments that require MSI-based installation policies."
    },
    "msiProjectCreated": {
      "anyOf": [
        {
          "typeof": "function"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "Called after the WiX MSI project XML has been written to a temporary directory but before\n`candle.exe` / `light.exe` compile it into a `.msi` package.\n\nThe hook receives the path to the project directory as a string. Use it to patch the generated\n`.wxs` files for customizations not exposed through electron-builder's options."
    },
    "msiWrapped": {
      "anyOf": [
        {
          "$ref": "#/definitions/MsiWrappedOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "MSI-wrapped NSIS installer options.\n\nWraps the standard NSIS installer inside an MSI package so that it can be deployed via\nGroup Policy or other MSI-only channels while preserving the NSIS installer UX."
    },
    "msix": {
      "anyOf": [
        {
          "$ref": "#/definitions/MsixOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "MSIX package options. MSIX is the modern successor to AppX with additional deployment features."
    },
    "nativeModules": {
      "anyOf": [
        {
          "$ref": "#/definitions/NativeModulesConfig"
        },
        {
          "type": "null"
        }
      ],
      "description": "Configuration for native Node.js module installation and rebuilding.\n\nGroups all options that control how electron-builder handles native modules — from forcing\nsource builds during install through to the `@electron/rebuild` compilation mode."
    },
    "npmArgs": {
      "anyOf": [
        {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "Additional command-line arguments appended to the package manager's `install` command when\nelectron-builder installs app dependencies (i.e., when `node_modules` is missing and a fresh\ninstall is required).\n\nThese arguments are appended **only** during the install phase, not during the rebuild phase.\nTo influence `@electron/rebuild` directly, see {@link NativeModulesConfig.rebuildMode}."
    },
    "nsis": {
      "anyOf": [
        {
          "$ref": "#/definitions/NsisOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "NSIS one-click installer options.\n\nNSIS (Nullsoft Scriptable Install System) is the default Windows installer format produced by\nelectron-builder. It generates a lightweight, self-extracting `.exe` installer."
    },
    "nsisWeb": {
      "anyOf": [
        {
          "$ref": "#/definitions/NsisWebOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "NSIS web installer options.\n\nLike the standard NSIS installer but the app payload is downloaded from a remote URL at install\ntime rather than bundled into the `.exe`. Useful for very large apps or staged rollouts."
    },
    "onNodeModuleFile": {
      "anyOf": [
        {
          "typeof": "function"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "Called for every file inside each `node_modules` package directory as electron-builder\ndecides whether to include it in the packaged app.\n\nReturn `true` to force-include the file regardless of the default exclusion rules.\nReturn `false` or `undefined` to let electron-builder apply its normal filtering logic.\n\nReceives the absolute path of the file as a string."
    },
    "p5p": {
      "anyOf": [
        {
          "$ref": "#/definitions/LinuxTargetSpecificOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "Solaris IPS package options.\n\nProduces a `.p5p` archive for the Solaris Image Packaging System (`pkg`)."
    },
    "pacman": {
      "anyOf": [
        {
          "$ref": "#/definitions/PacmanOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "Pacman package options.\n\nTargets Arch Linux and Arch-based distributions (Manjaro, EndeavourOS, etc.).\nProduces a `.pacman` archive installable via `pacman -U ./package.pacman`."
    },
    "pkg": {
      "anyOf": [
        {
          "$ref": "#/definitions/PkgOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "macOS PKG flat-package installer options."
    },
    "portable": {
      "anyOf": [
        {
          "$ref": "#/definitions/PortableOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "Portable executable options.\n\nProduces a single `.exe` that requires no installation — it extracts and runs directly."
    },
    "productName": {
      "description": "The human-readable product name displayed in installers, the macOS dock, and the Windows\nApps & Features list.\n\nUnlike the `name` field in `package.json`, this value may contain spaces and other characters\nthat are not allowed in npm package names.\n\nResolution order:\n1. `productName` inside the `build` configuration block.\n2. `productName` at the top level of `package.json`.\n3. `name` at the top level of `package.json`.",
      "type": [
        "null",
        "string"
      ]
    },
    "protocols": {
      "anyOf": [
        {
          "$ref": "#/definitions/Protocol"
        },
        {
          "items": {
            "$ref": "#/definitions/Protocol"
          },
          "type": "array"
        }
      ],
      "description": "The URL protocol schemes."
    },
    "publish": {
      "anyOf": [
        {
          "$ref": "#/definitions/GithubOptions"
        },
        {
          "$ref": "#/definitions/GitlabOptions"
        },
        {
          "$ref": "#/definitions/S3Options"
        },
        {
          "$ref": "#/definitions/SpacesOptions"
        },
        {
          "$ref": "#/definitions/R2Options"
        },
        {
          "$ref": "#/definitions/GenericServerOptions"
        },
        {
          "$ref": "#/definitions/CustomPublishOptions"
        },
        {
          "$ref": "#/definitions/KeygenOptions"
        },
        {
          "$ref": "#/definitions/SnapStoreOptions"
        },
        {
          "$ref": "#/definitions/BitbucketOptions"
        },
        {
          "items": {
            "$ref": "#/definitions/AllPublishOptions"
          },
          "type": "array"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "Publisher configuration. See [Auto Update](https://www.electron.build/publish) for more information."
    },
    "releaseInfo": {
      "$ref": "#/definitions/ReleaseInfo",
      "description": "The release info. Intended for command line usage:\n\n```\n-c.releaseInfo.releaseNotes=\"new features\"\n```"
    },
    "removePackageKeywords": {
      "default": true,
      "description": "Whether to remove the `keywords` field from bundled `package.json` files.\n\nThe `keywords` array is only meaningful for package registry discoverability and has no\nruntime value inside a packaged Electron app. Removing it marginally reduces artifact size.",
      "type": "boolean"
    },
    "removePackageScripts": {
      "default": true,
      "description": "Whether to remove the `scripts` field from bundled `package.json` files.\n\nLifecycle scripts (`preinstall`, `postinstall`, etc.) have no meaning inside a packaged\nElectron app and can trigger unintended behaviour if any tooling inspects the bundled\n`package.json`. Removing them reduces artifact size and prevents accidental execution.",
      "type": "boolean"
    },
    "rpm": {
      "anyOf": [
        {
          "$ref": "#/definitions/RpmOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "RPM package options.\n\nTargets Fedora, Red Hat Enterprise Linux, SUSE, and RPM-based distributions.\nProduces a `.rpm` archive installable via `rpm -i` or `dnf install ./package.rpm`."
    },
    "snapcraft": {
      "anyOf": [
        {
          "$ref": "#/definitions/SnapcraftOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "Snapcraft configuration.\n\nSelects the snapcraft base and provides per-core options:\n- `base: \"core18\" | \"core20\" | \"core22\"` — legacy bases; still functional but not recommended\n  for new apps.\n- `base: \"core24\"` — modern base with the GNOME extension (recommended, requires Electron 25+).\n- `base: \"custom\"` — pass an existing `snapcraft.yaml` through unchanged; no plugs, extensions,\n  or desktop files are injected."
    },
    "squirrelWindows": {
      "anyOf": [
        {
          "$ref": "#/definitions/SquirrelWindowsOptions"
        },
        {
          "type": "null"
        }
      ],
      "description": "Squirrel.Windows auto-update installer options.\n\nRequires the `electron-builder-squirrel-windows` optional dependency."
    },
    "target": {
      "anyOf": [
        {
          "$ref": "#/definitions/TargetConfiguration"
        },
        {
          "items": {
            "anyOf": [
              {
                "$ref": "#/definitions/TargetConfiguration"
              },
              {
                "type": "string"
              }
            ]
          },
          "type": "array"
        },
        {
          "type": [
            "null",
            "string"
          ]
        }
      ],
      "description": "The build target(s) for this platform. Can be a target name string, a {@link TargetConfiguration}\nobject, or an array of either. Available targets depend on the platform — see platform-specific\noptions (e.g. {@link MacConfiguration.target}, {@link WindowsConfiguration.target},\n{@link LinuxConfiguration.target})."
    },
    "toolsets": {
      "anyOf": [
        {
          "$ref": "#/definitions/ToolsetConfig"
        },
        {
          "type": "null"
        }
      ],
      "description": "Pinned versions of the binary toolsets electron-builder downloads and uses internally.\n\nEach property selects a specific release of the corresponding tool bundle. Set a property to\n`\"0.0.0\"` to force the legacy bundle (pre-v27 behaviour). Leave a property unset (or set to\n`null`) to use the modern default for that toolset."
    },
    "win": {
      "anyOf": [
        {
          "$ref": "#/definitions/WindowsConfiguration"
        },
        {
          "type": "null"
        }
      ],
      "description": "Windows-specific build options (signing, NSIS, icon, file associations, etc.)."
    },
    "$schema": {
      "description": "JSON Schema for this document.",
      "type": [
        "null",
        "string"
      ]
    }
  },
  "type": "object"
}