Skip to content

Extension points

Extension points

Every module is contracts-first: a contract in */Contracts, an in-memory default bound in the module's service provider, and a durable or fake alternative you swap in. Nothing in the library is final — you replace a binding, you don't fork.

In this section

Page What
Contracts & bindings The one contract per module and how to rebind it.
Storage adapters memory vs database per module, and the ClickHouse seam.
Payment gateways Implement PaymentGateway and the webhook verifier.
Domain events The billing lifecycle events you listen for instead of editing the engine.
Testing The InteractsWith* traits and Fake* doubles.