Why Self-Host Your Status Page?
A status page is the first place users check when something goes wrong. Commercial services like Atlassian Statuspage, Instatus, and Statuspage.io charge $15–$500+ per month for features like custom domains, email notifications, and incident history. Self-hosting a status page gives you:
- Zero subscription costs — run unlimited public and private status pages for free
- Full data ownership — incident logs, uptime history, and metrics never leave your infrastructure
- Internal service visibility — display status for private APIs, databases, and internal tools that external services cannot reach
- Complete customization — modify the UI, add custom branding, and integrate with your existing tooling
- No vendor lock-in — migrate or export your data at any time without restrictions
Whether you run a homelab, manage a startup’s infrastructure, or operate an enterprise platform, a self-hosted status page is essential for transparent communication. This guide covers the three best open-source options available in 2026.
Option 1: Cachet — The Battle-Tested Status Page
Cachet is the most well-known open-source status page application. Built with PHP and Laravel, it has been in production since 2014 and powers status pages for thousands of organizations worldwide.
Key Features
- Incident Management — Create, update, and resolve incidents with timeline tracking
- Component Groups — Organize services into logical groups (e.g., “API Services,” “Databases”)
- Subscriber Notifications — Email and webhook notifications for status changes
- Custom Branding — Fully customizable themes with CSS overrides
- REST API — Programmatic control over components, incidents, and metrics
- Metric Charts — Display real-time and historical performance graphs
- Multi-language Support — Translated into 20+ languages
Strengths
Cachet’s biggest advantage is maturity. It has been production-tested for over a decade, has extensive documentation, and a large community. The Laravel foundation makes it easy to customize and extend with plugins. The built-in metrics system lets you plot custom data points like request latency, error rates, or queue depth directly on your status page.
Limitations
- Requires a PHP environment (Apache/Nginx + PHP-FPM + database)
- The original project was archived in 2020, but the community fork Cachet HQ keeps it maintained
- No built-in monitoring — you must push metrics from external tools
- Heavier resource footprint compared to lightweight alternatives
docker Deployment
| |
Generate the application key before first run:
| |
After starting the containers, access http://your-server:8000 and complete the setup wizard to create your admin account and configure your first components.
Pushing Metrics via API
| |
Creating an Incident
| |
Option 2: Statping-ng — Modern Status Page with Built-In Monitoring
Statping-ng is the community-maintained fork of the original Statping project. Unlike Cachet, it includes built-in health monitoring — it actively checks your services and automatically updates the status page when something goes down.
Key Features
- Active Health Checks — Monitor HTTP, TCP, UDP, ICMP, and gRPC endpoints
- Automatic Status Updates — Services go down? The status page updates automatically
- Incident Timeline — Automatic incident creation with recovery detection
- Multi-User Authentication — Role-based access with OAuth support (Google, GitHub, SAML)
- Dark/Light Theme — Built-in theme switching
- Webhook Integrations — Send alerts to Slack, Discord, Telegram, email, and custom webhooks
- SQLite/MySQL/PostgreSQL — Flexible database backends
- Docker-First Design — Minimal configuration required
Strengths
Statping-ng’s killer feature is that it monitors for you. You don’t need a separate monitoring tool pushing data to your status page — just configure the endpoints you want to track, and Statping-ng handles the rest. It performs health checks on a configurable schedule, creates incidents automatically when services fail, and resolves them when they recover.
The Go-based architecture is lightweight, fast, and compiles to a single binary. It uses significantly less memory than Cachet and starts up in under a second.
Limitations
- Smaller community than Cachet (though actively maintained)
- Fewer customization options for the UI
- Metrics and charts are less flexible than Cachet’s system
- The original project’s history of maintainer turnover may concern some users
Docker Deployment
| |
For production with PostgreSQL:
| |
Configuring Monitors via the UI
After starting Statping-ng, access http://your-server:8080 and:
- Create your admin account in the setup wizard
- Navigate to Services → Add Service
- Configure each service you want to monitor:
- Name: Display name (e.g., “Main Website”)
- URL: Endpoint to check (e.g.,
https://example.com) - Check Type: HTTP, TCP, Ping, or gRPC
- Interval: How often to check (e.g., 30 seconds)
- Timeout: Maximum response time before failure
- Expected Status Code: Usually 200
- Headers: Custom headers if needed (e.g., API keys)
Setting Up Webhook Notifications
| |
Option 3: Upptime — Git-Powered Status Pages
Upptime takes a radically different approach. Instead of running a dedicated server, it uses GitHub Actions to monitor your services and GitHub Pages to host the status page. Everything is stored in a Git repository.
Key Features
- Zero Server Required — Runs entirely on GitHub’s infrastructure
- GitHub Actions Monitoring — Checks run on GitHub’s scheduled cron
- GitHub Pages Hosting — Static status page hosted for free
- Automatic Issue Tracking — Downtime creates GitHub Issues automatically
- Commit History as Audit Log — Every status change is a Git commit
- Multiple Monitor Types — HTTP, TCP, DNS, and port checks
- Custom Domains — Point your own domain to the GitHub Pages site
- Free Tier — Completely free with GitHub’s generous Action minutes
Strengths
Upptime is ideal if you want zero infrastructure overhead. No servers to maintain, no databases to back up, no Docker containers to update. Everything runs on GitHub: monitoring via Actions, hosting via Pages, and incident tracking via Issues. The Git-based audit trail means every status change is permanently recorded in your commit history.
For open-source projects and small teams already on GitHub, this is the path of least resistance. Setup takes under 5 minutes using the provided template repository.
Limitations
- GitHub dependency — If GitHub has an outage, your status page may be affected
- Check interval limited — Minimum 5 minutes (GitHub Actions scheduling)
- No real-time updates — Status changes only appear after the next scheduled check
- Limited customization — Template-based UI with restricted theming options
- GitHub Action minutes — Heavy usage may consume your monthly free quota
Quick Setup
| |
Customizing the Status Page
| |
Feature Comparison Table
| Feature | Cachet | Statping-ng | Upptime |
|---|---|---|---|
| Cost | Free (self-hosted) | Free (self-hosted) | Free (GitHub) |
| Language | PHP (Laravel) | Go | Node.js (GitHub Actions) |
| Built-In Monitoring | ❌ No (API push only) | ✅ Yes (HTTP, TCP, Ping, gRPC) | ✅ Yes (GitHub Actions) |
| Auto Incident Creation | ❌ Manual | ✅ Automatic | ✅ Automatic (GitHub Issues) |
| Status Page Hosting | Self-hosted | Self-hosted | GitHub Pages |
| Infrastructure Required | Server + DB | Server + DB (optional) | None (GitHub) |
| Custom Domains | ✅ Yes | ✅ Yes | ✅ Yes |
| Subscriber Notifications | ✅ Email, Webhook | ✅ Slack, Discord, Telegram, Webhook | ✅ GitHub Notifications |
| REST API | ✅ Full API | ✅ Limited API | ❌ No (Git-based) |
| Metrics & Charts | ✅ Custom metrics | ✅ Basic charts | ✅ Response time graphs |
| Min Check Interval | N/A (push-based) | 5 seconds | 5 minutes |
| Dark Mode | Via theme | ✅ Built-in | ✅ Built-in |
| Multi-User / Auth | ✅ Admin dashboard | ✅ OAuth, SAML | ✅ GitHub auth |
| Incident Timeline | ✅ Manual entries | ✅ Automatic | ✅ GitHub Issues |
| Resource Usage | Medium (PHP-FPM) | Low (single binary) | Zero (serverless) |
| Setup Complexity | Medium | Low | Very Low |
| Best For | Enterprise, customizable | Self-hosters wanting monitoring | GitHub-based, zero-infra |
Which Should You Choose?
Choose Cachet if:
- You need a polished, customizable status page with full API conprometheus already have monitoring infrastructure (Prometheus, Datadog, etc.) and just need a presentation layer
- You want metrics charts with custom data points
- Your team is comfortable with PHP/Laravel for customizations
- You need multi-language support out of the box
Choose Statping-ng if:
- You want an all-in-one solution with built-in monitoring and status page
- You prefer Go-based, low-resource services
- You need active health checks without running a separate monitoring tool
- You want automatic incident creation and recovery detection
- You need Slack, Discord, or Telegram notifications built in
Choose Upptime if:
- You want zero infrastructure to manage
- You’re already invested in the GitHub ecosystem
- Your check interval of 5 minutes is acceptable
- You want a permanent Git-based audit trail of all incidents
- You’re running an open-source project or small team
Running Multiple Status Pages with Docker Compose
Here’s a complete setup that runs Cachet and Statping-ng side by side behind a reverse proxy, letting you test both:
| |
| |
Integrating with Your Monitoring Stack
For Cachet users who need active monitoring, here’s how to connect Prometheus alerts to your status page:
| |
Add this to a cron job or run it from your alertmanager webhook receiver for automatic status updates.
Final Recommendations
For most self-hosters in 2026, Statping-ng offers the best balance of features and simplicity. It monitors your services automatically, updates the status page without manual intervention, and sends alerts through the channels you already use. The single-binary Go architecture means minimal resource usage and easy updates.
If you need maximum customization and API flexibility, Cachet remains the gold standard for enterprise status pages. Pair it with your existing monitoring stack, and you get a professional-grade status portal.
For teams that want zero infrastructure to manage, Upptime is unbeatable. The GitHub-native approach means your status page is literally part of your codebase — version controlled, reviewed, and deployed through the same workflow as your applications.
Frequently Asked Questions (FAQ)
Which one should I choose in 2026?
The best choice depends on your specific requirements:
- For beginners: Start with the simplest option that covers your core use case
- For production: Choose the solution with the most active community and documentation
- For teams: Look for collaboration features and user management
- For privacy: Prefer fully open-source, self-hosted options with no telemetry
Refer to the comparison table above for detailed feature breakdowns.
Can I migrate between these tools?
Most tools support data import/export. Always:
- Backup your current data
- Test the migration on a staging environment
- Check official migration guides in the documentation
Are there free versions available?
All tools in this guide offer free, open-source editions. Some also provide paid plans with additional features, priority support, or managed hosting.
How do I get started?
- Review the comparison table to identify your requirements
- Visit the official documentation (links provided above)
- Start with a Docker Compose setup for easy testing
- Join the community forums for troubleshooting