comparing self-hosted
OpenStatus vs Gatus: hosted probes or your own YAML?
Both of these put monitoring in version control, so the config-as-code argument does not separate them. What separates them is everything around the check: who runs the probes, who can see the page, and how much you are willing to operate.
the facts, side by side
| OpenStatus | Gatus | Uptimepage | |
|---|---|---|---|
| license | AGPL-3.0 | Apache-2.0 | AGPL-3.0 |
| configuration | YAML · CLI · Terraform · REST | YAML only, read-only UI | UI + Terraform + REST + MCP |
| run it yourself | ~11-app TypeScript stack | tiny static binary, no DB needed | one binary + compose |
| check types | HTTP · TCP · DNS in the OSS checker | 11 protocols + domain expiry | HTTP · TCP · DNS · TLS · ping · domain |
| assertions | status · body · headers | status · body JSONPath · latency · cert + domain expiry | status · body · cert + domain expiry |
| fastest interval | 30s on paid tiers | no documented floor, default 60s | 60s free · 30s Pro · 10s self-hosted |
| multi-region probes | 28 hosted regions + private locations | experimental federation only | multi-region, run your own |
| status page | yes, custom domains | dashboard doubles as page | branded, own subdomain |
| page subscribers | email · webhook · Slack · RSS | none | email · webhook |
| teams & roles | orgs, members on paid tiers | one basic-auth or OIDC gate | orgs + roles |
| hosted free tier | 1 monitor, 10-min interval | paid only, at gatus.io | free, no card |
| community (GitHub stars) | ~8.9k | ~11.5k | young |
OpenStatus ships continuously with no tagged releases, so there is no version to pin.
OpenStatus's open-source checker implements HTTP, TCP and DNS; ICMP, UDP and TLS-certificate monitor types appear in its API schema.
Gatus's multi-step suites are labelled alpha and its remote-instance federation is labelled experimental by the project. Its maintainer has said in release notes that Gatus is a side project and that reviews and merges have slowed.
Verified July 2026 against Gatus 5.36.0 and the OpenStatus source. Both projects move quickly, so check their current source before you decide.
Both are monitoring as code. Only one hands you a fleet.
Gatus gives you a YAML file and a binary, and the vantage point is wherever you put that binary. OpenStatus gives you a YAML file, a CLI, a GitHub Action and an official Terraform provider, and runs the probes for you across 28 regions on three cloud providers. If seeing your service from Singapore matters, one of these solves it with a config line and the other solves it by making you deploy in Singapore.
Where Gatus is ahead
Precision and weight. Eleven endpoint protocols including gRPC, SSH, WebSocket, UDP and STARTTLS, plus domain-expiry monitoring, and a condition language that asserts on status, response time, JSON body paths, certificate expiry and domain expiry rather than just on a status code. It is a tiny static Go binary that runs on an in-memory store with no database at all if you want. It is Apache-2.0, free forever, and you never make an account.
Where OpenStatus is ahead
Everything customer-facing and everything team-shaped. Status pages on custom domains that take email, webhook and Slack subscribers on top of RSS, Atom and JSON feeds, organizations with unlimited members on paid tiers, auto-resolving incidents, and in 2026 it added private locations so you can run probes inside your own network alongside its hosted fleet. Its Terraform provider is vendor-maintained and shipping, which puts it in the same bracket as Uptimepage, Better Stack and Checkly rather than the abandoned community forks some incumbents leave you with.
The honest caveats on both
Gatus is explicitly a side project: its maintainer has said so in release notes, and reviews and merges have slowed. Its multi-step suites are labelled alpha and its remote-instance federation is labelled experimental, so treat both as such. It has no subscribers, no incident timeline and one basic-auth or OIDC gate for the whole app. OpenStatus's cost is operational: self-hosting it is a multi-service TypeScript stack of about eleven apps with external database dependencies, its hosted free tier is one monitor at ten-minute intervals, and its open-source checker implements HTTP, TCP and DNS even though ICMP, UDP and TLS-certificate types appear in its API schema. It also ships continuously with no tagged releases, so there is no version to pin.
Where Uptimepage fits
Uptimepage takes OpenStatus's shape (teams, subscribers, Terraform, multi-region) and Gatus's operational weight (one binary you can actually run). Checks over HTTP, TCP, DNS, TLS, ping and domain expiry, configured in the UI or declared with the Terraform provider, REST API and MCP server. Probes are multi-region and you can run your own. Incidents open themselves and land on a branded status page with confirmed email and webhook subscribers. Hosted free with no card, or self-host under AGPL with docker compose and no external services to rent.