Manifest reference
Theme required keys: slug, name, description, version, theme_api, capabilities, settings; optional thumbnail. Plugin required keys: slug, name, description, version, module, type, requires, slots, settings; optional slot_priorities.
{
"requires": {
"awn": "^1.0",
"theme_api": "^1.0",
"capabilities": [],
"optional_capabilities": [],
"themes": {}
}
}
Plugin requires subkeys default to */empty when omitted. module helps identify package controller routes during validation. Unknown top-level keys are currently ignored.
Current ExtensionCapability values are exact and versioned:
slots.before_footer.v1
slots.home_after_hero.v1
slots.page_after_content.v1
site_navigation.v1
plugin_pages.v1
Capabilities describe public integration supplied by the active theme. Organization and Super Admin pages/widgets are declared through PHP contracts and must not be listed as theme capabilities.
Setting names match ^[a-z][a-z0-9_]*$. All definitions require type, label, default. Theme types: color, select, boolean, text, number. Plugin types: text, textarea, number, select, boolean. Select requires options; plugin numbers reject min > max.
Both manifests expose defaults(). Defaults are not security: themes normalize centrally, plugins in the driver. Validation requires every plugin setting key in normalized defaults.
php artisan awn:extensions:validate
This checks definitions, theme site views/thumbnails/declared slot rendering, plugin drivers/default normalization, and slot-required-capability mappings.