Cachet vs Upptime: Self-Hosted Status Pages

Quick Verdict

Upptime is the easier choice — zero infrastructure, zero cost, zero maintenance. Cachet is the more capable choice when you need structured incident management, subscriber notifications, and a professional incident communication platform. Most self-hosters should start with Upptime and move to Cachet only if they outgrow it.

How They Differ

Cachet and Upptime solve the same surface problem (public status page) with fundamentally different approaches:

AspectCachetUpptime
Runs onDocker (PHP + PostgreSQL + Redis)GitHub (Actions + Pages + Issues)
Infrastructure costYour server’s resourcesFree (GitHub free tier)
MonitoringNone (manual/API incident creation)Built-in (GitHub Actions checks)
Incident workflowFull (Investigating → Fixed)GitHub Issues (auto-created)
Subscriber notificationsEmail (built-in)None
Scheduled maintenanceYesNo
Status page hostingSelf-hostedGitHub Pages
Setup time20-30 minutes5-10 minutes
MaintenanceContainer updates, backupsZero
APIFull REST CRUDGitHub API

Feature Comparison

FeatureCachetUpptime
Component groupsYesNo
Custom component status levels4 (Operational → Major Outage)2 (Up/Down)
Incident updates timelineYesVia GitHub Issue comments
Metric trackingYes (custom metrics)Response time only
Custom brandingLimited (name, logo)Full (CNAME, logo, colors)
Multi-language supportYes (20+ languages)Yes
Private status pageYesRequires GitHub Pro
Uptime history graphsNoYes (auto-generated)
Response time trackingNoYes
AlertingEmail to subscribersSlack, Discord, email
Self-hosted monitoringNoNo (GitHub Actions runners)

Setup and Maintenance

Upptime setup is a 5-minute process: fork a template repo, edit .upptimerc.yml, add a GitHub Personal Access Token as a secret, enable GitHub Pages. Done. From that point, maintenance is zero — GitHub handles everything.

Cachet requires provisioning three Docker containers (PHP app, PostgreSQL, Redis), generating an app key, running database migrations, and configuring SMTP for subscriber emails. It takes 20-30 minutes, and you’re responsible for container updates, database backups, and keeping the server running.

When Cachet’s Complexity Pays Off

Cachet’s overhead is justified when you need:

  1. Subscriber notifications — Users subscribe to your status page and receive emails when incidents are created or updated. Upptime has no equivalent.
  2. Structured incident workflows — Investigating → Identified → Watching → Fixed, with timestamped updates. Upptime uses GitHub Issues, which works but doesn’t provide a formal workflow.
  3. Scheduled maintenance windows — Announce planned downtime in advance. Upptime has no maintenance concept.
  4. Component groups — Organize 50+ services into logical groups (Infrastructure, APIs, Frontend, etc.).
  5. Custom metrics — Track and display custom business metrics alongside status.

When Upptime’s Simplicity Wins

Upptime is the right choice when:

  1. You don’t want to maintain another server — GitHub does everything for free.
  2. Basic monitoring is sufficient — HTTP status checks every 5 minutes covers most needs.
  3. You want uptime graphs — Upptime auto-generates response time and uptime percentage charts.
  4. Your sites are publicly accessible — Upptime can only monitor URLs reachable from GitHub’s network.
  5. Incident tracking via GitHub Issues is good enough — For small teams, Issues work fine.

Use Cases

Choose Cachet If…

  • You serve customers who expect professional incident communication
  • You need email subscriber notifications
  • You need scheduled maintenance announcements
  • You’re running an internal status page for your organization
  • You want full API control for automated incident management

Choose Upptime If…

  • You want a status page with zero infrastructure cost
  • You’re monitoring public-facing websites and APIs
  • You’re comfortable with GitHub as your platform
  • You want auto-generated uptime graphs and response time charts
  • You value zero maintenance over advanced features

Final Verdict

Upptime for most self-hosters. The zero-cost, zero-maintenance approach is hard to beat. You get monitoring, incident tracking (via GitHub Issues), uptime graphs, and a clean status page — all free.

Cachet earns its complexity when your audience expects professional incident communication. The subscriber notification system and structured incident workflow are enterprise-grade features that Upptime can’t match. If you’re running a SaaS product or an internal IT department where downtime communication matters, Cachet is worth the Docker overhead.

For a middle ground — Docker-based with a nice UI and 90+ alerting integrations — see Uptime Kuma. For monitoring-first with a YAML-configured status page, see Gatus.