A flexible, modern and blazingly fast ☄️ status page.
- 💗 System health
- 📝 Incident history, scheduled maintenance and postmortems
- ⌨️ Pre-built templates
- 🛜 Hosted on Cloudflare, GitHub Pages and more
- ✍️ Markdown support
# Scaffhold your status page repository
pnpm create issue-status
# Start development server
pnpm dev
# Build the static status page using the configuration provided
pnpm build
For deployment options and guides, see the Vite static deployment documentation.
pnpm create issue-status
will scaffhold a new status page repository and guide you through the configuration.
You can make further configurations to the issue-status.config.ts
file with the below syntax:
import { defineConfig } from "issue-status";
import { github, static } from "issue-status/providers";
export default defineConfig({
name: "My Status Page",
description: "Status page for my services",
provider: yourProvider({...})
});
The data fetching is separated into so called providers. This allows you to swap out the underlying data source that powers the frontend.
[!NOTE]
Contributions: reach out if you've created a custom provider which may have value to others :)
This provider utilises GitHub Issues with specific labels as the data source for the status page
import { github } from "issue-status/providers";
export default defineConfig({
...
provider: github({
owner: "your-github-username",
repo: "your-repo-name",
}),
});
Labels: issue status
, component
and one of operational
, degraded performance
, partial outage
or major outage
You can create subcomponents by naming issues with the following syntax:
CDN
CDN > Oceania
CDN > Southeast Asia
Labels: issue status
, incident
and optionally maintenance
which will mark the incident as "Scheduled" instead of "Active"
- The provider respects GitHub's unauthenticated requests API rate limit and therefore responses are cached in the browser for 10 minutes.
This provider utilises GitLab Issues with specific labels as the data source for the status page
import { gitlab } from "issue-status/providers";
export default defineConfig({
...
provider: gitlab({
projectId: "your-project-id",
host: "https://gitlab.com", // optional, defaults to gitlab.com
}),
});
Labels: issue status
, component
and one of operational
, degraded performance
, partial outage
or major outage
You can create subcomponents by naming issues with the following syntax:
CDN
CDN > Oceania
CDN > Southeast Asia
Labels: issue status
, incident
and optionally maintenance
which will mark the incident as "Scheduled" instead of "Active"
- The provider respects GitLab's API rate limits and therefore responses are cached in the browser for 10 minutes.
A provider that uses static data, primarily useful for testing and development.
import { staticProvider } from "issue-status/providers";
export default defineConfig({
provider: staticProvider({
components: [
{
id: "api",
name: "API",
status: "operational",
children: [
{
id: "auth",
name: "Authentication",
status: "operational",
},
],
},
{
id: "database",
name: "Database",
status: "degradedPerformance",
},
],
incidents: [
{
id: "1",
title: "API Response Times",
description:
"We are investigating slower than normal API response times.",
createdAt: "2023-01-01T00:00:00Z",
scheduled: false,
active: true,
},
],
historicalIncidents: [
{
id: "2",
title: "Database Maintenance",
description: "Scheduled database maintenance completed successfully.",
createdAt: "2023-01-01T00:00:00Z",
scheduled: true,
active: false,
},
],
}),
});
Pre-built incident templates are included to quickly provide updates on an incident. These templates are available when creating a GitHub Issue.
You may modify templates to suit your needs.
This demo is hosted on GitHub Pages and using the GitHub provider.