How to Upgrade to WHMCS 9 Safely (PHP 8.2, ionCube 13, Templates)

A pre-flight checklist for WHMCS 9: back up, move to PHP 8.2 or 8.3, update ionCube to 13, test templates and hooks, upgrade in order, and roll back if needed.

Published
Reading time
4 min

WHMCS 9 changes more under the hood than any release since 8.0: it needs PHP 8.2 or newer, ionCube Loader 13, and it ships a new default theme, Nexus. An upgrade done in the right order is a fifteen-minute job. Done in the wrong order, it is a white screen on the page your clients pay you through. Here is the right order.

Before touching anything

Back up both halves. WHMCS is files plus a database, and a restore needs both from the same moment:

bash
mysqldump --single-transaction whmcs_db | gzip > ~/whmcs-pre9-$(date +%F).sql.gz
tar -czf ~/whmcs-pre9-files-$(date +%F).tar.gz /var/www/vhosts/yourbrand.com/billing.yourbrand.com

Check your starting version. WHMCS does not upgrade across end-of-life versions in one jump. From 8.x you can go straight to 9. From anything older, step through the last release of each major version first; the WHMCS release notes list the required path.

List your customisations. Anything in templates/ that is not a stock theme, anything in includes/hooks/, every addon module under modules/addons/, and every non-stock gateway or registrar module. Each is a thing that can break, and the list is what you test afterwards.

Step 1: PHP and ionCube first

Do this before the upgrade, not during it. In Plesk, PHP Settings for the WHMCS site: switch the handler to PHP 8.3 (8.2 is the minimum). Then confirm ionCube on that handler is version 13 or newer:

bash
/opt/plesk/php/8.3/bin/php -v

The output should mention ionCube PHP Loader v13 or higher. Plesk ships current loaders with its PHP packages; if the version is older, update the Plesk PHP component under Tools & Settings → Updates.

Reload WHMCS in the browser after the switch. Your current 8.x install must still work on the new PHP before you go further; if it does not, a module is incompatible and you have found it at the cheap moment.

Step 2: check module compatibility

Every third-party module needs a version that declares WHMCS 9 and PHP 8.2 support. Check the vendor's changelog for each item on your list. Deactivate anything unmaintained under System Settings → Addon Modules; a module that fails to load can take the admin area down with it.

Step 3: run the upgrade

Utilities → Update WHMCS does it in place. The pre-flight check refuses to start until PHP and ionCube are right, which is why those came first. Put WHMCS in maintenance mode (General Settings → General → Maintenance Mode) so clients do not hit a half-updated page, then run the update.

If you prefer the manual route, upload the release files over the existing install, keeping your configuration.php, and open /install/install.php to run the database migration. Delete install/ afterwards.

Step 4: test the things that matter

In this order, because it is the order clients notice:

  1. Client login and the client area home. If your theme is custom, this is where it breaks.
  2. Ordering a product through to the invoice page.
  3. Paying an invoice with a real gateway in test mode.
  4. Opening and replying to a ticket.
  5. The cron: run it by hand and check the Activity Log. See WHMCS cron not running if it fails.
  6. Provisioning: place a test order and confirm the account appears in Plesk.

Step 5: deal with the template

WHMCS 9's default theme is Nexus. Your existing Twenty-One theme keeps working, but new features appear in Nexus first. The safest way to brand it is a child theme: a folder under templates/ with a theme.yaml naming Nexus as its parent and a css/custom.css for your colours. It contains no template files, so future updates never overwrite your work. That is how our own client area is skinned.

If you have a heavily customised copy of an older theme, compare it against the new stock version file by file before switching; WHMCS publishes a template changelog with every release.

Rolling back

If something is wrong that you cannot fix in an hour, restore rather than debug in production:

bash
gunzip < ~/whmcs-pre9-2026-09-23.sql.gz | mysql whmcs_db
tar -xzf ~/whmcs-pre9-files-2026-09-23.tar.gz -C /

Switch the PHP handler back if you changed it, clear templates_c, and you are on the old version. Then work out the cause on a copy.

Keep it current afterwards

WHMCS releases security fixes on 9.x regularly and the updater applies them in one click. Read the release notes, back up, update. A billing system three versions behind is the one that ends up in the news.

On VPSPioneer reseller plans the WHMCS Starter licence is included with Partner Grow and Pro. The install is yours to run and upgrade, and with the checklist above that is a fifteen-minute job in a quiet hour, backup first.

#whmcs#upgrade#php#ioncube#nexus

Keep reading

More from WHMCS

All guides

WHMCS

How to Install WHMCS on a Plesk Server, Step by Step

WHMCS 9 requirements (PHP 8.2+, ionCube 13, MySQL), creating the site in Plesk, running the installer, the cron job and the first settings to lock down.

4 min read →

WHMCS

Selling Domains in WHMCS: Registrar Modules, TLD Pricing and Sync

Connect a registrar to WHMCS, import TLD costs with Registrar TLD Sync, set your markup, configure renewals and nameservers, and never sell a domain at a loss.

3 min read →

WHMCS

How to Set Up Products, Pricing and Configurable Options in WHMCS

Create product groups and hosting products in WHMCS, set billing cycles and prices, add configurable options and addons, and build the order form clients see.

4 min read →