Need help with cf-workers-status-page?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

557 Stars 378 Forks MIT License 87 Commits 13 Opened issues


Monitor your websites, showcase status including daily history, and get Slack/Telegram/Discord notification whenever your website status changes. Using Cloudflare Workers, CRON Triggers, and KV storage.

Services available


Need anything else?

Contributors list

Cloudflare Worker - Status Page

Monitor your websites, showcase status including daily history, and get Slack notification whenever your website status changes. Using Cloudflare Workers, CRON Triggers, and KV storage. Check my status page out! 🚀

Status Page

Slack notifications


You'll need a Cloudflare Workers account with

Also, prepare the following secrets

  • Cloudflare API token with
    Edit Cloudflare Workers
  • Slack incoming webhook (optional)
  • Discord incoming webhook (optional)

Getting started

You can either deploy with Cloudflare Deploy Button using GitHub Actions or deploy on your own.

Deploy with Cloudflare Deploy Button

Deploy to Cloudflare Workers

  1. Click the button and follow the instructions, you should end up with a clone of this repository
  2. Navigate to your new GitHub repository > Settings > Secrets and add the following secrets:
   - Name: CF_API_TOKEN (should be added automatically)

  • Name: CF_ACCOUNT_ID (should be added automatically)

  • Name: SECRET_SLACK_WEBHOOK_URL (optional)

  • Value: your-slack-webhook-url


  • Value: your-discord-webhook-url

  1. Navigate to the Actions settings in your repository and enable them
  2. Edit config.yaml to adjust configuration and list all of your websites/APIs you want to monitor
title: 'Status Page'
url: '' # used for Slack & Discord messages
logo: logo-192x192.png # image in ./public/ folder
daysInHistogram: 90 # number of days you want to display in histogram
collectResponseTimes: false # experimental feature, enable only for <5 monitors or on paid plans

configurable texts across the status page

allmonitorsOperational: 'All Systems Operational' notAllmonitorsOperational: 'Not All Systems Operational' monitorLabelOperational: 'Operational' monitorLabelNotOperational: 'Not Operational' monitorLabelNoData: 'No data' dayInHistogramNoData: 'No data' dayInHistogramOperational: 'All good' dayInHistogramNotOperational: 'Some checks failed'

list of monitors


  • id: workers-cloudflare-com # unique identifier name: description: 'You write code. They handle the rest.' # default=empty url: '' # URL to fetch method: GET # default=GET expectStatus: 200 # operational status, default=200 followRedirect: false # should fetch follow redirects, default=false linkable: false # should the titles be links to the service, default=true
  1. Push to
    branch to trigger the deployment
  2. 🎉
  3. (optional) Go to Cloudflare Workers settings and assign custom domain/route
    • e.g.*
      (make sure you include
      as the Worker also serve static files)
  4. (optional) Edit wrangler.toml to adjust Worker settings or CRON Trigger schedule, especially if you are on Workers Free plan

Telegram notifications

To enable telegram notifications, you'll need to take a few additional steps.

  1. Create a new Bot
  2. Set the api token you received when creating the bot as content of the
    secret in your github repository.
  3. Send a message to the bot from the telegram account which should receive the alerts (Something more than
  4. Get the chat id with
    curl | jq '.result[0] .message .chat .id'
  5. Set the retrieved chat id in the
    secret variable
  6. Redeploy the status page using the github action

Deploy on your own

You can clone the repository yourself and use Wrangler CLI to develop/deploy, extra list of things you need to take care of:

  • create KV namespace and add the
    binding to wrangler.toml
  • create Worker secrets (optional)

Workers KV free tier

The Workers Free plan includes limited KV usage, but the quota is sufficient for 2-minute checks only

  • Change the CRON trigger to 2 minutes interval (
    crons = ["*/2 * * * *"]
    ) in wrangler.toml

Known issues

  • Max 25 monitors to watch in case you are using Slack notifications, due to the limit of subrequests Cloudflare Worker can make (50).

The plan is to support up to 49 by sending only one Slack notification per scheduled run.

Future plans

WIP - Support for Durable Objects - Cloudflare's product for low-latency coordination and consistent storage for the Workers platform. There is a working prototype, however, we are waiting for at least open beta.

There is also a managed version of this project, currently in beta. Feel free to check it out (

Running project locally

Requirements - Linux or WSL - Yarn (

npm i -g yarn
) - Node 14+

Steps to get server up and running

Install wrangler

npm i -g wrangler

Login With Wrangler to Cloudflare

wrangler login

Create your KV namespace in cloudflare

On the workers page navigate to KV, and create a namespace

Update your wrangler.toml with

kv-namespaces = [{binding="KV_STATUS_PAGE", id="", preview_id=""}]
Note: you may need to change
to `kv

Install packages

yarn install

Create CSS

yarn run css


yarn run dev
Note: If the styles do not come through try using
instead of

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.