In short
- For most people the best self-hosted UptimeRobot alternative is Uptime Kuma.
- Its own README says it was built because the author wanted a self-hosted tool like "Uptime Robot".
- It's one Docker container with a friendly UI, checks as often as every 20 seconds, and 90+ notification services.
- If you'd rather define checks in a YAML file and keep them in Git, pick Gatus. If you also want CPU, RAM and disk metrics from your servers, look at Checkmate.
Contents9 sections
One caveat applies to all three, and it matters more than any feature table. A self-hosted monitor can't tell you its own server is down. Run it on a different machine, a different provider, or at home, from whatever it's watching.
What UptimeRobot costs today
Here's what you'd be replacing, per UptimeRobot's pricing page on 2026-09-29. Monthly prices are with annual billing, and the monthly-billing price is in brackets.
| Plan | Price | Monitors | Check interval | Notes |
|---|---|---|---|---|
| Free | $0 | 50 | 5 minutes | HTTP, port, ping and keyword monitors; 1 status page; 3 months of data retention |
| Solo | $9/month ($10) | 10 (50 tier available) | 60 seconds | All monitor types plus SSL and DNS; 3 status pages on your own domain; 12 months of retention |
| Team | $35/month ($41) | 100 | 30 seconds | 3 seats, 100 white-label status pages, webhooks, Zapier, PagerDuty |
| Scale | $65/month ($77) | 200 (500 tier available) | 15 seconds | 5 seats, unlimited status pages |
| Enterprise | Quote | Custom | Custom | SOC 2, DPA and MSA paperwork, dedicated CSM, SLA |
The free plan is generous on monitor count. The pain points are the 5-minute interval and the features held back for paid tiers: the pricing FAQ says Solo adds API, multi-location, slow-response, UDP and DNS monitoring. Self-hosted tools remove those limits. What they can't give you is UptimeRobot's multi-location checking from its own global network.
1. Uptime Kuma
Best for: almost everyone who wants a UptimeRobot-style dashboard on their own server, set up in five minutes.
- Monitor types: HTTP(s), TCP, HTTP(s) keyword, HTTP(s) JSON query, WebSocket, ping, DNS record, push, Steam game server and Docker containers
- Interval: down to 20 seconds
- Alerts: Telegram, Discord, Gotify, Slack, Pushover, SMTP email and "90+" services in total
- Status pages: multiple, each mappable to its own domain
- Setup: the official
compose.yamlruns one container on port 3001, with data in./data - Storage: SQLite by default. The full v2 image can use an embedded MariaDB, and the slim image can connect to an external MariaDB/MySQL.
- Licence: MIT · Latest: 2.5.5 (2026-09-16) · Stars: 91,913 (as of 2026-09-29)
Where it falls short: configuration lives in the web UI and its database, not in a file you can review in Git. And the Docker container monitor needs the Docker socket mounted, which the wiki warns gives the container full control of the host's Docker daemon. The full setup walk-through is at /software/uptime-kuma.
2. Gatus
Best for: developers who want monitoring as code, with checks defined in YAML, reviewed in pull requests, and deployed like anything else.
Gatus calls itself "a developer-oriented health dashboard". You define endpoints in config/config.yaml (or a directory of YAML files via GATUS_CONFIG_PATH). Each check is evaluated against conditions: status code, response time, certificate expiry, body content and more. That's more precise than a plain up/down ping. It monitors over HTTP, ICMP, TCP and DNS, and alerts through Slack, Teams, PagerDuty, Discord, Twilio, email and many other providers listed in the README.
- Setup:
docker run -p 8080:8080 --name gatus ghcr.io/twin/gatus:stable - Storage: in memory by default, or SQLite or PostgreSQL for persistence
- Managed option: the README points to Gatus.io for a hosted version
- Licence: Apache-2.0 · Latest: v5.37.0 (2026-09-24) · Stars: 12,194 (as of 2026-09-29)
The README makes a case worth hearing even if you pick something else. Metrics-based alerting only fires when real traffic hits a problem, but a scheduled health check can catch a broken endpoint before users do. That's the core job of all three tools here.
Where it falls short: no click-to-add-monitor UI. If editing YAML sounds like a chore, stick with Uptime Kuma. And note the default in-memory storage. Set storage.type to sqlite or postgres if you want history to survive a restart.
3. Checkmate
Best for: people who want uptime checks and server hardware metrics in one dashboard.
Checkmate describes itself as "an open source uptime and infrastructure monitoring application". It tracks uptime, response times and incidents. Paired with its optional agent, Capture, it also reports a remote server's CPU, RAM, disk and temperature. The README states it has been "stress-tested with 1000+ active monitors". That's the project's own claim, not an independent benchmark.
- Setup: the reference Docker Compose file starts the Checkmate app and a separate MongoDB service. The UI is on port 52345, and you have to set a
JWT_SECRET. - One-click installs are listed in the README for Coolify, PikaPods, Elestio, Easypanel and others, plus a Helm chart for Kubernetes.
- Licence: AGPL-3.0 · Latest: v3.12.0 (2026-09-13) · Stars: 10,900 (as of 2026-09-29)
Where it falls short: it's heavier to run than Uptime Kuma or Gatus, because MongoDB is required and comes as a second container. And AGPL-3.0 matters if you plan to modify it and offer it as a service to others.
Side by side
| Uptime Kuma | Gatus | Checkmate | |
|---|---|---|---|
| Best for | UI-driven, quick setup | Config as code | Uptime plus server metrics |
| Configured in | Web UI | YAML file | Web UI |
| Extra services needed | None (SQLite) | None (memory/SQLite) | MongoDB |
| Default port | 3001 | 8080 | 52345 |
| Licence | MIT | Apache-2.0 | AGPL-3.0 |
| Latest release | 2.5.5 | v5.37.0 | v3.12.0 |
Uptime Kuma vs UptimeRobot, directly
- Check interval: Kuma goes down to 20 seconds on your own hardware. UptimeRobot's Free plan is 5 minutes, and paid plans go to 60, 30 or 15 seconds.
- Monitor count: Kuma has no licence limit, so it's bounded by your server. UptimeRobot Free allows 50 monitors.
- Check locations: Kuma checks from wherever you run it, one location. UptimeRobot lists multi-location monitoring as a feature (not on Free, per its FAQ).
- Who keeps it running: with Kuma, that's you, and it's only as reliable as the box it's on. UptimeRobot is someone else's problem.
Which should you pick?
- You want a UptimeRobot-style dashboard with minimal setup: Uptime Kuma.
- Your team reviews infrastructure changes in Git: Gatus, because checks live in YAML next to your code.
- You also want CPU, RAM, disk and temperature from your servers: Checkmate with its Capture agent.
- You only need a few checks every five minutes: UptimeRobot's Free plan may be all you need.
A sensible hybrid
You don't have to choose. A common, cheap setup is to run Uptime Kuma (or Gatus) on a small separate server for fast, detailed checks of everything, and keep a free UptimeRobot account watching just the monitor itself and your most important URL. That way, if your self-hosted monitor dies, something outside still notices.
Where to run it
Any small Linux VPS or a Raspberry Pi will do for Uptime Kuma or Gatus. Just keep it off the server you're monitoring. See /best/vps-for-self-hosting for options with published RAM and prices. If you deploy through a panel, Uptime Kuma ships as a template in both Coolify and Dokploy.
Built from UptimeRobot's pricing page and each project's README and GitHub data. No hands-on testing is claimed.
Sources (9)ShowHide
- UptimeRobot plans and pricing · accessed 2026-09-29
- Uptime Kuma README · accessed 2026-09-29
- Uptime Kuma wiki: Docker Tags · accessed 2026-09-29
- Uptime Kuma wiki: How to Monitor Docker Containers · accessed 2026-09-29
- Gatus README · accessed 2026-09-29
- Checkmate README · accessed 2026-09-29
- GitHub API: louislam/uptime-kuma (licence, stars, latest release) · accessed 2026-09-29
- GitHub API: TwiN/gatus (licence, stars, latest release) · accessed 2026-09-29
- GitHub API: bluewave-labs/Checkmate (licence, stars, latest release) · accessed 2026-09-29