Module activated but not showing in ImpulseCore's registered table

You clicked Activate on a module and it doesn't appear in Core's Modules-registered table. The activate hook fired but registration didn't complete — almost always a manifest problem.

Last updated 20 days ago

Module activated but not showing in ImpulseCore's registered table

What you're seeing

You activated an Impulse module in System Settings → Addon Modules. WHMCS reports the addon as Active. But when you open Addons → ImpulseCore → Overview, the module doesn't appear in the Modules registered table. The module's own admin tab may load partially, but cross-module features (hook dispatch, Security pipeline, cron tasks) won't work because Core doesn't know it exists.

Why it happens

When a module activates, its activate hook calls ImpulseCore::registerModule(__DIR__). Core reads impulse_module.json from the module's directory, validates required fields, and writes a row to mod_impulsecore_modules. If anything in that flow fails, the row never lands. WHMCS still toggles the addon to Active because the activate hook didn't throw a fatal — it caught the exception internally.

Three common causes:

  1. The manifest file is missing or has a JSON syntax error.
  2. A required manifest field is missing or malformed.
  3. The activate hook caught an unrelated exception and swallowed it silently.

Fix

  1. Validate the manifest JSON. From the WHMCS server shell:
    jq . /path/to/whmcs/modules/addons/<module>/impulse_module.json
    If jq errors out, you have a syntax problem (trailing comma, unquoted key, smart quote). Fix the JSON.
  2. Check the audit log for a rejection reason. Open Addons → ImpulseCore → Audit, filter to module impulsecore and severity warn or error. A rejected registration writes an entry naming the field that was missing or invalid (slug, version, core_min_version, etc.).
  3. Enable WHMCS debug mode and re-activate. If the audit log has nothing, the activate hook swallowed a different exception. In WHMCS configuration.php:
    $display_errors = true;
    Then in System Settings → Addon Modules, click Deactivate on the module, then Activate again. Any fatal will surface inline this time.
  4. Re-run the registration. Once the underlying issue is fixed, deactivate and reactivate the module's addon entry. Registration is idempotent — running it again on a module that's already partially registered just updates the existing row, it doesn't duplicate anything.

How to confirm it worked

The module appears in the Modules registered table on Core's Overview tab with its slug, version, and a recent registration timestamp. Its cron tasks show up in the Cron Health panel. Its hook subscriptions appear if you query:

SELECT module_slug, hook_name FROM mod_impulsecore_hook_subscriptions WHERE module_slug = '<module-slug>';

Required manifest fields

At minimum the manifest needs slug, display_name, version, and core_min_version. Optional fields (cron_tasks, hooks_consumed, security, cve_products) only need to validate if present. A missing optional field doesn't block registration; a malformed one does.

Related