Relay alerts you and your users when something breaks — through a beautiful public status page with incident management, team RBAC, REST API, PagerDuty/OpsGenie, and maintenance windows. One tool, zero duct tape.
Try the live demos below — latency ticks update in real time, uptime bars show tooltips on hover, and both panels stay in sync.
Built for self-hosters who want Statuspage.io quality without the SaaS bill or the second tool.
Check APIs, ports, certificate expiry, DNS resolution, and cron jobs — all from one dashboard. Per-monitor latency thresholds trigger degraded state.
Status updates stream in real time via HTMX WebSocket. No page reloads, no polling. Monitor cards flash when state changes.
Visual history per monitor with daily segments — identical to Statuspage.io. Grouped by service category on both dashboard and status page.
Post incidents, add timeline updates, and mark resolved. Auto-opens incidents on monitor failure, auto-closes on recovery. Full public history page.
Double opt-in with one-click unsubscribe. Notify users automatically when your status page changes state.
No Node, no Python, no runtime dependencies. Templates and assets embedded at build time. Runs on any Linux box or Raspberry Pi.
Zero ops database. Back up with cp relay.db relay.db.bak. No Postgres to run. Configurable retention up to 90 days.
Under 20 MB production image. No shell, no attack surface. Docker healthcheck built in. Auto-TLS with the included Caddy compose file.
Full dark mode toggle with localStorage persistence. Respects prefers-color-scheme on first visit. Applies to both the admin dashboard and status page.
Features that large teams and production deployments actually need — without the SaaS price tag.
Invite teammates with role-based access: Admin (full control), Editor (manage monitors and post incidents), or Viewer (read-only). The root admin account is always secured via environment variables.
Full REST API at /api/v1/ — list, create, update, and delete monitors; create incidents; pull latency metrics. Authenticate with scoped API keys for CI/CD, Terraform, or any automation.
GET /api/v1/monitors
POST /api/v1/incidents
GET /api/v1/monitors/:id/metrics
Schedule maintenance windows before deployments. Monitors keep running and results are recorded — but no alerts fire and no incidents are auto-created. Scoped globally or per-monitor.
Native integrations with PagerDuty Events API v2 and OpsGenie Alerts API (US and EU regions). Triggers open, resolves close — plus the existing Slack, webhook, and SMTP channels.
Every admin action is recorded: who created, updated, or deleted a monitor; who posted an incident update; who changed a user's role. Paginated and searchable.
Assign monitors to named groups (API, Database, CDN, Auth) that appear as separate sections on the dashboard and public status page — just like enterprise Statuspage.
Pause any monitor with one click — checks stop, no alerts fire, status shows as paused. The "Test Now" button fires an immediate probe and shows the result inline, before saving.
Assign specific alert channels to each monitor. Route your database alerts to PagerDuty, API alerts to Slack, and TLS expiry to email — independently, per monitor.
Time-bucketed P50/P95 latency data for any monitor over any window up to 720 hours. Pull into Grafana, Datadog, or your own dashboards via the REST API.
http
URLs & APIs
Status codes, keywords, latency thresholds
tcp
Ports & services
Any TCP socket — databases, Redis, SMTP
tls
Cert expiry
Alert days before your cert expires
dns
DNS resolution
Verify record resolution & IP matching
heartbeat
Cron jobs
POST /ping/:id from your cron — miss = alert
Self-hosters usually need Uptime Kuma and Statuspage.io. Relay replaces both — and adds enterprise features they don't have.
| Uptime Kuma | Statuspage.io | Relay | |
|---|---|---|---|
| Self-hosted | ✓ | ✗ | ✓ |
| Public status page | ✗ | ✓ | ✓ |
| Grouped components | ✗ | ✓ | ✓ |
| Email subscribers | ✗ | ✓ paid | ✓ |
| Incident management | ✗ | ✓ | ✓ |
| REST API | ✗ | ✓ paid | ✓ |
| Team RBAC | ✗ | ✓ paid | ✓ |
| PagerDuty / OpsGenie | ✗ | ✓ paid | ✓ |
| Maintenance windows | ✗ | ✓ | ✓ |
| Audit log | ✗ | ✓ paid | ✓ |
| Slack / webhook alerts | ✓ | ✓ paid | ✓ |
| Docker image size | ~200 MB | — | < 20 MB |
| Free | ✓ | ✗ | ✓ |
One Docker command. No config file required. Status page at /, admin dashboard at /admin, REST API at /api/v1/.
docker run -d \
--name relay \
--restart unless-stopped \
-p 8080:8080 \
-v relay-data:/data \
-e RELAY_SECRET=$(openssl rand -hex 16) \
-e RELAY_ADMIN_PASS=yourpassword \
-e RELAY_SITE_NAME="Acme Status" \
ghcr.io/rohzzn/relay
Free, open source, and built for teams who care about their users and their stack.