Skip to content
The Hora status page: monitor cards with daily uptime bars, latency charts and p95/p99

Hora

A tiny, self-hosted uptime monitor. One ~15 MB binary probes your services, stores history in SQLite, alerts you when something really breaks, and serves a status page plus a JSON API.

Flapping never wakes you up

Alerts fire only after N consecutive failures, failed probes are retried before anything is recorded, and a database taking ten services down with it sends one notification - the root cause, with its blast radius.

One small binary

HTTP, TCP, ICMP, DNS and push probes, TLS expiry and key-pin checks, SQLite storage, a server-rendered status page, Prometheus metrics and ten notification backends - migrations and templates compiled in. The Docker image is a static musl binary on Alpine, about 15 MB.

SRE-grade alerting

Availability SLOs with visible error budgets and Google-SRE multi-window burn-rate alerts: catch the slow-burning flapping a binary down alert never confirms - and stay quiet once the burn stops.

Built for operators

Live config reload without a blind window, ad-hoc silences for deploy hooks, incident annotations, failure snapshots (“what did the service actually answer?”), one-statement backups, and an Uptime Kuma importer.

  • Probes: HTTP (status, keyword and JSONPath assertions, custom headers, proxies), TCP connect, unprivileged ICMP ping, DNS with answer pinning, and cron-aware push heartbeats.
  • Dual-stack verification: probe IPv4 and IPv6 separately and require both - catch the service whose IPv6 has been silently dead for weeks.
  • Topology: declare depends_on and alerts are annotated “caused by X” or “impacts: A, B, C”; dependent alerts fold into their root cause’s single notification.
  • Status page: server-rendered, no JavaScript framework, with daily uptime bars, latency charts, p95/p99, maintenance banners - and an aligned plain-text rendering when you curl it.
  • History: every confirmed incident is recorded and served as HTML and an Atom feed, with operator notes and the captured failing response.
  • Private monitors: one Hora for a public status page and your internal services, gated by a viewer token.

Named after the Horai, the Greek goddesses of the hours.