Skip to content
Gaurav TiwariDocs

Settings Reference

Version 1.3.6 Updated October 26, 2026

Every setting, where it appears in the admin, its key, and its default. Defaults and allowed values come from src/Core/Settings.php; labels come from src/Admin/AdminModule.php. This page lists what each setting is. The linked feature pages explain how to use it.

How settings are stored

  • One option. Everything lives in gt_performance_settings, which is not autoloaded. Keys the plugin does not declare are dropped on save.
  • Compiled on save. Each save writes two runtime files under wp-content/cache/gt-performance/: config.json, which the page-cache drop-in reads, and redis-config.json, which the Redis drop-in reads. Both are authenticated encrypted JSON keyed from AUTH_KEY, never PHP. If they cannot be written, the save is refused, the previous settings are kept, and the old runtime files are removed where possible so the drop-ins fall back to plain WordPress instead of running on a stale configuration.
  • Secrets are encrypted. The Cloudflare token and Global API Key, the Redis password and the xCloud token are stored encrypted. Leaving one of those fields blank keeps the saved value.
  • Cache-relevant saves change every cache key. A save that changes a setting reaching cached pages increments generation, which is part of each cache key, so previously stored pages stop matching. Such a save made in wp-admin also purges the origin cache, which purges Cloudflare (this site’s hostnames) and xCloud when they are connected and queues a warm run when warming is on. Saves that change only output-neutral settings (credentials, connection status, warming, background work and admin-only settings) purge nothing; the list is on Page Cache.
  • Changes are recorded. A save that changes any non-secret setting records the values it replaced. The last 20 revisions, up to 90 days old, can be compared and restored from Tools or wp gt-performance config.
  • Constants win. Some values can be set in wp-config.php instead. See Constants Reference.

Settings save from one form per tab. A tab submits only its own fields; everything else keeps its saved value.

Admin tabs

The screen is the top-level GT Performance menu, at wp-admin/admin.php?page=gt-performance&tab=<slug>. It requires the manage_options capability.

TabSlugStores settings
DashboarddashboardNo. Status cards, current configuration (including the cache mode), recommended next step, quick operations
SetupsetupPartly. Six setup steps; Save cache mode saves cache.enabled and cache.mode, and the Cloudflare step saves cloudflare.api_token and cloudflare.domain. See Setup
Page CachecacheYes
OptimizationoptimizationYes
CSS Statuscss-statusNo. Unused CSS build results, regeneration, and Fetch important CSS classes. See CSS Optimization
ExceptionsexceptionsYes
CloudflarecloudflareYes
CDNcdnYes
Object Cacheobject-cacheYes
DatabasedatabaseYes
IntegrationsintegrationsYes
AI & MCPaiYes
ToolstoolsNo. Runtime status, Explain this page, health report, warming, purge receipts, settings history and export/import, background queue. See Tools

List fields (paths, cookies, parameters, patterns) take one entry per line. Commas also separate entries, except in Selector safelist, where each line is one pattern.

Page Cache

Page Cache tab: origin cache and lifetime presets
LabelKeyDefaultValues and notes
Enable origin page cachecache.enabledtrueIn store mode, stores nothing until the drop-in is installed and WP_CACHE is on
Cache modecache.modestorestore (Store pages: GT Performance serves them) or optimize (Optimize only: my host already caches pages). See Page Cache
Separate cache for mobile HTMLcache.separate_mobilefalseAdds a mobile variant to the cache key and sends Vary: Accept-Encoding, User-Agent
Fresh cache lifetimecache.fresh_ttl3600Seconds. Sent as s-maxage
Stale cache retentioncache.stale_ttl86400Seconds past fresh. Sent as stale-while-revalidate
Stale-on-error windowcache.stale_if_error86400Seconds. Sent as stale-if-error; 0 omits it
Browser cache lifetimecache.browser_ttl300Seconds. Sent as max-age
Cache clearing after publishingcache.post_publish_purgerelatedrelated, post, all, none
Warm cache after a full purgecache.preloadtrueAlso gates stale-page rebuilds and the preloads of every warm run
URLs per warming batchcache.preload_max_urls2000 to 2000. 0 stops preloading without turning caching off
Sitemap sourcescache.preload_sitemapsemptyUp to 10 sitemap URLs on this site. Empty uses /wp-sitemap.xml plus sitemaps listed in robots.txt

The One-click presets fill the four lifetime fields; you still save. Maximum impact is 1 h fresh, 24 h stale, 24 h stale-on-error, 5 min browser. Balanced is 30 min, 12 h, 24 h, 5 min. Frequently updated is 5 min, 1 h, 6 h, 5 min.

See Page Cache, Purging and Cache Warming.

Optimization

Unused CSS

Unused CSS panel
LabelKeyDefaultValues and notes
Remove unused CSScss.enabledfalseGTPERF_UNUSED_CSS forces it on
CSS deliverycss.modefilefile (Generated file), inline (Inline all used CSS), hybrid (Critical inline + remaining file)
Hybrid inline CSS limitcss.critical_budget14336Bytes, 2048 to 51200
Preserve dynamic statescss.keep_dynamic_statestrue
Staged rolloutcss.rollout_percent1000, 10, 25, 50 or 100. 0 serves original CSS only

See CSS Optimization.

JavaScript

LabelKeyDefaultValues and notes
Minify local JavaScriptjavascript.minifyfalseNo JavaScript files are written
Defer safe JavaScriptjavascript.deferfalse
Delay selected third-party scriptsjavascript.delayfalseDelays scripts matching Scripts to delay until the first pointer, key or touch event, or five seconds

See JavaScript Optimization.

Images and embeds

LabelKeyDefaultValues and notes
Lazy-load non-critical imagesmedia.lazy_loadtrue
Add missing image dimensionsmedia.add_dimensionstrue
Images to load immediatelymedia.critical_images20 to 10, counted from the top of the page
Hero image rulesmedia.hero_rulesemptyOne scope => target [preload] rule per line. Invalid lines are dropped on save; the first 30 are used
Generate optimized variantsmedia.optimize_uploadsfalse
Serve optimized image variantsmedia.rewrite_variantsfalse
Generated formatmedia.formatwebpwebp, avif
Image qualitymedia.compression8230 to 100
Lightweight YouTube previewsmedia.youtube_previewsfalse

Hero rule scopes are *, front_page, post_type:<type> and template:<template>. Targets are attachment:<ID>, .<image class> and url:<background image URL>. See Media, Fonts and Embeds.

Speculative loading

Shown only when WordPress provides core speculative loading.

LabelKeyDefaultValues and notes
Speculative loadingspeculation.modecorecore (WordPress default, with safety exclusions), conservative (prefetch only when a link is pressed), off

When the Speculative Loading plugin is active, it controls the mode and GT Performance adds only its exclusions. See Media, Fonts and Embeds.

Fonts

LabelKeyDefaultValues and notes
Self-host Google Fontsfonts.self_host_googlefalse
Font displayfonts.font_displayswapswap, fallback, optional, block

WordPress quick toggles

All false by default.

LabelKey
Disable WordPress emoji assetsbloat.disable_emojis
Disable Dashicons for visitorsbloat.disable_dashicons
Disable WordPress embedsbloat.disable_embeds
Disable XML-RPCbloat.disable_xmlrpc
Remove RSD linkbloat.remove_rsd_link
Remove jQuery Migrate for visitorsbloat.remove_jquery_migrate
Remove WordPress versionbloat.hide_wp_version
Remove shortlinkbloat.remove_shortlink
Disable every RSS feedbloat.disable_rss_feeds
Disable secondary feeds onlybloat.disable_secondary_feeds
Remove every RSS feed linkbloat.remove_feed_links
Remove secondary RSS feed linksbloat.remove_secondary_feed_links
Disable self pingbacksbloat.disable_self_pingbacks
Remove REST API linksbloat.remove_rest_api_links
Disable Google Mapsbloat.disable_google_maps
Disable password strength meterbloat.disable_password_strength_meter
Remove comment author URLsbloat.remove_comment_urls
Add a blank fallback faviconbloat.blank_favicon
Remove global stylesbloat.remove_global_styles
Load separate core block stylesbloat.separate_block_styles

Apply site baseline checks the first eight, the two secondary-feed toggles, and self pingbacks, REST API links, Google Maps, password strength meter and comment author URLs. It unchecks the other five: every RSS feed, every feed link, blank favicon, global styles and separate block styles. Clear quick toggles unchecks all twenty. Neither saves until you do.

Editor, comments, and APIs

LabelKeyDefaultValues and notes
Heartbeat behaviorbloat.heartbeat_modereducedefault, reduce, disable_dashboard (disable outside the editor), disabled
Heartbeat intervalbloat.heartbeat_seconds6015 to 120 seconds. Applies in reduce mode
Autosave intervalbloat.autosave_interval6015 to 3600 seconds. Not applied when AUTOSAVE_INTERVAL is already defined, for example in wp-config.php
REST API accessbloat.disable_rest_apidefaultdefault (keep enabled), non_admin (administrators only), disabled
Disable commentsbloat.disable_commentsfalse

Autosave interval is applied by defining AUTOSAVE_INTERVAL during plugins_loaded, before WordPress core defines its own 60-second default, and only when the value is not 60 and nothing has defined the constant yet. A value in wp-config.php wins.

Diagnostics

LabelKeyDefaultValues and notes
Diagnostic loggingdebugfalseKeeps the last 100 redacted log entries in the gt_performance_diagnostic_log option. Also sends X-GT-Cache-Reason on bypassed and uncacheable responses, X-GT-Cache-Key on cache hits, and, when a JavaScript option is on, an HTML comment before </body> listing each script decision
Remove all data when the plugin is deletedremove_data_on_uninstallfalseOff keeps settings, including saved Redis credentials, after the plugin is deleted

See Diagnostics.

Exceptions

Exceptions tab: JavaScript, media and WordPress exceptions
LabelKeyDefault
Paths that must stay dynamiccache.bypass_paths/wp-admin/, /wp-login.php, /wp-cron.php, /wp-json/, /xmlrpc.php
Cookie prefixes that bypass cachecache.bypass_cookiescomment_author_, wordpress_logged_in_, wordpress_no_cache, wp-postpass_
Never cache query parameterscache.bypass_query_paramsadd-to-cart, customize_changeset_uuid, elementor-preview, fluent-cart, preview, s, wc-ajax, gtperf_verify, gtperf_safe_mode, gtperf_css_preview, gtperf_css_build, gtperf_js
Cache each value separatelycache.vary_query_paramsempty
Parameters that do not change contentcache.ignored_query_paramsfbclid, gclid, gbraid, msclkid, utm_campaign, utm_content, utm_medium, utm_source, utm_term
Selector safelistcss.safelistempty
Excluded stylesheetscss.excluded_stylesheetsempty
Never optimize scriptsjavascript.exclusionsempty
Scripts to delayjavascript.delay_patternsclarity.ms, connect.facebook.net, google-analytics.com, googletagmanager.com, hotjar.com
Lazy-render selectorsmedia.lazy_render_selectorsempty
Google Maps path exceptionsbloat.google_maps_exclusionsempty

Paths match whole URL segments, cookie entries match name prefixes, and parameter names match exactly. Ignored parameters are removed from the cache key, so the page is still cached. Parameters cached separately stay in the key: each value up to 100 characters gets its own copy, up to 100 per page (see Page Cache). Safelist lines are partial matches unless written as a delimited regular expression; an invalid expression is not saved and the save shows which ones were rejected. Active commerce integrations add their own bypass rules on top of these lists. See Cache Exclusions and Commerce Safety.

Cloudflare

LabelKeyDefaultValues and notes
Enable Cloudflare integrationcloudflare.enabledfalseAlso turned on by a successful sync
Authenticationcloudflare.auth_modetokentoken (scoped API token), global (Global API Key)
Scoped API tokencloudflare.api_tokenemptyEncrypted
Global API Keycloudflare.global_api_keyemptyEncrypted
Cloudflare account emailcloudflare.emailemptyNeeded only with the Global API Key
Domaincloudflare.domainemptyUsed to find the zone when Zone ID is blank. Falls back to the home URL’s host
Zone IDcloudflare.zone_idemptySaved automatically after the zone is found
Cloudflare edge cache lifetimecloudflare.edge_ttl00 to 31536000 seconds. 0 respects the origin’s Cache-Control; a positive value overrides origin freshness in the managed rule

Changing these saves local settings only. Run Connect/sync Cloudflare to update the managed rule. See Cloudflare.

CDN

LabelKeyDefaultValues and notes
Enable CDN URL rewritingcdn.enabledfalse
CDN URLcdn.urlemptyHTTPS only. A hostname, optionally with a port and a path
Files served by the CDNcdn.file_typescss, js, mjs, jpg, jpeg, png, gif, webp, avif, svg, ico, woff, woff2, ttf, otf, eotAlso selectable: mp4, webm, mp3, ogg, wav, pdf, zip

See CDN.

Object Cache

LabelKeyDefaultValues and notes
Enable Redis object cacheredis.enabledfalse
Redis host or socketredis.host127.0.0.1Hostname, IP, or Unix socket path. A redis:// or tls:// prefix is removed
Redis portredis.port63790 to 65535. 0 with a socket
Redis database numberredis.database00 to 255
Redis usernameredis.usernameemptyACL username
Redis passwordredis.passwordemptyEncrypted
Use TLSredis.tlsfalse
Reuse Redis connectionsredis.persistenttrue
Cache key prefixredis.prefixemptyLetters, digits, :, _, -. Empty uses an automatic per-site prefix
Connection timeoutredis.connection_timeout0.50.1 to 10 seconds
Read timeoutredis.read_timeout0.50.1 to 10 seconds

GTPERF_REDIS_* and WP_REDIS_* constants override these at runtime. See Redis Object Cache.

Database

LabelKeyDefaultValues and notes
Schedule database cleanupdatabase.enabledfalse
Cleanup scheduledatabase.scheduleweeklydaily, weekly, monthly. The first run is one hour after the schedule is set
Scheduled revisions to retaindatabase.retain_revisions50 to 100 per post. Applies to scheduled runs and wp gt-performance database run; the admin’s manual run and --all-revisions delete every revision
Scheduled tasksdatabase.tasksrevisions, auto_drafts, spam_comments, trashed_posts, trashed_comments, expired_transients, optimize_tablesall_transients is also a valid task, but the form offers it only for manual cleanup

The manual cleanup panel on the same tab runs the tasks you tick in the background and saves nothing. See Database Cleanup.

Integrations

LabelKeyDefaultValues and notes
Automatic conflict protectionintegrations.auto_protectiontrue
Perfmatters ownershipintegrations.perfmatters_ownerautomaticautomatic (per feature), gt_performance, perfmatters
Enable xCloud cache integrationxcloud.enabledfalse
xCloud site domainxcloud.domainemptyEmpty uses the home URL’s host
xCloud site UUIDxcloud.site_uuidemptyFound and saved by Connect/refresh xCloud
xCloud API tokenxcloud.api_tokenemptyEncrypted. Needs the read:sites and write:sites scopes
Protect Akismet assetsintegrations.akismettrue
Jetpack compatibilityintegrations.jetpacktrue
FluentCartcommerce.fluentcarttrueApplies only while FluentCart is active
Easy Digital Downloadscommerce.eddtrueApplies only while EDD is active
WooCommercecommerce.woocommercetrueApplies only while WooCommerce is active

Connect/refresh xCloud appears once the integration is enabled and saved. It also writes read-only status keys: xcloud.server_id, site_id, dashboard_url, stack, page_cache_enabled, page_cache_source, redis_enabled, object_cache_pro, free_edge_cache_enabled, enterprise_available, enterprise_requests, enterprise_edge_requests, enterprise_hit_percent and checked_at.

Switching on Cloudflare, xCloud, the CDN, automatic conflict protection or Redis fills related fields in the form with recommended values (text and number fields only when empty). Nothing is stored until you save.

See Integrations, xCloud and Commerce Safety.

AI & MCP

LabelKeyDefaultValues and notes
Agent accessagents.modeoffoff, read (read-only), operate (read and operate). Shown when the Abilities API is available (WordPress 6.9+)
Enable the AI adviseradvisor.enabledfalseShown when the WordPress AI Client is available (WordPress 7.0+)
Provideradvisor.provideremptyEmpty uses the first AI provider configured in WordPress

See AI and MCP.

Keys without a form field

KeyDefaultNotes
generation1Incremented by a save that changes a setting reaching cached pages. Part of every cache key
cache.entry_budget50000 to 200000; 0 means no limit. Hourly garbage collection evicts the oldest entries above it, and warm runs stop when they reach it. Change it with a settings export, edit and import
cloudflare.drift_hashemptyWritten by Cloudflare sync to record which cache policy the managed rule was built from

Per-page options

The editor sidebar of every public post type has a GT Performance box. Its values are post meta, not part of gt_performance_settings, and apply to newly cached copies of that page.

LabelMeta keyValues
Don’t cache this page_gtperf_no_cache1 when ticked. The page is never stored or optimized; in store mode it is sent no-store and Explain reports page-option. See Page Cache
Use original CSS_gtperf_original_css1 when ticked. The page keeps its full stylesheets and no unused-CSS build is queued for it
JavaScript on this page_gtperf_javascriptEmpty (site settings), no_delay (do not delay scripts), off (do not defer or delay scripts)
Hero image_gtperf_heroA hero target (attachment:<ID>, .<class> or url:<URL>), optionally followed by preload. Overrides the site’s hero rules

Export, import and restore

Settings export, import and restore carry the non-secret values on this page, with these exceptions, which are never exported, imported or restored:

  • generation
  • agents and advisor
  • redis and xcloud
  • cloudflare.enabled, cloudflare.auth_mode, cloudflare.domain, cloudflare.zone_id
  • credentials and remove_data_on_uninstall, which never leave the site

Keys whose names look like credentials are left out too, with one reviewed exception: bloat.disable_password_strength_meter is a quick toggle, not a secret, and is exported, imported and restored like any other setting.

See Tools and WP-CLI.

Share

Was this helpful?

Still stuck? Open a support ticket