The Feature Catalog and Discovery
The Feature Catalog and Discovery
The app discovers what code is available to it by scanning the plugin folders and
reading each feature's the-feature-header. The result is one catalog.
Where to see it
- App Config → Features (admin only) — a report grouped by category, showing
each feature's maturity, whether it's true drop-in vs. registry-based, and
whether the active edition includes it (and why not, if excluded).
GET /api/v1/features(admin only) — the same data as JSON.
What it reports per feature
id, display name, category, status, whether it's drop-in (folder-scan
add/remove) or registry, whether it carries a header yet, its requirements,
any import error, and whether the active edition switches it on.
How discovery works
- The folder-scan subsystems (integrations, event sources, channels, connectors,
secrets, encryption, payments, scheduler) are scanned file-by-file.
- Storage backends are enumerated explicitly (they live among unrelated modules).
- Agent abilities are listed too, so web search and friends are editionable.
Discovery is lazy and fully guarded — a broken or un-importable plugin shows
up as an error row; it can never break boot or the endpoint.
Implementation: app/features/catalog.py, app/features/descriptor.py,app/api/features.py.
Related: editions-and-the-production-path, edition-gating-and-packaging.