# Start here: writing your first PNLCS module

**URL:** <https://community.pnlcs.com/t/start-here-writing-your-first-pnlcs-module/21>\
**Category:** Developers\
**Created:** [October 25, 2026, 1:41pm UTC](https://community.pnlcs.com/t/start-here-writing-your-first-pnlcs-module/21 "2026-10-25T13:41:59Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![keyvanertugrul](https://community.pnlcs.com/letter_avatar_proxy/v4/letter/k/ba8739/32.png) [@keyvanertugrul](https://community.pnlcs.com/u/keyvanertugrul)\
**Post date:** [October 25, 2026, 1:41pm UTC](https://community.pnlcs.com/t/start-here-writing-your-first-pnlcs-module/21/1 "2026-10-25T13:41:59Z")

</div>

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.

```auto
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:

- [Writing a module](https://docs.pnlcs.com/developer/modules/)
- [Hooks](https://docs.pnlcs.com/developer/hooks/)
- [Themes](https://docs.pnlcs.com/developer/themes/)
- [Contributing to the core](https://docs.pnlcs.com/developer/contributing/)

Stuck on something? Open a topic here with your code and what you expected. Finished a module? Share it in [Modules & themes](https://community.pnlcs.com/c/modules-themes).
