What is ImpulseCore, and why does every module need it?
ImpulseCore is the shared addon every Impulse module depends on for project membership, cron, hook dispatch, licensing, audit, and the Security & Maintenance pipeline. You only install it once; every module hooks into it.
Last updated 20 days ago
What is ImpulseCore, and why does every module need it?
ImpulseCore is the central WHMCS addon every Impulse module depends on. You install it once, and every Impulse module you add β ImpulseMinio, ImpulseDB Postgres, ImpulseCache, ImpulseAuth, ImpulseSearch β registers itself with Core on activation and runs through it for everything that crosses module boundaries.
It is a hard dependency, not optional. Activating any module before Core is in place fails with a "Class not found: ImpulseCore" fatal. That is by design.
What Core actually does
Core owns the cross-cutting machinery that every module needs but shouldn't reimplement:
- Project registry β groups related services under a single client-facing project (e.g. a managed Postgres + a MinIO bucket + a Valkey instance that all belong to one app).
- Cron runner β one crontab line dispatches to every module's tasks (provisioning pollers, usage syncs, retention sweeps, the Security & Maintenance pipeline). Modules don't add their own cron lines.
- Hook dispatcher β modules subscribe to each other's events through a single registry, so a project-level event in one module can trigger work in another.
- Licensing client β handles the XML licensing handshake and caches the result so every module doesn't reinvent it.
- Audit log β one unified log across every module, queryable from Core's admin tab.
- Security & Maintenance pipeline β daily snapshots, CVE feed correlation, scheduled maintenance windows. Every module that ships a
SecurityCollectorplugs in automatically; you don't configure it per-module. - Per-region admin proxy auth β the credentials provisioned servers use to call back into WHMCS. Per-region, never a global secret.
Why it's a separate addon
You could imagine each module shipping its own copy of all of the above. That's how most WHMCS addon ecosystems work, and it's why those ecosystems are full of conflicting cron schedules, duplicated audit trails, and silent integration gaps.
Splitting Core out means:
- One cron line covers every Impulse module you ever install.
- One audit log to investigate any incident β you don't chase the trail across five admin pages.
- One licensing client, one project model, one hook dispatcher. Module upgrades don't break each other.
- When a new module ships, it inherits the Security & Maintenance pipeline for free.
What Core does not do
To set expectations:
- Core is not customer-licensed. It has no license key, no per-module fee. Modules carry their own licenses; Core is free.
- Core does not provision anything. No VPS spin-up, no DNS, no S3 buckets. Those are module concerns. Core is the infrastructure that modules ride on.
- Core does not store provider credentials. Vultr API keys, DNS provider tokens, SSH keys β those live in the modules that need them.
- Core does not appear in the customer client area on its own. Customers see the modules; Core is admin-side only.
Installing it
ImpulseCore has no provider credentials to configure and no plans to set up. Installation is: drop in the release, activate the addon under System Settings β Addon Modules, add one crontab line, then activate the modules you've purchased.
The full walkthrough is in Installation & activation.
Versioning
Every module pins a minimum ImpulseCore version in its manifest. When you upgrade a module, check the release notes for a Core version bump β if the module requires a newer Core, upgrade Core first. Core upgrades are idempotent: drop in the new archive, the activate hook runs schema migrations in place. No data loss, no downtime beyond a normal addon reload.
Where to go next
- Installation & activation β the 5-minute setup walkthrough.
- Manifest contract β how modules register themselves with Core.
- Troubleshooting β common installation issues and where to look first.