Theme JSON Format¶
This page describes the JSON structure used for custom themes.
Top-Level Structure¶
Theme files use a themes array:
{
"themes": [
{
"id": "my-theme",
"displayNames": {
"en": "My Theme",
"ja": "マイテーマ"
},
"entries": [
{ "key": "Brush.AppBackground", "hex": "#1E1E2E" }
]
}
]
}
Theme Object Fields¶
| Field | Type | Required | Notes |
|---|---|---|---|
id |
string | ✓ | Theme ID used internally and by entriesFrom. It is normalized to lowercase. Reusing an existing ID overrides that theme. |
displayNames |
{ [languageCode]: string } |
Labels shown in Settings. | |
entries |
array | Brush values defined directly on this theme. | |
entriesFrom |
string or { light?: string, dark?: string } |
Inherits brush values from another theme. |
id¶
- Use a unique string for new themes.
- Built-in IDs include
system,light, anddark. - If you reuse
lightordark, your file overrides that built-in theme.
displayNames¶
Use an object whose keys are language codes and whose values are display strings:
"displayNames": {
"en": "My Theme",
"ja": "マイテーマ"
}
Shape:
{
[languageCode: string]: string
}
- Currently supported
languageCodevalues: enja- If omitted, built-in themes use their built-in localized names.
- Custom themes fall back to a title-cased name derived from
id.
entries¶
entries is an array of objects with this shape:
{ "key": "Brush.AppBackground", "hex": "#1E1E2E" }
| Field | Type | Required | Notes |
|---|---|---|---|
key |
string | ✓ | Brush resource name used by the UI. |
hex |
string | ✓ | Color in #RRGGBB or #AARRGGBB format. |
Missing brush keys fall back to inherited or built-in values.
entriesFrom¶
Use entriesFrom when you want to reuse another theme instead of redefining every brush.
Always inherit from one theme:
{
"id": "my-light-copy",
"entriesFrom": "light"
}
Switch inherited themes by Windows color mode:
{
"id": "my-dark-variant",
"entriesFrom": {
"light": "light",
"dark": "dark"
}
}
| Form | Type | Meaning |
|---|---|---|
"light" |
string | Always inherit from one theme ID. |
{ "light": "...", "dark": "..." } |
{ light?: string, dark?: string } |
Choose the source theme based on Windows light/dark mode. |
Object shape:
{
light?: string;
dark?: string;
}
Use light and/or dark as property names. Their values must be theme IDs.
If entries and entriesFrom are both present, entries provides this theme's own colors and entriesFrom fills in the remaining keys.
Available Brush Keys¶
| Key | Purpose |
|---|---|
Brush.AppBackground |
Main window background |
Brush.Surface |
Cards, panels, dialog backgrounds |
Brush.SurfaceBorder |
Borders of surface elements |
Brush.TextPrimary |
Primary text color |
Brush.TextSecondary |
Secondary / muted text |
Brush.TextTertiary |
Disabled text, scrollbar thumbs |
Brush.ItemBackground |
Individual item row background |
Brush.ItemBorder |
Individual item row border |
Brush.IconBackground |
Icon placeholder background |
Brush.NotificationInfoBackground |
Info notification background |
Brush.NotificationInfoBorder |
Info notification border |
Brush.NotificationWarningBackground |
Warning notification background |
Brush.NotificationWarningBorder |
Warning notification border |
Brush.NotificationErrorBackground |
Error notification background |
Brush.NotificationErrorBorder |
Error notification border |
Brush.NotificationProgressTrack |
Progress bar track |
Brush.NotificationProgressValue |
Progress bar fill |
Brush.QuickAddInfoText |
Quick-add informational message text |
Brush.QuickAddWarningText |
Quick-add warning message text |