| @@ -1,84 +1,113 @@ | ||
| 1 | -=== xSpeed – AI Cache & Performance Optimizer === | |
| 2 | -Contributors: asif2bd, wpdevteam, seakashdiu | |
| 3 | -Tags: caching, performance, speed, optimization, minify | |
| 1 | +=== xSpeed Cache: AI-Powered Performance Hub with MCP, Caching & CDN === | |
| 2 | +Contributors: asif2bd, wpdevteam, seakashdiu, tushar284, hurayraiit, alimuzzamanalim | |
| 3 | +Tags: cache, performance, page speed, optimization, mcp | |
| 4 | 4 | Requires at least: 6.0 |
| 5 | -Tested up to: 7.0 | |
| 5 | +Tested up to: 7.1 | |
| 6 | 6 | Requires PHP: 7.4 |
| 7 | -Stable tag: 1.0.8 | |
| 7 | +Stable tag: 1.3.2 | |
| 8 | 8 | License: GPLv2 or later |
| 9 | 9 | License URI: https://www.gnu.org/licenses/gpl-2.0.html |
| 10 | 10 | |
| 11 | -Ultra-fast WordPress caching & performance plugin. Page cache, minify, GZIP, lazy load, fonts, object cache, CDN — one switch, no bloat, no upsells. | |
| 11 | +A complete WordPress caching plugin: page cache, object cache, CDN, database cleanup and Core Web Vitals optimization, plus a built-in MCP server. | |
| 12 | 12 | |
| 13 | 13 | == Description == |
| 14 | 14 | |
| 15 | -Your visitors decide to stay or leave in under 3 seconds. **xSpeed** makes sure they stay. | |
| 15 | +Your visitors decide to stay or leave in under 3 seconds. **xSpeed Cache** makes sure they stay. | |
| 16 | 16 | |
| 17 | -Most caching plugins bury you in settings, charts, and upgrade popups. xSpeed does the opposite — install it, flip one switch, and your site loads faster. No bloat, no upsells nagging you, no PhD required. | |
| 17 | +Most caching plugins bury you in settings, charts and upgrade popups. xSpeed Cache does the opposite. Install it, flip one switch, and your site loads faster. No bloat, no upsells nagging you, no PhD required. | |
| 18 | 18 | |
| 19 | -Built by the team at **WPDeveloper** — trusted by over 7 million WordPress users worldwide. | |
| 19 | +Built by the team at **WPDeveloper**, trusted by over 6 million WordPress users worldwide. | |
| 20 | 20 | |
| 21 | -= What Does xSpeed Do? = | |
| 21 | +https://youtu.be/fYVy77GJDE4 | |
| 22 | 22 | |
| 23 | -xSpeed is a full-site performance plugin. It caches your pages, shrinks your code, compresses your files, and serves everything as fast as your server physically can — including an AI-powered audit that tells you exactly what's slowing your site down. | |
| 23 | += What This WordPress Caching Plugin Does = | |
| 24 | 24 | |
| 25 | +xSpeed Cache is a full-site performance plugin. It caches your pages, shrinks your code, compresses your files and serves everything as fast as your server physically can, including an AI-powered audit that tells you exactly what is slowing your site down. | |
| 26 | + | |
| 25 | 27 | The result: pages that load in milliseconds, not seconds. Better Google PageSpeed scores. Happier visitors. Better SEO rankings. |
| 26 | 28 | |
| 27 | -= The Speed Advantage No Other Free Plugin Offers = | |
| 29 | +If you have been searching for how to speed up WordPress site performance without hiring a developer, this is the shortest path there. It is built to speed up WordPress from the first page load, not after a week of tuning. | |
| 28 | 30 | |
| 29 | -When xSpeed caches a page, it doesn't just save it — it serves it directly from the server, bypassing PHP entirely. | |
| 31 | += The Speed Advantage No Other Free WordPress Cache Plugin Offers = | |
| 30 | 32 | |
| 33 | +When xSpeed Cache caches a page, it does not just save it. It serves it directly from the server, bypassing PHP entirely. | |
| 34 | + | |
| 31 | 35 | That means: |
| 32 | 36 | |
| 33 | -* **With xSpeed static cache:** 5–15ms response time | |
| 34 | -* **Without it (PHP-served cache):** ~85ms response time | |
| 37 | +* **With xSpeed static cache:** 5 to 15ms response time | |
| 38 | +* **Without it (PHP-served cache):** around 85ms response time | |
| 35 | 39 | |
| 36 | -That's up to **17× faster** page delivery on cache hits. No other free caching plugin does this across Apache, nginx, and LiteSpeed automatically. | |
| 40 | +That is up to **17x faster** page delivery on cache hits. No other free WordPress cache plugin does this across Apache, nginx and LiteSpeed automatically, which is what makes it worth comparing against any other best WordPress cache plugin shortlist you are working from. | |
| 37 | 41 | |
| 38 | 42 | = Features at a Glance = |
| 39 | 43 | |
| 40 | -**Page Caching** | |
| 44 | +https://youtu.be/LlIb3XuQ-mo | |
| 41 | 45 | |
| 42 | -Your pages are saved as static HTML files and served instantly to visitors — before WordPress even loads. The cache rebuilds itself automatically whenever you publish a post, switch themes, or update a plugin. You never have to think about it. | |
| 46 | +**AI Assistants and the WordPress MCP Server** | |
| 43 | 47 | |
| 44 | -* Static-file rewrite path (bypasses PHP entirely — 5–15ms TTFB) | |
| 45 | -* Auto-purge on publish, update, comment, theme change | |
| 48 | +xSpeed Cache ships a WordPress MCP server, so a Claude WordPress MCP connection, or any other MCP client, can inspect and tune your site through the same tools the dashboard uses. Every action is bounded by what you allow when you connect, which is what separates a real WordPress MCP plugin from a chatbot bolted onto a settings page. | |
| 49 | + | |
| 50 | +* MCP server appears on the Overview as a capability card, so an AI connection can be set up without hunting for a panel | |
| 51 | +* OAuth discovery, with dynamic client registration bounded by stored-client limits, redirect URI limits, name and URI length limits and per-IP rate limiting | |
| 52 | +* Read-only MCP connections can read status through every per-command tool, while write actions stay refused | |
| 53 | +* Credentials cannot be written by an AI assistant unless you explicitly grant that permission when connecting | |
| 54 | +* WP-CLI parity: `wp xspeed purge`, `wp xspeed preloader status`, `wp xspeed score run`, `wp xspeed optimize` and `wp xspeed settings list|get|update` | |
| 55 | +* The `optimize_site` tool measures the site, applies recommended settings one at a time, re-checks the page after each change and reverts anything that breaks it | |
| 56 | + | |
| 57 | +**Disable Bloat** | |
| 58 | + | |
| 59 | +Turn off WordPress features you do not use. Each one is a request your server does not have to make. | |
| 60 | + | |
| 61 | +* Disable dashicons on the frontend | |
| 62 | +* Remove oEmbed, RSS feeds, XML-RPC, jQuery Migrate and REST API authentication headers | |
| 63 | + | |
| 64 | +**AI-Powered Site Audit (Pro)** | |
| 65 | + | |
| 66 | +xSpeed Pro scans your specific site and tells you exactly which performance features will help the most, with severity ratings and concrete reasons rather than generic advice. | |
| 67 | + | |
| 68 | + | |
| 69 | +**Page Caching That Speeds Up Your WordPress Site** | |
| 70 | + | |
| 71 | +Your pages are saved as static HTML files and served instantly to visitors, before WordPress even loads. This is the fastest way to speed up WordPress page delivery, and the cache rebuilds itself automatically whenever you publish a post, switch themes or update a plugin. You never have to think about it. | |
| 72 | + | |
| 73 | +* Static-file rewrite path that bypasses PHP entirely for a 5 to 15ms TTFB | |
| 74 | +* Auto-purge on publish, update, comment and theme change | |
| 46 | 75 | * One-click cache purge from the admin bar |
| 47 | -* Exclude specific URLs (e.g. `/cart`, `/checkout`, `/my-account`) | |
| 48 | -* Set your own cache expiry (1–720 hours) | |
| 76 | +* Exclude specific URLs such as `/cart`, `/checkout` and `/my-account` | |
| 77 | +* Set your own cache expiry, from 1 to 720 hours | |
| 49 | 78 | * Separate mobile cache for phone and tablet visitors |
| 50 | -* Per-post cache rules — custom expiry or disable caching for individual posts | |
| 79 | +* Per-post cache rules with custom expiry, or disable caching for individual posts | |
| 51 | 80 | |
| 52 | -**Code Minification** | |
| 81 | +**Code Minification for WordPress Page Speed Optimization** | |
| 53 | 82 | |
| 54 | -Strips all the unnecessary whitespace, comments, and characters from your HTML, CSS, and JavaScript without breaking anything. | |
| 83 | +Strips all the unnecessary whitespace, comments and characters from your HTML, CSS and JavaScript without breaking anything. Smaller files are one of the most reliable WordPress page speed optimization wins available. | |
| 55 | 84 | |
| 56 | -* Minify HTML, CSS, and JavaScript | |
| 85 | +* Minify HTML, CSS and JavaScript | |
| 57 | 86 | * Combine CSS and JS files to reduce HTTP requests |
| 58 | -* Defer or delay JavaScript so it doesn't block page rendering | |
| 87 | +* Defer or delay JavaScript so it does not block page rendering | |
| 59 | 88 | * Async CSS loading |
| 60 | -* Removes `?ver=` query strings from asset URLs | |
| 61 | -* Safe-minify: automatically skips already-minified files and falls back if anything looks off | |
| 89 | +* Removes `?ver=` query strings from asset URLs (generated files under `wp-content/uploads` keep theirs, so a page-builder or consent-banner edit still reaches returning visitors) | |
| 90 | +* Safe-minify automatically skips already-minified files and falls back if anything looks off | |
| 62 | 91 | |
| 63 | 92 | **GZIP Compression** |
| 64 | 93 | |
| 65 | -Makes every file your server sends smaller — so browsers download them faster. | |
| 94 | +Makes every file your server sends smaller, so browsers download them faster. | |
| 66 | 95 | |
| 67 | 96 | * Auto-configures GZIP on Apache and LiteSpeed |
| 68 | 97 | * Shows a ready-to-paste config snippet for nginx and IIS |
| 69 | -* Detects if your server already has GZIP active — no double-configuration | |
| 98 | +* Detects if your server already has GZIP active, so there is no double-configuration | |
| 70 | 99 | |
| 71 | -**Lazy Load** | |
| 100 | +**Lazy Load WordPress Images, Videos and Iframes** | |
| 72 | 101 | |
| 73 | -Images, videos, and iframes load only when a visitor scrolls to them — not all at once on page load. | |
| 102 | +Lazy load WordPress media so images, videos and iframes load only when a visitor scrolls to them, rather than all at once on page load. | |
| 74 | 103 | |
| 75 | -* Lazy load images, iframes, and videos | |
| 76 | -* Automatic CLS (Cumulative Layout Shift) fix so your layout doesn't jump | |
| 104 | +* Lazy load images, iframes and videos | |
| 105 | +* Automatic Cumulative Layout Shift fix so your layout does not jump | |
| 77 | 106 | |
| 78 | -**Fonts Optimization** | |
| 107 | +**Font Optimization for WordPress Core Web Vitals** | |
| 79 | 108 | |
| 80 | -Web fonts are one of the most common causes of slow-loading pages. | |
| 109 | +Web fonts are one of the most common causes of slow-loading pages, and fixing them is one of the easiest ways to increase WordPress page speed. Together with lazy loading and the LCP preload, this is practical core web vitals optimization rather than a score-chasing trick. | |
| 81 | 110 | |
| 82 | 111 | * Adds `font-display: swap` so text is visible immediately while fonts load |
| 83 | 112 | * Preloads above-the-fold font files for instant rendering |
| 84 | 113 | * Removes the blank-text flash caused by slow Google Fonts responses |
| @@ -84,12 +113,12 @@ | ||
| 84 | 113 | * Removes the blank-text flash caused by slow Google Fonts responses |
| 85 | 114 | |
| 86 | 115 | **Browser Cache** |
| 87 | 116 | |
| 88 | -Tells browsers to remember your static files (images, CSS, JS) so returning visitors load your site even faster. | |
| 117 | +Tells browsers to remember your static files such as images, CSS and JS, so returning visitors load your site even faster. | |
| 89 | 118 | |
| 90 | 119 | * Sets proper `Cache-Control` and `Expires` headers |
| 91 | -* Works automatically — no manual configuration needed | |
| 120 | +* Works automatically with no manual configuration needed | |
| 92 | 121 | |
| 93 | 122 | **Cache Preloader** |
| 94 | 123 | |
| 95 | 124 | Warms up your cache automatically so the very first visitor after a purge still gets a fast page. |
| @@ -96,137 +125,147 @@ | ||
| 96 | 125 | |
| 97 | 126 | * Sitemap-driven cache warmer |
| 98 | 127 | * Auto-warms cache when you publish or update content |
| 99 | 128 | |
| 100 | -**Object Cache (Redis / Memcached)** | |
| 129 | +**Redis Object Cache for WordPress (Redis and Memcached)** | |
| 101 | 130 | |
| 102 | -Speed up database-heavy WordPress installs with server-side object caching. | |
| 131 | +Speed up database-heavy installs with a persistent object cache WordPress can rely on between requests. Set up Redis object cache WordPress support, or Memcached, in seconds and keep every repeated query in memory. | |
| 103 | 132 | |
| 104 | 133 | * Connect Redis or Memcached in seconds |
| 105 | -* View status and flush cache from the dashboard | |
| 134 | +* View status and flush the object cache from the dashboard | |
| 135 | +* Works as a drop-in persistent object cache, so object cache WordPress lookups are not repeated on every page load | |
| 106 | 136 | |
| 107 | -**CDN Support** | |
| 137 | +**WordPress CDN Plugin Support with Cloudflare Integration** | |
| 108 | 138 | |
| 109 | -Serve your static files from a CDN for faster global delivery. | |
| 139 | +Serve your static files from a WordPress CDN for faster global delivery. Point it at whichever provider you already use, including a WordPress CDN free tier, so you are not locked into one network while you decide which is the best WordPress CDN for your traffic. | |
| 110 | 140 | |
| 111 | 141 | * Pull-zone URL rewriting for any CDN provider |
| 112 | -* Built-in Cloudflare integration: connect your zone, auto-purge on publish, toggle dev mode | |
| 142 | +* Built-in Cloudflare WordPress CDN integration: connect your zone, auto-purge on publish and toggle development mode | |
| 143 | +* Works as a WordPress CDN plugin for any pull zone, with no separate connector to install | |
| 113 | 144 | |
| 114 | -**Database Optimization** | |
| 145 | +**WordPress Database Cleanup and Optimization** | |
| 115 | 146 | |
| 116 | -A bloated database slows down every page load. xSpeed keeps yours clean. | |
| 147 | +A bloated database slows down every page load. This WordPress database cleanup plugin keeps yours clean and helps speed up WordPress database queries without a separate tool. | |
| 117 | 148 | |
| 118 | 149 | * Optimize database tables |
| 119 | -* Remove post revisions, spam, trash, transients, and orphaned meta | |
| 150 | +* Remove post revisions, spam, trash, transients and orphaned meta | |
| 120 | 151 | * Schedule automatic cleanup so it runs on autopilot |
| 121 | 152 | |
| 122 | -**Disable Bloat** | |
| 153 | += Built to Handle WordPress Edge Cases = | |
| 123 | 154 | |
| 124 | -Turn off WordPress features you don't use — each one is a request your server doesn't have to make. | |
| 155 | +xSpeed Cache handles the edge cases other plugins miss: | |
| 125 | 156 | |
| 126 | -* Disable dashicons on the frontend | |
| 127 | -* Remove oEmbed, RSS feeds, XML-RPC, jQuery Migrate, REST API authentication headers | |
| 157 | +* **Multisite ready.** Each site in the network gets its own cache and settings. | |
| 158 | +* **LiteSpeed server?** xSpeed Cache detects the LiteSpeed Cache server module and steps back to avoid conflicts. | |
| 159 | +* **WooCommerce?** Logged-in customers and checkout pages are never cached. | |
| 160 | +* **WordPress Site Health.** xSpeed Cache adds its own health check under Tools then Site Health, so you always know your cache config is working correctly. | |
| 161 | +* **Works on any server.** Apache, nginx, LiteSpeed, IIS and any standard PHP host. | |
| 128 | 162 | |
| 129 | -**AI-Powered Site Audit (Pro)** | |
| 163 | += Designed for Everyone = | |
| 130 | 164 | |
| 131 | -xSpeed Pro scans your specific site and tells you exactly which performance features will help the most — with severity ratings and concrete reasons, not generic advice. | |
| 165 | +**Non-technical users:** A 3-step setup wizard walks you through first-time configuration in under 2 minutes. Settings auto-save, so there is no Save button to forget. | |
| 132 | 166 | |
| 133 | -= Smart Enough to Stay Out of Trouble = | |
| 167 | +**Developers:** REST API at `/wp-json/xspeed/v1/`, developer filters (`xspeed_skip_minify`, `xspeed_strip_asset_version`, `xspeed_cache_skip_for_post`, `xspeed_cache_expiry_for_post`), `WP_DEBUG` awareness, and a React 18 and TypeScript admin UI. | |
| 134 | 168 | |
| 135 | -xSpeed handles the edge cases other plugins miss: | |
| 169 | +**Agencies:** Use the `xspeed_branding` filter to white-label the dashboard for clients. | |
| 136 | 170 | |
| 137 | -* **Multisite ready** — each site in the network gets its own cache and settings. | |
| 138 | -* **LiteSpeed server?** — xSpeed detects LiteSpeed Cache's server module and steps back to avoid conflicts. | |
| 139 | -* **WooCommerce?** — logged-in customers and checkout pages are never cached. | |
| 140 | -* **WordPress Site Health** — xSpeed adds its own health check under Tools → Site Health so you always know your cache config is working correctly. | |
| 141 | -* **Works on any server** — Apache, nginx, LiteSpeed, IIS, and any standard PHP host. | |
| 171 | += Private By Default = | |
| 142 | 172 | |
| 143 | -= Designed for Everyone = | |
| 173 | +xSpeed Cache never collects personal data, stores IP addresses or uses tracking cookies. Every optimization runs locally on your server. By default it makes no calls to any third-party server. The only request is a quick check to your own site's home URL to confirm GZIP is active, rate-limited to once per hour. | |
| 144 | 174 | |
| 145 | -**Non-technical users:** A 3-step setup wizard walks you through first-time configuration in under 2 minutes. Settings auto-save — there's no Save button to forget. | |
| 175 | +xSpeed Cache also includes **optional usage analytics**. The setup wizard shows a clearly labeled consent control for it (enabled by default, untick to opt out), and nothing is sent until you confirm your choices in the wizard. When enabled, xSpeed Cache shares anonymous, non-sensitive diagnostics: your WordPress and PHP version, active theme and plugins, server type, site language, and which xSpeed Cache features you have switched on, so we know what to keep fast and compatible. No personal data and no page content are ever sent, and you can turn it off again at any time from your dashboard. See the External services section below. | |
| 146 | 176 | |
| 147 | -**Developers:** REST API at `/wp-json/xspeed/v1/`, developer filters (`xspeed_skip_minify`, `xspeed_cache_skip_for_post`, `xspeed_cache_expiry_for_post`), `WP_DEBUG` awareness, and a React 18 + TypeScript admin UI under 80 KB gzipped. | |
| 177 | += Backed By a Team You Trust = | |
| 148 | 178 | |
| 149 | -**Agencies:** Use the `xspeed_branding` filter to white-label the dashboard for clients. | |
| 179 | +xSpeed Cache is developed by the trusted team at WPDeveloper, a leading WordPress marketplace used and loved by millions of users. | |
| 150 | 180 | |
| 151 | -= Private By Default = | |
| 181 | += Loved xSpeed Cache? = | |
| 152 | 182 | |
| 153 | -xSpeed never collects personal data, stores IP addresses, or uses tracking cookies. Every optimization runs locally on your server. By default it makes no calls to any third-party server — the only request is a quick check to your own site's home URL to confirm GZIP is active, rate-limited to once per hour. | |
| 183 | +If xSpeed Cache makes your site faster, please leave a review on WordPress.org. It really helps. | |
| 154 | 184 | |
| 155 | -xSpeed also includes **optional usage analytics**. The setup wizard shows a clearly-labeled consent control for it (enabled by default, untick to opt out), and nothing is sent until you confirm your choices in the wizard. When enabled, xSpeed shares anonymous, non-sensitive diagnostics — your WordPress & PHP version, active theme & plugins, server type, site language, and which xSpeed features you have switched on — so we know what to keep fast and compatible. No personal data and no page content are ever sent, and you can turn it off again at any time from your dashboard. (See "External services" below.) | |
| 185 | +== Installation == | |
| 156 | 186 | |
| 157 | -= Backed By a Team You Trust = | |
| 187 | +1. Upload the `xspeed` folder to the `/wp-content/plugins/` directory, or install the plugin through the WordPress Plugins screen directly. | |
| 188 | +2. Activate the plugin through the Plugins screen in WordPress. | |
| 189 | +3. Open xSpeed Cache from the admin menu. The 3-step setup wizard walks you through first-time configuration in under 2 minutes. | |
| 190 | +4. Settings auto-save, so there is no Save button to forget. | |
| 158 | 191 | |
| 159 | -xSpeed is developed by the trusted team at WPDeveloper, a leading WordPress marketplace used and loved by millions of users. | |
| 192 | +== Frequently Asked Questions == | |
| 160 | 193 | |
| 161 | -= Loved xSpeed? = | |
| 194 | += Does this WordPress cache plugin work on my server? = | |
| 162 | 195 | |
| 163 | -If xSpeed makes your site faster, please leave a review on WordPress.org — it really helps! | |
| 196 | +Yes. xSpeed Cache works on Apache, nginx, LiteSpeed, IIS and any standard PHP host. GZIP auto-configures on Apache and LiteSpeed, and a ready-to-paste config snippet is provided for nginx and IIS. | |
| 164 | 197 | |
| 165 | -== Installation == | |
| 198 | += Will it conflict with LiteSpeed Cache? = | |
| 166 | 199 | |
| 167 | -1. Go to **Plugins → Add New** in your WordPress admin and search for **xSpeed**. | |
| 168 | -2. Click **Install Now**, then **Activate**. | |
| 169 | -3. Navigate to **xSpeed** in your sidebar. | |
| 170 | -4. The setup wizard will guide you through the rest — it takes about 2 minutes. | |
| 200 | +No. xSpeed Cache detects the LiteSpeed Cache server module and steps back to avoid conflicts. | |
| 171 | 201 | |
| 172 | -That's it. Your site is now faster. | |
| 202 | += Is it safe for WooCommerce? = | |
| 173 | 203 | |
| 174 | -== Frequently Asked Questions == | |
| 204 | +Yes. Logged-in customers and checkout pages are never cached, and you can exclude specific URLs such as `/cart`, `/checkout` and `/my-account`. | |
| 175 | 205 | |
| 176 | -= Will this break my site? = | |
| 206 | += Does it support multisite? = | |
| 177 | 207 | |
| 178 | -Very unlikely. xSpeed includes safety checks for every optimization: minification falls back to the original if anything looks off, and the cache bypasses logged-in users, admin pages, AJAX, and REST requests automatically. If something ever looks wrong, you can toggle any feature off individually. | |
| 208 | +Yes. Each site in the network gets its own cache and settings. | |
| 179 | 209 | |
| 180 | -= Does it work with WooCommerce? = | |
| 210 | += Is this a WordPress MCP adapter? = | |
| 181 | 211 | |
| 182 | -Yes. Add `/cart`, `/checkout`, and `/my-account` to the Excluded URLs list and xSpeed will skip caching those pages. Logged-in customers are never served cached pages regardless. | |
| 212 | +Not exactly. A WordPress MCP adapter usually exposes core WordPress data. The xSpeed Cache MCP server exposes the performance tools this plugin owns, such as cache purging, preloader status, score runs and settings reads and writes, so an assistant works on speed rather than on content. | |
| 183 | 213 | |
| 184 | -= Does it work with my server? = | |
| 214 | += Can I connect Claude to it? = | |
| 185 | 215 | |
| 186 | -xSpeed works on Apache, nginx, LiteSpeed, IIS, and any standard PHP host. Static-cache rewriting and GZIP auto-configuration work out of the box on Apache and LiteSpeed. For nginx and IIS, xSpeed shows you a ready-to-paste config snippet. | |
| 216 | +Yes. A WordPress MCP Claude connection uses OAuth discovery, and the MCP server appears on the Overview as a capability card so you can set it up without hunting for a panel. Read-only connections stay read-only. | |
| 187 | 217 | |
| 188 | -= Does it support WordPress Multisite? = | |
| 218 | += Is xSpeed Cache the best free WordPress cache plugin? = | |
| 189 | 219 | |
| 190 | -Yes. Each site in the network has its own independent cache and settings. | |
| 220 | +That is for you to judge, but here is the honest basis for comparison. The static-file rewrite path serves cached pages before PHP loads, across Apache, nginx and LiteSpeed, which most free plugins do not do. Object caching, CDN support and database cleanup are included rather than reserved for a paid tier. | |
| 191 | 221 | |
| 192 | -= Will it conflict with LiteSpeed Cache? = | |
| 222 | += Can it replace my separate WordPress page speed plugin and CDN plugin? = | |
| 193 | 223 | |
| 194 | -No. xSpeed detects LiteSpeed's server-level caching module and steps back automatically to avoid double-caching. Otherwise, only run one page-cache plugin at a time. | |
| 224 | +In most cases yes. Page caching, minification, GZIP, lazy loading, font optimization, browser caching, object caching, WordPress CDN support and database cleanup are all in one plugin, so you are not stacking a WordPress page speed plugin on top of a cache plugin on top of a database tool. | |
| 195 | 225 | |
| 196 | -= How do I exclude a page from being cached? = | |
| 226 | += Will it help my Core Web Vitals? = | |
| 197 | 227 | |
| 198 | -Go to **xSpeed → Settings**, paste the URL path (e.g. `/cart`) into the Excluded URLs field — one path per line. Changes save automatically. | |
| 228 | +It targets the parts a plugin can influence. The static cache improves server response time, the LCP preload picks the largest image on the page rather than the first, lazy loading defers offscreen media, and the automatic Cumulative Layout Shift fix stops the layout jumping. Page weight and DOM size are reported to you, since only a person can fix those. | |
| 199 | 229 | |
| 230 | += What is the MCP server for? = | |
| 231 | + | |
| 232 | +The MCP server lets an AI assistant connect to your site and use the same tools the dashboard uses, such as purging cache, checking preloader status, running a score and reading or updating settings. Read-only connections stay read-only, and credentials cannot be written unless you explicitly grant that permission when connecting. | |
| 233 | + | |
| 234 | += Will this break my site? = | |
| 235 | + | |
| 236 | +Very unlikely. xSpeed Cache includes safety checks for every optimization: minification falls back to the original if anything looks off, and the cache bypasses logged-in users, admin pages, AJAX and REST requests automatically. If something ever looks wrong, you can toggle any feature off individually. | |
| 237 | + | |
| 200 | 238 | = How do I clear the cache? = |
| 201 | 239 | |
| 202 | -Click **Purge** in the xSpeed dashboard, or use **Purge xSpeed Cache** in your admin bar. The cache also clears itself automatically whenever you publish or update content. | |
| 240 | +Click **Purge** in the xSpeed Cache dashboard, or use **Purge xSpeed Cache** in your admin bar. The cache also clears itself automatically whenever you publish or update content. | |
| 203 | 241 | |
| 204 | -= Can I use xSpeed alongside Cloudflare? = | |
| 242 | += Can I use xSpeed Cache alongside Cloudflare? = | |
| 205 | 243 | |
| 206 | -Yes. The built-in Cloudflare module connects your zone and auto-purges Cloudflare's cache whenever xSpeed purges its own — so both caches stay in sync. | |
| 244 | +Yes. The built-in Cloudflare module connects your zone and auto-purges Cloudflare's cache whenever xSpeed Cache purges its own, so both caches stay in sync. | |
| 207 | 245 | |
| 208 | 246 | = Can I disable minification temporarily for debugging? = |
| 209 | 247 | |
| 210 | -Yes. Either toggle the option off in the admin UI, enable `WP_DEBUG` (xSpeed automatically skips HTML minification when debug is on), or use the `xspeed_skip_minify` filter. | |
| 248 | +Yes. Either toggle the option off in the admin UI, enable `WP_DEBUG` (xSpeed Cache automatically skips HTML minification when debug is on), or use the `xspeed_skip_minify` filter. | |
| 211 | 249 | |
| 250 | += Does xSpeed Cache send my data anywhere? = | |
| 251 | + | |
| 252 | +By default, no. The only request is a check to your own site's home URL to confirm GZIP is active. Usage analytics and external performance scores are covered in detail in the External services section. | |
| 253 | + | |
| 212 | 254 | == Screenshots == |
| 213 | 255 | |
| 214 | -1. Cache panel — master toggle, status, and live stats (cached pages, cache size, last purge). | |
| 215 | -2. Minification — minify and combine HTML, CSS, and JavaScript with defer/delay options. | |
| 216 | -3. Lazy Load — defer images, iframes, and videos until they scroll into view, with CLS-fix. | |
| 217 | -4. Cache Preloader — sitemap-driven cache warmer that keeps the first visitor fast. | |
| 218 | -5. Object Cache — connect Redis or Memcached, view status, and flush from the dashboard. | |
| 219 | -6. CDN — pull-zone URL rewriting for faster global static-asset delivery. | |
| 220 | -7. Cloudflare — connect your zone, auto-purge on publish, and toggle development mode. | |
| 221 | -8. Custom Cache Rules — per-URL and per-post caching rules with custom expiry. | |
| 222 | -9. Disable Bloat — switch off unused WordPress features (dashicons, oEmbed, RSS, XML-RPC, and more). | |
| 223 | -10. Heartbeat Control — throttle the WordPress Heartbeat API to reduce admin-ajax load. | |
| 224 | -11. AI-Powered Site Audit (Pro) — site-specific recommendations with severity ratings and concrete reasons. | |
| 256 | +1. Overview — cache status, hit ratio, cached pages, cache size, and average time saved at a glance. | |
| 257 | +2. Optimization — minify, compress, lazy-load, resource hints, fonts, and bloat control in one place. | |
| 258 | +3. Advanced Cache — cache 404s, search results, feeds, and the REST API, plus custom rules and maintenance bypass. | |
| 259 | +4. Browser Cache — Cache-Control and Expires headers with separate TTLs for static assets and HTML. | |
| 260 | +5. Health & Insights — diagnostics, hit ratio, cache coverage, and rule-based suggestions you can apply in one click. | |
| 261 | +6. MCP Server — control this site's cache from Claude and other AI agents over a token-scoped connection. | |
| 262 | +7. AI Provider — choose OpenAI, Anthropic, Google Gemini, or OpenRouter and set the model powering the AI features. | |
| 263 | +8. Migration — import settings from WP Rocket, W3 Total Cache, WP Super Cache, or LiteSpeed Cache. | |
| 225 | 264 | |
| 226 | 265 | == External services == |
| 227 | 266 | |
| 228 | -xSpeed contacts your own site (the gzip probe below) and, when usage analytics is enabled, one analytics service. The setup wizard shows a clearly-labeled consent control for analytics (enabled by default, untick to opt out), and nothing is sent until you confirm your choices there. | |
| 267 | +xSpeed Cache contacts your own site (the gzip probe below); when usage analytics is enabled, an analytics service; only if you choose to submit the optional deactivation survey, that same service; and — only when you run a speed test yourself — one external performance-score provider. The setup wizard shows a clearly-labeled consent control for analytics (enabled by default, untick to opt out), and nothing is sent until you confirm your choices there. The deactivation survey is separate and never sends anything unless you explicitly click Submit. External scores are off by default, turn on the first time you press Test, and never run on their own. | |
| 229 | 268 | |
| 230 | 269 | = Self-hosted gzip probe = |
| 231 | 270 | |
| 232 | 271 | * **What it does:** Issues a single `GET` request to your site's home URL (`home_url('/')`) with an `Accept-Encoding: gzip` header to detect whether your web server is already serving gzipped responses. The response body is discarded; only the `Content-Encoding` header is read. |
| @@ -233,15 +272,8 @@ | ||
| 233 | 272 | * **When it runs:** On demand when the admin dashboard loads server status, throttled to once per hour via a transient (`xspeed_gzip_active`). |
| 234 | 273 | * **Where the request goes:** Your own site (`home_url()`). This request goes only to your own server. |
| 235 | 274 | * **What is sent:** No personal data, no site identifiers, no payload — just a standard HTTP `GET` from your server back to your server. |
| 236 | 275 | |
| 237 | -= Usage analytics (opt-in, off by default) = | |
| 238 | - | |
| 239 | -* **What it does:** When usage analytics is enabled, xSpeed periodically sends anonymous, non-sensitive diagnostics to help us keep the plugin fast and compatible with real-world WordPress environments. Data sent: site URL, site name, WordPress version, PHP version, site language & charset, multisite flag, server software, your list of active & inactive plugins, active theme & version, text direction, and your xSpeed feature usage (which optimization features you have switched on and their numeric settings — e.g. cache lifetime, minification, lazy-load). This is feature-usage data only: it tells us which features are actually used so we can focus on what matters. **We never send any values you enter** — no API keys, tokens, passwords, license keys, email addresses, URLs, brand names, or logos — and **no page content, no visitor data, and no personal data** (your email is never collected in the free plugin). | |
| 240 | -* **When it runs:** It runs at most once per day via WP-Cron, only after you confirm your choices in the setup wizard. Untick the consent control (or disable it later from the dashboard) and nothing is ever sent. | |
| 241 | -* **Where the request goes:** WP Insights, WPDeveloper's usage-analytics service — `https://send.wpinsight.com/process-plugin-data`. ([Privacy Policy](https://wpdeveloper.com/privacy-policy)) | |
| 242 | -* **How to turn it off:** Untick the consent control in the wizard, or disable it later from the xSpeed dashboard. Opting out stops all data collection and clears the scheduled task. | |
| 243 | - | |
| 244 | 276 | == Third-party libraries == |
| 245 | 277 | |
| 246 | 278 | This plugin bundles the following GPL-compatible third-party libraries: |
| 247 | 279 | |
| @@ -260,9 +292,9 @@ | ||
| 260 | 292 | * License: MIT |
| 261 | 293 | |
| 262 | 294 | = React / React DOM / Scheduler = |
| 263 | 295 | |
| 264 | -Used for the xSpeed admin interface bundle. | |
| 296 | +Used for the xSpeed Cache admin interface bundle. | |
| 265 | 297 | |
| 266 | 298 | * Source: https://github.com/facebook/react |
| 267 | 299 | * License: MIT |
| 268 | 300 | |
| @@ -274,248 +306,75 @@ | ||
| 274 | 306 | * License: ISC |
| 275 | 307 | |
| 276 | 308 | == Changelog == |
| 277 | 309 | |
| 278 | -= [1.0.8] – 2026-07-14 = | |
| 310 | += [1.3.2] – 2026-09-15 = | |
| 279 | 311 | |
| 280 | -**MCP support for AI assistants, LCP optimization, and admin experience improvements.** | |
| 312 | +**Purging is now a contract other caches can join: clearing xSpeed's page cache also invalidates LiteSpeed Cache and the host's nginx FastCGI cache, and every purge is scoped to exactly the site and pages it was asked for — including on multisite.** | |
| 281 | 313 | |
| 282 | -AI / MCP: | |
| 283 | -- New: MCP server support for Claude and other MCP-compatible AI assistants. | |
| 284 | -- New: Secure OAuth 2.1 connection for remote AI assistants. | |
| 285 | -- New: MCP dashboard with available tools and permissions. | |
| 314 | +Caching: | |
| 315 | +- New: A purge-event contract lets other caching layers invalidate together with xSpeed, so a purge clears every cache that matters in one action. | |
| 316 | +- New: Purge All is forwarded to LiteSpeed Cache and the host's nginx FastCGI cache when they are present. | |
| 317 | +- Fixed: One post change triggers exactly one invalidation, deleting a media file purges again, and a purge still finds its post when the hook hands over none. | |
| 318 | +- Fixed: Purges are scoped per site on multisite — a purge no longer sends another site's URLs to this site's server cache, a default port is not treated as a different site, and full purges stay on the current site. | |
| 319 | +- Fixed: A purge listener that throws no longer aborts the purge, a query string of "0" is still treated as a query, and a partial purge reports itself as partial instead of claiming success. | |
| 286 | 320 | |
| 287 | -Performance: | |
| 288 | -- New: Resource Hints with LCP image preload and font preconnect. | |
| 289 | -- Fixed: Improved LCP image loading by preventing lazy loading on the hero image. | |
| 321 | +Optimization: | |
| 322 | +- Fixed: Delaying JavaScript no longer breaks inline scripts bound to a delayed handle, and replayed external scripts keep their original load order. | |
| 290 | 323 | |
| 291 | -Dashboard & Admin UX: | |
| 292 | -- New: Settings shortcut from the WordPress Plugins page. | |
| 293 | -- Improved: Updated admin menu organization and dashboard navigation. | |
| 294 | -- Improved: Better Pro license messaging and settings search experience. | |
| 295 | -- Fixed: Checkbox rendering in both light and dark mode. | |
| 324 | += [1.3.1] – 2026-09-14 = | |
| 296 | 325 | |
| 297 | -Reliability: | |
| 298 | -- Fixed: Improved cache permission handling on non-NGINX servers. | |
| 326 | +**Purge all now says what it actually cleared, on the button and in the toast, instead of claiming success when a store refused. Pro features are marked with one lock everywhere rather than amber squares and crowns, which also lifts the dimmed labels back to readable contrast. The Cloudflare panel is staged by connection state, so setup comes before the actions that depend on it — and the auto-purge switch is visible while disconnected instead of hidden.** | |
| 299 | 327 | |
| 300 | -= [1.0.7] – 2026-07-05 = | |
| 328 | +Dashboard & Admin UX: | |
| 329 | +- New: Purge all reports its outcome — Cleared, Already empty, Partly cleared or Purge failed — and the toast names the files and size cleared plus any other store, or the reason a store refused. | |
| 330 | +- Fixed: Pro features are marked with a single lock in the teal tint. Locked tabs are no longer dimmed to 70%, which had dropped their labels below readable contrast, and the amber squares, crowns and sparkles are gone from the tabs, badges and the sidebar tier slot. | |
| 331 | +- Fixed: Turning caching on no longer flashes "Another plugin owns the page cache on this site" while the toggle is in flight. A genuine foreign drop-in still shows the banner. | |
| 332 | +- Fixed: The Purge all button keeps its natural width at rest instead of reserving room for the outcome label. | |
| 301 | 333 | |
| 302 | -**Improved reliability, granular cache management, Redis compatibility, and asset optimization fixes.** | |
| 334 | +Cloudflare: | |
| 335 | +- New: The panel is staged by connection state — Connection, then Actions — so credentials and Verify come before the buttons that need them, and an action that cannot work is disabled with a hint rather than failing silently. | |
| 336 | +- Fixed: The auto-purge-on-purge switch is always visible, dimmed while disconnected, instead of being hidden until connected. Hiding it is how the edge-sync switch went unnoticed. | |
| 303 | 337 | |
| 304 | -Caching: | |
| 305 | -- New: Granular cache purge options for Page/Static, CSS/JS, Object Cache, and REST Cache. | |
| 306 | -- Fixed: Improved compatibility with previously installed caching plugins. | |
| 307 | -- Fixed: Purge All now properly clears optimized assets, object cache, and triggers CDN/edge purges. | |
| 338 | +Documentation: | |
| 339 | +- Fixed: The full changelog moved to changelog.txt, shipped with the plugin and linked from the plugin page. wordpress.org truncates a changelog over 5,000 words on import, so the history past the cut had been dropped. | |
| 308 | 340 | |
| 309 | -Object Cache: | |
| 310 | -- Fixed: Redis 6+ ACL compatibility for managed hosting environments. | |
| 311 | -- Improved: Object cache write verification for better reliability. | |
| 312 | -- Improved: Site-specific object cache flushing for shared Redis environments. | |
| 313 | -- Improved: Persistent object cache group flushing. | |
| 341 | += [1.3.0] – 2026-09-13 = | |
| 314 | 342 | |
| 315 | -Asset Optimization: | |
| 316 | -- Fixed: Combined CSS now preserves inline styles and stylesheet order. | |
| 317 | -- Fixed: Combined CSS files are regenerated correctly after cache purge. | |
| 318 | -- Fixed: Relative asset paths are preserved in optimized CSS. | |
| 343 | +**A single page can now be purged straight from the admin bar, the post list or the editor, and known third-party scripts — analytics, chat widgets, tracking pixels — are delayed automatically without asking you to list them. A host or agency can pin any setting from wp-config.php with a constant: the dashboard shows the pin, names the constant, and lets an admin take the setting back. xSpeed can also take over an abandoned page-cache drop-in, with your consent, instead of being blocked by it forever.** | |
| 319 | 344 | |
| 320 | -Dashboard & Admin UX: | |
| 321 | -- Fixed: Dashboard layout issue with large WordPress admin menus. | |
| 322 | -- Fixed: Admin menu and toolbar overlay issues. | |
| 323 | -- Fixed: Pro sidebar item ordering. | |
| 345 | +Caching: | |
| 346 | +- New: Purge a single page from the admin bar, the post list's row actions, or the editor — and the purge confirms what it actually removed instead of assuming. | |
| 347 | +- New: `wp xspeed purge` clears every cache in one call, and a purge is scoped to exactly what the caller asked for. | |
| 348 | +- New: Publishing or updating a post also purges the pages that list it, not just the post itself. | |
| 349 | +- New: An abandoned page-cache drop-in left by another plugin can be taken over with one consenting click, and a leftover husk of a drop-in no longer blocks caching forever. | |
| 350 | +- Fixed: A migration handover now completes instead of stopping halfway, from the dashboard and the CLI alike. | |
| 351 | +- Fixed: xSpeed no longer mistakes itself for a competing cache plugin. | |
| 324 | 352 | |
| 325 | -Migration: | |
| 326 | -- Fixed: Mobile cache migration compatibility for NGINX static cache. | |
| 353 | +Optimization: | |
| 354 | +- New: Known third-party scripts are delayed until interaction automatically, including the inline install snippets vendors ask you to paste into the header. | |
| 355 | +- New: Font stylesheets are deferred out of the render path, and a Google Fonts request that blocks rendering is rewritten to swap. | |
| 356 | +- New: A manual preload list covers the images no detector can see. | |
| 357 | +- Fixed: The LCP preload no longer picks a brand logo over the page's real hero image. | |
| 358 | +- Fixed: Deferring no longer breaks inline scripts that depend on another handle, combining no longer swallows scripts that delaying protects, and handle exclusions are honoured in the delay pass. | |
| 359 | +- Fixed: Valid minified JavaScript is no longer rejected, asset URLs are matched across schemes, an uploads folder at the domain root is recognised, and `?ver` is kept on files plugins rewrite in place. | |
| 360 | +- Fixed: Lazy loading reads an image's size from whichever attribute holds its URL, and no longer mistakes a real image for a placeholder because of a word inside its filename. | |
| 327 | 361 | |
| 328 | -= [1.0.6] – 2026-06-25 = | |
| 329 | - | |
| 330 | -**New caching capabilities, smarter settings, Pro cache warming, and major reliability improvements.** | |
| 331 | - | |
| 332 | -Caching: | |
| 333 | -- New: REST API response caching with per-route TTL. | |
| 334 | -- New: Feed, search results, and 404 page caching. | |
| 335 | -- New: `xspeed_should_cache` filter for advanced cache control. | |
| 336 | -- New: Maintenance-aware cache serving to prevent stale maintenance pages. | |
| 337 | -- Improved: Feed handling with conditional GET (304 Not Modified) support. | |
| 338 | -- Fixed: Cache metadata handling for feeds, 404 pages, and content types. | |
| 339 | -- Fixed: Automatic cache purging for user and taxonomy changes. | |
| 340 | -- Fixed: Versioned cache drop-in to ensure updates are applied correctly. | |
| 341 | - | |
| 342 | 362 | Settings: |
| 343 | -- New: Conditional settings with dependency support (AND/OR logic). | |
| 344 | -- Fixed: Preserved custom option keys during schema-driven saves. | |
| 345 | -- Fixed: Image URL validation for media fields. | |
| 363 | +- New: Any module setting can be pinned from wp-config.php with a constant. The dashboard shows a pinned field as read-only and names the constant that holds it. | |
| 364 | +- New: An admin can take a pinned setting back — the override displaces the host's constant and only that. | |
| 365 | +- Fixed: A panel containing a pinned field saves again, and editing a pinned setting is a single inline edit. | |
| 346 | 366 | |
| 347 | -White Label: | |
| 348 | -- Fixed: Footer credit and Help & Support link controls. | |
| 349 | -- Fixed: Fallback to the default logo when a custom brand logo is unavailable. | |
| 367 | +Object Cache: | |
| 368 | +- New: Redis credentials and Memcached servers are read from wp-config.php, and `WP_REDIS_PREFIX` is honoured as a key salt. | |
| 369 | +- Fixed: Cache keys are always namespaced per site, so two sites sharing a Redis or Memcached database can no longer read or purge each other's entries. | |
| 370 | +- Fixed: The dashboard panel gained every fix that had only reached the CLI, owns only what the plugin itself wrote, and no longer presents another plugin's object cache as xSpeed's. | |
| 350 | 371 | |
| 351 | -Migration: | |
| 352 | -- New: One-Click Profiles and Save & Share with an improved import experience. | |
| 353 | -- Fixed: Import now counts and migrates only enabled source settings. | |
| 354 | - | |
| 355 | 372 | Reliability: |
| 356 | -- Fixed: Improved REST API error handling to prevent broken JSON responses. | |
| 373 | +- Fixed: Translations now load for both PHP and the dashboard, and the settings screens are translatable. | |
| 374 | +- Fixed: nginx sends one Cache-Control header per location instead of two, and the de-duplicated header no longer caches 404 responses. | |
| 375 | +- Fixed: An audit contributor that throws no longer takes the whole audit down with it, and add-ons can report findings of their own. | |
| 357 | 376 | |
| 358 | -Admin UX: | |
| 359 | -- New: Opt-in usage analytics (WP Insights). | |
| 360 | -- Improved: Sidebar navigation, conditional Pro settings, and submenu behavior. | |
| 361 | -- Improved: Pro upgrade links now point directly to the pricing page. | |
| 377 | +AI tools: | |
| 378 | +- Improved: The optimize assistant honours its cooldown, never measures without consent, keeps the score through a run of failures, and reports the newest score with its age. | |
| 362 | 379 | |
| 363 | -Pro (requires xSpeed Pro): | |
| 364 | -- New: Predictive Cache Warming and Scheduled Cache Prewarming. | |
| 365 | -- New: Brotli compression support with GZIP fallback. | |
| 366 | - | |
| 367 | -= [1.0.5] – 2026-06-18 = | |
| 368 | - | |
| 369 | -**Migration into Free, LiteSpeed cache ownership & accurate hit counting.** | |
| 370 | - | |
| 371 | -Migration: | |
| 372 | -- New: One-click migration from other caching plugins (LiteSpeed Cache, WP Rocket, W3 Total Cache, etc.) is now part of the Free plugin — import your existing exclusions and settings on activation instead of starting from scratch. | |
| 373 | - | |
| 374 | -LiteSpeed: | |
| 375 | -- Fixed: On LiteSpeed/OpenLiteSpeed, xSpeed now tells LSCache to stand down (X-LiteSpeed-Cache-Control: no-cache) and owns the cache itself, so the X-XSpeed-Cache header is emitted, hits are counted, and the dashboard no longer falsely reports a PHP fallback. | |
| 376 | -- Fixed: LiteSpeed cache hits route through the drop-in (which both tags and counts them) since OpenLiteSpeed's .htaccess can't tag or log a static hit — giving consistent ~1ms hits and an accurate hit ratio. | |
| 377 | - | |
| 378 | -Cache hit counting & stats: | |
| 379 | -- Fixed: Hit/miss counters moved off transients onto a persistent option, so they no longer evaporate when a non-persistent object cache (e.g. an unreachable Redis) is active — the hit ratio was getting stuck at a fake 0%/100%. | |
| 380 | -- Fixed: Cache MISSes are now recorded inline so the hit-ratio stat reflects reality instead of being pinned at 100%. | |
| 381 | -- Fixed: PHP-served cache HITs are counted correctly and the drop-in device-bucket desync is resolved. | |
| 382 | -- Fixed: Homepage now caches via the static rewrite (the rule used a pattern that required a non-empty path, so `/` fell through to PHP while inner pages were rewritten). | |
| 383 | - | |
| 384 | -Nginx: | |
| 385 | -- Fixed: A nginx access_log directive in the generated snippet could take down the whole server when its log file was missing; the path is now resolved lazily so a deleted hits.log can't fail `nginx -t`. | |
| 386 | -- Fixed: The dashboard's nginx server-block snippet now updates optimistically when you toggle cache, instead of showing the pre-toggle state, and the wizard's Done step shows the post-apply block. | |
| 387 | - | |
| 388 | -Admin UX: | |
| 389 | -- New: Collapsible sidebar groups for cleaner navigation. | |
| 390 | -- Improved: Renamed the "Cache" module label to "Page Cache" for clarity. | |
| 391 | -- Improved: Sidebar group icons and chevrons brighten correctly on hover (white in dark mode). | |
| 392 | - | |
| 393 | -Module fixes: | |
| 394 | -- Fixed: Lazy Load — four correctness bugs resolved. | |
| 395 | -- Fixed: Heartbeat — editor-context detection, CLI set support, and honest frontend copy. | |
| 396 | -- Fixed: Database cleaner — expired-transient cleanup gaps and a count mismatch. | |
| 397 | -- Fixed: Google Fonts — no longer double-appends `display=swap` on entity-encoded hrefs. | |
| 398 | -- Fixed: Settings now strictly validate boolean fields instead of casting, preventing bad values from silently becoming `true`/`false`. | |
| 399 | -- Fixed: Object Cache — core option groups marked non-persistent so the drop-in can always be deactivated; degraded backends detected honestly. | |
| 400 | -- Improved: Static-rewrite SSL probe verifies the certificate and no longer blocks admin page loads. | |
| 401 | - | |
| 402 | -= [1.0.4] – 2026-06-14 = | |
| 403 | - | |
| 404 | -**One-click object cache, parity exclusions & admin polish.** | |
| 405 | - | |
| 406 | -Object Cache: | |
| 407 | -- New: One-click Object Cache setup for Redis and Memcached — tests the connection, installs its own drop-in, and writes the wp-config constants (fully reversible). No drop-in plugin or PHP extension required. | |
| 408 | -- Improved: Dashboard now reports a degraded object cache honestly when the drop-in can't reach its backend, instead of implying caching is healthy. | |
| 409 | - | |
| 410 | -Admin UX: | |
| 411 | -- New: WP admin submenu now mirrors the in-dashboard navigation, so the menu and dashboard tabs stay in sync. | |
| 412 | -- Improved: Settings changes apply live across dashboard navigation — no full page reload needed. | |
| 413 | -- Improved: Menu icon now recolors to the active accent state correctly. | |
| 414 | -- Improved: Success notifications are anchored to a single consistent position (bottom-center). | |
| 415 | -- Fixed: Long panel titles no longer push the subtitle off-screen. | |
| 416 | -- Fixed: Number-input spinners render consistently across browsers (Firefox no longer clips the value). | |
| 417 | - | |
| 418 | -Cache exclusions: | |
| 419 | -- New: Exclusion lists now ship pre-populated with LiteSpeed / WP Rocket-parity defaults (16 URLs, 20 cookies, 28 query params), so a fresh install caches correctly out of the box. | |
| 420 | -- New: Exclusion rules now support regex via a `~` prefix (e.g. `~utm_[a-zA-Z0-9_-]+`), alongside glob and substring, with ReDoS guards. | |
| 421 | - | |
| 422 | -Bug fixes: | |
| 423 | -- Fixed: Browser Cache no longer emits an "Array to string conversion" warning on multi-valued Cache-Control headers (also clears a false "nginx config required" notice). | |
| 424 | - | |
| 425 | -License: | |
| 426 | -- Fixed: Activating a Pro license now unlocks the Pro panels immediately — no full page reload needed. | |
| 427 | - | |
| 428 | -= [1.0.3] – 2026-06-07 = | |
| 429 | - | |
| 430 | -**Topology-aware UX, nginx HIT counting, admin polish.** | |
| 431 | - | |
| 432 | -Cache topology & UX: | |
| 433 | -- New: Topology-aware rewrite banner — the dashboard now detects containerized hosts (xclude, Kinsta, RunCloud Atomic, etc.) where the `$document_root` assumption doesn't hold, and tells the user exactly what to expect on their stack instead of silently failing. | |
| 434 | -- New: Unified nginx server-block snippet — one consolidated, copy-pasteable snippet (collapsible in the UI) replaces the previous fragmented sections. | |
| 435 | -- New: Nginx-served HITs are now counted — a dedicated access_log captures cache hits served directly by nginx (no PHP), so the dashboard "HITs in last 24h" stat is accurate on nginx setups. | |
| 436 | -- New: `X-XSpeed-Cache` response header — cache hits are now visible in the response headers, with a distinct value per serve layer (`HIT (nginx)` for the fast static path, `HIT (php)` for the drop-in fallback) so you can confirm a page was cached and tell exactly which layer served it. | |
| 437 | -- Improved: Browser Cache notice is topology-aware and renders its snippet in a proper code block. | |
| 438 | - | |
| 439 | -Admin UX: | |
| 440 | -- New: Third-party admin notices are suppressed on xSpeed admin screens (`page=xspeed*` only) — other plugins' "rate us" / promo notices no longer crowd the xSpeed dashboard. | |
| 441 | -- New: Aligned sticky title-bar across the sidebar and content panels for a cleaner scroll experience. | |
| 442 | -- Improved: Browser Cache + GZIP notices probe-gate themselves — once the underlying issue is resolved, the notice dismisses on its own instead of lingering. | |
| 443 | - | |
| 444 | -Benchmark: | |
| 445 | -- Fixed: "Without cache" leg of the dashboard speed test now appends a cache-buster query string. Previously it was hitting the cache and reporting an artificially-fast baseline, making the speedup number look small. | |
| 446 | - | |
| 447 | -= [1.0.2] – 2026-06-02 = | |
| 448 | - | |
| 449 | -**Static-rewrite cache, Site Health & Fonts.** | |
| 450 | - | |
| 451 | -Static-rewrite cache + Site Health: | |
| 452 | -- New: Static-file rewrite path — cached HTML is served directly by Apache / nginx / LiteSpeed, bypassing PHP entirely on cache hits (5-15ms TTFB vs ~85ms via the PHP drop-in). | |
| 453 | -- New: .htaccess static-cache block — installed automatically on cache enable, removed cleanly on disable. Block precedes WordPress's own rules so static files match first. | |
| 454 | -- New: nginx config snippet — copy-pasteable server { } block surfaced in the dashboard when nginx is detected (PHP can't write nginx config). Avoids the "if is evil" pitfall via a named-location fallback. | |
| 455 | -- New: LiteSpeed LSCache coexistence — xSpeed detects LSCache's server-level module and steps back instead of double-caching. | |
| 456 | -- New: Active rewrite probe — Health module pings the cache directory and confirms the rewrite is actually serving static bytes (not just present in .htaccess). | |
| 457 | -- New: WordPress Site Health integration — Tools → Site Health now lists an xSpeed check covering static-rewrite status + nginx config requirements. | |
| 458 | -- New: Persistent banner — Cache panel warns the admin when caching is on but the static-rewrite block isn't engaged (slow fallback path). | |
| 459 | -- New: Copy-to-clipboard button on every config-snippet panel (nginx, GZIP, object-cache). | |
| 460 | - | |
| 461 | -Fonts: | |
| 462 | -- New: Fonts module — adds `font-display: swap` to enqueued web fonts so visible text doesn't wait on a slow Google Fonts response, and exposes a preload list for above-the-fold font files. | |
| 463 | -- New: FontsModule tests covering the swap rewrite + preload `<link>` emission. | |
| 464 | - | |
| 465 | -Improvements & fixes: | |
| 466 | -- Improved: Server-type detection is cached so CLI / cron contexts see the same server type as web requests. | |
| 467 | -- Improved: Drop-in (advanced-cache.php) and WP_CACHE constant are preserved across plugin upgrades; auto-heal hook tightened to admin_init to avoid REST/cron noise. | |
| 468 | -- Improved: Plugin Check pass — i18n textdomains, WP_Filesystem coverage, SQL preparation, sanitization, and plugin/readme headers all cleaned up for WordPress.org review. | |
| 469 | -- Fixed: nginx snippet rewritten to avoid the try_files trap that broke pretty permalinks. | |
| 470 | -- Fixed: Rewrite condition normalized for trailing-slash + non-trailing-slash URLs. | |
| 471 | -- Fixed: WP-Rocket-style canonical pattern — server-level conditional rewrite. | |
| 472 | -- Fixed: Minify tag-rewrite filters bail in non-frontend contexts (REST / admin / cron). | |
| 473 | -- Fixed: wp.org release zip now ships `vendor/` — resolves the 1.0.1 activation fatal. | |
| 474 | -- Improved: Release pipeline rebuilt — `.distignore`-driven dist build, CI verify step, version-named artifact on every run. | |
| 475 | -- Improved: Plugin version read from the PHP header — single source of truth. | |
| 476 | - | |
| 477 | -= [1.0.1] – 2026-06-01 = | |
| 478 | - | |
| 479 | -**Foundation release — full feature set + Pro hooks.** | |
| 480 | - | |
| 481 | -Module architecture + LiteSpeed parity floor: | |
| 482 | -- New: Module architecture — every feature now ships as a self-contained Module (Cache, Health, Preloader, Heartbeat, Minify, GZIP, Lazy Load, Disable Bloat, Database, CDN, Cloudflare, Object Cache, Browser Cache). | |
| 483 | -- New: Health module — 24-hour hit/miss counter + activity log. | |
| 484 | -- New: Preloader module — sitemap-driven cache warmer with content-publish auto-warm. | |
| 485 | -- New: Cache exclusion intelligence — glob URL patterns, cookie patterns, User-Agent bypass, ignored query parameters. | |
| 486 | -- New: Per-device cache (mobile-separate). | |
| 487 | -- New: Per-post cache rules — don't-cache + custom expiry meta box. | |
| 488 | -- New: Minification — CSS / JS / HTML minify, combine, defer JS, delay JS, async CSS, remove ?ver= query strings. | |
| 489 | -- New: Lazy Load module — images / iframes / videos + auto CLS-fix. | |
| 490 | -- New: Disable Bloat module — 6 ergonomic toggles (dashicons, oEmbed, RSS, XML-RPC, jQuery Migrate, REST auth). | |
| 491 | -- New: Database module — optimize tables, scheduled cleanup, autoload analysis. | |
| 492 | -- New: CDN module — pull-zone URL rewriting. | |
| 493 | -- New: Cloudflare module — zone connect, auto-purge, dev-mode toggle. | |
| 494 | -- New: Object Cache module — Redis / Memcached config + status + flush. | |
| 495 | -- New: Browser Cache module — Cache-Control + Expires headers. | |
| 496 | -- New: Settings search across the entire dashboard with keyword highlighting. | |
| 497 | -- New: 3-step setup wizard on first activation with preset chooser and benchmark. | |
| 498 | -- New: Sidebar grouping under domain headers (Cache / Performance / Network / Insights / Tools). | |
| 499 | -- New: Sidebar tooltips + search shortcut in the collapsed rail. | |
| 500 | -- New: xspeed_branding filter — agencies can rebrand the dashboard. | |
| 501 | -- New: xspeed_cache_skip_for_post + xspeed_cache_expiry_for_post filters. | |
| 502 | - | |
| 503 | -Pro-essentials (everything xSpeed Pro depends on, bundled here so any Pro release works against this single Free version): | |
| 504 | -- New: xspeed_module_descriptor filter — Pro hooks this to swap its panels to LicenseLockedPanel when license is invalid. | |
| 505 | -- New: AI Privacy module — GDPR off-switch + xspeed_ai_can_collect_data filter that Pro AI features must consult before recording visitor data. | |
| 506 | -- New: Pro upsell teasers — in-context inline cards on Cache, Minify, Lazy Load, Browser Cache and Disable Bloat panels. | |
| 507 | -- New: Locked Pro module rows in the sidebar — shows what Pro offers with a clear upgrade prompt. | |
| 508 | -- New: Pro Audit on the Cache panel — site-specific scan listing the top Pro features that would help THIS site, with severity chips and concrete reasons (not generic marketing copy). | |
| 509 | -- New: Sidebar slot for the license module (appears when xSpeed Pro is installed). | |
| 510 | -- New: Global 36px form-control height baseline across the dashboard. | |
| 511 | -- New: filemtime() cache busting on admin asset URLs. | |
| 512 | - | |
| 513 | -Improvements & fixes: | |
| 514 | -- Improved: React panel registry — modules auto-render in the dashboard. | |
| 515 | -- Improved: Portal-based save indicator — zero layout shift. | |
| 516 | -- Improved: Distribution zip prunes dev dependencies (composer install --no-dev). | |
| 517 | -- Fixed: 5 duplicate module icons + regression test. | |
| 518 | - | |
| 519 | - | |
| 520 | -= [1.0.0] – 2026-05-27 = | |
| 521 | -- Initial release. | |
| 380 | +Older releases are listed in changelog.txt, included with the plugin, and at [xspeedcache.com/changelog](https://xspeedcache.com/changelog/). | |