Turning Plugins On and Off
Lifecycle
discover → installed → enable → active → disable → inactive → uninstall
| Step | What happens |
|---|---|
| Discover | HelpNest scans core/plugins, validates every plugin.json and adds or updates a row for each. Folders whose name and modified time have not changed are skipped (cached). Invalid manifests are logged, never registered. |
| Enable | Runs the plugin's database/migrations, calls activate(), creates the permissions declared in the manifest (guard admin) and writes an activate entry to the audit log. |
| Disable | Calls deactivate() and removes everything the plugin contributed (menus, routes, hooks). Your data is kept. |
| Uninstall | Calls uninstall(), removes the seeded permissions and deletes the plugin row. |
The audit history lives in plugin_audit_logs. It deliberately has no foreign key to the plugins table, so it survives an uninstall.
From the admin panel
Go to Admin → Plugins Manage → All Plugins. Below the legacy module cards you will find the Plugin Framework table.
| Action | Route | Permission needed |
|---|---|---|
| Discover | POST admin/plugin-manage/framework/discover | plugins-list |
| Activate | POST admin/plugin-manage/framework/{id}/enable | plugins-status-change |
| Deactivate | POST admin/plugin-manage/framework/{id}/disable | plugins-status-change |
| Uninstall | POST admin/plugin-manage/framework/{id}/uninstall | plugins-delete |
The endpoints answer JSON in the form { "ok": true, "msg": "…" }. Uninstall also needs a confirm field that equals the plugin id, which is why the confirmation dialog asks you to retype it. The controller is App\Http\Controllers\Backend\PluginFrameworkController.
After copying a new plugin folder to core/plugins, click Discover so it appears in the table, then Activate.
From the command line
php artisan plugins:discover
php artisan plugins:enable analytics-pro
php artisan plugins:disable analytics-pro
php artisan plugins:uninstall analytics-pro
Use the plugin id from plugin.json, not the folder name.
Scheduled work
Several plugins register scheduled commands (for example a nightly refresh). These only run if the Laravel scheduler is configured on the server, which a normal HelpNest install already requires:
* * * * * php /path/to/core/artisan schedule:run >> /dev/null 2>&1
Plugins that dispatch background jobs also need a queue worker running. See the installation guide for the production setup.

