Publishing themes
Themes are shared as plugins. A theme plugin is data only: it has no main script, asks for
no permissions, and never runs code.
Description
A theme of your own open in the theme editor. Plugin downloads it as a plugin package — a data-only theme pack — and the editor says to install it or publish it from Manage plugins.
Package layout
midnight-themes/
├── manifest.json
└── themes/
├── midnight.json
└── dawn.json
{
"id": "acme.midnight",
"name": "Midnight Themes",
"version": "1.0.0",
"description": "A dark and a light theme in deep violet.",
"contributes": {
"themes": [
{ "id": "acme.midnight.dark", "label": "Midnight", "path": "themes/midnight.json" },
{ "id": "acme.midnight.light", "label": "Dawn", "path": "themes/dawn.json" }
]
}
}Each theme file uses the theme format. The id and label in the manifest override any id
or name in the file.
Rules:
- Theme ids: each theme id must start with the plugin id followed by a dot.
- Code is optional: a plugin can contribute themes and have a
mainscript and commands too. - JSON bundles: a single-file bundle puts theme objects under
themes, keyed by path:{ "manifest": {…}, "themes": { "themes/midnight.json": {…} } }.
The theme editor's Plugin button builds this package for you from any theme.
Installing
Install the .zip from ⋯ → Manage plugins… → Install from file. Its themes appear in the theme menu right
away. Disabling or removing the plugin removes its themes. If one was active, PopCraft switches back to PopCraft
Dark.
In the desktop app you can also drop the package, or an unpacked folder, into your plugins/ assets folder. A single
theme doesn't need a plugin at all: put its .json file in the themes/ folder (see Theme editor).
Marketplace
Publish theme plugins like any other plugin; see Publishing. Theme-only plugins ask for no permissions.
To publish from a repository with GitHub Actions, see Publish from CI. The Comic Noir example is a complete semi-dark theme pack.