Pricing Docs Blog Apps Tools Support Start Free
Open Source Comparison

Gatus vs Uptime Kuma

Both are free, self-hosted, and answer the same question: is this endpoint up? The difference is how you declare a check. Gatus reads a YAML file you keep in Git. Uptime Kuma has a web UI and its own database. Here is where each one earns its place.

Deploy Uptime Kuma $3/mo on InstaPods

Uptime Kuma vs Gatus: The Verdict

Neither of these costs money, so price is not the decision. How you declare a check is. Gatus defines every endpoint in a YAML file it hot-reloads, with a condition language strong enough to assert on a JSON body, and it has no screen for adding a monitor. Uptime Kuma gives you a web UI, keeps monitors in its own database, covers more check types, and publishes several branded status pages. Take Gatus if you want monitoring config reviewed in Git alongside the service it watches. Take Uptime Kuma if you want to paste a URL and be done, or if a teammate who does not write YAML has to maintain the checks. The one thing both get wrong when self-hosted badly: a monitor on the box it watches dies with that box, which is what the $3/mo pod is for.

Last updated: 2026-08-14

Quick Comparison

Feature comparison: Uptime Kuma vs Gatus
Feature Gatus Uptime Kuma
How You Add a Monitor Edit config.yaml; Gatus reloads it automatically Paste a URL in the web UI and save
Config in Version Control Yes - the YAML file is the whole state No - monitors live in the app database
Check Interval Any duration you set (default 60s) Down to 20 seconds
Condition Language Expressions: [STATUS], [BODY] with JSONPath, [RESPONSE_TIME], [CERTIFICATE_EXPIRATION], [DOMAIN_EXPIRATION], [DNS_RCODE], plus len/has/pat/any Keyword and JSON-query monitors
Check Types HTTP, TCP, UDP, SCTP, ICMP, DNS, SSH, WebSocket, gRPC, TLS, STARTTLS HTTP(s), keyword, JSON query, TCP, DNS, ping, WebSocket, push, Steam servers, Docker
Multi-Step Flows Yes - Suites (ALPHA) chain requests through a shared context No
Default Storage In memory - the project states the data will not survive a restart Its own database from the first check
Persistent Storage Option SQLite or PostgreSQL, once you configure it Built in, nothing to configure
Status Pages One dashboard per instance, styled through config Multiple pages, each mappable to its own domain
Incident Communication Announcements pinned to the page (outage, warning, information, operational) Incident create, update and resolve on a status page
Alert Destinations 41 built-in providers plus a custom webhook 90+ notification services
Dashboard Access Control HTTP basic auth or OIDC Login with optional 2FA
Built With Go - one binary, negligible footprint Node.js and Vue
License Apache-2.0 MIT
1-Click on InstaPods No - install the binary yourself over SSH Yes - $3/mo, launches ready to use

What Is Harder With Gatus?

Trade-offs to weigh before committing.

There Is No Button to Add a Monitor

Every check is a YAML edit. Gatus watches the file and reloads on change, so you do not restart anything, but you still need shell or Git access to add a URL. If someone who does not write YAML has to maintain the checks, this is the wrong tool for them.

The Default Storage Forgets Everything

Out of the box storage.type is memory, and the project is blunt about the consequence: the data will not survive a restart. You keep uptime history only after setting sqlite with a path or postgres with a connection URL. It is one small config block, and it is the one people skip.

Fewer Things It Can Check

Gatus covers HTTP, TCP, UDP, SCTP, ICMP, DNS, SSH, WebSocket, gRPC, TLS and STARTTLS. There are no Docker, MQTT or database monitors, so if you want one tool watching both your API and a queue you do not already expose over HTTP, that is Uptime Kuma.

One Dashboard, Not Several Status Pages

A Gatus instance renders a single page, styled through its ui config and annotated with announcements. If you want a separate public page per product or per customer, each on its own domain, you either run several Gatus instances or use Uptime Kuma.

Why Pick Uptime Kuma Instead?

What you get when you pick this stack.

You Add a Monitor by Clicking

Paste a URL, pick a type, set an interval, save. No file to edit, no Git access, no YAML indentation to get wrong at 2am. That is why most people land on Uptime Kuma first, and it matters more than it sounds once more than one person maintains the checks.

It Keeps History Without Being Asked

Uptime Kuma writes to its own database from the very first check, so response-time charts and uptime percentages are still there after a restart with nothing configured. Gatus needs an explicit sqlite or postgres storage block before it keeps anything at all.

More Check Types and 90+ Alert Destinations

HTTP, keyword, JSON query, TCP, DNS, ping, WebSocket, push, Steam servers and Docker, with 90+ notification services including Telegram, Discord, Slack, Gotify, ntfy, PagerDuty and plain webhooks. Gatus ships 41 providers, which covers the common ones but not the long tail.

A Status Page Per Domain

Multiple status pages, each mappable to its own domain, with grouped monitors, custom branding and incident history. It is the feature people usually pay a hosted monitor for, and it is the clearest gap between the two tools.

Real Cost Comparison

Watching 20 endpoints and publishing a status page for a year. Both tools are free software, so the only real cost is the server and your time.

Gatus
  • Gatus: free and open source (Apache-2.0)
  • Not a 1-Click app on InstaPods, so you install the Go binary yourself
  • Still needs a server, and it must not be the one you are watching
  • A $3/mo pod runs it fine over SSH, but you write the service unit and the YAML
Free software, $3/mo of server, plus setup time
Uptime Kuma on InstaPods
  • InstaPods Launch plan: $3/mo (1 vCPU, 512MB RAM, 10GB)
  • Uptime Kuma: free and open source (MIT)
  • Instant launch with HTTPS and a domain already wired up
  • 20 endpoints, unlimited monitors, status pages included
$3/mo ($36/yr)

Frequently Asked Questions

What is the difference between Gatus and Uptime Kuma?

Both are free, self-hosted uptime monitors that probe endpoints and render a status page. The difference is how a check is declared. Gatus reads its endpoints from a YAML file you keep in Git and has no screen for adding one. Uptime Kuma has a web UI and stores monitors in its own database.

Does Gatus have a web UI for adding monitors?

No. Gatus ships a dashboard for viewing endpoint health, but there is no screen for creating or editing a check. Endpoints are defined in config/config.yaml, or in a directory of YAML files that Gatus deep-merges. It reloads the file automatically when it changes, so no restart is needed.

Which one is lighter to run?

Gatus. It is a single Go binary and the project describes its resource footprint as negligibly small; in our own testing it sat around 10-40MB of RAM. Uptime Kuma is a Node application at roughly 30-50MB at rest, closer to 60-80MB once you are running 20-30 monitors.

Can Gatus check more than a status code?

Yes, and this is where it is strongest. Conditions are expressions: [STATUS] == 200, [RESPONSE_TIME] < 300, [BODY].status == UP with JSONPath, [CERTIFICATE_EXPIRATION] > 48h, [DOMAIN_EXPIRATION] > 720h, plus len, has, pat and any helpers. Uptime Kuma covers the common cases with keyword and JSON-query monitors.

Does Gatus keep uptime history after a restart?

Only if you configure storage. The default type is memory and the project states plainly that the data will not survive a restart. Set sqlite with a path, or postgres with a connection URL, and history persists. Uptime Kuma writes to its own database from the first check with nothing to configure.

Can I run Gatus on InstaPods?

Not as a 1-Click app - Gatus is not in the catalog, so there is no deploy button for it. A pod is a real Linux server with SSH, so you can install the binary with go install github.com/TwiN/gatus/v5@latest and run it under systemd yourself. Uptime Kuma is the one-click option.

Where should I run my uptime monitor?

Anywhere except the machine it is watching. A monitor living on the same box dies with that box, and a monitor on the same home connection goes quiet at exactly the moment the connection does. Putting it on a $3/mo pod somewhere else is the cheapest way to make the alert actually fire.

Should I run both Gatus and Uptime Kuma?

Some people do and it is not silly. Gatus is good at asserting an API returns the right body, and that assertion reads well in Git next to the service. Uptime Kuma is good at the broad sweep of endpoints and the public status page. Running both costs nothing beyond the server.

Want the Clickable One? Deploy It in 30 Seconds

Gatus is a good tool and Git is a good home for config. If you would rather add a monitor by pasting a URL, Uptime Kuma launches on InstaPods for $3/mo, off the box you are watching, with HTTPS and a domain already wired up.

Deploy Uptime Kuma