Skip to content
Impulse SoftwareDOCS
Get modules

Shared topics

ImpulseCore

Required for every module

The shared addon every Impulse module depends on for project membership, hook dispatch, the cron runner, the audit log, and the Security & Maintenance pipeline. Install once; every module reads from the same surface.

ImpulseCore (slug impulsecore) is a WHMCS addon that owns the cross-cutting concerns shared by every Impulse module — ImpulseObjects, ImpulseDB Postgres, ImpulseAuth (GoTrue), ImpulsePlesk, ImpulseCpanel, ImpulseVPS, ImpulseValkey (Valkey), ImpulseSecrets, ImpulseSearch (Meilisearch / Typesense), and ImpulseNotify. Modules register with Core via a JSON manifest at install time and call into a static ImpulseCore::* facade for everything cross-cutting.

Projects & service membership

Group multiple WHMCS services (a Postgres DB + an object-storage bucket + a search instance) into a single customer-facing project. Modules read project membership through Core to render “related services” UI.

Cron runner

A single Core cron entry replaces per-module crontabs. Modules register named cron tasks; Core’s runner dispatches them and logs every run so missed crons surface in diagnostics.

Hook dispatcher

Cross-module hooks (service suspended in module A → do something in module B) flow through Core’s hook subscription registry. Modules subscribe by event name; Core fans each event out to every subscriber and audits handler failures.

Audit log

Every state-changing action across every module writes to a single mod_impulsecore_audit_log. One pane to search and filter by level, module and event. 90-day retention.

Security & Maintenance

CVE feeds (Ubuntu USN + CISA KEV + NVD), critical-CVE auto-scheduling, snapshot-protected patching, customer maintenance windows.

Licensing client

Shared XML licensing client. You paste each module’s key once in Core; caching, grace periods, and domain detection are uniform across modules.

Core also carries the shared service lifecycle (suspension and termination grace windows), an Email Center for the modules’ customer emails, monitoring and alert destinations, and one place for VPS provider credentials that modules creating servers can share.

Every Impulse module ships a small JSON manifest, impulse_module.json, that Core reads on activation. An excerpt:

{
"slug": "impulsepostgres",
"display_name": "Managed PostgreSQL",
"version": "1.10.5",
"core_min_version": "1.61.13",
"service_type": "database",
"cron_tasks": [
{"name": "provision", "cadence": "2min"},
{"name": "usage", "cadence": "hourly"}
],
"security": {
"collector": "ImpulsePostgres\\Security\\Collector",
"actuator": "ImpulsePostgres\\Security\\Actuator"
},
"cve_products": ["cpe:2.3:a:postgresql:postgresql"]
}

When a module is activated, Core reads its manifest, records it in mod_impulsecore_modules, installs its hook handlers and cron tasks, and records its lifecycle handler; Security classes are found in the module’s lib/Security/ directory. Modules go through the ImpulseCore::* facade for all cross-cutting writes — never touch mod_impulsecore_* directly. Details: Module manifest & registration.

TablePurpose
mod_impulsecore_modulesInstalled module registry (manifest cache).
mod_impulsecore_projectsProject records (client groupings of services).
mod_impulsecore_project_servicesService-to-project membership.
mod_impulsecore_licensesLicense verification cache and grace state (XML licensing client).
mod_impulsecore_hook_subscriptionsRegistered hook handlers per module.
mod_impulsecore_cron_tasksRegistered cron tasks per module + last/next run timestamps.
mod_impulsecore_cron_logCron run history (status, duration, context).
mod_impulsecore_audit_logCross-module audit trail.
mod_impulsecore_secretsEncrypted secret storage for env contributor reveal.
mod_impulsecore_service_lifecycleServices in a suspension or termination grace window.
Security & Maintenance
mod_impulsecore_security_snapshotsPer-service security snapshot (pending updates, kernel, service version, defensive posture).
mod_impulsecore_server_snapshotsPer-server snapshot for shared/managed infrastructure.
mod_impulsecore_security_eventsAppend-only patch / reboot / CVE / snapshot / deferral event log.
mod_impulsecore_maintenance_windowsPer-service customer-configured window.
mod_impulsecore_maintenance_schedulesFuture maintenance rows.
mod_impulsecore_cve_feedUpstream advisory cache (USN + KEV + NVD).
mod_impulsecore_patch_snapshot_holdsPre-patch snapshots held after a failed patch, awaiting your decision.

Core also keeps tables for projects and regions, monitoring and alerting, the Email Center, VPS provider credentials, and its own settings — all prefixed mod_impulsecore_.

ImpulseCore is a hard dependency for every Impulse module. Modules without Core registration don’t ship. The relationship is one-way: modules register with Core; Core never reaches into module tables.

Core publishes its public surface (the ImpulseCore::* facade + the manifest contract + the table schemas) as a single integration contract, and Core’s own version moves with that contract. Every consuming module pins the minimum Core version it needs in its manifest’s core_min_version field — each module’s install guide names it. When the surface evolves, the version bumps (semver) and modules raise their minimum when they start using something new.

If a module needs a newer Core than you have, Core won’t make it active (“Module ‘…’ requires ImpulseCore >= X, but installed Core is Y” — shown when you activate the module), and Modules & Licensing → Modules lists any module release waiting for a newer Core. Update Core first, then the modules.

This page is a high-level overview. For the full guide series — install steps, manifest contract details, the cron runner, the audit log, the Security & Maintenance pipeline, and troubleshooting — see the dedicated ImpulseCore docs: