Openstatus
www.openstatus.dev
1# Community Themes
2
3**Help us build epic status page themes!**
4
5This directory contains community-contributed themes for openstatus status pages. These themes allow users to customize the visual appearance of their status pages with different color schemes and design styles.
6
7## What are Community Themes?
8
9Community themes are predefined color schemes that users can apply to their status pages. Each theme includes:
10- **Light mode** colors for bright environments
11- **Dark mode** colors for low-light environments
12- **Consistent design** that works across all status page components
13- **Accessibility** considerations for better readability
14
15## Themes Examples
16
17- **Openstatus** - The standard openstatus theme
18- **Openstatus (Rounded)** - The rounded openstatus theme (similar to the legacy page)
19- **Supabase** - Theme matching Supabase's brand colors
20- **GitHub (High Contrast)** - High contrast theme inspired by GitHub's design
21
22## Creating a New Theme
23
24Want to contribute a theme?
25
26We only support themes via GitHub contributions to keep a certain version control. You can:
27
28- Configure your [themes.openstatus.dev](https://themes.openstatus.dev/?b=true) and copy the configuration
29- Directly test by running it locally
30
31### 1. Run the project
32
33Start by forking the openstatus repository to your GitHub account and run the command `dev:status-page` locally following [Getting Started](https://github.com/openstatusHQ/openstatus?tab=readme-ov-file#getting-started-) steps.
34
35Once you run the `@openstatus/status-page` app, e.g. via the following command in the root directory:
36
37```bash
38pnpm dev:status-page
39```
40
41You can either access [localhost:3000](http://localhost:3000) to see the theme explorer or [localhost:3000/status](http://localhost:3000/status) to have a status page with seeded entries. On the bottom right is a configration button which has access to settings, including the community theme.
42
43> If something is off, our you think improvements can be made, feel free to raise an issue, join Discord, or DM us!
44
45### 2. Create Your Theme File
46
47Create a new TypeScript file in this directory (e.g., `my-theme.ts`). You can copy an existing theme file as a starting template.
48
49### 3. Define Your Theme
50
51Your theme file should export a constant that matches the `Theme` interface:
52
53```typescript
54import type { Theme } from "./types";
55
56export const MY_THEME = {
57 id: "my-theme", // Unique identifier (kebab-case)
58 name: "My Awesome Theme", // Display name
59 author: {
60 name: "@yourusername",
61 url: "https://github.com/yourusername" // Add your personal website or a social link
62 },
63 light: {
64 // CSS custom properties for light mode
65 "--background": "oklch(100% 0 0)",
66 "--foreground": "oklch(20% 0 0)",
67 // ... more variables
68 },
69 dark: {
70 // CSS custom properties for dark mode
71 "--background": "oklch(10% 0 0)",
72 "--foreground": "oklch(90% 0 0)",
73 // ... more variables
74 },
75} as const satisfies Theme;
76```
77
78You don't need to add every single css var from the `THEME_VAR_NAMES` list.
79
80### 4. Add to Theme Registry
81
82Update `index.ts` to include your theme in the `THEMES_LIST` array.
83
84```typescript
85const THEMES_LIST = [
86 OPENSTATUS_THEME,
87 OPENSTATUS_ROUNDED_THEME,
88 //...
89 MY_THEME
90] satisfies Theme[];
91
92```
93
94### 5. Submit a Pull Request
95
96Create a pull request with your theme for review.
97
98## Design Guidelines
99
100### Color System
101- Use **OKLCH color space** for better perceptual uniformity (but all css color specs are supported)
102- Ensure sufficient contrast ratios for accessibility
103- Test both light and dark modes thoroughly
104
105### Theme Requirements
106- ✅ **Consistent design** - All components should feel cohesive
107- ✅ **Both modes** - Must support light and dark variants
108- ✅ **Accessibility** - Meet WCAG contrast guidelines
109- ✅ **Unique ID** - Use descriptive, kebab-case identifiers
110- ❌ **No "Christmas tree"** - Avoid overly colorful or distracting designs
111
112### Available CSS Variables
113Themes can customize these CSS custom properties:
114- `--background`, `--foreground` - Base colors
115- `--primary`, `--secondary`, `--accent` - Brand colors
116- `--success`, `--warning`, `--destructive` - Status colors
117- `--border`, `--input`, `--ring` - Interactive elements
118- `--muted`, `--muted-foreground` - Subtle text and backgrounds
119- And many more... (see `types.ts` for the complete list)
120
121## Testing Your Theme
122
123Before submitting:
1241. Test your theme on a status page
1252. Verify both light and dark modes work correctly
1263. Check accessibility with browser dev tools
1274. Ensure all status indicators (operational, degraded, etc.) are clearly distinguishable
128
129To test a theme on non-development environment, you can use the `sessionStorage.setItem("community-theme", "true");`. It will open a floating button on the right left corner where you can choose between the themes and dark/light mode.
130
131## Questions?
132
133Need help creating a theme? Open an issue or reach out to the openstatus community!