* Documentation: install/upgrade/uninstall guides + recipes incl. Zerto Adds a docs/ folder under the repo root with full operator documentation aimed at sysadmins (not webhook developers). The Zerto pre/post script recipe is the canonical "why does this exist" walkthrough; the GitHub HMAC, AD password reset, and UI-on-desktop recipes round out common patterns. Pages: - README.md (index) - concepts.md (5-minute "what is a webhook" explainer) - installation.md (interactive + silent install) - upgrading.md (single-click upgrade flow + edge cases) - uninstalling.md (clean removal + wiping ProgramData) - runas-modes.md (Service / InteractiveUser / SpecificUser decision flow) - service-account-and-ad.md (gMSA setup, delegated rights) - network-and-security.md (bind addresses, allowlists, HTTPS, secret storage) - troubleshooting.md (symptom -> first check, common errors) - recipes/zerto-pre-post-scripts.md (canonical use case) - recipes/github-style-hmac.md (GitHub / Stripe-shaped webhooks) - recipes/ad-password-reset.md (gMSA-backed self-service reset) - recipes/ui-on-desktop.md (InteractiveUser pattern) Top-level README.md restructured to point at docs/ as the source of truth, dropping the duplicated installation snippets. Installer ships docs/ alongside the binaries so they're available offline at C:\Program Files\WebhookServer\docs\. GUI Help menu gains a "Documentation" item that opens the docs site in a browser. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Config Checkpoints dialog + daily auto-checkpoint; drop installer GUI launch Three fixes: 1. Config Checkpoints submenu replaced with a proper dialog. Lists checkpoints with timestamp/size/filename, has a "Take Checkpoint Now" button, and a "Roll Back" button that becomes enabled when a row is selected. The previous click-a-menu-entry-immediate-restore flow was too easy to fire by accident. 2. New CheckpointScheduler BackgroundService creates a checkpoint at midnight every day. Combined with the existing auto-on-save snapshots, this guarantees a daily rollback point even if the config wasn't edited that day. A new "create-checkpoint" admin op plus AdminPipeServer.CreateCheckpoint helper does the actual file copy; both manual (via the dialog) and the scheduler use it. 3. Installer: drop the post-install "Launch Webhook Server" wizard step. It tried to launch the GUI un-elevated, which fails because the GUI's manifest is requireAdministrator. The Start Menu shortcut handles elevation correctly, so the user can launch from there. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Docs: replace AD-reset recipe with realistic Zerto failover walkthrough The AD password reset endpoint was a poor fit for what people actually need this server for. Replaced with a realistic Zerto post-failover example that's much closer to the project's purpose: - Update DNS A records for failed-over hostnames - Wait for the VM to come up at the DR site - PowerShell-remote into the VM and check / start critical services - Notify Teams with the result The flagship pattern is now: Zerto post-script (curl, fire-and-forget) calls an Async webhook endpoint -> 202 in milliseconds -> Zerto's failover sequence is never blocked. The server runs the actual work in the background, with full output captured in the daily log. A ready-to-use Zerto-side script ships at scripts/examples/zerto-post-failover.ps1 - pure curl.exe (no PowerShell modules), reads the bearer token from a file the ZVM service account can read. The installer now bundles scripts/examples/ alongside docs/ so the example is also available locally at C:\Program Files\WebhookServer\scripts\examples\. Removed: docs/recipes/ad-password-reset.md. Updated: docs/README.md, README.md, the recipe content itself. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Restore installer GUI launch (via shellexec) + checkpoint descriptions Two follow-ups to the previous Config Checkpoints commit: 1. Bring back the post-install "Launch Webhook Server" checkbox in the installer. The previous attempt failed because Inno Setup's postinstall flag launches via CreateProcess after Setup exits, bypassing the GUI's requireAdministrator manifest. Adding the shellexec flag switches to ShellExecute, which DOES honor the manifest and triggers a clean UAC prompt - so the post-install GUI launch works as expected. 2. Each checkpoint now carries a description, stored in a sidecar .meta.json file next to the snapshot. Defaults: - Auto-on-save: "Before save" - Midnight scheduler: "Nightly auto-checkpoint" - Manual: opens a small dialog so the user can type a meaningful description (defaults to "Manual checkpoint" if blank) The dialog and pruning both clean up sidecars alongside snapshots. The Config Checkpoints grid grows a Description column between When and Size. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * v0.1.2: bump checkpoint retention 30 -> 90 Each checkpoint is a few KB of JSON plus a tiny sidecar; even at 90 entries on a config with hundreds of endpoints the on-disk footprint is negligible (worst case ~20 MB). With daily auto-checkpoints plus on-save snapshots, 30 entries could fill in a couple weeks of moderate use; 90 gives a comfortable ~3-month window. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.7 KiB
Installation
This page covers a fresh install. If you already have Webhook Server installed, see Upgrading. To remove it, see Uninstalling.
Requirements
- Windows 10, Windows 11, or Windows Server 2019 / 2022 / 2025
- Administrator rights to install the service and to run the GUI
- (Optional, only if you publish from source) .NET 8 SDK
The installer is x64 only. There is no x86 build.
1. Download
Grab the latest installer from the GitHub Releases page:
https://github.com/recklessop/webhook-server/releases/latest
Look for the asset named WebhookServer-Setup-X.Y.Z.exe.
2. Run the installer
Double-click the .exe. UAC will prompt — accept. The wizard:
- Copies the binaries to
C:\Program Files\WebhookServer\ - Creates a Start Menu folder named Webhook Server with a GUI shortcut + Uninstall shortcut
- Optionally creates a desktop shortcut (checkbox; off by default)
- Registers the Windows Service named
WebhookServer, runs it asLocalSystem, sets it to start automatically at boot, and configures it to restart on failure - Starts the service
- Offers to launch the GUI when finished — leave the checkbox ticked
The first time the GUI opens, you'll see UAC prompt again because the GUI requires elevation (it talks to the service over a named pipe restricted to SYSTEM and the Administrators group). Accept it.
If the GUI's status bar shows a green dot and Connected — HTTP 8080, you're done.
Default ports: HTTP on
8080, HTTPS off. Both can be changed under Server → Settings. Port8080is rarely in use on a fresh server but conflicts with some other tools — if you seeConnection refusedlater, this is the first thing to check.
3. Add your first endpoint
In the GUI:
- File → New endpoint
- Slug:
ping - Auth → Mode: None
- Executor → Type: Windows PowerShell
- Executor → Inline command:
Write-Output 'pong' - Click Save
The endpoint appears in the grid. Right-click it → Copy URL, paste into a browser. You should get back something like:
{ "runId": "...", "exitCode": 0, "durationMs": 134, "stdout": "pong\r\n", ... }
That's it. Real-world recipes start with Zerto pre/post scripts → AD / DNS update.
Silent / unattended install
For deploying to many machines via Group Policy, SCCM, Intune, Ansible, etc. — the installer is built with Inno Setup and supports its standard silent-mode flags:
WebhookServer-Setup-0.1.1.exe /VERYSILENT /SUPPRESSMSGBOXES /NORESTART
Useful flags:
| Flag | What it does |
|---|---|
/SILENT |
Show progress, no questions |
/VERYSILENT |
No UI at all |
/SUPPRESSMSGBOXES |
Suppress info / error popups (use with /SILENT or /VERYSILENT) |
/NORESTART |
Don't restart automatically — there's nothing here that needs it, but pair with /SUPPRESSMSGBOXES for total quiet |
/DIR="C:\Tools\WebhookServer" |
Override the install location |
/LOG="C:\Temp\install.log" |
Write a verbose installer log |
/TASKS="desktopicon" |
Pre-tick the optional desktop-icon task |
The post-install service install runs the same install-service.ps1 script regardless of silent flags.
Manual install from source (if you don't want to trust the prebuilt installer)
# clone (or your fork)
git clone https://github.com/recklessop/webhook-server.git
cd webhook-server
# from an elevated PowerShell:
powershell -ExecutionPolicy Bypass -File scripts\deploy.ps1
deploy.ps1 publishes both projects, copies the binaries to C:\Program Files\WebhookServer\, registers the service, and starts it. Re-run after a git pull to upgrade.
To run the service under a non-default account (e.g. a gMSA for AD operations), pass -ServiceAccount:
.\scripts\deploy.ps1 -ServiceAccount 'CONTOSO\svc-webhookserver$'
See Service account & Active Directory for the full picture.
Where things live after install
| Path | What |
|---|---|
C:\Program Files\WebhookServer\ |
Binaries (WebhookServer.Service.exe, WebhookServer.Gui.exe, the icon, install/uninstall scripts) |
C:\ProgramData\WebhookServer\config.json |
The configuration. Backups in backups\, daily-rolling logs in logs\. Don't edit by hand — secrets are DPAPI-encrypted and the service won't pick up your changes without a reload. Use the GUI. |
\\.\pipe\WebhookServerAdmin |
The named pipe the GUI uses to talk to the service. ACL'd to SYSTEM + Administrators only. |
The installer never touches C:\ProgramData\WebhookServer\. Uninstalling preserves your config and logs by default; see Uninstalling for how to wipe them too.