Open-Source Uptime Monitoring: Self-Hosted Monitors and Status Pages Compared

Short answer: Uptime Kuma, for most people who want to host it. It's MIT-licensed, runs as one Docker container, and handles monitors, alerts and status pages from a web dashboard. Gatus if you'd rather keep checks as YAML next to your code, OpenStatus for a status page with monitors as code, and OneUptime if you want on-call and observability in the same install.

Staygreen, an uptime monitor with status pages, is made by The Product Compass, and its source is public on GitHub. Uptime Kuma, Gatus, OpenStatus, OneUptime, Checkmate, Upptime, Cachet and Healthchecks are other projects with their own maintainers. Every license and feature listed for them comes from the project's own repository.

Staygreen's license is source-available rather than open source. Your own copy runs on one or two servers plus accounts at five or six providers, about $43 a month in the recommended setup, where Uptime Kuma takes one container.

Last updated: October 29, 2026. Open-source projects ship often, so check the repository before you rely on a detail.

Or skip the server: staygreen.io is free for one app, with no card.

Try the hosted version free

The Open-Source Options at a Glance

  • Uptime Kuma: MIT. One Docker container. Monitors, alerts and status pages in a web dashboard.

  • Gatus: Apache 2.0. One Docker container and a YAML file. Conditions on the status code, body, response time and certificate.

  • OpenStatus: AGPL-3.0. Several services under Docker Compose. Monitors, status pages and notification channels declared in YAML or Terraform.

  • OneUptime: Apache 2.0 outside its Enterprise Edition folder. Docker Compose on a server with at least 8 GB of memory, or Helm. Monitoring, on-call, status pages, logs, metrics and traces.

  • Checkmate: AGPL-3.0. The app and a MongoDB database. Uptime, page speed and, with its agent, server hardware.

  • Upptime: MIT. No server: a GitHub repository whose Actions check every 5 minutes and whose Pages serve the status page.

  • Cachet: BSD 3-clause on its releases, its own license on the unreleased 3.x rebuild. A PHP status page system.

  • Healthchecks: BSD 3-clause. Cron jobs, not websites.

To run one for your own team, any of these licenses will do, though OneUptime's Enterprise Edition needs a license from OneUptime in production. They differ once other people use it or get a copy. AGPL-3.0, on OpenStatus and Checkmate, requires a changed copy to offer its source to everyone who uses it over a network, which for a public status page likely includes every visitor. The licenses on Uptime Kuma, Gatus, OneUptime, Upptime and Healthchecks require keeping their copyright and license notices, and Cachet's 3.x license rules out distributing it as a standalone product.


Staygreen: Source on GitHub, a Free Hosted Plan, or Your Own Copy

staygreen.io watches an app from the outside: HTTP checks that read the JSON your API returns, SSL and domain expiry, DNS records, TCP ports, cron heartbeats, failed Stripe webhook deliveries and a paused Supabase project, with alerts and a status page on your own domain. The hosted free plan covers one app with 50 monitors and HTTP checks every 3 minutes, taking turns from Toronto and San Francisco. A failed HTTP or TCP check is run again from a second location before anyone is alerted.

Staygreen dashboard listing six monitors for one app, all up, with certificate and domain expiry days and the city each check ran from
Staygreen's overview for one app: each monitor's state, its latest check and where it ran from.

Start free at staygreen.io

What the license allows

The source is on GitHub under the Functional Source License, Version 1.1, MIT Future License. You may use, change and redistribute it for any purpose except offering a competing commercial product or service, and running a copy for your own organizations is allowed. Each version becomes MIT two years after it's published. That makes it source-available today, not open source by the Open Source Initiative's definition. The repository is a reviewed copy of the private one, refreshed after each release, and it doesn't take pull requests for now. It's also Staygreen's public issue tracker.

Running your own copy

It isn't one click. Staygreen is several services: a dashboard, a database, sign-in, probes that run the checks, a status page server and three Cloudflare Workers for heartbeats, alerts and a watchdog that warns you if the checks stop. Either layout in the deployment guide needs accounts at Supabase, Clerk, Cloudflare, Postmark and Telegram, a domain on Cloudflare, and the servers: the guide uses DigitalOcean, and any Linux VM with Node 22 does.

Recommended: two servers in different regions that run the checks, one of which also serves the status pages, and the dashboard on Netlify. The second region confirms a failed check before an incident opens. At October 2026 list prices that's about $43 a month: two DigitalOcean servers at $6 or $7, Supabase Pro at $25 and Cloudflare's Workers Paid plan at $5, with the rest on free plans. On Staygreen's own hosted service, a probe and the status page server share one 1 GB server. For a trial, Supabase's free plan does, though it pauses a project after a week without activity (why, and how to stop it).

Smallest: one 2 GB server running the dashboard, the checks and the status page server. With no second location, it re-checks a failure from itself 20 seconds later, and it drops failed checks while it can't reach a few well-known addresses, like Cloudflare's and Google's. A site only that server can't reach still reads as down, and when the server is down, so are your dashboard and status page, though the watchdog still tells you the checks stopped. The guide calls this fine for trying Staygreen or watching a few apps.

Nearly every step is a command a coding agent can run with one credential per provider, and the guide's prompt has it wait for you to check each step before the next. You do a few things by hand in the providers' own screens, like Clerk's settings and creating the Telegram bot. A copy needs no billing: one setting turns on every Builder feature for every workspace.


The Open-Source Uptime Monitors

Uptime Kuma: one container, everything in a web dashboard

Open source under the MIT license. It checks HTTP, keywords, JSON queries, TCP, WebSocket, ping, DNS records, push monitors and Docker containers, as often as every 20 seconds, shows certificate info, and sends alerts to 90+ notification services. Status pages map to your own domains, and it supports 2FA. The quickest install is one docker run line. Its data has to sit on a local directory or volume: the README says network file systems like NFS aren't supported. Source: the Uptime Kuma repository.

Gatus: checks as YAML, with conditions on the answer

Open source under Apache 2.0. Each endpoint in a YAML file gets conditions on the status code, the response time, the certificate's expiry and the body, over HTTP, ICMP, TCP or DNS, with alerts via Slack, Teams, PagerDuty, Discord, Twilio and many more. Its repository calls it a “developer-oriented status page with alerting and incident support,” and it runs as one container. By default it keeps results in memory, which doesn't survive a restart, so point it at SQLite or Postgres to keep them. External endpoints let a job push its own status, and Gatus can alert when the updates stop. Source: the Gatus repository.

OpenStatus: status pages and monitors as code

Open source under AGPL-3.0. Monitors, status pages and notification channels are declared in YAML or Terraform. Its README lists status pages with custom domains, password protection, maintenance windows and email and RSS subscribers. Self-hosted, it's several services under Docker Compose: the dashboard, the API, background workflows, the status pages, a database and a monitoring agent you place, which runs the checks instead of the 28 regions the README lists. The README also links a one-click Railway template, kept in a separate repository, and a Coolify guide. The Docker guide reaches status pages by subdomain or slug and doesn't mention custom domains, and its analytics need Tinybird Local, an optional service set up with Tinybird's own command-line tool. Sources: the OpenStatus repository and its self-hosting guide.

OneUptime: monitoring, on-call and observability in one install

Licensed under Apache 2.0, except its Enterprise Edition folder, which has its own license. It checks websites, APIs, ports, DNS and certificates from probes, and a probe can sit inside your own network. It pages whoever is on call by phone, SMS, email, push, Slack or Teams. It runs public or private status pages, and it takes logs, metrics and traces over OpenTelemetry. Self-hosting needs a Linux server with at least 8 GB of memory, or its Helm chart on Kubernetes for high availability. Production use of the Enterprise Edition needs a license. Source: the OneUptime repository.

Checkmate: uptime plus server hardware

Open source under AGPL-3.0. It checks HTTP with SSL expiry, ping, ports, DNS, Docker, gRPC, WebSocket and game servers, measures page speed, reads JSON, and with its Capture agent watches a server's memory, disk and CPU. It has status pages with 5 themes, scheduled maintenance, and alerts by email, webhook, Slack, Discord, Teams, Telegram, Twilio SMS and more. It runs as the app plus MongoDB, small enough for a Raspberry Pi 4 or 5, and sends a daily anonymous usage report unless you turn telemetry off. Source: the Checkmate repository.

Upptime: no server, just a GitHub repository

Open source under MIT. GitHub Actions visits each site every 5 minutes and records response time every 6 hours. An issue opens when a site is down, and GitHub Pages serves the status page, so there's no server to run. The catch is the scheduler: GitHub can delay scheduled runs when it's busy, so a check can come late or not at all. Source: the Upptime repository.

Healthchecks: for cron jobs

Open source under the BSD 3-clause license. It waits for your jobs to ping it by HTTP or email and alerts through 25+ integrations when one doesn't. It runs on Python 3.12 and later with PostgreSQL, MySQL or MariaDB. The cron job monitoring guide compares it with the hosted tools. Source: the Healthchecks repository.


Open-Source Status Pages

OpenStatus if the page comes first, Uptime Kuma if it comes with the monitoring

Every tool above except Healthchecks has a status page, Gatus included, so for most people the page and the monitoring are one install. By need:

  • Your own domain: Uptime Kuma maps status pages to the domains you choose.

  • Incident updates to subscribers: OpenStatus's README lists email and RSS subscribers.

  • Private pages and maintenance notices: OneUptime runs public or private status pages and announces scheduled maintenance on them.

Cachet: open source as released, its own license on the rebuild

Its latest release, v2.4.1 from 2023, is open source under the BSD 3-clause license. The 3.x branch, a rebuild with no release yet, runs on PHP 8.3 and later with MariaDB, MySQL, PostgreSQL or SQLite. It moves to Cachet's own license, which isn't on the Open Source Initiative's approved list. You may use and modify it in commercial or non-commercial projects, but not distribute it as a standalone product. That makes 3.x source-available, though its README calls it “the open source self-hosted status page system.” Sources: the Cachet repository and the approved licenses.

If you'd rather not host the page at all, the free status page comparison covers the hosted ones on your own domain.


Where to Run a Self-Hosted Monitor

  • Not next to your app. If they share a machine, a network or a cloud region, one outage can take both down, and nothing is left to tell you.

  • From more than one place. A single location, Staygreen's smallest layout included, can't tell your app being down from a problem on the route between them. OneUptime and OpenStatus can add probes in places you choose.

  • With something watching the monitor. A heartbeat from the monitor's machine to something elsewhere, like Healthchecks on another server, tells you when it goes quiet.

The free uptime monitoring comparison covers the hosted plans that check from several cities instead.


Which One Fits

  • One small server and a web dashboard: Uptime Kuma.

  • Checks in your repository, reviewed like code: Gatus, or OpenStatus with Terraform.

  • On-call, phone alerts and observability in the same tool: OneUptime.

  • Server hardware as well as uptime: Checkmate.

  • Nothing to host at all: Upptime on GitHub, or a hosted free plan.

  • Cron jobs: Healthchecks.

  • A free hosted plan, with the source on GitHub and your own copy if you want one: Staygreen.

What Staygreen doesn't do yet: monitoring your own MCP server, alert delays and repeats while something is down, maintenance windows, CSV export, and email subscribers on status pages. What it isn't built for: SMS or phone-call alerts, a mobile app, ping and UDP checks, and checks more often than every minute. Among the tools above, Uptime Kuma has ping checks and 20-second intervals, OneUptime sends SMS and phone alerts, and OpenStatus has maintenance windows and email subscribers.


Questions People Ask

What is the best open-source uptime monitor?

For most self-hosters, Uptime Kuma: one container, and a web dashboard for monitors, alerts and status pages. Gatus suits checks kept as YAML in a repository, and OneUptime suits teams that want on-call and observability in the same install.

What is the best open-source status page?

OpenStatus if the status page comes first: maintenance windows, incident updates to email and RSS subscribers, and monitors in the same tool. Uptime Kuma's status pages come with its monitoring, and Upptime builds one on GitHub Pages with no server at all.

Is Uptime Kuma free?

Yes. It's open source under the MIT license, so what you pay for is the server it runs on.

Can I self-host a status page on my own domain?

Yes. Uptime Kuma maps its status pages to the domains you choose. If you'd rather not host one, Staygreen puts a status page on your own domain with HTTPS on its free plan.

Is there a free alternative to self-hosting?

Yes, several hosted monitors have free plans, Staygreen among them: one app with 50 monitors, checked from Toronto and San Francisco, commercial use allowed. The free uptime monitoring comparison goes through eight hosted free plans.

Is Staygreen open source, and can I host it myself?

Staygreen isn't open source, but you can host it yourself. Its source is public on GitHub under the Functional Source License (FSL-1.1-MIT), which makes it source-available, and each version becomes MIT two years after it's published. You can read it, change it and run your own copy. The one use the license rules out is offering it to others as a competing commercial product or service.

Hosting a copy isn't one click. The deployment guide documents two setups, from two servers at about $43 a month down to one server, and a coding agent can run nearly every step. Staygreen's own hosted plan is free for one app.


Or let someone else run it: staygreen.io checks your app from two cities, free for one app.

Start free

This page is part of The Product Compass, a newsletter for PMs and builders who ship products with AI. Subscribe for the guides and tool tests.