Skip to content

A Powerful Serverless Uptime Monitoring & Status Page on Cloudflare's Edge Network

License

Notifications You must be signed in to change notification settings

VrianCao/Uptimer

Repository files navigation

Uptimer

Serverless uptime monitoring & status page on Cloudflare's edge network

CI Deploy License: MIT

Monitor your services, display real-time status to visitors, and get notified when things go down — all running on Cloudflare Workers + Pages + D1 with zero ops.

Quick Deploy · Local Dev · Documentation · Contributing

English | 中文


Why Uptimer?

  • Zero ops — No servers, containers, or databases to manage. Runs entirely on Cloudflare's free/paid tiers.
  • Edge-native — Monitoring probes run from Cloudflare Workers; your status page is served from the CDN edge.
  • One-click deploy — Push to main and GitHub Actions handles everything: D1 migrations, Worker deployment, Pages build.
  • Full-featured — HTTP/TCP checks, incident management, maintenance windows, webhook notifications, admin dashboard.

Features

Monitoring

  • HTTP(S) probes with custom headers, body, status code & keyword assertions
  • TCP port connectivity checks
  • Configurable timeouts, retry thresholds, and flapping control
  • Automatic state machine: UP / DOWN / MAINTENANCE / PAUSED / UNKNOWN

Status Page

  • Public-facing status page with real-time aggregate status
  • Per-monitor uptime percentage and latency charts
  • Active incidents and maintenance windows
  • Multi-language support (en, zh-CN, zh-TW, ja, es)

Incident Management

  • Create, update, and resolve incidents with timeline
  • Schedule maintenance windows
  • All visible on the public status page

Notifications

  • Webhook notifications to Discord, Slack, ntfy, or any HTTP endpoint
  • Customizable message & payload templates with magic variables
  • Optional HMAC-SHA256 signature verification
  • Idempotent delivery with deduplication

Admin Dashboard

  • Monitor CRUD with live status overview
  • Notification channel management with test button
  • Analytics with uptime/latency charts and CSV export
  • System settings (site title, timezone, thresholds, retention)

Architecture

                ┌──────────────────────────────────────────┐
                │            Cloudflare Network            │
                │                                          │
Visitors ──────►│  Pages (React SPA)                       │
                │      │                                   │
                │      ▼                                   │
Admin ─────────►│  Workers (Hono API)                      │
                │      │              │                    │
                │      ▼              ▼                    │
                │    D1 DB      Cron Triggers              │
                │              (scheduled probes)          │
                │                     │                    │
                └─────────────────────┼────────────────────┘
                                      │
                                      ▼
                           Target Services (HTTP/TCP)
                                      │
                                      ▼
                              Webhooks ──► Discord / Slack / ntfy

Tech Stack

Layer Technology
Frontend React 18, Vite, TypeScript, Tailwind CSS, TanStack Query, Recharts
Backend Cloudflare Workers, Hono, Zod
Database Cloudflare D1 (SQLite), Drizzle ORM
Hosting Cloudflare Pages (frontend), Workers (API)
CI/CD GitHub Actions
Package Manager pnpm (monorepo)

Quick Deploy (5 Steps)

Deploy your own Uptimer instance without touching any code or config files:

Step 1 — Fork

Click the Fork button at the top-right of this repository to create your own copy.

Step 2 — Create a Cloudflare API Token

  1. Go to Cloudflare Dashboard → API Tokens
  2. Click Create Token → use the Edit Cloudflare Workers template
  3. Add the following permissions:
    • Account / Cloudflare Pages / Edit
    • Account / D1 / Edit
    • Account / Account Settings / Read
  4. Copy the generated token

Step 3 — Add GitHub Secrets

Go to your forked repo → SettingsSecrets and variablesActionsNew repository secret, and add:

Secret Name Value Required
CLOUDFLARE_API_TOKEN Token from Step 2 Yes
UPTIMER_ADMIN_TOKEN Any strong string (this is your admin dashboard password) Yes
CLOUDFLARE_ACCOUNT_ID Your Cloudflare Account ID Recommended

Step 4 — Run GitHub Actions

Go to ActionsDeploy to CloudflareRun workflow (or simply push a commit to main/master).

The workflow automatically:

  • Creates the D1 database and runs migrations
  • Deploys the Worker (API + cron-based monitoring)
  • Builds and deploys the Pages frontend (status page)
  • Injects the admin token as a Worker secret

Step 5 — Visit Your Status Page

Once the workflow succeeds (usually ~2 min for first deploy):

  • Status pagehttps://<your-repo-name>.pages.dev
  • Admin dashboardhttps://<your-repo-name>.pages.dev/admin
  • APIhttps://<your-repo-name>.workers.dev/api/v1/public/status

Log in to the admin dashboard with the UPTIMER_ADMIN_TOKEN you set, and start adding monitors.

Staying up to date — Since you deploy from your own fork, you can sync with upstream at any time. The deploy workflow will run automatically after each sync.

For advanced options (custom domain, resource naming, admin path), see the Deployment Guide.


Local Development

Click to expand local development setup

Prerequisites

  • Node.js >= 22.14.0
  • pnpm >= 10.8.1

Setup

# 1. Clone and install
git clone https://github.com/<your-username>/Uptimer.git
cd Uptimer
pnpm install

# 2. Set up local secrets
cp apps/worker/.dev.vars.example apps/worker/.dev.vars
# Edit .dev.vars and set ADMIN_TOKEN=your-secret-token

# 3. Start development servers (auto-initializes D1)
pnpm dev

Default addresses:

For the full local development guide (seed data, API testing, troubleshooting), see Develop/LOCAL-TESTING.md.

Documentation

Document Description
Deployment Guide (中文) Full GitHub Actions deployment walkthrough
Configuration Reference (中文) All configurable parameters (secrets, variables, settings)
Notification System (中文) Webhook setup, templates, signatures, troubleshooting
Local Development Local setup, seed data, testing procedures

Quality Checks

pnpm lint          # ESLint across all packages
pnpm typecheck     # TypeScript strict checks
pnpm test          # Unit tests
pnpm format:check  # Prettier formatting check

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

License

This project is licensed under the MIT License — see the LICENSE file for details.


Built with Cloudflare Workers + Hono + React

About

A Powerful Serverless Uptime Monitoring & Status Page on Cloudflare's Edge Network

Topics

Resources

License

Contributing

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •