1"use strict";(self.webpackChunk_electron_builder_website=self.webpackChunk_electron_builder_website||[]).push([["35990"],{64775(e,n,i){i.r(n),i.d(n,{metadata:()=>s,default:()=>h,frontMatter:()=>o,contentTitle:()=>d,toc:()=>c,assets:()=>a});var s=JSON.parse('{"id":"troubleshooting","title":"Troubleshooting","description":"This page covers common errors by category. Enable verbose logging to get more detail:","source":"@site/docs/troubleshooting.md","sourceDirName":".","slug":"/troubleshooting","permalink":"/docs/troubleshooting","draft":false,"unlisted":false,"editUrl":"https://github.com/electron-userland/electron-builder/edit/master/website/docs/troubleshooting.md","tags":[],"version":"current","frontMatter":{},"sidebar":"tutorialsSidebar","previous":{"title":"Two Package Structure","permalink":"/docs/tutorials/two-package-structure"}}'),r=i(8265),t=i(27248);let o={},d="Troubleshooting",a={},c=[{value:"Code Signing",id:"code-signing",level:2},{value:"macOS",id:"macos",level:3},{value:"macOS Notarization",id:"macos-notarization",level:3},{value:"Windows",id:"windows",level:3},{value:"ASAR and File Packaging",id:"asar-and-file-packaging",level:2},{value:"Native Modules",id:"native-modules",level:2},{value:"Auto-Update",id:"auto-update",level:2},{value:"Build Environment",id:"build-environment",level:2},{value:"Linux-Specific",id:"linux-specific",level:2},{value:"macOS-Specific",id:"macos-specific",level:2},{value:"Windows-Specific",id:"windows-specific",level:2},{value:"Docker / Cross-Platform Builds",id:"docker--cross-platform-builds",level:2},{value:"Getting More Help",id:"getting-more-help",level:2}];function l(e){let n={a:"a",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",hr:"hr",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,t.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(n.header,{children:(0,r.jsx)(n.h1,{id:"troubleshooting",children:"Troubleshooting"})}),"\n",(0,r.jsx)(n.p,{children:"This page covers common errors by category. Enable verbose logging to get more detail:"}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"DEBUG=electron-builder electron-builder build\n"})}),"\n",(0,r.jsx)(n.h2,{id:"code-signing",children:"Code Signing"}),"\n",(0,r.jsx)(n.h3,{id:"macos",children:"macOS"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"No identity found for code signing"'}),"\n: No Developer ID certificate is installed. Run ",(0,r.jsx)(n.code,{children:"security find-identity -v -p codesigning"})," to list available identities. On CI, verify ",(0,r.jsx)(n.code,{children:"CSC_LINK"})," is set and contains a valid base64-encoded ",(0,r.jsx)(n.code,{children:".p12"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"CSSMERR_TP_CERT_REVOKED"'}),"\n: Your certificate was revoked by Apple. Renew it in the Apple Developer portal."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"The certificate has expired"'}),"\n: Renew the certificate in Apple Developer portal, re-export it, and update your CI secrets."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Build produces unsigned output without an error"}),"\n: ",(0,r.jsx)(n.code,{children:"CSC_LINK"})," isn't set, so electron-builder silently skips signing. Set ",(0,r.jsx)(n.code,{children:"forceCodeSigning: true"})," to turn this into a build failure so you catch it early."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"Keychain not unlocked" / codesign hangs'}),"\n: Verify ",(0,r.jsx)(n.code,{children:"CSC_LINK"})," and ",(0,r.jsx)(n.code,{children:"CSC_KEY_PASSWORD"})," are set correctly \u2014 electron-builder creates a temporary keychain and runs all required setup commands, including ",(0,r.jsx)(n.code,{children:"set-key-partition-list"}),", automatically. If using a manually managed keychain (via ",(0,r.jsx)(n.code,{children:"CSC_KEYCHAIN"}),"), ensure you run ",(0,r.jsx)(n.code,{children:"security set-key-partition-list -S apple-tool:,apple: -s -k <password> <keychain>"})," after importing."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"App cannot be opened because the developer cannot be verified"'})," (Gatekeeper)\n: The app is unsigned, signed with the wrong certificate type (e.g., Mac App Store cert used for direct distribution), or not notarized. Check the certificate type and n
1otarization status with ",(0,r.jsx)(n.code,{children:"spctl --assess --verbose dist/mac/MyApp.app"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"macos-notarization",children:"macOS Notarization"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"Package Invalid: the binary is not signed with a valid Developer ID certificate"'}),"\n: You used an Apple Distribution / Mac App Store certificate. Notarization for direct distribution requires a Developer ID Application certificate."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"The executable does not have the Hardened Runtime enabled"'}),"\n: Add ",(0,r.jsx)(n.code,{children:"hardenedRuntime: true"})," to your ",(0,r.jsx)(n.code,{children:"mac.sign"})," config. Also ensure entitlements include ",(0,r.jsx)(n.code,{children:"com.apple.security.cs.allow-jit"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"Notarization failed: invalid credentials"'}),"\n: The ",(0,r.jsx)(n.code,{children:"APPLE_ID"})," / ",(0,r.jsx)(n.code,{children:"APPLE_APP_SPECIFIC_PASSWORD"})," combination is wrong, or the app-specific password was revoked. Regenerate it at ",(0,r.jsx)(n.a,{href:"https://appleid.apple.com",children:"appleid.apple.com"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"Notarization timed out"'}),"\n: Apple's notarization service may be slow. Run again later. Check ",(0,r.jsx)(n.a,{href:"https://developer.apple.com/system-status/",children:"Apple System Status"}),"."]}),"\n",(0,r.jsx)(n.h3,{id:"windows",children:"Windows"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"SmartScreen warning at install time"}),"\n: Normal for standard OV certificates \u2014 trust builds over time based on download count. EV certificates bypass this. No fix needed; warn users in your release notes that the warning is expected."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"Publisher does not match" (AppX)'}),"\n: The ",(0,r.jsx)(n.code,{children:"appx.publisher"}
1)," value in your config must exactly match the Subject field in your certificate. Copy it from the certificate's Properties \u2192 Details \u2192 Subject."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"SignTool error: No certificates were found that met all the given criteria"'}),"\n: The certificate isn't in the certificate store, or ",(0,r.jsx)(n.code,{children:"WIN_CSC_LINK"})," and ",(0,r.jsx)(n.code,{children:"WIN_CSC_KEY_PASSWORD"})," are wrong. Verify the base64 decodes to a valid ",(0,r.jsx)(n.code,{children:".pfx"})," and that the password is correct."]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"asar-and-file-packaging",children:"ASAR and File Packaging"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'Native module crashes at runtime: "Error: Module did not self-register"'}),"\n: The native module (",(0,r.jsx)(n.code,{children:".node"})," file) is inside the ASAR archive, but native modules can't load from inside ASAR. Add to ",(0,r.jsx)(n.code,{children:"asar.unpack"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'asar:\n unpack:\n - "node_modules/your-module/**"\n - "**/*.node"\n'})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"ENOENT: no such file or directory" at runtime'}),"\n: A file that exists in development is missing from the packaged app. Check if it's being excluded by a ",(0,r.jsx)(n.code,{children:"files"})," pattern or by the default exclusions. Build with ",(0,r.jsx)(n.code,{children:"DEBUG=electron-builder"}),' and look for "excluding" log lines. Also check ',(0,r.jsx)(n.code,{children:"asar.unpack"})," \u2014 files inside ASAR must be accessed via ",(0,r.jsx)(n.code,{children:"app.getAppPath()"}),", not via ",(0,r.jsx)(n.code,{children:"__dirname"})," relative paths."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"App directory is too large"}),"\n: Profile the ASAR after building:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"npx asar list dist/mac/MyApp.app/Contents/Resources/app.asar | sort\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Common culprits: TypeScript source files (",(0,r.jsx)(n.code,{children:".ts"}),"), source maps (",(0,r.jsx)(n.code,{children:".map"}),"), test fixtures, large binary assets. Add exclusion patterns to ",(0,r.jsx)(n.code,{children:"files"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'files:\n - "**/*"\n - "!src/**"\n - "!**/*.ts"\n - "!**/*.map"\n - "!**/__tests__/**"\n'})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"Cannot find module" at runtime after packaging'}),"\n: A production dependency isn't being included. Check that it's in ",(0,r.jsx)(n.code,{children:"dependencies"})," (not ",(0,r.jsx)(n.code,{children:"devDependencies"}),") in ",(0,r.jsx)(n.code,{children:"package.json"}),". electron-builder only includes production dependencies."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsxs)(n.strong,{children:["FileSet ",(0,r.jsx)(n.code,{children:"from"})," path not found"]}),"\n: In ",(0,r.jsx)(n.code,{children:"files"}),", the ",(0,r.jsx)(n.code,{children:"from"})," path is relative to the ",(0,r.jsx)(n.strong,{children:"app directory"}),". In ",(0,r.jsx)(n.code,{children:"extraResources"})," / ",(0,r.jsx)(n.code,{children:"extraFiles"}),", ",(0,r.jsx)(n.code,{children:"from"})," is relative to the ",(0,r.jsx)(n.strong,{children:"project root"}),". These are different when ",(0,r.jsx)(n.code,{children:"directories.app"})," is set."]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"native-modules",children:"Native Modules"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"Error: The module was compiled against a different Node.js version"'}),"\n: electron-builder automatically rebuilds native modules for the target Electron version during the build. If you see this error at runtime during development (not during a build), ensure you are running your app via ",(0,r.jsx)(n.code,{children:"electron ."})," from the project root, not from a globally installed Electron binary compiled against a different version."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Native module works in development but crashes after packaging"}),"\n: The module likely needs to be in ",(0,r.jsx)(n.code,{children:"asar.unpack"}),". Some modules also need their full directory tree unpacked:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-yaml",children:'asar:\n unpack:\n - "node_modules/better-sqlite3/**"\n - "node_modules/sharp/**"\n'})}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"auto-update",children:"Auto-Update"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'Updates not detected: app reports "up to date" when a new version exists'}),"\n: Check that the ",(0,r.jsx)(n.code,{children:"publish"})," configuration matches your distribution channel. For GitHub, ensure the release isn't a draft (draft releases are invisible to electron-updater). Verify ",(0,r.jsx)(n.code,{children:"app.getVersion()"})," matches the version in ",(0,r.jsx)(n.code,{children:"package.json"})," at build time."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"Cannot find latest.yml" / update server 404'}),"\n: electron-builder generates ",(0,r.jsx)(n.code,{children:"latest.yml"})," (Windows), ",(0,r.jsx)(n.code,{children:"latest-mac.yml"})," (macOS), or ",(0,r.jsx)(n.code,{children:"latest-linux.yml"})," only when publishing. Ensure you ran ",(0,r.jsx)(n.code,{children:"--publish always"})," (or ",(0,r.jsx)(n.code,{children:"--publish onTagOrDraft"}),") when building the release."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"sha512 checksum mismatch"'}),"\n: The downloaded update file is corrupt or the wrong file is being served. Verify that the artifact and the ",(0,r.jsx)(n.code,{children:".yml"})," metadata file were generated together in the same build and not mixed from different builds. As of electron-builder 27, the manifest ",(0,r.jsx)(n.code,{children:"sha512"}),' should be base64-encoded \u2014 a 128-hex-character "expected" value in the error message is the tell that a hand-rolled manifest still uses hex, which is accepted but deprecated
1in v27 and will be removed in v28; convert it with ',(0,r.jsx)(n.code,{children:"sha512sum file.ext | cut -d' ' -f1 | xxd -r -p | base64 -w0"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Delta updates (AppImage / NSIS-Web) fail"}),"\n: For AppImage delta updates, electron-builder embeds a blockmap directly in the AppImage binary \u2014 no separate file needs to be published. If delta updates aren't working, verify the AppImage was built with electron-builder and that a publish provider is configured. For NSIS differential packages, ",(0,r.jsx)(n.code,{children:"nsis.differentialPackage"})," must not be ",(0,r.jsx)(n.code,{children:"false"})," (any other value \u2014 ",(0,r.jsx)(n.code,{children:"true"}),", ",(0,r.jsx)(n.code,{children:'"compressed"'}),", ",(0,r.jsx)(n.code,{children:'"store-asar"'}),", or unset \u2014 builds a differential-aware package; ",(0,r.jsx)(n.code,{children:'"store-asar"'})," additionally stores ",(0,r.jsx)(n.code,{children:"resources/app.asar"})," uncompressed so app-code deltas stay proportional to what changed)."]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"build-environment",children:"Build Environment"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"\"Cannot find module 'electron'\""}),"\n: ",(0,r.jsx)(n.code,{children:"electron"})," must be in ",(0,r.jsx)(n.code,{children:"devDependencies"}),", not ",(0,r.jsx)(n.code,{children:"dependencies"}),". electron-builder expects to find it in the project's devDependencies to determine the Electron version to bundle."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"Resource does not exist" when downloading Electron'}),"\n: The Electron version specified in your devDependencies doesn't exist for the target architecture. Check ",(0,r.jsx)(n.a,{href:"https://github.com/electron/electron/releases",children:"Electron releases"})," to confirm the version and architecture combination exists."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Build hangs with no output"}),"\n: Often caused by a native module rebuild that's hanging. Run with ",(0,r.jsx)(n.code,{children:"DEBUG=electron-builder"})," and check the last log line. Also check if a spawned process is waiting for input (some postinstall scripts do this)."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Out-of-memory error during packaging"}),"\n: Large apps can exhaust memory during ASAR creation. Set ",(0,r.jsx)(n.code,{children:"NODE_OPTIONS=--max-old-space-size=4096"})," before running electron-builder."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Build fails in an offline / air-gapped environment"}),"\n: electron-builder downloads build toolsets (e.g. WinCodeSign, AppImage tools) the first time they are needed, then caches the archive at ",(0,r.jsx)(n.code,{children:"<ELECTRON_BUILDER_CACHE>/<releaseName>/<filename>"}),". On every subsequent build it reads from that cache and makes no network request."]}),"\n",(0,r.jsxs)(n.p,{children:["For a first-time setup in a fully air-gapped environment, run the build once on a machine with internet access so the cache is populated, then copy the entire ",(0,r.jsx)(n.code,{children:"ELECTRON_BUILDER_CACHE"})," directory to the air-gapped machine. Point both machines at the same directory with ",(0,r.jsx)(n.code,{children:"ELECTRON_BUILDER_CACHE=/path/to/shared/cache"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"Downloading" progress appears for an artifact that should be cached'}),"\n: The toolset archive cache lives inside ",(0,r.jsx)(n.code,{children:"ELECTRON_BUILDER_CACHE"})," (default: ",(0,r.jsx)(n.code,{children:"~/Library/Caches/electron-builder"})," on macOS, ",(0,r.jsx)(n.code,{children:"%LOCALAPPDATA%/electron-builder/Cache"})," on Windows, ",(0,r.jsx)(n.code,{children:"~/.cache/electron-builder"})," on Linux). If this directory is cleared or not persisted between builds (common on ephemeral CI runners), the archive is re-downloaded. Persist the cache directory across CI runs to avoid repeated downloads."]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"linux-specific",children:"Linux-Specific"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"fpm not found"'}),"\n: The DEB, RPM, Pacman, APK, FreeBSD, and P5P targets use FPM internally. electron-builder bundles FPM \u2014 if it fails to find it, try reinstalling electron-builder or clearing ",(0,r.jsx)(n.code,{children:"~/.cache/electron-builder"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'AppImage won\'t run: "FUSE not found" / "fusermount not found"'}),"\n: As of v27 the default AppImage runtime is static and needs no host FUSE, so this affects only builds pinned to the legacy runtime (",(0,r.jsx)(n.code,{children:'toolsets.appimage: "0.0.0"'}),"). Rebuild on the default runtime (remove the ",(0,r.jsx)(n.code,{children:"0.0.0"})," pin), or install FUSE2 on the host:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"# Ubuntu/Debian\nsudo apt install fuse libfuse2\n\n# Fedora\nsudo dnf install fuse fuse-libs\n"})}),"\n",(0,r.jsxs)(n.p,{children:["Or run with ",(0,r.jsx)(n.code,{children:"--appimage-extract-and-run"}),":"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"./MyApp.AppImage --appimage-extract-and-run\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'AppImage won\'t run: "squashfs: FATAL ERROR aborting"'}),"\n: This is a symptom of the legacy FUSE2 runtime. Remove any ",(0,r.jsx)(n.code,{children:'toolsets.appimage: "0.0.0"'})," pin so the build uses the default static runtime."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'Flatpak build fail
1s: "runtime not found"'}),"\n: Install the Flatpak runtime before building:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:"flatpak install flathub org.freedesktop.Platform//24.08\nflatpak install flathub org.freedesktop.Sdk//24.08\n"})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Snap confinement issues: permission denied at runtime"}),"\n: The snap is trying to access something not declared in its interface plugs. Run ",(0,r.jsx)(n.code,{children:"snap run --shell myapp"})," to get a shell inside the snap, then test access. Add the appropriate plug to ",(0,r.jsx)(n.code,{children:"snap.plugs"})," in your config."]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"macos-specific",children:"macOS-Specific"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"DMG window layout doesn't look right"}),"\n: DMG window positions are set by the macOS system and can behave unexpectedly if the dimensions in ",(0,r.jsx)(n.code,{children:"dmg.window.size"})," don't match the ",(0,r.jsx)(n.code,{children:"contents"})," positions. Ensure icon positions fit within the window bounds with some padding. Test by opening the built DMG manually."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"App is damaged and can\'t be opened"'}),"\n: Usually means the app was downloaded without Gatekeeper quarantine being cleared, and notarization failed or wasn't performed. Run ",(0,r.jsx)(n.code,{children:"xattr -dr com.apple.quarantine /path/to/app"})," temporarily during testing. Ensure notarization succeeds before distributing."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'PKG installer fails: "The package \u2026 is not compatible with this version of macOS"'}),"\n: Check ",(0,r.jsx)(n.code,{children:"pkg.minVersion"})," matches your actual minimum supported macOS version."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"The application cannot be opened" on Apple Silicon'}),"\n: The app may be x64-only but running on an ARM Mac without Rosetta. Either build a universal binary or ensure Rosetta 2 is installed (",(0,r.jsx)(n.code,{children:"softwareupdate --install-rosetta"}),")."]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"windows-specific",children:"Windows-Specific"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'NSIS installer: "The installer you are trying to use is corrupt or incomplete"'}),"\n: The installer binary is corrupted. This can happen when the file is scanned/modified by antivirus during download or build. Check your AV exclusions during builds."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"The publisher could not be verified" (Windows SmartScreen)'}),"\n: The app isn't code-signed, or signed with an untrusted certificate. See ",(0,r.jsx)(n.a,{href:"/docs/features/code-signing/code-signing-win",children:"Windows Code Signing"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"MSI: upgrades don't remove the old version"}),"\n: The ",(0,r.jsx)(n.code,{children:"upgradeCode"})," was changed between versions. The ",(0,r.jsx)(n.code,{children:"upgradeCode"})," (a GUID) must remain ",(0,r.jsx)(n.strong,{children:"identical"})," across all versions of your application. See ",(0,r.jsx)(n.a,{href:"/docs/msi",children:"MSI Configuration"}),"."]}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'AppX installation fails: "The package could not be installed"'}),"\n: Common causes: certificate not trusted on the target machine; ",(0,r.jsx)(n.code,{children:"publisher"})," in config doesn't match certificate Subject; Windows version below the ",(0,r.jsx)(n.code,{children:"minVersion"})," requirement. Check Event Viewer \u2192 Applications and Services Logs \u2192 Microsoft \u2192 Windows \u2192 AppxPackagingOM for detailed error codes."]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"docker--cross-platform-builds",children:"Docker / Cross-Platform Builds"}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:"Linux build on macOS/Windows hangs or fails"}),"\n: Use the official Docker image:"]}),"\n",(0,r.jsx)(n.pre,{children:(0,r.jsx)(n.code,{className:"language-bash",children:'docker run --rm -ti \\\n -v ${PWD}:/project \\\n -v ~/.cache/electron:/root/.cache/electron \\\n -v ~/.cache/electron-builder:/root/.cache/electron-builder \\\n electronuserland/builder:wine \\\n /bin/bash -c "npm ci && np
1x electron-builder --linux"\n'})}),"\n",(0,r.jsxs)(n.p,{children:[(0,r.jsx)(n.strong,{children:'"wine: command not found" when building Windows on Linux'}),"\n: Use the ",(0,r.jsx)(n.code,{children:"electronuserland/builder:wine"})," Docker image which includes Wine. Or install Wine on the host system."]}),"\n",(0,r.jsx)(n.hr,{}),"\n",(0,r.jsx)(n.h2,{id:"getting-more-help",children:"Getting More Help"}),"\n",(0,r.jsxs)(n.ul,{children:["\n",(0,r.jsxs)(n.li,{children:["Run ",(0,r.jsx)(n.code,{children:"DEBUG=electron-builder electron-builder build 2>&1 | tee build.log"})," to capture full debug output"]}),"\n",(0,r.jsxs)(n.li,{children:["Search ",(0,r.jsx)(n.a,{href:"https://github.com/electron-userland/electron-builder/issues",children:"GitHub Issues"})]}),"\n",(0,r.jsxs)(n.li,{children:["Check the ",(0,r.jsx)(n.a,{href:"https://github.com/electron-userland/electron-builder/discussions",children:"Discussions"})]}),"\n",(0,r.jsxs)(n.li,{children:["When filing a bug report, use ",(0,r.jsx)(n.a,{href:"https://github.com/electron/minimal-repro",children:"electron/minimal-repro"})," to create a minimal reproduction case \u2014 issues with a repro get resolved significantly faster"]}),"\n"]})]})}function h(e={}){let{wrapper:n}={...(0,t.R)(),...e.components};return n?(0,r.jsx)(n,{...e,children:(0,r.jsx)(l,{...e})}):l(e)}},27248(e,n,i){i.d(n,{R:()=>o,x:()=>d});var s=i(70141);let r={},t=s.createContext(r);function o(e){let n=s.useContext(t);return s.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function d(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:o(e.components),s.createElement(t.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.