Gatus

Gatus

Monitoring and status page from one YAML file

Gatus is a monitoring tool and status page written in Go, and its whole configuration is a YAML file. Each endpoint gets a URL, an interval (60 seconds by default) and a list of conditions. One failing condition marks the endpoint unhealthy, and the alerts attached to it fire once their threshold is reached. The dashboard shows the state of every check, its recent results and any incident announcements you have declared.

The comparison of self-hosted uptime monitors and status pages places Gatus among tools that are set up in a web interface or install an agent.

JSONPath assertions on what the response body says

  • Conditions on what the response contains: [STATUS] == 200, [RESPONSE_TIME] < 300, [BODY].status == UP through JSONPath, has([BODY].errors) == false. With the last one, an API that answers 200 with an errors field counts as down.
  • Configuration you can keep in Git: environment variables, YAML anchors for shared defaults, and a directory of files merged into one. Gatus reloads the file when it changes.
  • Well beyond HTTP: ICMP, TCP, UDP, SCTP, DNS, SSH, TLS, STARTTLS, WebSocket and gRPC, plus certificate expiry ([CERTIFICATE_EXPIRATION] > 48h) and domain expiry.
  • External endpoints: a service Gatus cannot reach pushes its own status to the API, and a heartbeat raises an alert when updates stop.
  • About forty alert providers: Slack, PagerDuty, Opsgenie, ntfy, Gotify, Matrix and more, plus a custom provider for any HTTP API. An optional connectivity checker pauses all checks while Gatus itself is offline.
  • Outputs for the rest of the stack: Prometheus metrics, SVG uptime and response time badges, and a JSON API for reading statuses and history.

YAML-only setup, with history in memory by default

The open source version has no screen for adding a check. The gatus.io FAQ says so plainly: the open source project has no UI for creating its configuration. Everything goes through the YAML, which suits a team that reviews changes in pull requests. If people need to add monitors from a browser, Uptime Kuma is managed through its web interface.

Results are kept in memory by default. They do not survive a restart, and the README warns that without file storage a configuration reload is effectively a restart, so every YAML edit wipes the history. storage.type accepts sqlite (a file path) or postgres (a connection URL). Even with persistence, each endpoint keeps its last 100 results and 50 events by default, and both caps are configurable.

Checks read responses, not hosts. No placeholder reports a server's CPU, memory or disk usage. CheckCle covers that with an agent installed on each monitored server.

The project argues against metrics-only alerting. Its README sets Gatus against Prometheus Alertmanager, CloudWatch and Splunk: when a load balancer fails and no request reaches the applications, no error rate goes up. Gatus sends its own requests instead. Its author describes it as a developer-oriented health dashboard.

The hosted service is paid; the code stays Apache 2.0. Gatus.io sells hosted status pages from $10 a month (one page, 30 endpoints, a 2-minute minimum interval) up to $500, with a 7-day free trial. Its FAQ gives two reasons to pay: the open source version has no configuration UI, and a self-hosted status page can go down along with the infrastructure it watches. The same FAQ promises that Gatus will stay open source.

Releases are spacing out. v5.37.0 came out on 24 September 2026, and commits were still landing on 5 October. Fourteen releases shipped in September and October 2025, against four in the first nine months of 2026. Suites, which chain requests with a shared context, are still alpha. GitHub releases carry no binaries, so installation goes through the Docker image, go install, the Helm chart or a Terraform module.

SOURCES

REPOhttps://github.com/TwiN/gatus
SITEhttps://gatus.io
LICENSEApache-2.0