The only candidate where the complete monitor set lives in a committed config.yaml —
no GUI clicks, no SQLite state escaping git, no separate database process.
Config auto-reloads on file change; rollback is git revert.
Every change is a pull request; every state is version-controlled. IaC Level 4.
What you give up:
No container liveness monitor (workaround: HTTP HEALTHCHECK on each Dockerfile, or point at Traefik /ping).
Alert providers drop from Kuma's 90+ to Gatus's 20+ — Discord, ntfy, Telegram, and email cover every realistic homelab path.
Uptime history does not transfer; enable storage: type: sqlite to accumulate history across restarts.