Self-hosted, serverless uptime monitoring with public status pages — no servers, no subscriptions, no vendor lock-in.
Built lean on Cloudflare's edge infrastructure. If it runs on Workers, it runs for free.
tcp://host:port connectivity, no web server required./status/:slug pages with live status, 30-day uptime bars, and an optional response time graph — hide it per page if you'd rather not publish latency data./rss feed so visitors can subscribe to incident updates.wrangler.toml.localStorage.Switch templates and brand colors below to see how your public status page adapts, live.
Brand color drives the underline, header background, and bell tint — status badges stay on the semantic green/red/yellow palette either way. On Navbar, the summary banner floats over the header's bottom edge and the bell links straight to the RSS feed.
A free Cloudflare account is all you need. The setup script handles everything else.
10 monitors checking every minute is ~450k requests/month. Cloudflare's free tier gives you 3 million.
| Resource | Used (10 monitors, 1-min interval) | Free tier limit | |
|---|---|---|---|
| Worker requests | ~450,000 / month | 3,000,000 / month | ✓ Free |
| D1 reads | ~1.5M / month | 5,000,000 / day | ✓ Free |
| D1 writes | ~450,000 / month | 100,000 / day | ✓ Free |
| R2 storage (logos) | Minimal | 10 GB / month | ✓ Free |
Workers Paid plan ($5/mo) recommended for >50 monitors or sub-minute check intervals.
Everything you need to know before you deploy.
./setup.sh) walks you through every step: creating the database, deploying the Worker, and setting your API key. If you can run a terminal command, you can deploy it.status.yourcompany.com). Add a route in wrangler.toml — the domain just needs to be proxied through Cloudflare DNS. Multiple status pages can each have their own custom domain.No monthly SaaS fees. No vendor lock-in. No data leaving your infrastructure.