A dev server is not a product. This page turns what you built into a file someone can download and install.
This is the part your agent is least useful for, because none of it is code. It is four commands and three checks, and the checks are what stop you shipping something broken to people who paid you.
Do this first
Rebrand before your first build. Building from an unrebranded clone produces an app whose update settings point at a placeholder repository, and nothing warns you. Make It Yours takes one second. Do that, then come back.
1. Build
Windows:
npm run build:winmacOS:
npm run build:macLinux:
npm run build:linuxYou build for the platform you are on. A Windows machine cannot produce a signed macOS DMG. If you need all three, the repo ships a GitHub Actions workflow that builds them on a tagged release.
2. Look at what you got
Everything lands in dist/:
dist/
electron-starter-1.0.0-x64-setup.exe the installer
electron-starter-1.0.0-x64-setup.exe.blockmap lets future updates download only what changed
latest.yml the file your installed apps poll for updates
win-unpacked/ the app as plain files, useful for debuggingMeasured on a clean Windows build: the installer is 151 MB, and installing uses 644 MB on disk. That is normal for Electron. Most of it is the Chromium runtime that makes your app behave the same everywhere.
3. Install it like a stranger would
.\dist\electron-starter-1.0.0-x64-setup.exeClick through it. Measured: about 22 seconds, a Start Menu shortcut, installed to %LOCALAPPDATA%\Programs\<Your App Name>. Then open it from the Start Menu: the window appears 2.7 seconds after the click.
If you launch the built .exe from a VS Code terminal and nothing happens
VS Code sets ELECTRON_RUN_AS_NODE=1, and any Electron program that inherits it runs as a plain script: no window, no error, exit code 0. npm run dev strips it for you; a directly launched .exe does not. Clear it first:
$env:ELECTRON_RUN_AS_NODE = $nullOr just double-click from Explorer or the Start Menu, which never inherits it. This cost an hour while these docs were being written, and every symptom pointed at the app being broken.
4. The three checks
Two minutes, once per release. Each one catches something that is invisible until a customer hits it.
Check one: the feed names a file that exists. Open dist/latest.yml:
version: 1.0.0
path: electron-starter-1.0.0-x64-setup.exeThat path must match the installer filename in dist/ exactly, character for character. If it does not, every auto-update downloads a URL that returns nothing, forever, and the only symptom is that updates seem slow.
Check two: the updater points at your repo. Open dist/win-unpacked/resources/app-update.yml and confirm it names your GitHub account, not PLACEHOLDER_OWNER.
Check three: it runs on a machine that is not yours. A virtual machine, a spare laptop, a willing friend. Your machine has Node, build tools and a warm cache; your customer's has none of that.
Read dist/latest.yml and list the files in dist/. Tell me whether the filename in the path field exactly matches an installer that exists on disk, and explain what would happen to an already-installed copy of the app if it did not.
About the warning your users will see
An unsigned app triggers a SmartScreen warning on Windows and a Gatekeeper block on macOS. Your app still works; it just looks alarming to exactly the cautious buyer you want. Signing removes it and costs money. See Code Signing when you are ready to charge for this.
Unsigned builds are completely fine while you develop and for testing with people who already trust you.
Next: Charge For It.