Ahosting Logo
Knowledge Base

How to Create and Manage Hosting Packages in WHM

A package is a template, and templates only apply at creation timePackage defineddisk, bandwidth, addon domains,databases, feature list, PHPversionAccount createdthe account copies those limitsat that momentPackage edited laterexisting accounts keep the oldvaluesTo change an existing account you edit the account, or re-apply the package to it deliberately.

A package is a template. It holds the limits an account is created with, and its only job is to stop you from typing the same fifteen numbers every time you add a customer.

In WHM, Packages → Add a Package. The fields are unremarkable. What is worth understanding is which of them actually bind, and what happens to accounts that already exist when you change one.

The limits that matter, and the ones that do not

Disk quota and monthly bandwidth are the two customers understand and the two that cause support tickets. Set them to numbers you can defend rather than round marketing figures.

Maximum addon domains, subdomains, parked domains. These decide whether one customer can host six businesses on a plan you priced for one. This is the field resellers most often leave open by accident.

Maximum email accounts, databases, FTP accounts. Rarely the constraint, occasionally the abuse vector.

Maximum hourly email. Worth a real number. An account compromised at three in the morning sends until something stops it, and this is the something.

What is not in the package is the processing allowance: entry processes, CPU, memory. Those come from the server's resource limits in place of the package, and they are usually what a busy site hits first.

Why unlimited is a trap

Setting disk to unlimited does not give the customer more space. The server has the space it has. What it removes is the only warning you would have received before one account consumed all of it.

With a quota, the account stops and one customer contacts you. Without one, the partition fills and every account on the server stops writing at the same moment, email rejected, uploads failing, databases refusing writes, for people who did nothing wrong.

Sell generous numbers if you like. Sell finite ones.

The feature list is the other half of the package

Each package points at a feature list, which decides what appears in the customer's cPanel. That is where you remove tools you do not want a shared-hosting customer using, and where you can quietly hide interfaces that only generate confusion on your plans.

Feature lists are managed separately and shared across packages. There is more on building them in WHM Feature Manager and feature lists.

Editing a package does not edit the accounts on it

This is the behaviour that surprises almost everyone.

A package supplies values at creation time. Change the package afterwards and accounts already created from it keep exactly the limits they were given. Nothing propagates.

To move existing accounts onto the new numbers, use Change Package on each account, or the account-modification screens. If you have twenty accounts on a plan you just resized, that is twenty deliberate actions: not an oversight in WHM, but a consequence of the fact that many of those accounts may have been adjusted individually since.

The practical habit: when you change a package, immediately decide whether existing accounts should follow, and do it in the same sitting. A package and its accounts drifting apart is how a customer ends up on limits nobody remembers setting.

Naming

Package names appear in WHM lists, in backups, and in transfers to other servers. Name them for what they contain (starter-10g, business-50g) rather than for the customer who first bought one. Plans outlive customers, and a package called johns-special is unreadable within a year.

Resellers get their own package namespace, prefixed with the reseller's username, so two resellers can both have a starter without colliding.

Before you create the first account

Decide the package first. Creating an account with the wrong one and fixing it later works, but the account's quota, feature list and domain limits all have to be corrected individually, which is exactly the work packages exist to avoid.

Creating multiple cPanel accounts at once walks through doing this in bulk once the package is settled, and the WHM account functions reference walks through the per-account screens.

Three objects that get confused

A package, a feature list and a privilege set are separate things in WHM, and treating them as one is the source of most surprises.

The package sets quantities: disk, bandwidth, how many databases, how many mailboxes. The feature list decides which icons the customer sees at all. The privileges apply to resellers rather than to accounts, and control what they may do to other people's accounts.

The practical consequence: raising a limit in a package does not reveal a tool the feature list hides, and hiding a tool in the feature list does not reduce what the account may consume. Two customers on the same package can see entirely different control panels. For the second of the three, see WHM Feature Manager and feature lists.

What the package does not control

Reading a package suggests it defines everything about the account. It does not, and the omissions are the ones customers complain about.

quota -s -u username
ls /var/cpanel/users/username >/dev/null && grep -E 'MAXPOP|MAXSQL|BWLIMIT' /var/cpanel/users/username

Processor time, memory, concurrent processes and input/output rate are governed separately on servers that limit them at all: not by the package. An account can be well inside every package limit and still be throttled, which reads as "the site is slow and I have space left".

The inode allowance is the other frequent gap. A package with a generous disk quota and a low file allowance stops accepting files while showing plenty of free space, and the message the customer receives explains neither. There is more on what is enforced where in managing disk quotas and bandwidth in WHM.

Moving an account between packages

Changing an account's package applies the new limits immediately, and the direction matters.

Upgrading is uneventful: the ceilings rise and nothing else changes. Downgrading is not. An account already using more disk than the new package allows lands over quota the moment the change is applied, at which point it cannot write, receive mail, or in some configurations serve pages that need to write.

du -sh /home/username
grep -c . /etc/userdatadomains

Read the current usage before downgrading rather than after, and where the account is above the new limit, deal with that first. The same applies to counts. An account with twelve databases moved to a package permitting five keeps all twelve and cannot create another, which is confusing rather than harmful. There is more on the customer-facing half in upgrading or downgrading client accounts.

Keep the list short enough to audit

Packages accumulate. A special arrangement for one customer becomes a package, and two years later nobody knows which are in use.

ls /var/cpanel/packages/
for p in /var/cpanel/packages/*; do
 n=$(basename "$p")
 printf '%-28s %s\n' "$n" "$(grep -l "PLAN=$n" /var/cpanel/users/* 2>/dev/null | wc -l)"
done

That prints each package with the number of accounts on it. Packages with zero accounts are either retired or were never used, and both are worth removing. A short list is one somebody can reason about when choosing a plan for a new customer.

Where a package exists for exactly one customer, consider whether the exception is worth keeping. Bespoke limits set directly on an account are easier to justify than a package nobody else will ever be offered.

Watch these steps on screen 1 clip · 0:38

Recorded on a real panel, no narration, captions on screen. Opens here without leaving the page and without an account. Every name, address and figure shown is made up for the recording.