Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

📈 Live Status: 🟩 All systems operational

Upptime ( is the open-source uptime monitor and status page, powered entirely by GitHub Actions and Issues.

Static Site CI Graphs CI Response Time CI Summary CI Uptime CI

URL Status History Response Time Uptime
Coinsamba 🟩 Up coinsamba.yml
Response time graph 315ms
Response time 412
24-hour response time 265
7-day response time 315
30-day response time 291
1-year response time 376
100.00%All-time uptime 99.81%
24-hour uptime 100.00%
7-day uptime 100.00%
30-day uptime 100.00%
1-year uptime 99.74%
Coinsamba P2P 🟩 Up coinsamba-p2-p.yml
Response time graph 176ms
Response time 175
24-hour response time 134
7-day response time 176
30-day response time 174
1-year response time 159
100.00%All-time uptime 99.87%
24-hour uptime 100.00%
7-day uptime 100.00%
30-day uptime 100.00%
1-year uptime 99.74%
Coinsamba API 🟩 Up coinsamba-api.yml
Response time graph 489ms
Response time 386
24-hour response time 397
7-day response time 489
30-day response time 450
1-year response time 428
100.00%All-time uptime 98.91%
24-hour uptime 100.00%
7-day uptime 100.00%
30-day uptime 100.00%
1-year uptime 99.66%

How it works

  • GitHub Actions is used as an uptime monitor
    • Every 5 minutes, a workflow visits your website to make sure it's up
    • Response time is recorded every 6 hours and committed to git
    • Graphs of response time are generated every day
  • GitHub Issues are used for incident reports
    • An issue is opened if an endpoint is down
    • People from your team are assigned to the issue
    • Incidents reports are posted as issue comments
    • Issues are locked so non-members cannot comment on them
    • Issues are closed automatically when your site comes back up
    • Slack notifications are sent on updates
  • GitHub Pages are used for the status website
    • A simple, beautiful, and accessible PWA is generated
    • Built with Svelte and Sapper
    • Fetches data from this repository using the GitHub API

Screenshot of status website

💝 Who's using Upptime


You too? Open a PR!

👩‍💻 Getting started

  1. Create a new repository using this template
  2. Update the .upptimerc.yml file with your configuration
  3. Enable publishing the gh-pages branch for your status website and add a GH_PAT


Issues as incidents

When the GitHub Actions workflow detects that one of your URLs is down, it automatically opens a GitHub issue (example issue #15). You can add incident reports to this issue by adding comments. When your site comes back up, the issue will be closed automatically as well.

Screenshot of GitHub issue Screenshot of incident page

Commits for response time

Four times per day, another workflow runs and records the response time of your websites. This data is commited to GitHub, so it's available in the commit history of each file (example commit history). Then, the GitHub API is used to graph the response time history of each endpoint and to track when a site went down.

Screenshot of GitHub commits Screenshot of live status


The .upptimerc.yml file is used as the central configuration for Upptime, with this syntax:

owner: koj-co # GitHub username
repo: upptime # GitHub repository name
user-agent: koj-co
sites: # List of endpoints to track
  - name: Google
assignees: # Users to assign downtime issues (optional)
  - AnandChowdhary
status-website: # Status website (optional)
  cname: # Custom domain CNAME
  name: Upptime # Status website title


A GitHub repository is used as the "source of truth" for your uptime logs, and the static site uses the GitHub API and fetches data from this repository.

After you've created a new repository using this template (see Creating a repository from a template), specify the username and repository name in the configuration:

owner: koj-co
repo: upptime


You can track as many websites as you like. Add the names and URLs of your endpoints in the sites key:

  - name: Google
  - name: DuckDuckGo

To make POST requests (or any other HTTP verb), you can add the method key:

  - name: POST to Google
    method: POST
  - name: DELETE Example
    method: DELETE

If you don't want to show a URL publicly, you can use repository secrets (see Creating and storing encrypted secrets). Instead of the plain text URL, add the name of the secret prefixed with a $ character:

- name: Secret Site

In the above example, a secret named SECRET_SITE (without the $) is stored in the repository. Note that you'll also have to add this secret as an environment variable in each workflow file in .github/workflows:

# Example: .github/workflows/graphs.yml
# ...
- name: Run script
  run: npm run graphs
    SECRET_SITE: ${{ secrets.SECRET_SITE }} # Add your repository secret

User agent

Requests made to the GitHub API must include a valid User-Agent header (see User Agent required). It is recommended to use your GitHub username here:

user-agent: your-github-username


You can add services to send downtime notifications to. Currently, only Slack notifications are supported.


Use slack as the type and provide a Slack channel ID as channel in the configuration.

  - type: slack
    channel: C01XQ3U9M9P

A Slack App has to be registered and installed prior to usage, with the scope chat:write (see chat.postMessage docs), and the environment variable SLACK_APP_ACCESS_TOKEN should be set with the Slack Bot User OAuth Access Token. You can use GitHub Secrets to add it.


You can add members of your team to be assigned to every downtime issue:

  - AnandChowdhary
  - CarloBadini

If you want particular users to be assigned per-site, you can add assignees under each entry in sites:

  - name: Google
      - AnandChowdhary


A static website with PWA is also generated, and you can customize the logo and name in the navbar:

  name: Upptime

If you want to add a custom domain, you can add the cname key:

  name: Upptime
  cname: # Custom CNAME

Intro text

Optionally, you can add some introductory text to the website. You can use Markdown:

  introTitle: "**Upptime** is the open-source uptime monitor and status page, powered entirely by GitHub."
  introMessage: This is a sample status page which uses **real-time** data from our [Github repository]( No server required — just GitHub Actions, Issues, and Pages.

Site deployment

Because GitHub Pages does not support the default GITHUB_TOKEN available to workflows, you'll have to set a secret GH_PAT with a Personal Access Token. For more info, see:


Though our status page is in English, you can use any language with Upptime by supplying the required strings. The list of all required strings is available in site/i18n.yml, and you can add them under the i18n key in the configuration file:

  activeIncidents: Incidentes activos
  allSystemsOperational: Todos los sistemas están operativos
  # ...


This template is updated from time to time, so you can use the update-template command to sync the changes from this GitHub repository template:

npm run update-template


You can use the service with the API endpoint generated by your repository's api directory. For example, the URL has the following JSON schema:

  "schemaVersion": 1,
  "label": "uptime",
  "message": "100%",
  "color": "brightgreen"

This translates to this badge: Uptime


Similarly, response time badges are available: Response time


📄 License


An open source project by Koj.
Furnish your home in style, for as low as CHF175/month →


⬆️ Uptime monitor and status page powered by GitHub








No releases published


No packages published