Browse docs
Your First Project

Package a Real Installer

Turn the running app into an installer someone else can use, and run the three checks that stop you shipping something broken.

Updated Aug 2026
On this page

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:win

macOS:

npm run build:mac

Linux:

npm run build:linux

You 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 debugging

Measured 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.exe

Click 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 = $null

Or 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.exe

That 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.

Claude CodeWorth asking your agent, once

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.

Give your agent a codebase with opinions.

Electron 41 + React 19 + TypeScript desktop app boilerplate built for Claude Code, Cursor and Copilot. 950 lines of rules your agent reads first, so feature fifty looks like feature one.

Get it for $49 →