{"id":359930,"date":"2026-08-30T18:30:48","date_gmt":"2026-08-30T18:30:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/flex-cache\/"},"modified":"2026-08-30T18:30:39","modified_gmt":"2026-08-30T18:30:39","slug":"flex-cache","status":"publish","type":"plugin","link":"https:\/\/cs.wordpress.org\/plugins\/flex-cache\/","author":23082855,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.5","stable_tag":"1.0.5","tested":"7.1","requires":"6.2","requires_php":"7.4","requires_plugins":null,"header_name":"Flex Cache","header_author":"FLEX","header_description":"File-based full-page cache with optional Redis store, purge controls, and safe bypasses.","assets_banners_color":"fdfdfe","last_updated":"2026-08-30 18:30:39","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/flexible.am\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":35,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.5":{"tag":"1.0.5","author":"flexfields","date":"2026-08-30 18:30:39","revision":3672997}},"upgrade_notice":{"1.0.5":"<p>Redis password is no longer written to a PHP file. If Redis uses AUTH and you want early Redis hits, add FLEX_CACHE_REDIS_AUTH to wp-config.php.<\/p>","1.0.4":"<p>Ready for WordPress.org: safer settings snapshot and a complete readme. Existing cache files are unchanged.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3673040,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3673040,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.jpg":{"filename":"banner-1544x500.jpg","revision":3673040,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3673040,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.jpg":{"filename":"banner-772x250.jpg","revision":3673040,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3673040,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.5"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Settings \u2014 setup status, cache options, and purge","2":"Redis \u2014 connection, On\/Off control, and status badges","3":"Usage \u2014 in-plugin guide"}},"plugin_section":[],"plugin_tags":[146,1452,3853,247,794],"plugin_category":[52,54],"plugin_contributors":[240619,232306],"plugin_business_model":[],"class_list":["post-359930","plugin","type-plugin","status-publish","hentry","plugin_tags-cache","plugin_tags-optimize","plugin_tags-page-cache","plugin_tags-performance","plugin_tags-speed","plugin_category-performance","plugin_category-security-and-spam-protection","plugin_contributors-flexfields","plugin_contributors-hovoqoch","plugin_committers-flexfields"],"banners":{"banner":"https:\/\/ps.w.org\/flex-cache\/assets\/banner-772x250.png?rev=3673040","banner_2x":"https:\/\/ps.w.org\/flex-cache\/assets\/banner-1544x500.png?rev=3673040","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/flex-cache\/assets\/icon-128x128.png?rev=3673040","icon_2x":"https:\/\/ps.w.org\/flex-cache\/assets\/icon-256x256.png?rev=3673040","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>Flex Cache<\/strong> stores full HTML pages for anonymous visitors. On later visits, fast page serving can return that HTML before WordPress fully loads.<\/p>\n\n<ul>\n<li>File-based page cache under wp-content\/cache\/flex-cache<\/li>\n<li>Optional Redis page store when the PHP Redis extension and a Redis server are available (files stay as backup)<\/li>\n<li>Fast page serving via WordPress <code>advanced-cache.php<\/code> (only if no other cache plugin already provides it)<\/li>\n<li>Optional button to add <code>define( 'WP_CACHE', true );<\/code> to wp-config.php (backup is created first)<\/li>\n<li>Purge all \/ purge URL from the admin bar<\/li>\n<li>Auto-purge on content updates<\/li>\n<li>Bypasses logged-in users, carts, POST, previews, feeds, search, and sitemaps<\/li>\n<li>Optional conservative HTML minify<\/li>\n<\/ul>\n\n<p>Redis is never turned on by itself. This plugin does not install <code>object-cache.php<\/code> and does not replace a WordPress object-cache plugin.<\/p>\n\n<p>No remote calls. CSS and JavaScript load from this plugin only.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>Flex Cache stores cached HTML for anonymous pages as files under <code>wp-content\/cache\/flex-cache\/<\/code>. It does not log visitors, IP addresses, or user agents.<\/p>\n\n<p>If you turn Redis on, the same HTML is also stored in Redis on a host you configure. Your Redis password (if you set one) is stored only in the WordPress options table via the Settings API. Fast page serving uses a non-executable <code>settings.json<\/code> in the cache folder (enabled, TTL, host, port \u2014 no password). If Redis requires a password before WordPress loads, add <code>define( 'FLEX_CACHE_REDIS_AUTH', 'your-password' );<\/code> to wp-config.php yourself. Flex Cache does not send data to FLEX or any third-party service.<\/p>\n\n<p>Redis is software you or your host run. This plugin does not create a Redis account and does not load redis.io.<\/p>\n\n<h4>Limitations<\/h4>\n\n<ul>\n<li>Logged-in visits are never cached, including the WordPress admin.<\/li>\n<li>Only one plugin can provide fast page serving. Flex Cache will not overwrite another plugin\u2019s <code>advanced-cache.php<\/code>.<\/li>\n<li>Enabling WordPress cache mode writes one line to wp-config.php only when you click the button (or you can add the line yourself).<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>flex-cache<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the zip via <strong>Plugins \u2192 Add New \u2192 Upload Plugin<\/strong>.<\/li>\n<li>Activate <strong>Flex Cache<\/strong>.<\/li>\n<li>Go to <strong>Flex Cache \u2192 Settings<\/strong>.<\/li>\n<li>Click <strong>Enable WordPress cache mode<\/strong> if that row says Needs setup (or add <code>define( 'WP_CACHE', true );<\/code> to wp-config.php above \u201cThat\u2019s all, stop editing!\u201d).<\/li>\n<li>Click <strong>Turn on fast page serving<\/strong>, enable cache, and save.<\/li>\n<li>Open the site in a private window (logged out). A hit should send the header <code>X-Flex-Cache: HIT<\/code>.<\/li>\n<li>Optional: open the <strong>Redis<\/strong> tab if you want Redis as a faster store.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20replace%20redis%20object%20cache%3F\"><h3>Does this replace Redis Object Cache?<\/h3><\/dt>\n<dd><p>No. Flex Cache stores full HTML pages. An object-cache plugin stores WordPress objects (options, queries). They can run together. Flex Cache will not install <code>object-cache.php<\/code>.<\/p><\/dd>\n<dt id=\"does%20redis%20need%20a%20password%20in%20wp-config.php%3F\"><h3>Does Redis need a password in wp-config.php?<\/h3><\/dt>\n<dd><p>Only if Redis requires AUTH and you want early hits from Redis. The password in Flex Cache \u2192 Redis is stored in the database and is used after WordPress loads (writes and admin checks). Fast page serving cannot read that option yet. Add <code>define( 'FLEX_CACHE_REDIS_AUTH', 'your-password' );<\/code> above \u201cThat\u2019s all, stop editing!\u201d if you need Redis on those early hits. Otherwise files are used.<\/p><\/dd>\n<dt id=\"why%20is%20redis%20on%20disabled%3F\"><h3>Why is Redis On disabled?<\/h3><\/dt>\n<dd><p>The PHP Redis extension is missing, or no Redis server answered at the saved host and port. File cache still works. Save the connection after Redis is running; On stays disabled until the Server badge says Connected.<\/p><\/dd>\n<dt id=\"will%20this%20conflict%20with%20another%20cache%20plugin%3F\"><h3>Will this conflict with another cache plugin?<\/h3><\/dt>\n<dd><p>Possibly. Only one plugin can provide fast page serving. If another cache plugin already wrote <code>advanced-cache.php<\/code>, Flex Cache will not overwrite it. Disable that plugin first, then click <strong>Turn on fast page serving<\/strong>.<\/p><\/dd>\n<dt id=\"why%20are%20there%200%20cached%20files%3F\"><h3>Why are there 0 cached files?<\/h3><\/dt>\n<dd><p>You are logged in as an administrator. Logged-in visits are skipped on purpose. Load a page in a private\/incognito window, then refresh Settings.<\/p><\/dd>\n<dt id=\"does%20flex%20cache%20write%20to%20wp-config.php%3F\"><h3>Does Flex Cache write to wp-config.php?<\/h3><\/dt>\n<dd><p>Only if you click <strong>Enable WordPress cache mode<\/strong>. It inserts <code>define( 'WP_CACHE', true );<\/code> and keeps a <code>.flex-cache-bak<\/code> backup. You can add the line yourself instead. Uninstall does not remove that line.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20i%20uninstall%3F\"><h3>What happens when I uninstall?<\/h3><\/dt>\n<dd><p>Fast page serving is turned off (only if Flex Cache turned it on), cached files are deleted, Flex Cache Redis keys are cleared if Redis was On, and settings are removed. <code>WP_CACHE<\/code> in wp-config.php is left in place.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.5<\/h4>\n\n<ul>\n<li>Early-serve snapshot is non-executable JSON with no Redis password. Password stays in the Settings API.<\/li>\n<li>Optional <code>FLEX_CACHE_REDIS_AUTH<\/code> in wp-config.php for password-protected Redis before WordPress loads.<\/li>\n<\/ul>\n\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>WordPress.org submission hygiene: complete readme (privacy, install, FAQ).<\/li>\n<li>About FLEX links only to Flex plugins listed on WordPress.org.<\/li>\n<li>Store the early-serve snapshot as PHP (not JSON) and deny HTTP access to the cache folder.<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Probe Redis and show Available \/ Not available \/ In use.<\/li>\n<li>Optional Redis page store (files remain as backup). Not a WordPress object cache.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Fix cache keys so HTTPS proxies hit the same files that were written.<\/li>\n<li>Do not cache HEAD, password-protected, HTTP-auth, or Set-Cookie responses.<\/li>\n<li>Narrow WooCommerce bypass to cart\/session cookies; skip 404s, feeds, search, and robots.<\/li>\n<li>Purge on delete\/trash\/term\/widget changes; ignore autosaves, revisions, and unapproved comments.<\/li>\n<li>Atomic cache writes, expired-file cleanup, and ignore tracking query parameters.<\/li>\n<li>Optional button to add WP_CACHE to wp-config.php.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Match the Flex Redirects admin UI: shared header, stats, cards, and badges.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"File-based full-page cache with optional Redis store, purge controls, and safe bypasses.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/359930","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=359930"}],"author":[{"embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/flexfields"}],"wp:attachment":[{"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=359930"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=359930"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=359930"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=359930"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=359930"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/cs.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=359930"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}