Skip to main content

Experience Plugins Configuration Reference

Use this page as the canonical source for configuring plugins in Experience. Link here from how‑tos instead of repeating settings.

Contents

Config files and locations

PurposePath
Plugin manifests (SoT)ServiceConfigs/BFF/config/plugins.yaml
Plugin bundlesServiceConfigs/BFF/plugins/<pluginId>/<version>/index.esm.js
BFF mounts/app/plugins and /app/config

plugins.yaml schema

Minimal entry per tenant host:

tenants:
<tenant-host>:
- id: <pluginId>
version: "<semver>"
engine:
experience: ">=<min> <max"
bundle:
file: "/app/plugins/<pluginId>/<version>/index.esm.js"
# integrity: "sha256:<hex>" # optional
permissions:
api:
- method: GET
path: /api/...
sse: []
contributions:
routes:
- path: /hello
component: Hello
resource: plugin.route
action: view
widgets:
- slot: dashboard.main
component: HelloWidget
resource: plugin.widget
action: view

Key fields:

FieldDescription
idPlugin identifier
versionPlugin bundle version (semver)
engine.experienceHost compatibility range
bundle.fileAbsolute path inside container under /app/plugins
bundle.integrityOptional sha256 hash; enforced if set
permissions.api[]Method + path templates allow‑list
permissions.sse[]SSE topic prefixes allow‑list
contributions.routes[]/widgets[]Mount points and PDP hints

Bundle storage and integrity

  • Store built ESM at ServiceConfigs/BFF/plugins/<id>/<version>/index.esm.js.
  • Mount into container at /app/plugins (read‑only).
  • Optional integrity:
    • Set bundle.integrity: "sha256:<hex>".
    • BFF verifies at serve time; on mismatch returns 409 with X-Integrity-Error: 1.

BFF routes and auth

  • Manifests: GET /api/plugins/manifests
  • Bundles: GET /api/plugins/bundle?entry=<id>&id=<id>
  • Auth: both routes require session; SDK fetches with same‑origin cookies.
  • Enforcement: requests from plugins carry X‑Plugin‑Id; BFF checks method+path templates per plugin.

Verification checklist

  • GET /api/plugins/manifests shows your plugin
  • Bundle loads from /api/plugins/bundle?... with 200 and caching headers
  • PDP pre‑gating permits contributions; denied ones are omitted
  • Requests include X‑Plugin‑Id; allow‑list violations return 403 with X-Allowlist-Violation: 1

See also

  • Overview: ../experience_plugins.md
  • BFF reference: ../../bff/reference/settings-reference.md, ../../bff/reference/routes-reference.md