You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Add plugin.json manifest support alongside box.json #1976
Add declarative plugin.json manifest support for plugins, inspired by LuCLI's module.json format. This enables future features (service registration, middleware, semver deps) without breaking existing plugins.
Add optional plugin.json manifest support to plugin metadata discovery, enabling plugins to declaratively specify version, dependencies, mixin targets, services, and middleware — without breaking existing plugins that use CFC metadata or box.json.
Merit Assessment
Recommendation: Proceed with modifications
Strong foundation for Phase 2+ features (DI integration, middleware registration, semver dependency checking) without requiring any of those features to exist yet.
Backward-compatible by design — $pluginMetaData() (line 184-196) already falls back gracefully, and plugin.json would simply take priority over box.json.
The services and middleware keys should be parsed and stored but not acted upon in this issue — those behaviors belong to later issues. This issue is manifest parsing only.
Consider validating the manifest with a minimal schema (required: name, version) and logging warnings for unrecognized keys, to catch typos early.
Implementation Plan
Extend $pluginMetaData() in vendor/wheels/Plugins.cfc:184-196:
Before checking box.json, look for plugin.json in the plugin directory.
If found, DeserializeJSON(FileRead(...)) and store the full manifest in pluginMeta[plugin]["manifest"].
Populate pluginMeta[plugin]["version"] from the manifest's version field.
If plugin.json exists, still read box.json but let plugin.json values take precedence.
Store new metadata fields in $class.pluginMeta:
Add keys: manifest (raw struct), mixin (string, for $processMixins to optionally use later), dependencies (struct), services (struct), middleware (array).
These are stored but not consumed by any logic in this issue.
Add tests in vendor/wheels/tests/specs/pluginsSpec.cfc:
Create a new test plugin asset directory (e.g., tests/_assets/plugins/manifest/) with a plugin that has a plugin.json.
Verify getPluginMeta() returns the manifest data.
Verify fallback still works when plugin.json is absent.
Estimated complexity: Low-medium — ~30-40 lines of new code in $pluginMetaData(), plus test fixtures.
Dependencies & Risks
No prerequisites — this is purely additive metadata.
Activity
bpamiri commentedon Mar 16, 2026
Analysis
Synopsis
Add optional
plugin.jsonmanifest support to plugin metadata discovery, enabling plugins to declaratively specify version, dependencies, mixin targets, services, and middleware — without breaking existing plugins that use CFC metadata orbox.json.Merit Assessment
Recommendation: Proceed with modifications
$pluginMetaData()(line 184-196) already falls back gracefully, andplugin.jsonwould simply take priority overbox.json.servicesandmiddlewarekeys should be parsed and stored but not acted upon in this issue — those behaviors belong to later issues. This issue is manifest parsing only.name,version) and logging warnings for unrecognized keys, to catch typos early.Implementation Plan
Extend
$pluginMetaData()invendor/wheels/Plugins.cfc:184-196:box.json, look forplugin.jsonin the plugin directory.DeserializeJSON(FileRead(...))and store the full manifest inpluginMeta[plugin]["manifest"].pluginMeta[plugin]["version"]from the manifest'sversionfield.plugin.jsonexists, still readbox.jsonbut letplugin.jsonvalues take precedence.Store new metadata fields in
$class.pluginMeta:manifest(raw struct),mixin(string, for$processMixinsto optionally use later),dependencies(struct),services(struct),middleware(array).Add tests in
vendor/wheels/tests/specs/pluginsSpec.cfc:tests/_assets/plugins/manifest/) with a plugin that has aplugin.json.getPluginMeta()returns the manifest data.plugin.jsonis absent.Estimated complexity: Low-medium — ~30-40 lines of new code in
$pluginMetaData(), plus test fixtures.Dependencies & Risks
plugin.jsonas their validity marker).servicesandmiddlewaremanifest keys.plugin.jsonare completely unaffected.Automated analysis by @claude — review and adjust as needed.
bpamiri commentedon Mar 25, 2026
Implemented in develop. Full plugin.json manifest support with graceful fallback.
d08733ffeat: add plugin.json manifest schema, parser, and validation (wh-mkd.1)b83474dfeat: integrate plugin.json manifest into plugin loading pipeline (wh-mkd.2)7602208feat: graceful fallback when plugin has no plugin.json manifest (wh-mkd.3)