A module is a folder under modules/ with a pnlcs.json manifest. Drop it in and PNLCS registers it on the next request. You don’t edit the core, and nothing has to be re-registered after an update.
modules/
└── Gateways/ ← Gateways, Servers, Registrars or Ssl
└── AcmePay/
├── AcmePayModule.php
└── pnlcs.json
The guide covers the manifest, the interface for each module type, optional capabilities, hooks, reports, dashboard widgets and replacing a core service:
Stuck on something? Open a topic here with your code and what you expected. Finished a module? Share it in Modules & themes.