A status page you host yourself, running in minutes
It checks your services, alerts your team and shows your users what is going on. One container on your own server, no subscription.
Four things it does for you
Watches your services
- HTTPS, ping, TCP, DNS, PostgreSQL, MySQL, MongoDB, SQL Server, Docker and incoming webhooks
- Dependencies: one failure, one alert
- Warnings before a TLS certificate expires
Wakes the right person
- Email, Slack, Microsoft Teams, Discord, Telegram and webhooks
- Quiet hours, failure thresholds and a rate cap
- One-off and recurring maintenance windows that stay silent
- Actions: call a URL when a monitor goes down, with an optional approval
Keeps your users in the loop
- Drag-and-drop page builder, no CSS required
- Incident updates that appear without a refresh
- Subscriptions by email, Slack, webhook and RSS
- Incidents opened for you when a monitor stays down
Ready for business
- Single sign-on (Entra ID, Keycloak, Okta)
- An encrypted vault, or HashiCorp Vault, for passwords and tokens
- An audit log of who changed what
- A saved copy of the status page on S3 storage, for when your server is down
Looks like your company
- Your logo, name and colours, plus your own CSS and favicon
- Your own uptime thresholds for each colour of the uptime bar
- A live preview of the page before you save
Every alert leaves a trace
- Every delivery attempt, with the error when one fails
- A held alert shows why: quiet hours, the rate cap or a digest
- Send a failed notification again with one click
Every monitor, in detail
- Response time chart with average, p95 and maximum for 24 hours to 90 days
- Percentiles, uptime bars and the latest failed checks with their errors
- Incidents with their time to recovery, next to the configuration
Monitoring as code
- Monitors and channels as YAML, identified by key
- Check the file, see what would change, apply it all or not at all
- API tokens with the permissions you pick, for scripts and CI/CD
- Prometheus metrics for monitor status and response times, behind a read-only token
Secrets stay in your vault
- A built-in encrypted vault, or your HashiCorp Vault
- Monitors and channels use a secret by reference, the value is never copied
- Saved passwords and tokens are masked in the panel and in the API
Fixes that wait for your approval
- Call a URL when a monitor stays down or comes back, to start a failover or roll back a deployment
- Turn on approval and the run waits until an administrator approves or rejects it
- Your channels hear when a run waits, fails or succeeds, and every decision is in the audit log
You pay for the server, not for a subscription
How Better Status Page compares with the alternatives people usually look at first.
| Better Status Page | Statuspage / Instatus | Uptime Kuma | Gatus | |
|---|---|---|---|---|
| Price | Free, MIT license | Free tier, more in paid plans | Free, MIT license | Free, Apache 2.0 license |
| Self-hosted | Yes | No | Yes | Yes |
| Private status page (sign-in required) | Yes | Paid plans | Not built in | Whole dashboard only |
| Several status pages | No | Yes | Yes | No |
| Incidents with updates over time | Yes | Yes | Pinned posts only | Announcements only |
| Subscribers by email, RSS, Slack, webhook and API | Yes | Yes | RSS only | Not built in |
| Users, roles and single sign-on | Yes | Paid plans | No | No |
| Edited in a web interface | Yes | Yes | Yes | No, a YAML file |
| Status page stays up when the server is down | Yes | Yes | No | No |
| No limit on subscribers or monitors | Yes | Limited by plan | Yes | Yes |
Based on public information, October 2026. Plans change, so check each vendor before you decide. Detailed comparison in the docs
Runs on your server
One container on your server. No Redis, queues or Kubernetes to run alongside it.
Deployment guide# installs, generates secrets and starts it
curl -fsSL https://betterstatuspage.dev/install.sh | sh
Is Better Status Page free?
Yes. The code is MIT licensed. You install it yourself and only pay for the server it runs on.
Will my team get buried in alerts?
No. An alert goes out only after several failed checks in a row. Quiet hours and an hourly cap keep the phone silent, and when many monitors fail at once your team gets one digest. If the API fails because of the database, you get one alert, not two.
How do users find out about an outage?
They follow your page by email, RSS or Atom, Slack or webhook, and get every incident update you post. Anyone who has the page open sees changes live, without a refresh.
Do I have to write incidents by hand?
No. A monitor can open an incident by itself once it has been down for as long as you set, and resolve it when the service is back. You choose whether it appears as a draft that you publish, or goes public at once. The wording comes from a template.
What about planned maintenance?
Schedule a maintenance window. Your users see a banner on the status page, and your team gets no alerts while the work is under way.
Can I use my own domain and branding?
Yes. You set the logo, colours, favicon, custom CSS and dark mode. Point your domain at your server.
Which languages does the status page support?
English and Polish are built in, and you can add your own translations.
Your own instance for 5 minutes
Filled with 90 days of data. No sign-up, and everything is deleted when the time is up.