Developer guide
Oct 25, 2026
WHBMP is built to be extended. Everything a third party supplies is a plugin in its own folder, and core provides the shared work so a plugin contains only what is its own.
What do you want to build?
| I want to… | Read |
|---|---|
| Add a feature, a page or a menu | Building a plugin |
| Take payments with a gateway | Building a payment gateway plugin |
| Connect a server, VPS, registrar, AI, fraud or captcha service | Other plugin types |
| Know every place a plugin can add to WHBMP | Plugin development |
| Test and release a plugin | Testing and releasing a plugin |
| Read data from WHBMP in another system | REST API |
| Be told when something happens | Webhooks |
| Change how the client area looks | Building a client area theme |
Two commands to know
php artisan whbmp:make-plugin my-addon --name="My Addon" # a working plugin folder
php artisan whbmp:plugin-check my-addon # check it before a release
How a plugin fits in
- A folder
plugins/<slug>/with aplugin.jsonthat names the plugin, its version, what it needs and the classes it provides. - A main class. An addon extends
AbstractAddonand returns its slug; a payment gateway with a hosted payment page extendsAbstractCheckoutGateway. - Optional extras registered from a service provider: menus, tabs, dashboard tiles, email templates and more.
- Its own tables in
database/migrations/, texts inlang/*.json, and tests intests/.
Core keeps the rules that must be right once for everyone, such as booking a payment exactly once (GatewayPayments), amounts in each currency's smallest unit (MinorUnits), saved credentials and settings, the webhook route, and the System Logs. A plugin calls them instead of copying them.
A worked example
The Stripe plugin (plugins/stripe) is a complete, small gateway: a connection test, Stripe Checkout, a signed webhook and refunds in about 340 lines. Read it next to Building a payment gateway plugin.