Upgrade GT Performance
Updates come from WordPress.org. Update the plugin the usual way, from Plugins or Dashboard > Updates, or with wp plugin update gt-performance. The full release history is in the changelog.
After an update that changes the plugin’s database tables, the first wp-admin page load or WP-CLI command upgrades them. Front-end requests never run the upgrade, so sign in to wp-admin once after updating.
Moving from the gauravtiwari.org build
Copies downloaded from the gauravtiwari.org store before the WordPress.org listing carry an Update URI: false header, so WordPress never offers them directory updates. Switch once:
- Download gt-performance.zip from WordPress.org.
- Go to Plugins > Add New Plugin > Upload Plugin, choose the ZIP, and click Replace current with uploaded.
- Open GT Performance once in wp-admin so any table upgrade runs, then confirm with
wp gt-performance doctor.
The files are replaced in place under the same gt-performance folder, so settings, tables, and the cache carry over. The WordPress.org package has no licensing code, so the old license screen disappears. Updates arrive from WordPress.org from then on.
From 1.0.0 or earlier: read this first
Releases up to 1.0.0 installed a generated advanced-cache.php that hard-codes the list of runtime files it loads. Later releases moved those files. When the plugin files are replaced but that old drop-in is still on disk, it loads a class list that no longer matches and raises a fatal from wp-settings.php, before WordPress can catch it, so the front end and wp-admin go down together.
The safe order
Replace the drop-in first, then update. Either:
Run the repair script before updating: https://gist.github.com/wpgaurav/03d61d313df00b4127db92393ed74681php gt-performance-migrate.php /path/to/wordpress # dry run php gt-performance-migrate.php /path/to/wordpress --apply
Or deletewp-content/advanced-cache.phpby hand, update, then reinstall the drop-in from the GT Performance Dashboard.
If you already updated and the site is down
rm wp-content/advanced-cache.php
That restores the site immediately. An absent drop-in just means no page cache. Then reinstall the drop-in from the Dashboard.
You can’t fix this with WP-CLI, because WP-CLI boots WordPress and hits the same fatal. It has to be the filesystem.
Renamed constants
Everything moved from GTP_ to GTPERF_ in 1.0.1, with no compatibility shim. If you set any of these in wp-config.php, rename them:
// before after
GTP_REDIS_HOST → GTPERF_REDIS_HOST
GTP_CLOUDFLARE_API_TOKEN → GTPERF_CLOUDFLARE_API_TOKEN
GTP_XCLOUD_API_TOKEN → GTPERF_XCLOUD_API_TOKEN
The same applies to every other GTP_ constant. Constants Reference lists the ones read today. Settings saved in the dashboard need no action.
What is on disk now
| Before 1.0.1 | Current |
|---|---|
cache/gt-performance/config.php | config.json (authenticated, encrypted) |
cache/gt-performance/redis-config.php | redis-config.json (authenticated, encrypted) |
pages/**/<hash>.meta.php | <hash>.meta.json |
generated advanced-cache.php | copied from the plugin’s dropins/ folder |
tables wp_gtp_* | wp_gtperf_* |
Cached pages regenerate on their own. The repair script removes the leftovers.
Version history worth knowing
| Version | Why it matters |
|---|---|
| 1.3.6 | On a site using xCloud Cloudflare Enterprise with xCloud’s automatic cache purge plugin installed, GT Performance starts purging Enterprise and pauses direct Cloudflare on its own; no setting changes. Run wp gt-performance cache purge once after updating so pages re-record their dependencies under the new long-listing rule. Post changes now purge page one of listings only; see Purging |
| 1.2.0 | Existing settings keep working, and existing sites stay in Store pages mode. Open the new Setup tab once and press Verify to confirm a real cached response; until a verification passes, the Dashboard points to Setup. Unused CSS is rebuilt for every page, because builds from 1.1.x are not reused (they could drop block themes’ fluid font sizes). The Cloudflare rule written by earlier releases (ref gt-performance-free-html-cache) is adopted by the site whose hostname it names and keeps its ref; new rules get a per-hostname ref. A full Cloudflare purge now purges this site’s hostnames instead of the whole zone, and settings saves purge only when a setting that reaches cached pages changed. Deactivation now deletes this site’s Cloudflare rule and empties the page store. Translations can be made from languages/gt-performance.pot |
| 1.1.1 | Purge once after updating (wp gt-performance cache purge or Purge GT cache): pages cached earlier are served without the security headers set in PHP (CSP, HSTS, X-Robots-Tag and the rest) until they are rebuilt, and without the new YouTube preview. The drop-in now honors GTPERF_SAFE_MODE. wp gt-performance database run now keeps Scheduled revisions to retain (add --all-revisions for the old behavior), and doctor and health exit 1 when a check fails, so review scripts and server crons that call them |
| 1.1.0 | Sign in to wp-admin (or run any WP-CLI command) after updating so the table upgrade runs. The Cache tab is now Page Cache, and CSS Status, Object Cache, Database, and AI & MCP tabs were added. |
| 1.0.14 | Click Connect/sync Cloudflare on the Cloudflare tab once, so the managed Cache Rule allows the plugin’s own purge requests. Unrelated Cloudflare rules are preserved. |
| 1.0.13 | Runtime configuration became authenticated, encrypted JSON, and both drop-ins were migrated to read it. Legacy configuration files are removed after migration. |
| 1.0.11 | JavaScript minification stopped writing JavaScript files. Results are stored in WordPress and delivered through signed URLs. |
| 1.0.8 | Activation stops on multisite. The WordPress revision limit control was removed. Cloudflare edge lifetime respects the origin’s Cache-Control by default. Review Optimization and Cloudflare settings after updating across this version. |
| 1.0.5 | Uninstall removes the cache directory when data removal is enabled |
| 1.0.4 | Upgrade compatibility code removed. From 1.0.0 or earlier, replace the drop-in first (see above). |
| 1.0.2 | Fixed every admin button returning a blank page on 1.0.1 |
| 1.0.1 | Configuration and metadata became inert JSON; the drop-in became a copied file; GTP_ became GTPERF_ |
If you’re on 1.0.1, update. Its admin controls don’t work.