Hexloom PHP Compatibility Checker by Hexloom Labs

Check your WordPress plugins and themes for PHP 8.3, 8.4 and 8.5 problems

Before you move a site to a newer PHP version, find out what will stop working. This free plugin reads the code of every plugin and theme on your site, and the PHP files directly inside the mu-plugins folder, and shows, for each problem, the file, the line, the PHP version that changed it and what to do about it.

Free and open source. The plugin is in review at the WordPress plugin directory; this page links to the listing as soon as it is public.

Read the plugin compatibility guide PHP 8.2 end of life

GPL v2 or later. Needs WordPress 6.0 or newer and PHP 7.4 to 8.5. There is also an optional paid add-on.

An example finding, as the report shows it

my-plugin/includes/legacy.php

Line 42 PHP 8.4 Deprecated Implicitly nullable parameter type

function get_owner( WP_User $user = null ) {

What happens: Parameter $user has type WP_User and default null.

Fix: Write ?WP_User $user = null.

PHP manual

What the report shows

One line per plugin, theme and must-use plugin, worst first, each with a plain verdict:

  • Breaks on PHP 8.4 The code fails on that version, or uses a setting PHP no longer has.
  • Deprecated It still runs, and PHP logs a deprecation notice.
  • No PHP 8.3-8.5 changes found by this scanner. It found none of the changes it knows about in the files it could read. This is not a guarantee.
  • No changes found in the files read Some files could not be read, so this covers only the rest. The number of files not scanned is shown under the name, and the reason is inside the row.

Open a line to see every finding: the file, the line of code, the PHP version that made the change, what happens, what to do and a link to the matching page of the PHP manual. A finding inside a bundled library (a vendor or lib folder) is marked, because the fix there is an updated plugin, not an edit.

A switch shows changes up to PHP 8.3, 8.4 or 8.5. Every line has a Re-scan button for after you update a plugin, and the report downloads as a CSV file built in your browser.

The PHP Compatibility screen in WordPress after a scan: 5 of 11 items have findings. The first row is open and shows one change that breaks on PHP 8.3 and two deprecations, each with the file, the line, the code, what happens, the fix and a link to the PHP manual.
The report after a scan. The open row lists each finding with its file, line, fix and PHP manual link.

How a scan works

  1. Install and activate the plugin from the WordPress plugin directory.
  2. Press Scan this site. It is under Tools > PHP Compatibility. Pick the PHP version you plan to move to (8.3, 8.4 or 8.5), and whether to include inactive plugins and themes.
  3. Let it run. The scan works in steps of about three seconds and shows a progress bar. If you close the page or lose the connection, you can resume where it stopped.
  4. Read the report. Update anything that shows an update, then press Re-scan on that line. If there is no update, send the finding to the plugin’s developer.

Built for shared hosting

Each step is short, so a slow host is held up by one short step at a time, not by one long request. The list of files is built when a scan starts and can take a few seconds on a site with tens of thousands of files.

  • Steps of about three seconds, with a progress bar and a Cancel button.
  • A scan you left can be resumed where it stopped.
  • A file that crashes PHP while it is read is skipped and listed with the reason. The scan carries on.
  • Files are read one at a time. A file too large for the free memory of your host is skipped and listed, so a low memory limit does not stop the scan.

Nothing leaves your site

The plugin makes no requests of its own to any server. It loads no outside scripts, fonts or images, and it collects no data. The links to the PHP manual and to this site open only when you click them.

You can check this yourself: open your browser’s developer tools, go to the Network tab, run a scan, and read the list of requests. The requests the scan makes all go to your own site (admin-ajax.php). WordPress itself may load other things on the screen, such as avatars.

What it checks, and what it does not

55 rules for changes in PHP 8.3, 8.4 and 8.5
PHP versionRulesRemovedDeprecated
PHP 8.313310
PHP 8.422319
PHP 8.520218
All three55847

Removed means the code fails on that version (a fatal error, a TypeError, an undefined function or constant) or relies on a setting PHP no longer has. Deprecated means it runs and PHP logs a deprecation. Before each rule shipped, it was run on a real PHP build of the version that made the change. Examples: implicitly nullable parameter types (PHP 8.4) and non-standard cast names such as (integer) (PHP 8.5).

Not checked

  • Changes made in PHP 8.2 and earlier. A site on PHP 7.4 or 8.0 needs a tool that also covers those versions.
  • Dynamic code, such as $fn() or call_user_func( 'name' ), and methods called on an object whose class the scanner cannot know. It reads your code and runs none of it.
  • Changes that only show while the code runs, such as a function that now returns a different value.
  • Files over 2 MB and files too large for the free memory of your host. They are skipped and listed with the reason.

It does not edit your code. It tells you where to look; fixing a plugin is up to its developer or you.

How accurate is it?

On 1 November 2026 we compared the scanner with PHPCompatibilityWP, a PHP_CodeSniffer ruleset that checks WordPress code for PHP version problems. The test used 40 popular plugins and 10 popular themes from wordpress.org, chosen by active installs: 28,675 PHP files.

Removed or deprecated in PHP 8.3 to 8.5, matched by file and line
MeasureResult
Lines PHPCompatibilityWP reports344
Of those, also reported by this scanner344 (8.3: 14 of 14, 8.4: 264 of 264, 8.5: 66 of 66)
Lines this scanner reports365
Reported only by this scanner21, each checked on real PHP 8.4 or 8.5: none was a false alarm

What this does not show

  • The comparison is against another tool, not against all of PHP. Both tools miss dynamic code.
  • Popular plugins carry many bundled libraries, so rare constructs have few samples.
  • Only changes made in PHP 8.3 to 8.5 were compared. PHP 8.2 and earlier are not covered.
  • The first run matched 342 of the 344 lines. The two it missed were fixed afterwards, using these same files, so 344 of 344 is the result after that fix, not a first-try figure.
  • Files over 1 MB were left out of the comparison on both sides. PHPCompatibilityWP ran with its ignore comments (phpcs:ignore) switched off, because they hid real findings.

A result of “no changes found” means this scanner found nothing. Test the upgrade on a staging copy before you change PHP on a live site.

Hexloom Pro: re-scan after updates, report by e-mail

The free plugin does everything above and stays free. Hexloom Pro is a separate add-on from Hexloom Labs. It changes when scans run and who is told, not what the scanner finds.

  • It notices when a plugin or theme is updated, one at a time or in bulk, and re-scans only the updated items soon afterwards, in the same small steps. It uses the WordPress scheduler, which runs when a visitor loads a page.
  • When an update leaves findings, it sends one plain-text e-mail from your own site, through the same mail function WordPress uses for its other messages. You choose whether to be told only when an update leaves findings, after every update scan, or never, and you can set up to three recipients.
Price
USD 29 for one year, plus tax where it applies.
Covers
One site address. It does not renew by itself.
Licence
A key shown after payment and sent by e-mail. It is checked inside the add-on, so nothing is sent to Hexloom Labs to verify it.
Checkout
Open to buyers in Canada and the United States.
Status
Not on sale yet. It goes on sale when the free plugin is listed on WordPress.org.

Questions

Does it change my site?

No. It never edits your plugins, themes or files. It saves its progress and the last results in your database; the Reset link, or deleting the plugin, removes them.

Why only PHP 8.3 to 8.5?

That is where most sites are about to move: PHP 8.2 stops getting security fixes on 31 December 2026. The PHP 8.2 end of life guide has the dates and a safe order of work.

Does a clean result mean a plugin is safe?

No. It means the scanner found none of the changes it knows about in the files it could read. Dynamic code cannot be seen, and files over 2 MB are skipped. Test on a staging copy first.

A plugin shows “update available”. What should I do?

Update it, then press Re-scan on its line. The developer may already have fixed what the scanner found.

Which versions does the plugin run on?

WordPress 6.0 or newer (tested up to 7.1) and PHP 7.4 to 8.5. It needs the PHP tokenizer extension, which a normal PHP install includes; if it is off, the plugin says what to ask your host. On a multisite network, activate it for the network and open Settings > PHP Compatibility in the Network Admin. Only super admins can use it. The network screen was checked by reading the code and has not been run on a live network yet.

A finding looks wrong. Where do I report it?

Use the support page and say which plugin and file, so it can be checked.

Guides and comparison