Theme Development
Theme Manifest
Define a community theme family, display metadata, and safe light and dark stylesheet paths.
On this page
Every community theme needs a root manifest.json.
Shape
{ "id": "warm-notes", "name": "warm-notes", "displayName": "Warm Notes", "author": "Your Name", "authorUrl": "https://example.com", "version": "0.1.0", "minAppVersion": "0.1.0", "colorschemes": { "light": "light.css", "dark": "dark.css" }}
| Field | Required | Notes |
|---|---|---|
id | Yes | Theme install id. Reviewed listings must match this id. |
name | Yes | Theme family slug. Must match ^[a-z0-9][a-z0-9-]*$. |
displayName | Yes | User-facing family name. |
author | Yes | Displayed in theme and reviewed listing surfaces. |
authorUrl | No | Valid URL for the author or organization. |
version | Yes | Use semver for update comparisons. |
minAppVersion | No | Minimum Cortex version expected by the theme. |
colorschemes.light | Yes | Safe relative path to the light CSS file. |
colorschemes.dark | Yes | Safe relative path to the dark CSS file. |
Safe Stylesheet Paths
Stylesheet paths must be relative to the theme folder. Cortex rejects:
- Empty paths.
- Absolute paths.
- Windows drive-letter paths.
- Paths containing
...
Good:
{ "light": "light.css", "dark": "schemes/dark.css" }
Bad:
{ "light": "../light.css", "dark": "/tmp/dark.css" }
Runtime Theme Names
For a manifest with "name": "warm-notes", Cortex registers:
warm-notes-lightwarm-notes-dark
The active runtime theme is applied to the body as:
<body class="theme-warm-notes-light" data-theme-scheme="light">
Write CSS selectors against those runtime body classes.