Skip to main content
Geneva, Switzerland Call our support
English

Plugin manifest and capabilities

Declaring requirements, hooks, and permissions.

Manifest contract

Struxa validates plugin.json before activation and shows a compatibility report in Extensions → Plugins.

Key fields

FieldPurpose
requires_cms_versionMinimum Struxa semver
requires_phpMinimum PHP version
requires_pluginsOther plugins must be installed and active
conflictsSlugs that cannot be active simultaneously
capabilitiesDeclared APIs used at boot
hooks.filters / hooks.eventsFilters and events registered in boot
database.tablesTables owned (documentation + preflight)
load.public/admin/cliSkip boot on unused contexts

Capabilities

  • database.read / database.write — PDO access
  • filesystem.write — Plugin storage path
  • admin.nav — Admin routes and menu items
  • frontend.render — Public routes and reserved slugs
  • user.read — Auth service access
  • settings.write — Persist plugin settings
  • media.upload — Media integration

Example manifest

{
  "name": "My Plugin",
  "slug": "my-plugin",
  "version": "1.0.0",
  "requires_cms_version": "1.1.33",
  "requires_php": "8.2",
  "capabilities": ["database.write", "admin.nav", "frontend.render"],
  "hooks": {
    "filters": ["seo.meta", "menu.items"],
    "events": ["ContentEntrySavedEvent"]
  },
  "database": {
    "migrations": "migrations",
    "tables": ["cms_my_plugin_items"]
  }
}

Legacy permissive mode

Plugins with no capabilities and no declared hooks run in legacy permissive mode (full boot API), but filters must still use valid FilterHook constants.

Activation checks

Errors block activation; warnings (untested CMS version, destructive migrations) display but may not block.