comparing self-hosted
Uptimepage vs Upptime, Cachet and Statping
Three popular self-hosted status tools, one honest table. Upptime and Statping run their own checks; Cachet is a status page that has only recently, and partially, added checks of its own. Here is where each fits, and where Uptimepage does both jobs in one product. Start free on the hosted tier or self-host under AGPL, no card.
The table below is the whole comparison, unedited. Read it first if you like, it is the same one we would send you.
AGPL-3.0 · one binary · free tier · no card required
How they compare
| Uptimepage | Upptime | Cachet | Statping | |
|---|---|---|---|---|
| uptime checks built in | yes | yes | basic HTTP | yes |
| check types | HTTP · TCP · DNS · TLS · domain · ping · heartbeat · flow | HTTP · TCP · ICMP | HTTP GET | HTTP · TCP · UDP · ICMP · gRPC |
| fastest check interval | 60s | 5 min | your cron | ~30s |
| multi-region probes | yes | bolt-on | no | no |
| status page | branded | static | yes | yes |
| visitor subscribers | email + webhook | no | email + webhook | no |
| auto incidents from checks | yes | GitHub issues | status only | yes |
| config-as-code | Terraform · API · MCP | YAML | API | YAML · API |
| official Terraform provider | yes | no | community | no |
| tech stack | Rust | JavaScript | PHP / Laravel | Go |
| how you run it | hosted or self-host | Actions + Pages | PHP/Laravel + DB | Go binary |
| license | AGPL-3.0 | MIT | source-available | GPL-3.0 |
| maintained in 2026 | active | low velocity | active, v3 dev | ~yearly |
Statping here is the maintained community fork, statping-ng; the original Statping has not shipped a release since 2020.
Upptime runs checks as GitHub Actions cron jobs, which cannot fire more than once every five minutes and can drift later under load. Reaching other regions needs the third-party Globalping add-on.
Cachet's actively developed v3 (the cachethq/core source) added basic HTTP component checks in mid-2026 and now sends confirmed email to subscribers, but it is still 3.x-dev with no stable release: checks are HTTP GET only on a cron you add yourself, a failed check colours a component rather than opening an incident, subscriptions are global rather than per-component, and the code ships under a custom source-available license.
Competitor facts were verified against each project's repository and docs in July 2026. Open-source projects move quickly, so check their current docs before you decide.
Upptime: monitoring inside your GitHub repo
Upptime is a neat idea. It runs checks as scheduled GitHub Actions, records history as commits in your repo, files incidents as GitHub Issues, and serves a static page from GitHub Pages. That design is also its limit. Actions cron will not run more than once every five minutes and can slip later under load, so detection is measured in minutes. There are no visitor subscriptions, checks run from a single region unless you add the third-party Globalping service, and there is no DNS-record or TLS-expiry check. Uptimepage runs its own checks every 60 seconds across HTTP, TCP, DNS, TLS, domain, ping, heartbeat and browser flows from several regions, and lets visitors subscribe by email or webhook.
Cachet: a status page catching up on monitoring
Cachet began as a pure communication tool: you set components up or down by hand or over its API. Its actively developed v3, in the cachethq/core repo, is moving fast and, as of mid-2026, added basic HTTP component checks and confirmed email subscribers. The checks are real but young: HTTP GET only, no TCP, DNS or TLS, you schedule the check command yourself rather than getting a built-in interval, and a failing check colours a component rather than opening an incident or paging anyone. It is still 3.x-dev with no stable release, it is a PHP and Laravel app with a database, queue and cron to operate, and it ships under a custom source-available license rather than an OSI open-source one. Uptimepage runs HTTP, TCP, DNS, TLS, domain, ping, heartbeat and browser-flow checks every 60 seconds from multiple regions by default, opens incidents automatically, and is one binary to run.
Statping: close in shape, but barely maintained
Statping is the nearest match here. It is a single Go binary that runs its own HTTP, TCP, UDP, ICMP and gRPC checks, draws response-time graphs, and shows incidents and maintenance on a themeable page. The problem is upkeep. The original project stopped in 2020, and the community statping-ng fork carries it now at roughly one release a year, the most recent in mid-2025. It has no visitor subscriptions, no multi-region checks, and no Terraform provider. Uptimepage does the same and adds config-as-code with Terraform, REST and MCP, team roles, subscriber pages and regional probes, hosted for free or self-hosted under AGPL.
One product, hosted or self-hosted
The pattern is simple. Upptime and Statping monitor but leave out subscribers and multi-region; Cachet publishes but does not monitor. Uptimepage does both in one binary. Run docker compose up with Postgres and ClickHouse on your own servers, or start free on the hosted tier with no card. The REST API and Terraform provider work the same against both, so you can change your mind later.
Where Uptimepage fits
Uptimepage is one binary doing both halves: checks over HTTP, TCP, DNS, TLS, domain expiry, ping, heartbeat and browser flows, and the branded page those checks feed. Incidents open automatically, subscribers get them by confirmed email or signed webhook, teammates get roles rather than a shared login, and the whole configuration is reachable as Terraform, REST and MCP. Hosted free with no card, or self-hosted under AGPL with docker compose.
- 01Sign in with GitHub or Google. No card, no sales call.
- 02Paste a URL. The first check runs before you have finished reading this.
- 03Publish the status page, or export it to Terraform and keep it in Git.
api99.98%
p95 142ms · one incident in 45 days
dashboard99.91%
p95 318ms · two degraded days
webhooks99.99%
p95 88ms · no incidents
RESOLVED14 min
Elevated latency on the dashboard API
14:22 resolved, latency back under 300ms
14:08 opened automatically by the dashboard check
up degraded down 45 days · email & webhook subscribers