Continuous network reliability monitor with a desktop UI. Pings your router, anycast DNS, and real call-quality endpoints (Teams, Zoom, Outlook) on a fixed interval. Samples Wi-Fi signal. Detects outages. Generates the receipts you hand your ISP or property manager when they tell you the network is fine.
Lives in the system tray. Works on macOS, Windows, and Linux.
Vigil — from the Roman Vigiles, Rome's night watch. Built because an ISP and a managed property couldn't give a straight answer.
Live RTT chart over the last 15 minutes, per-target status tiles, and a status banner that turns red the moment three consecutive failures land.
Every detected outage with exact start/end timestamps, duration, consecutive-failure count, and error-code breakdown. This is the page you screenshot when your ISP says "everything's fine."
Pick any window from 1 hour to 30 days. RTT trend, uptime %, p50/p95/p99 latency, and per-target stats. Generate CSV / JSON / HTML reports from any view.
Grab the latest release from github.com/sid-technologies/vigil/releases/latest.
| Mac | Download |
|---|---|
| Apple Silicon (M1 / M2 / M3 / M4) | Vigil_<version>_aarch64.dmg |
| Intel | Vigil_<version>_x64.dmg |
Open the .dmg, drag Vigil to Applications, launch. That's it — builds are signed and notarized, so Gatekeeper just opens them.
Download Vigil_<version>_x64_en-US.msi, run the installer.
SmartScreen may show "Windows protected your PC" the first time. Click More info → Run anyway. Windows code-signing is on the roadmap; until then, the warning is expected.
Pick whichever fits your distro:
# Debian / Ubuntu / Mint / Pop!_OS
sudo dpkg -i vigil_<version>_amd64.deb
sudo apt-get install -f # only if dpkg complains about deps
# Fedora / RHEL / openSUSE
sudo rpm -i Vigil-<version>-1.x86_64.rpm
# Anything else (Arch, NixOS, etc.)
chmod +x Vigil_<version>_amd64.AppImage
./Vigil_<version>_amd64.AppImageICMP probes use unprivileged sockets — works without sudo on Ubuntu/Fedora out of the box. On locked-down distros, add yourself to net.ipv4.ping_group_range.
Once installed, Vigil checks for updates on launch. When a new version ships, the sidebar shows v<current> → v<new>. Click it to install — Vigil downloads, verifies the signature, and relaunches itself.
- The dashboard begins probing immediately — every 2.5 seconds, 13 default targets (router + Google/Cloudflare DNS + Teams/Zoom/Outlook + STUN). Within seconds you'll see "Last cycle: 13/13 ok" if everything's healthy.
- Vigil lives in the tray — close the window and it keeps probing in the background. Right-click the tray icon for Show / Hide / Open data folder / Launch on login / Quit.
- Outages auto-detect — three consecutive failures of the same target trigger an outage event. Lose Wi-Fi for ten seconds and the dashboard goes red.
- Generate a report any time — History page → Generate report. Pick CSV / JSON / HTML, choose a folder. The HTML report is a self-contained dashboard you can email to your ISP.
Data lives in:
- macOS:
~/Library/Application Support/dev.vigil.desktop/ - Windows:
%APPDATA%\dev.vigil.desktop\ - Linux:
~/.local/share/dev.vigil.desktop/
The tray menu has an "Open data folder" shortcut.
Press Shift+? from anywhere in the app to see the full shortcut overlay. The essentials:
⌘1…⌘5(Ctrl+…on Windows / Linux) — jump between Dashboard, History, Outages, Targets, Settings⌘S— save SettingsEsc— close any modal
cmd/vigil-sidecar/ Entry point for the Go sidecar
internal/ Sidecar internals (probes, monitor, aggregator, IPC, storage)
pkg/ Reusable Go packages (errors, log, buildinfo)
db/ent/schema/ Ent schemas (single source of truth for the SQLite layout)
apps/desktop/ Tauri shell + React frontend
packages/configs/ Tamagui config, theme controller, fonts
scripts/ Build + release helpers
.github/workflows/ CI + release pipelines
The desktop app is a Tauri 2.x shell wrapping a Go sidecar over stdio JSON-RPC. The sidecar owns the probe loop, SQLite, aggregation, and outage detection. The shell handles tray, window lifecycle, and the auto-updater. See CLAUDE.md for the full architecture, conventions, and release runbook.
- Go 1.25+
- Node 20+ and pnpm 10+
- Rust toolchain (rustup), plus Tauri 2.x prerequisites for your OS — see https://tauri.app/start/prerequisites/
# Install JS deps
pnpm install
# Generate Ent code (only needed first time / after schema changes)
make gen-ent
# Build the Go sidecar for the host platform and drop it where Tauri expects it
make build-sidecar
# Run the desktop app in dev mode (Vite + Tauri)
make desktop-devRun make help to see them all. The frequently-used ones:
make gen-ent— Run Ent codegen after editing schemas indb/ent/schema/.make build-sidecar— Cross-compile the Go sidecar for the host platform.make desktop-dev— Start Vite + Tauri in dev mode (depends onbuild-sidecar).make desktop-build— Production bundle (.dmg / .msi / AppImage).make desktop-icons— Regenerate all Tauri icon sizes fromapps/desktop/app-icon.png.make lint— Run all linters via pre-commit.make test— Run Go tests.
Issues and PRs welcome. A few ground rules:
- Keep the watchman voice — Vigil reports state matter-of-factly. No alarm-emoji panic, no gamification, no condescension.
- Sidecar logs go to a file in the OS app-data dir. Stdout is reserved for IPC; never
fmt.Printlnfrom the sidecar. - Probe defaults are conservative on purpose (2.5 s cadence, 2 s timeout). Don't tighten them without a reason — Vigil's job is to not be the thing degrading the network.
- See
CLAUDE.mdfor architecture, conventions, and the release runbook.
MIT. See LICENSE.
Built and maintained by SID Technologies. Vigil is one of SID's open-source tools — see also Pilum (multi-cloud deployment CLI).


