{"id":295388,"date":"2026-06-03T20:39:50","date_gmt":"2026-06-03T20:39:50","guid":{"rendered":"https:\/\/en-za.wordpress.org\/plugins\/basecloud-boost\/"},"modified":"2026-08-31T20:44:07","modified_gmt":"2026-08-31T20:44:07","slug":"basecloud-boost","status":"publish","type":"plugin","link":"https:\/\/es-gt.wordpress.org\/plugins\/basecloud-boost\/","author":23342161,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.4.1","stable_tag":"1.4.1","tested":"6.9.7","requires":"5.5","requires_php":"7.4","requires_plugins":null,"header_name":"BaseCloud Boost","header_author":"BaseCloud","header_description":"World-class page caching, asset optimization, and performance acceleration for WordPress \u2014 by BaseCloud.","assets_banners_color":"afbec6","last_updated":"2026-08-31 20:44:07","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/basecloud.co\/boost","header_author_uri":"https:\/\/basecloud.co","rating":0,"author_block_rating":0,"active_installs":40,"downloads":1352,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"basecloud","date":"2026-06-03 20:39:32","revision":3559990},"1.0.1":{"tag":"1.0.1","author":"basecloud","date":"2026-06-04 09:42:14","revision":3560620},"1.0.2":{"tag":"1.0.2","author":"basecloud","date":"2026-06-04 10:53:50","revision":3560763},"1.0.3":{"tag":"1.0.3","author":"basecloud","date":"2026-06-04 12:59:26","revision":3560979},"1.0.4":{"tag":"1.0.4","author":"basecloud","date":"2026-06-08 21:28:02","revision":3565250},"1.0.5":{"tag":"1.0.5","author":"basecloud","date":"2026-06-10 16:02:03","revision":3567774},"1.0.6":{"tag":"1.0.6","author":"basecloud","date":"2026-06-10 16:17:41","revision":3567797},"1.0.7":{"tag":"1.0.7","author":"basecloud","date":"2026-06-10 18:25:28","revision":3567947},"1.0.8":{"tag":"1.0.8","author":"basecloud","date":"2026-06-10 20:36:47","revision":3568049},"1.0.9":{"tag":"1.0.9","author":"basecloud","date":"2026-06-10 21:21:50","revision":3568095},"1.1.0":{"tag":"1.1.0","author":"basecloud","date":"2026-06-15 15:03:24","revision":3573328},"1.1.1":{"tag":"1.1.1","author":"basecloud","date":"2026-06-16 16:24:11","revision":3574767},"1.1.3":{"tag":"1.1.3","author":"basecloud","date":"2026-06-17 12:20:00","revision":3575783},"1.1.4":{"tag":"1.1.4","author":"basecloud","date":"2026-06-17 13:30:56","revision":3575878},"1.1.5":{"tag":"1.1.5","author":"basecloud","date":"2026-06-17 13:55:01","revision":3575917},"1.1.7":{"tag":"1.1.7","author":"basecloud","date":"2026-06-17 18:16:37","revision":3576233},"1.1.8":{"tag":"1.1.8","author":"basecloud","date":"2026-06-17 18:48:22","revision":3576251},"1.1.9":{"tag":"1.1.9","author":"basecloud","date":"2026-06-17 19:14:48","revision":3576279},"1.2.0":{"tag":"1.2.0","author":"basecloud","date":"2026-06-18 19:12:27","revision":3577743},"1.2.1":{"tag":"1.2.1","author":"basecloud","date":"2026-06-18 19:32:24","revision":3577762},"1.2.2":{"tag":"1.2.2","author":"basecloud","date":"2026-06-22 08:02:38","revision":3581402},"1.2.3":{"tag":"1.2.3","author":"basecloud","date":"2026-06-22 13:21:39","revision":3581846},"1.3.0":{"tag":"1.3.0","author":"basecloud","date":"2026-07-03 10:08:29","revision":3595070},"1.3.1":{"tag":"1.3.1","author":"basecloud","date":"2026-07-03 11:04:01","revision":3595131},"1.3.2":{"tag":"1.3.2","author":"basecloud","date":"2026-07-06 20:43:43","revision":3598315},"1.3.3":{"tag":"1.3.3","author":"basecloud","date":"2026-07-06 21:26:29","revision":3598350},"1.3.4":{"tag":"1.3.4","author":"basecloud","date":"2026-07-07 09:38:47","revision":3598771},"1.3.5":{"tag":"1.3.5","author":"basecloud","date":"2026-07-13 09:59:02","revision":3605800},"1.3.6":{"tag":"1.3.6","author":"basecloud","date":"2026-07-15 13:03:05","revision":3608916},"1.3.7":{"tag":"1.3.7","author":"basecloud","date":"2026-07-23 12:47:57","revision":3620031},"1.3.8":{"tag":"1.3.8","author":"basecloud","date":"2026-07-28 09:04:35","revision":3625655},"1.4.0":{"tag":"1.4.0","author":"basecloud","date":"2026-08-31 14:36:35","revision":3674458},"1.4.1":{"tag":"1.4.1","author":"basecloud","date":"2026-08-31 20:44:07","revision":3674942}},"upgrade_notice":{"1.4.1":"<p>Corrects 1.4.0: the new Used CSS engine was switched on for everyone before it had been tested inside a live WordPress site. This release makes it opt-in and switches it off for you if you updated to 1.4.0, clearing the cache once. Re-enabling it yourself sticks. Recommended for anyone on 1.4.0.<\/p>","1.4.0":"<p>Major CSS release. Boost now removes the style rules, font alphabets and stylesheets a page cannot use, and stops text jumping when your fonts load \u2014 measured on live sites, this removes 24-73% of the CSS that delays the first paint. Used CSS is on after updating; everything it removes is still loaded in the background, so a mistake shows up as a late style rather than a broken layout. Clear the cache after updating, check your site, and if anything looks wrong switch Used CSS off under File Optimization.<\/p>","1.3.6":"<p>New built-in Critical CSS generator (Beta, opt-in): create per-template above-the-fold CSS in one click \u2014 no external tooling \u2014 then choose yourself whether to enable Critical CSS inlining and Async CSS. Off by default; nothing changes until you switch it on.<\/p>","1.3.5":"<p>Mobile speed release: hero image downloads start sooner (auto-preconnect), above-the-fold images are never lazy-loaded, lazy images download at their true rendered size, and icon fonts no longer flash placeholder glyphs. Plus a refreshed admin look.<\/p>","1.3.4":"<p>Fixes corrupted WebP\/AVIF conversions (interrupted write or faulty server encoder) being\nserved as broken\/blank images: conversions are now written atomically and must fully decode\nbefore use, with the original image always served as the fallback. After updating, run\n    wp bcboost verify-conversions --delete-broken --regenerate (or re-run Bulk Compress) to\nrepair existing conversions, then clear the cache. Update recommended.<\/p>","1.3.3":"<p>Hero-image detection fixes: images with 4-digit widths (e.g. width=&quot;1000&quot;) lazy-load again\nand can be the preloaded hero, theme background bands and thumbnails are no longer preloaded\nas the hero, and detection now reads the page&#039;s own inline styles. Clear the cache after\nupdating. Update recommended.<\/p>","1.3.2":"<p>Hotfix: WebP\/AVIF serving could display the wrong image when a separately-uploaded media file shared a filename with an image Boost optimized. Boost now verifies a converted file is a real conversion before serving it. Affected pages self-correct after a cache clear. Update recommended.<\/p>","1.3.1":"<p>Hotfix for 1.3.0 on Redis\/persistent-object-cache hosts: settings saves could appear not to stick (values were saved in the database but the object cache kept serving old ones). Self-heals on the first wp-admin load after updating. Update recommended.<\/p>","1.0.3":"<p>Combine CSS is now safe for Elementor\/page-builder sites (relative font and image paths are rewritten correctly). Recommended if you want to cut the number of CSS requests.<\/p>","1.0.2":"<p>Important fix: JavaScript minification could break theme scripts and leave a loading\/preloader screen spinning so the page never rendered. Update strongly recommended.<\/p>","1.0.1":"<p>Fixes &quot;cleared cache but still see the old page&quot; (HTML is no longer over-cached by browsers) and lazy loading that could hide images\/videos. Adds automatic image compression with a bulk tool, makes pages faster, encrypts your API keys, and turns the toolbar Boost Cache button into an instant in-place clear. Recommended for all users.<\/p>","1.0.0":"<p>Initial public release. No upgrade steps required.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3559990,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3559990,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3559990,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3559990,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["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.3","1.1.4","1.1.5","1.1.7","1.1.8","1.1.9","1.2.0","1.2.1","1.2.2","1.2.3","1.3.0","1.3.1","1.3.2","1.3.3","1.3.4","1.3.5","1.3.6","1.3.7","1.3.8","1.4.0","1.4.1"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Dashboard -- live cache statistics, feature status overview, and one-click cache clear.","2":"Page Cache settings -- configure cache lifetime, exclusions, and mobile cache separation.","3":"File Optimization -- HTML, CSS, and JS minification and combining controls.","4":"Media settings -- lazy loading, WebP\/AVIF serving, and video facade options.","5":"CDN settings -- Cloudflare and BunnyCDN API integration configuration.","6":"Database Optimizer -- one-click cleanup for revisions, transients, and orphaned data."}},"plugin_section":[],"plugin_tags":[146,144,187,247,794],"plugin_category":[52,54],"plugin_contributors":[246295],"plugin_business_model":[],"class_list":["post-295388","plugin","type-plugin","status-publish","hentry","plugin_tags-cache","plugin_tags-caching","plugin_tags-optimization","plugin_tags-performance","plugin_tags-speed","plugin_category-performance","plugin_category-security-and-spam-protection","plugin_contributors-basecloud","plugin_committers-basecloud"],"banners":{"banner":"https:\/\/ps.w.org\/basecloud-boost\/assets\/banner-772x250.png?rev=3559990","banner_2x":"https:\/\/ps.w.org\/basecloud-boost\/assets\/banner-1544x500.png?rev=3559990","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/basecloud-boost\/assets\/icon-128x128.png?rev=3559990","icon_2x":"https:\/\/ps.w.org\/basecloud-boost\/assets\/icon-256x256.png?rev=3559990","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>BaseCloud Boost<\/strong> is a professional-grade WordPress performance plugin that dramatically speeds up your website through intelligent full-page caching, asset optimization, and smart cache management.<\/p>\n\n<h4>Core Features<\/h4>\n\n<p><strong>Page Cache<\/strong><\/p>\n\n<ul>\n<li>Full-page HTML caching that bypasses WordPress and PHP entirely for maximum throughput<\/li>\n<li>GZIP and Brotli compression variants stored alongside each cached page<\/li>\n<li>Smart cache invalidation on post updates, comment submissions, and taxonomy changes<\/li>\n<li>Configurable cache lifetime (default: 7 days)<\/li>\n<li>Separate mobile device cache for responsive-aware caching<\/li>\n<li>Cache exclusion by URL pattern or cookie name<\/li>\n<\/ul>\n\n<p><strong>Asset Optimization<\/strong><\/p>\n\n<ul>\n<li>HTML, CSS, and JavaScript minification<\/li>\n<li>CSS and JS file combining to reduce HTTP requests<\/li>\n<li>JavaScript deferral for faster first paint<\/li>\n<li>Critical CSS extraction and inline injection<\/li>\n<li>Remove query strings from static asset URLs for better CDN hit rates<\/li>\n<li>Async-load non-critical Google Fonts with font-display=swap<\/li>\n<\/ul>\n\n<p><strong>Media Optimization<\/strong><\/p>\n\n<ul>\n<li>Reliable native lazy loading for images, iframes, and videos -- defers off-screen media without ever hiding it, so images always appear<\/li>\n<li>On-the-fly image compression -- generates high-quality WebP copies of your images on upload, plus a one-click Bulk Compress tool for your existing media library<\/li>\n<li>Quality-preserving compression -- originals are never altered; WebP copies are created alongside them at a tunable visually-lossless quality<\/li>\n<li>WebP and AVIF serving -- automatically serves the next-gen format when available<\/li>\n<li>Video facade for YouTube and Vimeo -- replaces iframes with click-to-play thumbnails<\/li>\n<li>preload=\"none\" applied to video tags for faster page loads<\/li>\n<\/ul>\n\n<p><strong>Cache Preloader<\/strong><\/p>\n\n<ul>\n<li>Automatic sitemap-based URL discovery<\/li>\n<li>Background batch processing to keep the cache warm<\/li>\n<li>Real-time progress tracking in the admin dashboard<\/li>\n<\/ul>\n\n<p><strong>CDN Integration<\/strong><\/p>\n\n<ul>\n<li>Generic CDN hostname rewriting for any CDN provider<\/li>\n<li>Cloudflare API cache purging -- automatically clears Cloudflare edge cache on purge<\/li>\n<li>BunnyCDN API cache purging -- mirrors local purge events to your Pull Zone<\/li>\n<\/ul>\n\n<p><strong>Database Optimization<\/strong><\/p>\n\n<ul>\n<li>Post revision cleanup<\/li>\n<li>Auto-draft and trashed post\/comment removal<\/li>\n<li>Expired transient removal<\/li>\n<li>Orphaned postmeta cleanup<\/li>\n<li>Table optimization (OPTIMIZE TABLE)<\/li>\n<\/ul>\n\n<p><strong>Security Headers<\/strong><\/p>\n\n<ul>\n<li>X-Content-Type-Options, X-Frame-Options, Referrer-Policy<\/li>\n<li>Permissions-Policy (FLoC\/Topics API opt-out)<\/li>\n<li>Strict-Transport-Security (HSTS) for HTTPS sites<\/li>\n<\/ul>\n\n<p><strong>Developer-Friendly<\/strong><\/p>\n\n<ul>\n<li>Full hook API: filter cache behaviour, modify HTML before write, extend CDN purge logic<\/li>\n<li>WP-CLI commands for cache management<\/li>\n<li>PSR-4 autoloaded class architecture<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>BaseCloud Boost connects to the following external services <strong>only when you explicitly configure them<\/strong> in the plugin settings. No data is sent to any third-party service by default.<\/p>\n\n<h4>Cloudflare Cache Purge API (Optional)<\/h4>\n\n<p>If you enable Cloudflare CDN integration and provide a Zone ID and API Token, the plugin calls the Cloudflare API to purge cached content whenever your local cache is cleared.<\/p>\n\n<ul>\n<li>Service: Cloudflare, Inc.<\/li>\n<li>What it is used for: Purging edge-cached pages so visitors see fresh content after a cache clear.<\/li>\n<li>When data is sent: Only when you trigger a cache purge (manually, on post save, or via plugin action).<\/li>\n<li>Data sent: List of URLs to purge and your Cloudflare Zone ID (via your API token).<\/li>\n<li>API endpoint: https:\/\/api.cloudflare.com\/client\/v4\/zones\/{zone_id}\/purge_cache<\/li>\n<li>Terms of Service: https:\/\/www.cloudflare.com\/terms\/<\/li>\n<li>Privacy Policy: https:\/\/www.cloudflare.com\/privacypolicy\/<\/li>\n<\/ul>\n\n<h4>BunnyCDN Cache Purge API (Optional)<\/h4>\n\n<p>If you enable BunnyCDN integration and provide an API Key and Pull Zone ID, the plugin calls the BunnyCDN API to purge cached content whenever your local cache is cleared.<\/p>\n\n<ul>\n<li>Service: BunnyWay d.o.o. (BunnyCDN)<\/li>\n<li>What it is used for: Purging Pull Zone edge cache so visitors receive fresh content.<\/li>\n<li>When data is sent: Only when you trigger a cache purge.<\/li>\n<li>Data sent: URLs to purge and your API key.<\/li>\n<li>API endpoints: https:\/\/api.bunny.net\/purge and https:\/\/api.bunny.net\/pullzone\/{id}\/purgeCache<\/li>\n<li>Terms of Service: https:\/\/bunny.net\/tos\/<\/li>\n<li>Privacy Policy: https:\/\/bunny.net\/privacy\/<\/li>\n<\/ul>\n\n<h4>Performance Metrics Webhook (Optional)<\/h4>\n\n<p>If you configure a webhook URL in the plugin settings, BaseCloud Boost will POST a JSON payload containing anonymous performance metrics to that URL on a daily cron schedule.<\/p>\n\n<ul>\n<li>Service: Custom endpoint configured by you.<\/li>\n<li>What it is used for: Sending performance data to an external monitoring or reporting system.<\/li>\n<li>When data is sent: Once per day via a scheduled cron event, and when you manually send a test from the admin panel.<\/li>\n<li>Data sent: Cache hit rate, cache size, bytes saved (HTML\/CSS\/JS), last purge time, plugin version, site URL, and site name. No user data or passwords are included.<\/li>\n<li>Endpoint: Your custom URL -- you are responsible for its security and privacy compliance.<\/li>\n<\/ul>\n\n<h4>Google PageSpeed Insights API (Optional)<\/h4>\n\n<p>If you enter a PageSpeed Insights API key in the Lighthouse settings, the plugin calls Google's PageSpeed Insights API to run automated Lighthouse audits for your site.<\/p>\n\n<ul>\n<li>Service: Google LLC (PageSpeed Insights)<\/li>\n<li>What it is used for: Running automated Lighthouse performance audits (Performance, Accessibility, Best Practices, SEO scores).<\/li>\n<li>When data is sent: When you manually trigger an audit from the Lighthouse settings page, or on the scheduled Lighthouse cron (if enabled).<\/li>\n<li>Data sent: Your site URL and your API key.<\/li>\n<li>API endpoint: https:\/\/www.googleapis.com\/pagespeedonline\/v5\/runPagespeed<\/li>\n<li>Terms of Service: https:\/\/developers.google.com\/terms<\/li>\n<li>Privacy Policy: https:\/\/policies.google.com\/privacy<\/li>\n<\/ul>\n\n<h4>Vimeo oEmbed API (Conditional)<\/h4>\n\n<p>If a page contains a Vimeo video facade, the plugin's frontend JavaScript fetches the video thumbnail from the Vimeo public oEmbed API. This happens in the visitor's browser, not on the server.<\/p>\n\n<ul>\n<li>Service: Vimeo, Inc.<\/li>\n<li>What it is used for: Retrieving the video thumbnail image to display in the click-to-play facade.<\/li>\n<li>When data is sent: When a page containing a Vimeo video facade is viewed by a visitor.<\/li>\n<li>Data sent: The Vimeo video ID (no user data or authentication is required).<\/li>\n<li>API endpoint: https:\/\/vimeo.com\/api\/v2\/video\/{id}.json<\/li>\n<li>Terms of Service: https:\/\/vimeo.com\/terms<\/li>\n<li>Privacy Policy: https:\/\/vimeo.com\/privacy<\/li>\n<\/ul>\n\n<h4>Google Tag Manager \/ Google Fonts Preconnect Hints (Conditional)<\/h4>\n\n<p>When the Resource Hints module is enabled, the plugin outputs <code>&lt;link rel=\"preconnect\"&gt;<\/code> and <code>&lt;link rel=\"dns-prefetch\"&gt;<\/code> hints for common third-party origins (Google Tag Manager, Google Analytics, Google Fonts, jsDelivr\/cdnjs). These are passive hints that tell the browser to pre-establish connections \u2014 no data is sent by the plugin itself.<\/p>\n\n<ul>\n<li>Service: Various (Google LLC, Cloudflare, Inc.)<\/li>\n<li>What it is used for: Reducing connection latency for third-party resources already loaded by your theme or other plugins.<\/li>\n<li>When data is sent: The browser (not the plugin) initiates the connection. No plugin data is transmitted.<\/li>\n<li>Terms of Service \/ Privacy: Governed by the respective third-party services.<\/li>\n<\/ul>\n\n<p>All remote requests originating from the plugin server-side use WordPress's built-in wp_remote_post() \/ wp_remote_get() functions and respect your server's SSL configuration.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>basecloud-boost<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory.<\/li>\n<li>Activate the plugin through the 'Plugins' menu in WordPress.<\/li>\n<li>Navigate to <strong>BaseCloud Boost &gt; Dashboard<\/strong> to configure.<\/li>\n<li>Enable Page Cache and click <strong>Boost Cache<\/strong> to start caching immediately.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20basecloud%20boost%20work%20with%20woocommerce%3F\"><h3>Does BaseCloud Boost work with WooCommerce?<\/h3><\/dt>\n<dd><p>Yes. Cart, checkout, and My Account pages are automatically excluded from caching. Active WooCommerce cart session cookies bypass the cache transparently.<\/p><\/dd>\n<dt id=\"is%20it%20compatible%20with%20wordpress%20multisite%3F\"><h3>Is it compatible with WordPress Multisite?<\/h3><\/dt>\n<dd><p>Yes. BaseCloud Boost supports WordPress Multisite with per-site cache directories.<\/p><\/dd>\n<dt id=\"can%20i%20use%20it%20with%20cloudflare%20or%20bunnycdn%3F\"><h3>Can I use it with Cloudflare or BunnyCDN?<\/h3><\/dt>\n<dd><p>Yes. BaseCloud Boost includes Cloudflare and BunnyCDN API integrations. When you purge the local page cache, the plugin automatically purges the corresponding edge cache too.<\/p><\/dd>\n<dt id=\"will%20it%20conflict%20with%20other%20caching%20plugins%3F\"><h3>Will it conflict with other caching plugins?<\/h3><\/dt>\n<dd><p>Running multiple full-page caching plugins simultaneously is not recommended and can produce unexpected results. BaseCloud Boost detects and warns you about other active caching plugins on the Dashboard.<\/p><\/dd>\n<dt id=\"what%20if%20my%20site%20breaks%20after%20activating%20the%20plugin%3F\"><h3>What if my site breaks after activating the plugin?<\/h3><\/dt>\n<dd><p>Deactivate the plugin from the Plugins screen. This automatically removes the advanced-cache.php drop-in and disables WP_CACHE, restoring your site to its previous state.<\/p><\/dd>\n<dt id=\"does%20basecloud%20boost%20modify%20wp-config.php%3F\"><h3>Does BaseCloud Boost modify wp-config.php?<\/h3><\/dt>\n<dd><p>Yes. On activation it sets <code>define( 'WP_CACHE', true )<\/code> in <code>wp-config.php<\/code> so WordPress loads the <code>advanced-cache.php<\/code> drop-in. On deactivation this line is removed. The change is minimal and clearly labelled so it is easy to identify.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.4.1<\/h4>\n\n<p><strong>Used CSS is now opt-in. If you updated to 1.4.0, this switches it back off for you.<\/strong><\/p>\n\n<p>1.4.0 introduced the Used CSS engine and switched it on for everybody. That was the wrong call and this release corrects it.<\/p>\n\n<p>The engine's analysis was checked thoroughly, but only offline \u2014 against copies of real client pages, never inside a running WordPress site. The parts that touch a live request (finding the stylesheets in the page, swapping in the shortened version, building it after the page is sent) had no testing at all, and there was no library of theme and plugin combinations to justify turning something that rewrites every page's CSS on for everyone by default.<\/p>\n\n<ul>\n<li><strong>Used CSS is off unless you switch it on.<\/strong> Updating from 1.4.0 turns it off for you and clears the cache, once. If you deliberately switch it back on afterwards, it stays on. Nothing about how it works has changed \u2014 it is the same engine, now behind a switch.<\/li>\n<li><strong>Dropping unused font alphabets is off too.<\/strong> It reads the characters on the page to decide which alphabets a font needs, and it cannot see text that arrives afterwards \u2014 comments, product names loaded as you scroll, translations inserted by a script. Those would show as empty boxes. A version that decides from your site's language instead of from one page is the correct approach and is not built yet.<\/li>\n<li><strong>Everything else from 1.4.0 is unaffected<\/strong> and stays as it was: the page cache, image conversion, the third-party script delay, Elementor Speed, and Lazy Render (which was already off by default).<\/li>\n<\/ul>\n\n<p>Note that the font-swap layout fix introduced in 1.4.0 is delivered as part of the Used CSS bundle, so it is inactive while Used CSS is off. Separating the two is on the list.<\/p>\n\n<p><strong>What happens next:<\/strong> a compatibility test suite across common themes and plugins, with screenshot comparison and scripted interaction, so that switching this on by default is backed by evidence rather than judgement. Until then it stays opt-in.<\/p>\n\n<h4>1.4.0<\/h4>\n\n<p><strong>The CSS release: your pages stop waiting for stylesheets they cannot use<\/strong><\/p>\n\n<p>A page cannot show anything until the browser has downloaded and read every stylesheet in its head. Measured across ten live client sites, each one was making phones read between 0.8 MB and 1.9 MB of CSS before a single word could appear \u2014 and between a third and three quarters of it belonged to widgets, icon sets, forms and languages that were nowhere on the page. Not one byte of it was being loaded in the background. That, rather than JavaScript, is why mobile scores stayed low on sites where the cache, the image conversion and the third-party script delay were all working correctly.<\/p>\n\n<ul>\n<li><strong>New: Used CSS (switched on).<\/strong> Boost now works out which style rules a page can actually reach, and serves only those \u2014 as one stylesheet per group instead of dozens of separate requests. On the sites it was built against this removed between 24% and 73% of the CSS blocking the first paint; on one page 1,316 KB fell to 355 KB, and a stylesheet that appeared four separate times went from 57 KB to 2 KB. Stylesheets are only ever merged in the order they already appear and never across an inline style block, so nothing changes position and your styling order is exactly what it was. <strong>The first visitor to a page never waits for this<\/strong> \u2014 the page is served exactly as before while Boost works it out in the background, and the shorter version starts serving once it is ready.<\/li>\n<li><strong>New: a safety net that repairs its own mistakes (switched on).<\/strong> Everything Used CSS removes is still loaded, as a second stylesheet that does not hold up the page. Those rules match nothing, so normally they do nothing at all \u2014 but if a rule was removed in error, or only becomes needed once a menu opens or a form reports an error, it is already there. The worst case becomes a style that arrives a moment late rather than a broken layout. You can switch it off for a little more speed once you have tested a site, and the setting explains the trade.<\/li>\n<li><strong>New: unused font alphabets are dropped (switched on).<\/strong> A font stylesheet declares every alphabet a typeface supports \u2014 Latin, Cyrillic, Greek, Vietnamese and a large block of symbols \u2014 for every single weight. On an English site almost none of it can ever be used, yet the browser reads all of it before painting. One family measured 102 KB on a client site; 61 KB of that was alphabets the page never writes in. Boost reads the characters actually on the page and keeps every alphabet they need. This does not change which font files are downloaded \u2014 browsers already fetch only what they need \u2014 it removes the reading work before the first paint.<\/li>\n<li><strong>New: text stops jumping when your fonts load (switched on).<\/strong> Text is drawn first in a standard font and redrawn in your real font once it arrives. The two are different heights, so at that moment every line changes size and everything below it shifts down the page. Google measures that shifting directly and it is a quarter of the performance score. Boost now gives the stand-in font the exact height of your real font so the swap moves nothing. The measurements come from the font files themselves rather than being estimated, and fonts Boost has no measurements for are left alone.<\/li>\n<li><strong>New (optional, off by default): Lazy Render.<\/strong> Lets the browser postpone drawing sections far down a long page until the visitor scrolls near them. The content is still fully present and still found by search engines and by Ctrl+F. It is off by default deliberately: to skip that work the browser has to seal each section off permanently, which clips anything designed to overhang its edges and re-anchors anything pinned to the screen. Overlapping sections and overhanging decoration are common in Elementor and Divi and Boost cannot tell from the page whether your design relies on them. Sticky, popup, overlay and parallax sections are skipped automatically. Switch it on, scroll the whole page on a phone and a desktop, and check nothing has been clipped or moved.<\/li>\n<\/ul>\n\n<p><strong>If something looks wrong<\/strong><\/p>\n\n<p>This is the first release of a new CSS engine. It was built and checked against real client pages, but every site is different. If anything looks off, switch <strong>Used CSS<\/strong> off under File Optimization and clear the cache \u2014 the page returns to exactly its previous behaviour immediately. Individual stylesheets can also be excluded there without giving up the benefit elsewhere.<\/p>\n\n<h4>1.3.9<\/h4>\n\n<p><strong>Mobile release: Combine CSS actually combines now, self-hosted fonts stop bloating every page, and Boost tells you which optimizations you have left switched off<\/strong><\/p>\n\n<ul>\n<li><strong>Fixed: \"Combine CSS\" was silently doing almost nothing.<\/strong> WordPress adds a version tag to nearly every stylesheet address (<code>style.css?ver=4.2.1<\/code>). Boost looked for a file with that version tag <em>in its name<\/em>, never found one, and quietly skipped the stylesheet \u2014 so on a normal site the combiner merged only the rare stylesheet that happened to carry no version, and everything else still loaded as its own render-blocking request. Measured on a live client site: Combine CSS switched on, and 44 of the page's 47 stylesheets were still arriving individually. Combining now works as described. <strong>Please re-test any site where you have Combine CSS enabled<\/strong> \u2014 for the first time it will genuinely merge your stylesheets, which is a large mobile win but also the change most likely to disturb a slider, form or menu. Check the site after updating and clear the cache; if anything looks wrong, switch Combine CSS off. (Minification was never affected \u2014 only combining.)<\/li>\n<li><strong>Fixed: self-hosted Google Fonts were being embedded into every single page.<\/strong> With \"Self-Host Google Fonts\" enabled, Boost pasted the entire localised font stylesheet directly into the page. On a real site that meant 138 KB of font CSS inside every HTML response \u2014 re-sent on every page view, stored in every cached page, and parsed before the page could paint. Localised font CSS is now written once to a cached, permanently-cacheable stylesheet and linked, so the browser downloads it a single time for the whole site. Small font stylesheets (under 8 KB) are still embedded, where doing so genuinely saves a request.<\/li>\n<\/ul>\n\n<p><strong>Also in this release<\/strong><\/p>\n\n<ul>\n<li><strong>New: the Mobile Score Advisor (Dashboard).<\/strong> Boost's biggest optimizations ship switched off on purpose, because switching them on for you could break a site. The unintended result was that most installs quietly ran only the safest fraction of what the plugin can do \u2014 a fleet audit found every site slow on mobile for that reason alone, not because of any defect. The dashboard now reads this site's own settings and states plainly which mobile levers are off and what each one costs, with a one-click button that switches on <strong>only the safe-by-default ones<\/strong> and clears the cache. File combining is deliberately never applied for you: it is the optimization most likely to disturb a slider, form or menu, so the advisor explains it and leaves the decision \u2014 and the testing \u2014 with you.<\/li>\n<li><strong>New: Elementor stylesheet bundling (part of Elementor Speed).<\/strong> Since Elementor 3.24 each widget loads its own small stylesheet; a real page was measured carrying 22 of them among 34 render-blocking stylesheets. Boost now merges neighbouring Elementor stylesheets into one fingerprinted file. Only Elementor's own shipped files are merged \u2014 never your page CSS, your theme, or anything a builder generated \u2014 and any other stylesheet sitting between two of them ends the merge, so the styling order is bit-for-bit what it was. The bundle stays render-blocking (content is still styled before it paints), and the whole pass stands down automatically if you enable the site-wide Combine CSS.<\/li>\n<li><strong>New (opt-in): non-blocking Elementor fonts.<\/strong> When Elementor hosts Google Fonts locally it writes every weight and style of a family into a single stylesheet \u2014 over 100 KB for one family is common \u2014 and the page cannot paint until it arrives. This option loads those stylesheets in the background instead. Elementor already displays text in a fallback font while webfonts load, so the final rendering is unchanged; the page simply appears sooner. Off by default because the switch to the real font becomes more noticeable on slow connections.<\/li>\n<li><strong>Improved: more Elementor page CSS is now inlined.<\/strong> The per-file size limit for embedding Elementor's per-page stylesheets was raised from 15 KB to 50 KB after measuring real sites, where the largest page stylesheets (25\u201340 KB) were exactly the ones being skipped \u2014 and therefore left as render-blocking requests. CSS compresses roughly six-to-one, so the added page weight is a few kilobytes in exchange for removing a round-trip.<\/li>\n<\/ul>\n\n<h4>1.3.8<\/h4>\n\n<p><strong>Hotfix: video and iframe embeds render reliably again<\/strong><\/p>\n\n<ul>\n<li><strong>Fixed YouTube\/Vimeo embeds erroring in the editor and rendering empty on the site.<\/strong> The \"Disable Embeds\" optimization (on by default) removed not just WordPress's embed <em>assets<\/em> but its embed <em>rendering<\/em> machinery \u2014 the editor's embed preview returned \"Sorry, this content could not be embedded\", and a URL-based embed could resolve to nothing and then be frozen empty by the page cache. The toggle now does only its real job: stop serving wp-embed.min.js and this site's embed-discovery links. Embed rendering can no longer be affected by it. If a page cached an empty embed, one Clear Cache repairs it.<\/li>\n<li><strong>Changed: the click-to-play video facade is now opt-in (was on by default).<\/strong> Replacing YouTube\/Vimeo players with thumbnail facades is an aggressive optimization: it changes playback to two clicks, conflicts with builder video widgets, and errors outright on sites whose security headers deny autoplay\/encrypted-media. Sites that want it can enable \"Video Facade\" deliberately; its play-button icon (previously invisible due to a rendering bug) is also fixed.<\/li>\n<li><strong>Fixed autoplaying hero\/background videos being demoted to <code>preload=\"none\"<\/code>.<\/strong> An autoplay video must start buffering immediately \u2014 its poster is usually the page's LCP. Only passive click-to-play videos are now demoted.<\/li>\n<\/ul>\n\n<h4>1.3.7<\/h4>\n\n<p><strong>Elementor Speed (opt-in), a redesigned Light\/Dark admin, the Fleet Ops read-only API, and an HTML-freshness correctness fix<\/strong><\/p>\n\n<ul>\n<li><strong>New: Elementor Speed \u2014 Boost finally optimizes Elementor instead of only protecting it (opt-in).<\/strong> Most Elementor sites carry the same invisible weight: 4\u201327 tiny render-blocking <code>post-*.css<\/code> requests per page, an always-loaded <code>eicons<\/code> icon stylesheet, and Font Awesome shims. The new module (File Optimization \u2192 Elementor Speed, master toggle <strong>off<\/strong> until you enable it) inlines each page's own Elementor CSS straight into the HTML (identical rules, same position, minus every one of those blocking requests), drops the eicons\/Font Awesome stylesheets only on pages that provably use no icons, lightboxes, popups or carousels (any doubt = the sheet stays), and adds a read-only advisor that flags Elementor settings worth changing (font-display swap, Inline Font Icons, Element Caching alongside a page cache). Elementor's own JavaScript and init order are never touched \u2014 that is exactly what historically breaks sliders and forms \u2014 and the advisor also warns on oversized DOM (Boost will never restructure your markup; the fix belongs in the builder).<\/li>\n<li><strong>New: the Boost admin now has true Light and Dark modes.<\/strong> Appearance \u2192 Interface Mode switches the whole panel \u2014 every card, dropdown, text field and toggle re-themes with full contrast in both modes, previewing instantly. Typography is refreshed with a premium display face (Space Grotesk) over Inter. The bright Goop WebGL backdrop is retired (existing installs migrate to Dark automatically); the Classic particles and all six ambient video backdrops remain as optional dark-mode extras. Your four accent colours now adapt automatically so text stays readable on light surfaces whatever colours you pick.<\/li>\n<li><strong>Preview: Fleet Ops (BaseCloud CRM) \u2014 visible on the Advanced screen, marked \"Unavailable Right Now\".<\/strong> The plugin side of BaseCloud's central monitoring (a read-only <code>bcboost\/v1<\/code> REST API with a revocable, encrypted pairing key and optional signed requests) ships in this release but stays fully dormant \u2014 the API does not register and there is nothing to configure \u2014 until the BaseCloud service goes live in a future update.<\/li>\n<li><strong>Fixed stale HTML on hosts with an edge cache when \"Browser Cache Headers\" was off.<\/strong> That toggle previously gated <em>all<\/em> Cache-Control output \u2014 with it off, HTML went out with no Cache-Control at all, so browsers heuristic-cached pages that no server-side purge could ever reach (found live on an Oxygen\/Varnish site). HTML freshness headers (<code>max-age=0, must-revalidate<\/code>, plus logged-in no-store protection) are now sent unconditionally \u2014 the toggle only gates the static-asset caching rules, as it always should have.<\/li>\n<li><strong>Improved: async-CSS protection patterns can now be precise.<\/strong> Exclusion entries accept <code>regex:<\/code> patterns alongside substrings, so Oxygen's numeric per-page stylesheets are protected exactly \u2014 while its site-wide sheets stay eligible for minify\/combine\/async. An invalid pattern fails closed (the stylesheet stays render-blocking) and is logged: a typo can slow a page, never break one.<\/li>\n<li><strong>Improved: cross-origin video-background heroes get a preconnect.<\/strong> Hero videos streamed from a different origin (Azure blob, S3, video CDN) now have their connection warmed before the first byte is requested, the same treatment image heroes already get.<\/li>\n<li><strong>Improved: GZIP compression rules are always written to .htaccess<\/strong> \u2014 compression is a correctness-neutral win and no longer depends on the browser-cache toggle.<\/li>\n<\/ul>\n\n<h4>1.3.6<\/h4>\n\n<p><strong>New: a built-in Critical CSS generator (Beta, opt-in) \u2014 the key that unlocks async CSS<\/strong><\/p>\n\n<ul>\n<li><strong>Boost can now create critical CSS itself \u2014 no Node, no headless Chrome, no external service.<\/strong> The number-one thing holding back mobile scores on most sites is a wall of render-blocking stylesheets, and the cure (inlining the above-the-fold \"critical\" CSS, then loading the rest asynchronously) previously required generating that CSS with external tooling. The new built-in generator does it in pure PHP on your own server: it reads each template's page, determines which stylesheet rules the above-the-fold content actually uses, and fills the Per-Template Critical CSS store at the press of a button.<\/li>\n<li><strong>You choose \u2014 nothing turns itself on.<\/strong> The generator ships <strong>off<\/strong>; enable it under Advanced \u2192 Critical CSS (\"Built-In Critical CSS Generator (Beta)\"), press <em>Generate for all templates<\/em>, and review the results per template. Inlining (Enable Critical CSS) and Async CSS (File Optimization) remain separate switches you flip yourself, and the long-standing safety gate is unchanged: any page without critical-CSS coverage automatically keeps safe render-blocking CSS \u2014 a page can never paint unstyled because coverage was missing.<\/li>\n<li><strong>New: six ambient video backdrops for the Boost admin.<\/strong> The Appearance screen now offers looping video themes \u2014 Boost Rocket, Goop Motion, Lava Lamp, Colours, Fish Tank, and Zombies \u2014 behind the glass UI, alongside the Goop, Classic, and Minimal engines. Hover a card to preview its motion before choosing. Heavily compressed (all six together add ~4 MB to the plugin, sources were 140 MB), admin-only (never loaded on your website), paused in hidden tabs, and reduced-motion users get a still frame.<\/li>\n<li><strong>Improved: smarter preconnects.<\/strong> Boost no longer preconnects to a fixed list of third-party origins on every page \u2014 it now checks which origins the page actually references (Tag Manager, Analytics, Google Fonts\u2026) and hints only those, capped at the browser's useful budget of four. Unused preconnects were burning TLS handshakes inside the critical first-paint window and drawing Lighthouse's \"preconnect not used\" warning.<\/li>\n<li><strong>Improved: one hero per page \u2014 competing image priorities are demoted.<\/strong> When the detected hero is a background, slider, or video-poster image, WordPress core (or the theme) may still have marked a different content image <code>fetchpriority=\"high\"<\/code> \u2014 two \"highest priority\" images then fight for the same critical bandwidth and both paint later. Boost now removes the competing marker (returning those images to normal browser priority, never forcing them low) so the real hero wins the connection.<\/li>\n<li><strong>Improved: the cache preloader now warms the mobile variant too.<\/strong> With \"Separate mobile cache\" enabled, the preloader previously warmed only the desktop copy of each page \u2014 phone visitors (and Google's mobile speed test) always hit a cold cache first. Every warmed URL is now fetched with a desktop and a mobile browser identity, so both variants are hot.<\/li>\n<li><strong>Built defensively.<\/strong> Same-origin stylesheets are read from disk only (never fetched over the network), with strict file-count and size caps; generated output is size-capped, sanitized like every other critical-CSS source, and ambiguous selectors resolve toward keeping a rule (worst case a few extra bytes \u2014 never missing styles). A configured remote generation-service endpoint still takes precedence when you have one, and existing manual\/CLI workflows are untouched. Regenerate any time from the same button \u2014 e.g. after the \"may be stale\" banner appears following a theme or builder change.<\/li>\n<\/ul>\n\n<h4>1.3.5<\/h4>\n\n<p><strong>Mobile speed release: the hero image starts downloading sooner, above-the-fold images are never lazy-loaded, lazy images download at their true rendered size, and icon fonts no longer flash placeholder glyphs<\/strong><\/p>\n\n<ul>\n<li><strong>New: automatic preconnect to the hero image's origin and your CDN.<\/strong> The browser now opens the network connection (DNS + TCP + TLS) to the CDN and to whichever origin serves the page's hero image <em>before<\/em> it is asked to download it, saving a full round-trip on high-latency mobile connections \u2014 the hero starts downloading sooner, directly improving Largest Contentful Paint (LCP). A safe, standards-based resource hint (https, cross-origin only, never duplicated); toggle under Media \u2192 \"Auto-Preconnect Hero &amp; CDN Origin\".<\/li>\n<li><strong>New: leading above-the-fold images are kept eager.<\/strong> On phones the first screen usually holds 2\u20133 images, and lazy-loading them delays first paint (PageSpeed's \"LCP image was lazy-loaded\" flag). The hero plus the next above-the-fold image now always load immediately; the count is tunable under Media \u2192 \"Above-the-Fold Images Kept Eager\". Below-the-fold images are additionally hinted <code>fetchpriority=\"low\"<\/code> so the hero keeps the bandwidth.<\/li>\n<li><strong>New: lazy images download at their true rendered size.<\/strong> Every lazy-loaded responsive image now carries <code>sizes=\"auto\"<\/code> (the WordPress 6.7 core mechanism, applied by Boost on older WordPress and page-builder markup too): supporting browsers pick the image variant that matches how large the image actually renders instead of a viewport-width guess \u2014 on phones this substantially cuts image bytes and fixes the PageSpeed \"Properly size images\" flag. Older browsers simply ignore it. Toggle under Media \u2192 \"Right-Size Lazy Images\".<\/li>\n<li><strong>Fixed icon fonts flashing a wrong character or placeholder box while loading.<\/strong> The font-display optimisation applied <code>swap<\/code> to <em>every<\/em> font, including icon fonts (Font Awesome, Dashicons, Divi\/Elementor icon packs, WooCommerce stars) \u2014 during the swap window the fallback font would paint a meaningless letter or tofu box where each icon belongs, most visibly on slow mobile connections. Icon fonts are now detected (by name and by their private-use-area unicode-range) and get <code>block<\/code> \u2014 briefly invisible, then the correct icon \u2014 while text fonts keep <code>swap<\/code> so real copy is never invisible. Detection matches font family names and file names only, never directory paths, so a text font that merely lives in a theme or plugin folder with an icon-like name is untouched.<\/li>\n<li><strong>Improved: more third-party scripts can be safely delayed.<\/strong> The curated delay list (analytics, heatmaps, chat widgets, ad pixels that never render page content) now also covers Zopim\/Zendesk Chat, Tidio, Smartsupp, Chatra, Olark, Zoho SalesIQ, Freshchat, Userlike, Clicky, Crazy Egg, Lucky Orange, Inspectlet, Smartlook, Heap, Fathom, Simple Analytics, Matomo Cloud, Criteo, Outbrain, Reddit Ads, and Quora Ads. Vendors whose scripts can render visible page content (Freshworks CDN, affiliate attribution tags) were deliberately reviewed and excluded.<\/li>\n<li><strong>Improved: hero detection now reads Elementor's external page CSS.<\/strong> When Elementor stores a page's styles as an external file (its default mode), a section's background hero lives in <code>uploads\/elementor\/css\/post-*.css<\/code> where detection previously could not see it \u2014 those pages silently got no hero preload. The detector now reads just those local files (never a network fetch, tightly capped) so external-file Elementor heroes are preloaded like everyone else's. Sections with different desktop\/mobile backgrounds are still deliberately skipped rather than guessed.<\/li>\n<li><strong>Changed: image serving is now WebP-only by default \u2014 AVIF becomes a deliberate opt-in.<\/strong> AVIF produced broken or blank images on servers whose encoder emits files it cannot verify (even with 1.3.4's validation, hosts without an AVIF decoder can't prove their output), while WebP delivers nearly the same savings with rock-solid reliability. Existing installs are switched to WebP-only once on upgrade (a dismissible notice explains this); your original images and any existing .avif files are untouched, and re-enabling AVIF under Media settings afterwards is respected forever.<\/li>\n<li><strong>New: WebM video served automatically when a copy exists.<\/strong> Boost never converts video on your server (PHP can't, and re-encoding would be slow and lossy) \u2014 but when you place a .webm copy next to a self-hosted .mp4, Boost now injects it as the preferred source so supporting browsers stream the much smaller WebM while everyone else keeps the MP4. Same trusted sibling pattern as WebP images; CDN rewriting applies to the WebM URL like any other asset.<\/li>\n<li><strong>New: hero background videos get their poster preloaded.<\/strong> On pages whose hero is a self-hosted video, the video frames can never paint first \u2014 the poster image is what visitors actually see, making it the true Largest Contentful Paint element. Hero detection now recognises an above-the-fold video's poster and preloads it with high priority. (No poster set? Add one \u2014 it is the single biggest LCP fix for video headers; a tip in Media settings explains this.)<\/li>\n<li><strong>New: Appearance settings \u2014 make Boost yours.<\/strong> A new Appearance screen lets you pick the admin backdrop \u2014 <strong>Goop<\/strong> (the new lava-lamp: rocket-fuel plasma rising through deep space, a self-contained 6 KB WebGL shader replacing the previous 600 KB animation library), <strong>Classic<\/strong> (the original drifting particles), or <strong>Minimal<\/strong> (static gradient) \u2014 and re-tint the entire admin from four accent colour pickers, with instant live preview as you choose. Purely cosmetic: nothing on this screen affects your website or its speed. The goop backdrop pauses in hidden tabs, respects reduced-motion preferences, survives GPU resets, and falls back to the gradient wherever WebGL is unavailable.<\/li>\n<\/ul>\n\n<h4>1.3.4<\/h4>\n\n<p><strong>Corrupt WebP\/AVIF conversions can no longer be served: conversions are now written atomically and fully verified before use, and a new repair command fixes existing broken files<\/strong><\/p>\n\n<ul>\n<li><strong>Fixed a corrupted WebP\/AVIF conversion being served as a broken or blank image.<\/strong> A conversion whose write was interrupted (e.g. a killed server process) or that a faulty server encoder produced could pass Boost's checks \u2014 its file header and pixel dimensions looked valid \u2014 and be served in place of the original, rendering as a broken\/blank image in the browser. Conversions are now written atomically (a partially-written file can never land at the servable location) and must fully decode before they are ever used \u2014 verified with an independent image engine where the server has one, so the encoder is never the only judge of its own output. At serve time, files are additionally checked for structural truncation (declared size vs. actual bytes); anything that can't be validated is never served \u2014 the original image is always used instead, and a <code>WP_DEBUG_LOG<\/code> entry names the offending file once.<\/li>\n<li><strong>AVIF conversion is now skipped on servers that can't verify their own AVIF output.<\/strong> If the server has no AVIF decoder to validate with, Boost no longer produces AVIF files it cannot check (WebP is unaffected); a <code>WP_DEBUG_LOG<\/code> entry explains this once.<\/li>\n<li><strong>New: <code>wp bcboost verify-conversions<\/code> repairs existing conversions.<\/strong> The WP-CLI command scans every existing WebP\/AVIF conversion, reports corrupt ones, and with <code>--delete-broken --regenerate<\/code> removes and rebuilds them (batchable via <code>--batch<\/code>). It also cleans up any orphaned temporary files. Safe everywhere: separately-uploaded files that merely share a name with an original (the 1.3.2 protection) and animated WebP files are never touched \u2014 but Boost's <em>own<\/em> conversions that turn out broken are now regenerated instead of being skipped forever.<\/li>\n<\/ul>\n\n<h4>1.3.3<\/h4>\n\n<p><strong>Hero-image detection targets the right image: 4-digit-width images lazy-load again, theme background bands are no longer preloaded, and detection now reads inline styles<\/strong><\/p>\n\n<ul>\n<li><strong>Fixed images with 4-digit widths (e.g. <code>width=\"1000\"<\/code>) being wrongly treated as tracking pixels.<\/strong> The tracking-pixel check matched any width\/height <em>starting<\/em> with <code>1<\/code>, so full-size content images with widths like 1000 or 1200 were silently excluded from lazy-loading <em>and<\/em> from hero (LCP) prioritisation. These images now lazy-load normally and are eligible to be the preloaded hero again; only genuine 1\u00d71 pixels remain exempt.<\/li>\n<li><strong>Fixed the hero preload targeting the wrong image on some themes.<\/strong> Detection could latch onto a theme background band declared via a CSS custom property (e.g. Avada's <code>--awb-background-image<\/code>) or onto a small thumbnail instead of the real hero. Custom-property declarations are no longer mistaken for inline backgrounds, thumbnails and other insignificant images (logos, icons, <code>thumb<\/code>-named files) are vetoed, and affected pages self-correct on the next cache clear.<\/li>\n<li><strong>Improved: hero detection now also reads the page's own inline <code>&lt;style&gt;<\/code> blocks<\/strong> (Elementor-embedded CSS and Critical CSS) to find section background heroes \u2014 it never fetches external stylesheets to do so. It also skips images hidden on mobile (e.g. <code>elementor-hidden-mobile<\/code> wrappers), and when it cannot confidently identify the hero it now emits nothing rather than guessing \u2014 a per-page <code>bcboost_lcp_image<\/code> custom field remains available as the manual override (a <code>WP_DEBUG_LOG<\/code> hint names it when detection stands down).<\/li>\n<\/ul>\n\n<h4>1.3.2<\/h4>\n\n<p><strong>Hotfix: WebP\/AVIF serving no longer picks up unrelated same-name files, and hidden images are no longer treated as the hero<\/strong><\/p>\n\n<ul>\n<li><strong>Fixed WebP\/AVIF serving displaying the wrong image when a separately-uploaded file shared a filename with an image Boost optimized.<\/strong> If your Media Library contained both <code>photo.jpg<\/code> and an unrelated <code>photo.webp<\/code> that you uploaded yourself, Boost's modern-format serving assumed the <code>.webp<\/code> was its own conversion of the <code>.jpg<\/code> and served it in its place \u2014 showing a completely different (or distorted) image on the page. Boost now verifies that a <code>.webp<\/code>\/<code>.avif<\/code> sibling really is a conversion of the original \u2014 its pixel dimensions must match the original exactly \u2014 before ever serving it; anything that doesn't match is left alone and the original image is served (behaviour tunable via the <code>BCBOOST_verify_modern_conversion<\/code> filter). Bulk image compression likewise now recognises such separately-uploaded files and will never overwrite or count them as its own conversions. No action needed: affected pages self-correct on the next cache clear, and none of your files were modified.<\/li>\n<li><strong>Hero-image detection now ignores images inside hidden containers and inactive tab panels.<\/strong> Images inside <code>aria-hidden<\/code>\/<code>hidden<\/code>\/<code>display:none<\/code> containers or non-active tab panels are no longer promoted or preloaded as the page's LCP hero, so the <em>visible<\/em> hero gets the priority treatment.<\/li>\n<\/ul>\n\n<h4>1.3.1<\/h4>\n\n<p><strong>Hotfix: settings saves no longer appear to \"not stick\" on Redis \/ persistent-object-cache hosts<\/strong><\/p>\n\n<ul>\n<li><strong>Fixed settings toggles appearing not to save on hosts with a persistent object cache (e.g. Redis on Cloudways).<\/strong> Saving a setting while the 1.3.0 cache preloader was running could look like the save was ignored: the value <em>was<\/em> stored correctly in the database, but a WordPress object-cache race (trac #31245) let a concurrent request write an older copy of the autoloaded-options blob back over it, so the settings page \u2014 and the plugin \u2014 kept reading the old value. Boost's settings now live outside the shared autoloaded options blob (so the race can never touch them again), every settings write goes through a single hardened path that refreshes the object cache immediately, and the settings page always redisplays values fresh from the database after a save. <strong>No settings were ever lost<\/strong>, and no action is needed: the fix repairs itself on the first wp-admin page load after updating \u2014 any toggles that looked \"lost\" reappear with their saved values.<\/li>\n<\/ul>\n\n<p><strong>Fresh content guaranteed after every cache clear, full Divi support, a real LCP optimizer, per-template Critical CSS, and a cache preloader that re-warms your whole site<\/strong><\/p>\n\n<ul>\n<li><strong>Fixed \"my visitors still see the old site even after I cleared the cache\".<\/strong> Boost told browsers to keep every CSS\/JS file for a year without re-checking (<code>immutable<\/code>), while the <em>Remove Query Strings<\/em> option stripped  &hellip;<\/li>\n<\/ul>","raw_excerpt":"World-class page caching, asset optimization, and performance acceleration for WordPress \u2014 by BaseCloud.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/295388","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=295388"}],"author":[{"embeddable":true,"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/basecloud"}],"wp:attachment":[{"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=295388"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=295388"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=295388"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=295388"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=295388"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/es-gt.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=295388"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}