Skip to content

Self-host Gatus

prices checked · Aug 2026

A developer-oriented health dashboard and status page driven entirely by a YAML file, checking endpoints over HTTP, ICMP, TCP and DNS and evaluating each result against conditions on status code, response time, body values or certificate expiry. There is no setup UI — the monitor list lives in your repo.

UptimeRobot / yr$84
Self-hosted / yr~$55
You keep$29/yr
Pocket the difference — spin it up on a cheap VPS in minutes.Start free on Kamatera →

Key facts

CategoryMonitoring
LicenseApache-2.0
StackGo
Min RAM256 MB
Dockeryes
Difficulty
Our recommendation

Reach for Gatus when you want monitoring reviewed and deployed like code: one Go binary, one `config.yaml`, and endpoints checked over HTTP, ICMP, TCP and DNS against explicit conditions on status code, response time, a value in the body or certificate expiry. It is the lightest real uptime monitor in this category and the only one with no setup UI at all. If you would rather click “Add Monitor” and be done, Uptime Kuma is the friendlier pick; if you want dashboards and PageSpeed reports, Checkmate is.

What you need

  • Any VPS with at least 256 MB of RAM
  • A domain you control — most self-hosted setups need HTTPS in front of them
  • Under an hour if you've used Docker before

Install

Run these commands on your server:

# Gatus — config.yaml is the entire configuration; write it before starting
cat > config.yaml <<'YAML'
endpoints:
  - name: website
    url: "https://example.com"
    interval: 60s
    conditions:
      - "[STATUS] == 200"
      - "[RESPONSE_TIME] < 300"
YAML
docker run -d --name gatus -p 8080:8080 \
  --mount type=bind,source="$(pwd)"/config.yaml,target=/config/config.yaml \
  ghcr.io/twin/gatus:stable
# →  http://SERVER_IP:8080

What you take on

Gatus is deliberately minimal, and two of those omissions bite in the first week:

non-negotiableStorage defaults to memory, so nothing survives a restart. Uptime percentages, past events and response-time history all reset the moment the container recycles — set the storage type to sqlite or postgres, with a persisted path, before you trust a single number it shows you.
non-negotiableThere is no UI for adding checks. Every endpoint is declared in config.yaml (or a directory of YAML files it merges), which means a file edit and a restart per change — excellent in a repo, tedious if you expected a web form.
non-negotiableAlerting is configured per endpoint, in that same file. The provider list is long, but there is no global “tell me about everything” fallback — forget the alert block on one monitor and it will fail quietly.

An alternative to

Head-to-head

More in Monitoring

Common questions

Can I add endpoints to Gatus from the web UI?

No — the dashboard is read-only and every endpoint is declared in config.yaml. Point GATUS_CONFIG_PATH at a directory and it will merge all the YAML files inside it. That is the whole design: your monitoring lives in version control next to the services it watches.

Does Gatus keep history after a restart?

Not with the default configuration. Storage type defaults to memory, so results, uptime and past events are lost when the container restarts. Set the storage type to sqlite or postgres and give it a path before you rely on the numbers.

What can Gatus check?

HTTP, ICMP, TCP and DNS queries, each scored against a list of conditions — status code, response time, a value inside a JSON body, a pattern in the page, or how long a TLS certificate has left. Failing conditions can trigger alerts to Slack, Teams, PagerDuty, Discord, Twilio and many others.

Gatus or Uptime Kuma?

Gatus if you want the monitor list reviewed and deployed like code, and you are comfortable that persistence is opt-in. Uptime Kuma if you want to click Add Monitor and be done, with storage handled for you. They cover much the same protocols; the difference is where configuration lives.

Search SelfHost Atlas

Search apps, comparisons, guides, and categories.

We use analytics cookies (Google Analytics, PostHog) to see which guides are useful. No ad networks, no cross-site tracking. See our privacy policy.