Required fields
These must be present and defined, or the addon is rejected when it loads.A unique identifier for the addon. Used as its key in every manager operation and as its storage namespace, so keep it stable across versions.
The human-readable name shown in settings.
A short summary of what the addon does.
A non-empty array of authors. An empty array fails validation just like a missing field.
The addon’s version. Bump it on every release so clients can detect updates.
The entry point the bundle is built from.
Optional fields
Used for display and updates. Leaving them out is fine.The addon’s icon: an asset name, or an object with a
uri for a remote image.A URL Unbound checks to discover newer versions.
Where the addon’s bundle is hosted.
Example
manifest.json
The
id is the field you reference everywhere else: manager calls like plugins.toggle('my-plugin'), your storage store name, and the addon’s entry in the enabled-state map. Pick it once and never change it.Per-addon details
The shape is shared, but a couple of fields carry extra meaning depending on the addon kind.Plugins
Plugins
main is the entry your bundle is built from, and Unbound evaluates it into your plugin’s running instance. See Creating an Addon.Themes
Themes
Besides identifying the theme, its
id is the value stored as applied while it’s the active theme. Only one theme is applied at a time, so this is how Unbound remembers which. The theme’s actual palette and background live in its definition, not the manifest. See Theme Types.Icon Packs
Icon Packs
Icon packs are still being reimplemented in the current client rewrite. They use the shared manifest above; pack-specific fields, such as how icon overrides are listed, will be documented once that surface lands.