Latest update A domain ordered with hosting is checked, priced and registered

An open-source alternative to WHMCS

PNLCS deliberately mirrors WHMCS: clients, products, orders, invoices, services, tickets and modules mean the same thing. The difference is the license: PNLCS is MIT, with no per-install fee.

A WHMCS-style hook, unchanged in PNLCS
add_hook('InvoicePaid', 1, function (array $vars) {
    $invoice = $vars['invoice'];
    // ...
});
WHMCS API action names
GET  /api/v1/getclients
GET  /api/v1/getinvoices
POST /api/v1/addorder

Side by side

TopicPNLCSTypical proprietary billing
License costFree (MIT)Monthly per-install fee
Source codeFully open, auditableEncoded or closed
Self-hostingAnywhere: Docker, VPS, inside a hosting panelYes, license-checked
ExtendingWrite a module, ship it, keep itMarketplace and vendor terms

What carries over from WHMCS

Concepts
Product groups, products, configurable options, services, orders, invoices, credit, tickets and departments behave the way WHMCS staff expect.
API action names
The HTTP API uses WHMCS action names, so most integrations need a new address and credential.
Hooks
add_hook('InvoicePaid', 1, fn) works the same way; a failing hook is logged and skipped instead of breaking billing.
Modules
Servers, gateways, registrars and SSL providers are separate modules, as in WHMCS.

Switching without downtime

Run PNLCS next to WHMCS and move customers across as they renew. The accounts stay on the same servers throughout.

There is no one-click importer yet

PNLCS does not ship an automated WHMCS database importer. The steps here are the practical, low-risk way to move. An importer is a welcome contribution.

  1. Rebuild your catalogRecreate product groups and products with the same names and prices.
  2. Connect the same serversThe accounts already exist on them; PNLCS manages them from now on.
  3. Recreate your settingsPayment gateways (same accounts), tax rules, email templates, staff and roles.
  4. Bring customers overAdd each client and their existing services with the right next due date. On Panelica, link the account that is already on the server.
  5. Cut overOn renewal, one customer at a time, or everyone in a maintenance window.

Try PNLCS

Click around the live demo, or install it with Docker.