Summary
Currently, plugins must be distributed as .zip files in the plugins/ directory. The $pluginDelete() function actively removes directories that lack a matching zip — which means git-cloned, symlinked, or manually installed plugin directories are deleted on application start.
Current Behavior
$pluginsExtract() unzips .zip files from plugins/ to subdirectories
$pluginDelete() removes any directory in plugins/ that doesn't have a matching .zip file
- Directory-only plugins are destroyed on every reload
Proposed Behavior
- Recognize plugin directories that contain a valid plugin CFC (or
plugin.json) as first-class plugins
$pluginDelete() should only remove directories that are orphaned extraction artifacts, not intentionally placed directories
- A directory with a
plugin.json or a CFC with init() returning this.version is treated as a valid plugin
- This enables:
git clone, git submodule, symlinks, and package-manager-installed plugins
Files
vendor/wheels/Plugins.cfc:128-144 — modify $pluginDelete() to skip valid plugin directories
vendor/wheels/Plugins.cfc:146-178 — modify $pluginsProcess() to discover directory-based plugins
Phase
Phase 1 — Cleanup & Foundation (3.x, no breaking changes)
Summary
Currently, plugins must be distributed as
.zipfiles in theplugins/directory. The$pluginDelete()function actively removes directories that lack a matching zip — which means git-cloned, symlinked, or manually installed plugin directories are deleted on application start.Current Behavior
$pluginsExtract()unzips.zipfiles fromplugins/to subdirectories$pluginDelete()removes any directory inplugins/that doesn't have a matching.zipfileProposed Behavior
plugin.json) as first-class plugins$pluginDelete()should only remove directories that are orphaned extraction artifacts, not intentionally placed directoriesplugin.jsonor a CFC withinit()returningthis.versionis treated as a valid plugingit clone,git submodule, symlinks, and package-manager-installed pluginsFiles
vendor/wheels/Plugins.cfc:128-144— modify$pluginDelete()to skip valid plugin directoriesvendor/wheels/Plugins.cfc:146-178— modify$pluginsProcess()to discover directory-based pluginsPhase
Phase 1 — Cleanup & Foundation (3.x, no breaking changes)