Self-hosted email marketing with full source code. Pay once, own forever. Get AcelleMail — $74 →

Build anything. Without forking core.

AcelleMail is a Laravel 11+ email marketing platform with an extensibility surface that goes well beyond callbacks. Sending drivers, payment gateways, AI agents, custom admin pages, page-level UI slots, REST endpoints, lifecycle listeners — every one of them ships as a self-contained plugin under your own namespace. This is the full reference: eleven deep-dives, source-grounded against the canonical code paths in storage/app/plugins/, App\Library\HookManager, and app/Model/Plugin.php.

Start with the foundation ↓ Hello World in 5 min
Extension surfaces
14
Hook patterns
4
Deep-dive pages
11
Reading time
~3h
Source-grounded
100%

How to use this documentation

Read in order if you are starting fresh — every page builds on the one before it. Land on a single page from search if you already know what you need: each deep-dive stands alone with its own breadcrumb, sticky table of contents, and prev/next navigation.

Every claim on every page is traced back to a source file under /Users/luan/apps/acelle/docs/plugin/, docs/sending-server-polymorphism/, docs/payment-order-plan-subscription-saas/, or the live storage/app/plugins/acelle/ai/ implementation. If a claim cannot be cited, it is dropped — not paraphrased.

Reading time, end-to-end: ~3 hours. To ship a real plugin, plan a single afternoon — the Hello World sample takes five minutes to scaffold, and the longest worked example (a sending driver with Postal MTA) is roughly an hour from plugin:init to a passing integration test.

02 — BUILDING

Ship a real feature.

Worked examples for the four most-asked patterns: a new sending driver (Postal MTA), a regional payment gateway (Paddle), a custom admin UI surface (the acelle/ai chatbox), and plugin-isolated database tables.

Design philosophy

The core declares extension points. Plugins react.
The core never knows your plugin exists.

Inversion of dependency

Core code is never imported by a plugin, and a plugin is never imported by core. The Hook system sits between them as the only contract. Upgrade core, your plugin keeps working — as long as the hook name and signature remain stable, which we version-stamp.

Four patterns, no more

REGISTRY, EVENT, BEHAVIOR, FILTER — the only verbs the Hook system speaks. Conflict semantics are explicit per pattern: REGISTRY merges, EVENT all-fire, FILTER chains, BEHAVIOR is exclusive (two callers throw immediately, no silent override).

Your namespace, forever

Plugins live under MyVendor\MyPlugin\, completely isolated from Acelle\* core. Compose, sell, white-label, fork — your plugin is yours. The Extended License grants commercial redistribution.

Source of truth: the code

Every page in this docs tree links the canonical file path it was traced from. If a doc disagrees with the code, the code wins — file an issue and we update the doc, not the other way around. No legacy copy-paste, no aspirational APIs.

Open the source. Extend the platform.

Full unencrypted PHP. Lifetime updates. The Hook system. Real production plugins to learn from. One-time license — no subscriptions, no per-subscriber fees, no namespace squatting.

Buy Extended License — $199 Back to developer landing