✓ Free & open source  ·  MIT License

Uptime monitoring on
Cloudflare Workers

Self-hosted, serverless uptime monitoring with public status pages — no servers, no subscriptions, no vendor lock-in.

Your public status page — live at status.yourdomain.com
✅  All systems operational
API
48ms 99.9% uptime Operational
30 days agoToday
Web App
112ms 100% uptime Operational
30 days agoToday
Docs
91ms 99.7% uptime Operational
30 days agoToday
Features

Everything you need. Nothing you don't.

Built lean on Cloudflare's edge infrastructure. If it runs on Workers, it runs for free.

🌐
Public status pages
Shareable /status/:slug pages with live status, 30-day uptime bars, and response time graphs.
🚨
Instant alerts
Slack and Discord webhook alerts the moment a monitor goes down — and again when it recovers.
📊
Incident history
Full incident log with failure reasons grouped by month. Configurable 30 or 90-day window.
🔔
Maintenance notices
Post notices on your status page for planned maintenance or outages. Resolved notices stay in the history.
🔗
Custom domains
Each status page can live on its own domain — just add a route in wrangler.toml.
📰
RSS feed
Every status page includes a /rss feed so visitors can subscribe to incident updates.
🖼
Logo uploads
Upload a logo per status page, stored in R2 and served with immutable cache headers.
Admin dashboard
Single-page admin UI — add monitors, manage pages, post notices, upload logos. Zero dependencies.
Setup

Deploy in under 5 minutes.

A free Cloudflare account is all you need. The setup script handles everything else.

1
Clone and install
Grab the repo and install dependencies. Wrangler CLI is included as a dev dependency — no global install needed.
2
Run the setup script
One interactive script creates your D1 database, R2 bucket, sets your API key, and deploys the Worker.
3
Add monitors from the dashboard
Open the admin UI and add your first URL. Checks start immediately — every minute by default.
4
Share your status page
Create a status page, assign monitors, and share the link — or point a custom domain at it.
# Clone, install, and deploy interactively
git clone https://github.com/ANDRS-Projects/cloudflare-uptime-oss.git
cd cloudflare-uptime
./setup.sh
Pricing

Runs entirely on Cloudflare's free tier.

10 monitors checking every minute is ~450k requests/month. Cloudflare's free tier gives you 3 million.

ResourceUsed (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.

FAQ

Common questions.

Everything you need to know before you deploy.

Is Cloudflare Uptime Monitor really free?
Yes. It runs entirely on Cloudflare's free tier. Checking 10 monitors every minute uses roughly 450,000 Worker requests per month — well within the 3 million free tier limit. You only pay if you exceed free tier limits or want sub-minute check intervals.
Do I need to know how to code to set it up?
No. An interactive setup script (./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.
How many monitors can I add?
There is no hard limit in the software. In practice, 50–100 monitors checking every minute stays comfortably within Cloudflare's free tier. For larger setups, Cloudflare Workers Paid ($5/month) removes the daily request cap.
What happens if Cloudflare has an outage?
If Cloudflare Workers goes down, the monitoring worker stops running and your status pages become unavailable. This is the trade-off of running on a single provider. Cloudflare Workers has a 99.99% uptime SLA, making this scenario rare in practice.
How is this different from Uptime Robot or Better Uptime?
The key difference is ownership. Your monitoring data lives in your own Cloudflare D1 database — it never touches a third-party server. There are no subscription fees, no vendor lock-in, and no usage caps imposed by a SaaS provider.
Can I use a custom domain for my status page?
Yes. Each status page can be served on its own domain (e.g. 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.
Can I contribute to the project?
Yes, contributions are welcome. The project is MIT licensed and open source on GitHub. Open an issue to discuss a feature or bug fix, then submit a pull request.

Own your uptime monitoring.

No monthly SaaS fees. No vendor lock-in. No data leaving your infrastructure.

Deploy on Cloudflare → View source on GitHub