One-click installers for non-technical users. Two platforms, same UX:
Download installer → Run it → Click "Daemora" on Desktop → Web UI opens
No terminal. No npm install -g. No daemora setup. The web UI handles
all configuration on first run.
installer/
├── windows/ Inno Setup project -> DaemoraSetup.exe
│ ├── daemora.iss
│ ├── launcher.ps1
│ ├── assets/ (drop daemora.ico here)
│ └── BUILD.md
└── macos/ pkgbuild project -> Daemora.pkg
├── build-pkg.sh
├── distribution.xml
├── scripts/
│ ├── preinstall
│ └── postinstall
├── app-template/
│ ├── Daemora.app/
│ └── Stop Daemora.app/
├── resources/ (welcome.html, license.html, etc.)
└── BUILD.md
- Detects Node.js 22+ — installs it if missing.
- Windows:
winget install OpenJS.NodeJS.LTS, fallback to MSI download. - macOS: Homebrew (auto-installs brew if missing) +
brew install node@22.
- Windows:
npm install -g daemora.- Drops a launcher + shortcuts:
- Windows:
launcher.ps1in install dir, shortcuts on Start Menu + Desktop. - macOS:
Daemora.appandStop Daemora.appin /Applications, alias on Desktop.
- Windows:
- Start (1-click): double-click the Daemora icon. If the daemon isn't
running, it spawns hidden (no Terminal/PowerShell window), waits for
/health, then opens the browser. If already running, just opens the browser. - Closing the browser does NOT stop Daemora. The daemon is detached and survives browser close, launcher exit, and even user logout.
- Stop: separate "Stop Daemora" shortcut/app. Reads the PID file in the data dir and kills the process tree. Falls back to killing whatever's bound to port 8081 if the PID file is stale.
Daemora resolves its data dir to the OS-standard app dir automatically (see src/config/env.ts):
- Windows:
%APPDATA%\Daemora\(=C:\Users\<user>\AppData\Roaming\Daemora) - macOS:
~/Library/Application Support/Daemora/
The launcher writes daemora.pid and daemora.log to the same dir, so
all per-user state lives in one place. Uninstalling the app does not
delete the data dir — user state survives reinstalls.
See windows/BUILD.md and macos/BUILD.md.
The Windows installer is built with Inno Setup on a Windows machine.
The macOS installer needs pkgbuild / productbuild, which are
macOS-only. CI: GitHub Actions has both windows-latest and
macos-latest runners that can produce both artifacts in one workflow.
Both platforms warn loudly on unsigned installers. Strongly recommended for non-technical users — tells the OS "this came from us, run it".
| Platform | Cert | Cost | What you get |
|---|---|---|---|
| Windows | EV code-signing | $200–400/yr | No SmartScreen warning at all |
| Windows | Standard OV | $80–200/yr | Warning clears once enough users install it (reputation) |
| macOS | Developer ID + notarization | $99/yr | No Gatekeeper warning; "Open" works on first try |
Without signing, expect the user to click through one OS warning on their first install. After install, every subsequent launch is silent.
- Bump version in
package.json. - Bump
AppVersioninwindows/daemora.issandversioninmacos/distribution.xml. npm publish(sonpm install -g daemoraresolves the new version).- Build both installers (CI or locally on each OS).
- Sign + notarize.
- Upload
DaemoraSetup.exeandDaemora.pkgto GitHub Releases. - Update README download links.