PluginProbe
xSpeed Cache: AI-Powered Performance Hub with MCP, Caching & CDN / 1.3.7
xSpeed Cache: AI-Powered Performance Hub with MCP, Caching & CDN v1.3.7
1.3.7 1.3.6 1.3.5 1.3.4 1.3.3 1.3.2 1.3.1 1.3.0 1.2.4 trunk 1.0.0 1.0.1 1.0.2 1.0.3 1.0.4 1.0.5 1.0.6 1.0.7 1.0.8 1.0.9 1.1.0 1.1.1 1.1.2 1.1.3 1.1.4 All 33 releases
← All changes | readme.txt +81 -1 1.3.5 → 1.3.7 View file →
@@ -3,9 +3,9 @@
3 3 Tags: cache, performance, page speed, optimization, mcp
4 4 Requires at least: 6.0
5 5 Tested up to: 7.1
6 6 Requires PHP: 7.4
7 -Stable tag: 1.3.5
7 +Stable tag: 1.3.7
8 8 License: GPLv2 or later
9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html
10 10
11 11 A complete WordPress caching plugin: page cache, object cache, CDN, database cleanup and Core Web Vitals optimization, plus a built-in MCP server.
@@ -272,8 +272,15 @@
272 272 * **When it runs:** On demand when the admin dashboard loads server status, throttled to once per hour via a transient (`xspeed_gzip_active`).
273 273 * **Where the request goes:** Your own site (`home_url()`). This request goes only to your own server.
274 274 * **What is sent:** No personal data, no site identifiers, no payload — just a standard HTTP `GET` from your server back to your server.
275 275
276 += xSpeed Hub (app.xspeedcache.com) =
277 +
278 +* **What it does:** Lets you manage this site, with other sites, from one xSpeed Hub account and one AI connection.
279 +* **When it runs:** Only after an administrator connects the site to xSpeed Hub from xSpeed Cache → AI & agents. A site that was never connected makes no Hub requests.
280 +* **What is sent:** The site URL and this site's MCP token, which the Hub uses to call the site's own MCP endpoint. The token is sent when the site is connected, when the connection status is checked, when the token changes (Rotate, or Connect after Disconnect), when you disconnect, and with speed-test requests you start.
281 +* **Where the request goes:** app.xspeedcache.com, operated by WPDeveloper.
282 +
276 283 == Third-party libraries ==
277 284
278 285 This plugin bundles the following GPL-compatible third-party libraries:
279 286
@@ -305,8 +312,81 @@
305 312 * Source: https://github.com/lucide-icons/lucide
306 313 * License: ISC
307 314
308 315 == Changelog ==
316 +
317 += [1.3.7] – 2026-10-01 =
318 +
319 +**Pages with a background-video hero now paint the hero text first, Load CSS Asynchronously no longer makes pages flash unstyled, sites in a multisite network stop sharing cached REST responses, and a site whose token changed can reconnect to xSpeed Hub.**
320 +
321 +Media:
322 +- Fixed: A hero's background video (autoplay, muted, looping, no controls or poster) now starts on the visitor's first scroll, tap, key press or mouse move, so the hero text paints first instead of waiting for the video's first frame.
323 +- Fixed: Only one image per page gets high fetch priority, instead of every image counted by Eager-load First N Images.
324 +
325 +Optimization:
326 +- Fixed: Load CSS Asynchronously leaves stylesheets render-blocking unless the page has critical CSS, so pages no longer paint unstyled and then shift. Google Fonts, Bunny and Typekit stylesheets still load without blocking.
327 +- Fixed: A page builder's row, column and section stylesheets stay render-blocking, so a builder hero no longer snaps into its grid after the first paint.
328 +- Fixed: Under Delay JS, a script's inline data now waits with the script, so the script never runs without its data.
329 +- Fixed: Combine CSS recognises another plugin's non-blocking stylesheet however its onload handler is written, instead of merging it into a print-only file.
330 +- Fixed: Strip jQuery Migrate works when another plugin, such as Elementor Pro, loads the script registry before Bloat Control.
331 +
332 +Resource Hints:
333 +- Fixed: When a background video opens the page, images below it are no longer preloaded as the LCP image.
334 +
335 +Caching:
336 +- Improved: More click and campaign IDs are ignored in the cache key, on saved lists too.
337 +- Fixed: Each site in a multisite network gets its own cached REST responses. Two sites requesting the same route could be served each other's data.
338 +- Fixed: Installing a new plugin no longer empties the page cache as if live code had been replaced.
339 +- Fixed: A request that measures a page's CSS is never answered from cache, whatever Ignored Query Parameters say.
340 +- Fixed: xSpeed's own warming, benchmark and verifier requests, and bot hits, no longer count in the hit ratio or in site analytics.
341 +
342 +AI / MCP:
343 +- New: Extensions can add hidden MCP tools, and oversized MCP request bodies are refused.
344 +- Improved: The generate_critical_css tool builds Critical CSS for any page, not only the home page.
345 +- Improved: get_cache_status reports the Site Icon.
346 +- Fixed: A site whose MCP token changed can reconnect to xSpeed Hub. The Hub gets the new token, and a new credential clears its lockout.
347 +- Fixed: The attach route no longer returns the admin's user ID.
348 +
349 +Dashboard & Admin UX:
350 +- Improved: Settings labels and hints are rewritten in plain language and sentence case.
351 +- Fixed: Leaving onboarding from the last step lands on the dashboard instead of a broken #[object Object] page.
352 +
353 += [1.3.6] – 2026-09-28 =
354 +
355 +**Smart Delay postpones the scripts other delay modes had to leave running, LCP background images and video posters are preloaded, LiteSpeed servers get the same static fast path nginx and Apache already had, lightbox videos open with their player instead of a blank window, and Turbo Render no longer clips designs that overlap their neighbours. Emojis can be switched off, post revisions capped, and inline background images held back until they scroll into view.**
356 +
357 +Media:
358 +- New: Background images set in an element's inline style can be lazy-loaded. Each one loads just before its element scrolls into view, the first ones on the page load straight away (the Eager-load First N Images count), and with JavaScript off every background loads as before. Off by default.
359 +- Fixed: A video embed inside a lightbox's hidden template (Essential Addons, Magnific Popup, Lity) is no longer swapped for the click-to-play facade — the popup opened blank because lightbox styling only sizes an iframe. The template's iframe stays lazy, so it still loads nothing until the popup opens, and the list of template classes can be extended with the xspeed_video_facade_popup_classes filter.
360 +
361 +Optimization:
362 +- New: Bloat Control has a Disable Emojis toggle. It removes the WordPress emoji script and styles from pages, feeds, emails, embeds and wp-admin. Off by default.
363 +- New: Turbo Render has an Excluded classes setting. A deferred section clips content that hangs over its boundary — a card overlapping the section below it, for example — so a section listed here always renders right away.
364 +- Fixed: Turbo Render leaves any section holding an iframe alone. Deferring a map or video holder gained nothing and could paint it over content that overlaps it by design.
365 +- New: Smart Delay. Delaying every script used to quietly skip any script that inline code depends on — on builder pages that was most of them. Smart Delay postpones those scripts anyway and parks their inline snippets with them, replaying everything in page order on the first interaction. Off by default; the exclusion list and consent-banner protection still win.
366 +- Improved: Delayed scripts now replay the way a real page loads — in page order, with the document's readyState moving through its normal stages, and with each script's DOMContentLoaded and load handlers firing when its turn comes.
367 +- Improved: A delayed inline loader now waits for the scripts it injects, a throwing inline module no longer stalls the replay behind it, and the replay works on pages with a hash-based Content-Security-Policy.
368 +- Fixed: The replay no longer touches scripts and handlers the page ran normally — their writes, listeners and onreadystatechange calls behave exactly as before Delay JS was switched on.
369 +- Fixed: A consent banner is only delayed by an entry that names it; a second protected token on the same tag now needs naming too.
370 +- Fixed: A script whose author opted out of optimization late in the page no longer loses the defer attribute a stamper had already given it.
371 +
372 +Resource Hints:
373 +- New: LCP background images declared in <style> rules and video poster images are now detected and preloaded, so hero sections painted from CSS backgrounds get the same head start as <img> heroes.
374 +
375 +Caching:
376 +- New: LiteSpeed servers can opt into the static-rewrite fast path, serving cached pages before PHP starts — the same shortcut nginx and Apache sites already had.
377 +- Fixed: Publishing a post on an nginx host no longer purges the server's entire cache — only the pages the post touches. Nginx Helper's own off switch is respected, and a content import ends with one server purge instead of one per post.
378 +- Fixed: The admin-bar purge button answers immediately and runs the purge in the background, instead of holding the request open until some hosts cut it off.
379 +
380 +Database:
381 +- New: Limit Post Revisions keeps only as many revisions per post as you choose, and 0 turns revisions off. A WP_POST_REVISIONS value in wp-config.php still wins, and the panel shows it.
382 +
383 +Migration:
384 +- Fixed: Importing LiteSpeed Cache settings no longer turns oEmbed off when the site had emoji removal on. That setting now maps to Disable Emojis.
385 +- New: WP Rocket's emoji, embeds and CSS background lazy-load settings are imported.
386 +
387 +Dashboard & Admin UX:
388 +- Fixed: The Cloudflare upsell no longer advertises an edge cache TTL the APO module does not set.
309 389
310 390 = [1.3.5] – 2026-09-22 =
311 391
312 392 **Consent banners now survive Delay JS on every site that ships one, Turbo Render works on any theme rather than only Elementor, JS-injected YouTube/Vimeo embeds load only on click, and nginx sites are no longer told to fix a configuration that was already correct.**