Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/openstatusHQ/openstatus. π« Status page with uptime monitoring & API monitoring as code π« openstatus.dev
bun drizzle-orm monitoring monitoring-as-code nextjs observability on-call open-source shadcn-ui status-page statuspage synthetic-monitoring tinybird turso uptime uptime-checker uptime-monitor
Something went wrong. Try again.
MDX
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267---category: Referencetitle: Status Page Referencedescription: Complete technical specification for openstatus status page configuration.---
A status page is a dedicated web interface that publicly displays the operational status of your services and systems. It serves as a transparent communication tool during incidents and for showcasing overall service health.
**Key features:**
- Real-time service status updates.- Incident communication and history.- Customisable branding and domain.- Multiple access control options.- Multi-language support with a locale switcher.- Configurable status trackers, history window, and uptime calculation.
## Configuration
openstatus provides several configuration options to customise your status page's appearance, accessibility, and functionality.
### Slug
**Type:** String (required)**Format:** URL-friendly string (e.g., `my-service-status`)
A unique identifier that forms part of your status page's default URL. For example, a slug of `status` will result in a URL like `https://status.openstatus.dev`.
### Custom domain
**Type:** String (optional)**Format:** Valid domain name (e.g., `status.example.com`)
Lets you host your status page on a custom domain. Once configured, your status page will be accessible at `https://your-custom-domain.com`.
**DNS configuration:**
| Domain type | Record | Name | Value | TTL ||---|---|---|---|---|| Subdomain (e.g., `status.example.com`) | CNAME | `status` | `cname.vercel-dns.com` | 86400 || Apex domain (e.g., `example.com`) | A | `@` | `76.76.21.21` | 86400 |
**Domain verification (conditional):** if your domain is already registered on another Vercel project, a TXT record will be required to prove ownership. The dashboard will display the exact TXT record name and value when this step is needed.
After saving your custom domain in the dashboard, the exact DNS records will be displayed with any additional verification steps needed.
### Password (basic auth)
**Type:** String (optional)
Enables basic password protection for your status page. If a password is set, users will be redirected to a login page (`/login`) to gain access. The password is stored in a cookie upon successful authentication.
**Sharing with password:** you can provide direct access by appending the password as a URL search parameter: `https://[slug].openstatus.dev/?pw=your-secret-password`. This method is also useful for authenticating private RSS feeds.
### Magic link (session auth)
**Type:** Boolean (add-on feature)
Restricts access to your status page to users with approved email domains. Users receive a magic link via email, which, upon clicking, authenticates them via a session token. This feature is typically available as a paid add-on for specific plans.
### IP restriction (network auth)
**Type:** String (add-on feature)
Restricts access to your status page based on client IPv4 addresses. You provide a comma-separated list of CIDR ranges (e.g., `192.168.1.0/24, 10.0.0.0/8`), and only requests from those networks can view the page. Single IPs without a subnet mask are treated as `/32`.
Visitors from outside the allowed ranges are redirected to a static "Access Restricted" page β there is no login flow since IP-based access cannot be changed by the user.
**Configuration:**
- Set the access type to IP restriction in the dashboard, or `access_type` to `PAGE_ACCESS_TYPE_IP_RESTRICTED` via the ConnectRPC `StatusPageService`.- Provide `allowed_ip_ranges` as a comma-separated list of IPv4 CIDR ranges (we automatically append `/32` to single IPs).- IPv6 is not supported.- The deprecated v1 REST API does not expose this access type β its `accessType` field accepts only `public`, `password`, and `email-domain`.
**Note:** this feature is available as a paid add-on for Starter and Pro plans.
### Favicon
**Type:** Image file (`.ico`, `.png`, `.svg`)
Allows you to upload a custom favicon that will appear in browser tabs and bookmarks for your status page. SVG files are sanitized server-side and must be under 100KB.
### Theme
**Type:** Enum (optional, defaults to `default`)
Selects one of the community themes for your status page. Browse and preview them in the [Theme Explorer](https://themes.openstatus.dev), or [contribute your own](/docs/guides/how-to-create-status-page-theme).
### Appearance mode
**Type:** Enum (optional, defaults to `system`)
Whether the page follows the visitor's OS preference or is pinned to one mode.
- `system` β follow the visitor's `prefers-color-scheme`.- `light` / `dark` β force that mode for every visitor and hide the toggle.
### Custom theme
**Type:** Per-mode CSS variable overrides (included on Pro and Scale, available as a paid add-on on Starter)
Overrides individual CSS variables of the selected theme, separately for light and dark mode. Custom values take precedence over the theme; every variable you leave unset falls back to the theme's value.
**Configuration:** in the dashboard, the editor provides a *Light* and a *Dark* tab. Each accepts one declaration per line:
```css--primary: oklch(0.6 0.1 250);--radius: 0.5rem;```
Values accept any valid CSS value (colors in `oklch`, `hsl`, hex, lengths, etc.). Each value is limited to 256 characters, and the characters `<`, `{`, `}`, `;` and ASCII control characters are not allowed inside a value.
#### Supported CSS variables
**Base** β the [shadcn/ui](https://ui.shadcn.com/docs/theming) color tokens used across the page:
| Variable | Description ||---|---|| `--radius` | Corner radius of cards, buttons and inputs (e.g. `0.625rem`) || `--background` | Page background || `--foreground` | Default text color || `--card` | Card background || `--card-foreground` | Card text color || `--popover` | Popover/dropdown background || `--popover-foreground` | Popover/dropdown text color || `--primary` | Primary buttons and accents || `--primary-foreground` | Text on primary elements || `--secondary` | Secondary buttons and surfaces || `--secondary-foreground` | Text on secondary elements || `--muted` | Muted surfaces || `--muted-foreground` | Muted/secondary text || `--accent` | Hover and highlight surfaces || `--accent-foreground` | Text on accent surfaces || `--border` | Border color || `--input` | Input border color || `--ring` | Focus ring color |
**Status colors** β used for component and system status indicators:
| Variable | Description ||---|---|| `--success` | Operational status (green) || `--warning` | Degraded status (yellow) || `--info` | Monitoring/maintenance status (blue) || `--destructive` | Outage/error status (red) |
**Charts** β differentiate the response-time percentiles on the public monitor charts:
| Variable | Description ||---|---|| `--chart-1` | First percentile series || `--chart-2` | Second percentile series || `--chart-3` | Third percentile series || `--chart-4` | Fourth percentile series || `--chart-5` | Fifth percentile series |
**Regions** β differentiate the monitoring regions on the public monitor charts. Optional; the defaults cover all regions:
`--rainbow-1`, `--rainbow-2`, `--rainbow-3`, `--rainbow-4`, `--rainbow-5`, `--rainbow-6`, `--rainbow-7`, `--rainbow-8`, `--rainbow-9`, `--rainbow-10`, `--rainbow-11`, `--rainbow-12`, `--rainbow-13`, `--rainbow-14`, `--rainbow-15`, `--rainbow-16`, `--rainbow-17`
### Components and uptime display
**Type:** Object (optional)
Controls how each component's status tracker renders and how uptime is computed. Configured onthe **Components** page in the dashboard; see[Configure your status page](/docs/guides/how-to-configure-status-page#1-components-configuration).
| Field | Values | Default | Description ||---|---|---|---|| `type` | `absolute`, `manual` | `absolute` | Bar type. `absolute` draws each day proportionally; `manual` shows only the most significant status of the day. || `value` | `duration`, `requests`, `manual` | `requests` | What the hover card and uptime percentage are derived from. Only meaningful when `type` is `absolute`. || `uptime` | boolean | `true` | Whether the uptime percentage is shown at all. || `days` | `30`, `45` | `45` | Number of days of history rendered on the bars. |
See [Uptime calculation and shared values](/docs/concept/uptime-calculation-and-values) for whateach mode actually measures.
### Links
**Type:** String (optional)
Two optional URLs shown in the status page header.
- **Homepage URL** β your logo links here instead of to the status page root.- **Contact URL** β renders a message icon linking to a contact page. A `mailto:` URL works too, e.g. `mailto:support@example.com`.
### Search engine indexing
**Type:** Boolean (optional, defaults to `true`)
When enabled the page is indexable. Disable it to serve a `noindex` directive and keep the pageout of search results β useful for an internal or pre-launch page. Available on paid plans.
### Feeds
**Type:** Read-only endpoints
Every status page publishes its events in three machine-readable formats, reached by appending apath to the page URL:
| Path | Format | Contents ||---|---|---|| `/feed/json` | JSON | Full page state: components, status reports, maintenances, and the deprecated monitor fields below. || `/feed/rss` | RSS 2.0 | Status reports and maintenances as feed entries, for readers and automations. || `/feed/atom` | Atom 1.0 | The same entries in Atom. |
**Example:** `https://status.openstatus.dev/feed/json`
On a password-protected page the feeds are protected too; append `?pw=your-secret-password` toread them from a feed reader.
**Deprecation notice:**
The following fields are deprecated and will be removed in a future version:
- **`monitors`** (top-level) β use `pageComponents` instead, which provides a more flexible component-based structure that supports both monitor-linked and static components.- **`maintenances[].monitors`** β use `maintenances[].pageComponents` instead, which references page component IDs rather than monitor IDs.- **`statusReports[].monitors`** β use `statusReports[].pageComponents` instead, which references page component IDs rather than monitor IDs.
These deprecated fields are currently maintained for backward compatibility but may be removed in future versions.
### SSH command
**Type:** Command-line utility
Allows you to quickly check the current status page status directly from your terminal using an SSH command.
**Usage:**
```bashssh [slug]@ssh.openstatus.dev```
**Example:** `ssh my-service@ssh.openstatus.dev`
### Translations (i18n)
**Type:** Per-page configuration (paid plans only)
Enables multi-language support for your status page. You can set a default locale and optionally enable a locale switcher so visitors can choose their preferred language.
**Supported locales:** `en` (English), `fr` (FranΓ§ais), `de` (Deutsch), `tr` (TΓΌrkΓ§e), `hi` (ΰ€Ήΰ€Ώΰ€ΰ€¦ΰ₯), `ko` (νκ΅μ΄), `ja` (ζ₯ζ¬θͺ)
**Configuration:**
- **Default locale** β the fallback language for your status page (defaults to `en`).- **Locale switcher** β when enabled, visitors see a language dropdown. You select which locales to offer.
**Routing:** the default locale is omitted from the URL (`as-needed` prefix). Non-default locales appear in the path (e.g., `/fr/events`).
See [How to translate your status page](/docs/guides/how-to-translate-status-page) for setup instructions and contributing new translations.
### White label
**Type:** Boolean (add-on feature)
Removes the "powered by openstatus.dev" footer from your status page, providing a fully branded experience. This feature is typically available as a paid add-on for Starter and Pro plans and is enabled via your workspace settings, affecting all status pages within that workspace.
## Related resources
- **[Create a status page](/docs/tutorial/create-your-first-status-page)** β step-by-step tutorial on creating a status page.- **[How to configure a status page](/docs/guides/how-to-configure-status-page)** β advanced status page configuration.- **[Status report reference](/docs/reference/status-report)** β how incident statuses are managed and reported.- **[How to translate your status page](/docs/guides/how-to-translate-status-page)** β enable multiple languages and contribute translations.