Addons are self-contained Laravel modules that extend Mumara Campaigns with new features, integrations, and UI changes without modifying core code. Built on nwidart/laravel-modules v12, each addon lives in its own directory under Addons/ with its own routes, controllers, views, Eloquent models, migrations, hooks, and service providers — so it can be installed, updated, and removed independently. Typical uses include new pages and menu items, custom campaign types and reports, external integrations (CRMs, SMS, payment gateways), and scheduled background tasks.
The loading flow: the system scans Addons/ for valid module.json manifests, tracks active addons in storage/addons_statuses.json, registers the service providers listed in the manifest, and boots them to load routes, views, hooks, commands, and migrations. A symlink from public/Addons/{Name} to Addons/{Name}/public/ exposes static assets. An addon moves through four lifecycle states: Available (files present), Installed (migrations run, symlink created), Active, and Inactive.
Worth knowing: only the addon's public/ directory is ever web-accessible — everything else (controllers, config, routes) stays private, so never put sensitive files in public/. Hooks let you listen to core events (module hooks) or inject content into pages (output hooks) without touching source files. Addons also declare a license type: native, marketplace, remote, or free.