BaseCloud Boost

Description

BaseCloud Boost is a professional-grade WordPress performance plugin that dramatically speeds up your website through intelligent full-page caching, asset optimization, and smart cache management.

Core Features

Page Cache

  • Full-page HTML caching that bypasses WordPress and PHP entirely for maximum throughput
  • GZIP and Brotli compression variants stored alongside each cached page
  • Smart cache invalidation on post updates, comment submissions, and taxonomy changes
  • Configurable cache lifetime (default: 7 days)
  • Separate mobile device cache for responsive-aware caching
  • Cache exclusion by URL pattern or cookie name

Asset Optimization

  • HTML, CSS, and JavaScript minification
  • CSS and JS file combining to reduce HTTP requests
  • JavaScript deferral for faster first paint
  • Critical CSS extraction and inline injection
  • Remove query strings from static asset URLs for better CDN hit rates
  • Async-load non-critical Google Fonts with font-display=swap

Media Optimization

  • Reliable native lazy loading for images, iframes, and videos — defers off-screen media without ever hiding it, so images always appear
  • 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
  • Quality-preserving compression — originals are never altered; WebP copies are created alongside them at a tunable visually-lossless quality
  • WebP and AVIF serving — automatically serves the next-gen format when available
  • Video facade for YouTube and Vimeo — replaces iframes with click-to-play thumbnails
  • preload=”none” applied to video tags for faster page loads

Cache Preloader

  • Automatic sitemap-based URL discovery
  • Background batch processing to keep the cache warm
  • Real-time progress tracking in the admin dashboard

CDN Integration

  • Generic CDN hostname rewriting for any CDN provider
  • Cloudflare API cache purging — automatically clears Cloudflare edge cache on purge
  • BunnyCDN API cache purging — mirrors local purge events to your Pull Zone

Database Optimization

  • Post revision cleanup
  • Auto-draft and trashed post/comment removal
  • Expired transient removal
  • Orphaned postmeta cleanup
  • Table optimization (OPTIMIZE TABLE)

Security Headers

  • X-Content-Type-Options, X-Frame-Options, Referrer-Policy
  • Permissions-Policy (FLoC/Topics API opt-out)
  • Strict-Transport-Security (HSTS) for HTTPS sites

Developer-Friendly

  • Full hook API: filter cache behaviour, modify HTML before write, extend CDN purge logic
  • WP-CLI commands for cache management
  • PSR-4 autoloaded class architecture

External Services

BaseCloud Boost connects to the following external services only when you explicitly configure them in the plugin settings. No data is sent to any third-party service by default.

Cloudflare Cache Purge API (Optional)

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.

  • Service: Cloudflare, Inc.
  • What it is used for: Purging edge-cached pages so visitors see fresh content after a cache clear.
  • When data is sent: Only when you trigger a cache purge (manually, on post save, or via plugin action).
  • Data sent: List of URLs to purge and your Cloudflare Zone ID (via your API token).
  • API endpoint: https://api.cloudflare.com/client/v4/zones/{zone_id}/purge_cache
  • Terms of Service: https://www.cloudflare.com/terms/
  • Privacy Policy: https://www.cloudflare.com/privacypolicy/

BunnyCDN Cache Purge API (Optional)

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.

  • Service: BunnyWay d.o.o. (BunnyCDN)
  • What it is used for: Purging Pull Zone edge cache so visitors receive fresh content.
  • When data is sent: Only when you trigger a cache purge.
  • Data sent: URLs to purge and your API key.
  • API endpoints: https://api.bunny.net/purge and https://api.bunny.net/pullzone/{id}/purgeCache
  • Terms of Service: https://bunny.net/tos/
  • Privacy Policy: https://bunny.net/privacy/

Performance Metrics Webhook (Optional)

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.

  • Service: Custom endpoint configured by you.
  • What it is used for: Sending performance data to an external monitoring or reporting system.
  • When data is sent: Once per day via a scheduled cron event, and when you manually send a test from the admin panel.
  • 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.
  • Endpoint: Your custom URL — you are responsible for its security and privacy compliance.

Google PageSpeed Insights API (Optional)

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.

  • Service: Google LLC (PageSpeed Insights)
  • What it is used for: Running automated Lighthouse performance audits (Performance, Accessibility, Best Practices, SEO scores).
  • When data is sent: When you manually trigger an audit from the Lighthouse settings page, or on the scheduled Lighthouse cron (if enabled).
  • Data sent: Your site URL and your API key.
  • API endpoint: https://www.googleapis.com/pagespeedonline/v5/runPagespeed
  • Terms of Service: https://developers.google.com/terms
  • Privacy Policy: https://policies.google.com/privacy

Vimeo oEmbed API (Conditional)

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.

  • Service: Vimeo, Inc.
  • What it is used for: Retrieving the video thumbnail image to display in the click-to-play facade.
  • When data is sent: When a page containing a Vimeo video facade is viewed by a visitor.
  • Data sent: The Vimeo video ID (no user data or authentication is required).
  • API endpoint: https://vimeo.com/api/v2/video/{id}.json
  • Terms of Service: https://vimeo.com/terms
  • Privacy Policy: https://vimeo.com/privacy

Google Tag Manager / Google Fonts Preconnect Hints (Conditional)

When the Resource Hints module is enabled, the plugin outputs <link rel="preconnect"> and <link rel="dns-prefetch"> 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 — no data is sent by the plugin itself.

  • Service: Various (Google LLC, Cloudflare, Inc.)
  • What it is used for: Reducing connection latency for third-party resources already loaded by your theme or other plugins.
  • When data is sent: The browser (not the plugin) initiates the connection. No plugin data is transmitted.
  • Terms of Service / Privacy: Governed by the respective third-party services.

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.

Installation

  1. Upload the basecloud-boost folder to the /wp-content/plugins/ directory.
  2. Activate the plugin through the ‘Plugins’ menu in WordPress.
  3. Navigate to BaseCloud Boost > Dashboard to configure.
  4. Enable Page Cache and click Boost Cache to start caching immediately.

FAQ

Does BaseCloud Boost work with WooCommerce?

Yes. Cart, checkout, and My Account pages are automatically excluded from caching. Active WooCommerce cart session cookies bypass the cache transparently.

Is it compatible with WordPress Multisite?

Yes. BaseCloud Boost supports WordPress Multisite with per-site cache directories.

Can I use it with Cloudflare or BunnyCDN?

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.

Will it conflict with other caching plugins?

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.

What if my site breaks after activating the plugin?

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.

Does BaseCloud Boost modify wp-config.php?

Yes. On activation it sets define( 'WP_CACHE', true ) in wp-config.php so WordPress loads the advanced-cache.php drop-in. On deactivation this line is removed. The change is minimal and clearly labelled so it is easy to identify.

Reviews

There are no reviews for this plugin.

Contributors & Developers

“BaseCloud Boost” is open source software. The following people have contributed to this plugin.

Contributors

Translate “BaseCloud Boost” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.

Changelog

1.4.1

Used CSS is now opt-in. If you updated to 1.4.0, this switches it back off for you.

1.4.0 introduced the Used CSS engine and switched it on for everybody. That was the wrong call and this release corrects it.

The engine’s analysis was checked thoroughly, but only offline — 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.

  • Used CSS is off unless you switch it on. 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 — it is the same engine, now behind a switch.
  • Dropping unused font alphabets is off too. It reads the characters on the page to decide which alphabets a font needs, and it cannot see text that arrives afterwards — 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.
  • Everything else from 1.4.0 is unaffected 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).

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.

What happens next: 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.

1.4.0

The CSS release: your pages stop waiting for stylesheets they cannot use

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 — 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.

  • New: Used CSS (switched on). Boost now works out which style rules a page can actually reach, and serves only those — 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. The first visitor to a page never waits for this — 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.
  • New: a safety net that repairs its own mistakes (switched on). 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 — 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.
  • New: unused font alphabets are dropped (switched on). A font stylesheet declares every alphabet a typeface supports — Latin, Cyrillic, Greek, Vietnamese and a large block of symbols — 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 — browsers already fetch only what they need — it removes the reading work before the first paint.
  • New: text stops jumping when your fonts load (switched on). 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.
  • New (optional, off by default): Lazy Render. 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.

If something looks wrong

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 Used CSS off under File Optimization and clear the cache — the page returns to exactly its previous behaviour immediately. Individual stylesheets can also be excluded there without giving up the benefit elsewhere.

1.3.9

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

  • Fixed: “Combine CSS” was silently doing almost nothing. WordPress adds a version tag to nearly every stylesheet address (style.css?ver=4.2.1). Boost looked for a file with that version tag in its name, never found one, and quietly skipped the stylesheet — 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. Please re-test any site where you have Combine CSS enabled — 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 — only combining.)
  • Fixed: self-hosted Google Fonts were being embedded into every single page. 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 — 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.

Also in this release

  • New: the Mobile Score Advisor (Dashboard). 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 — 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 only the safe-by-default ones 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 — and the testing — with you.
  • New: Elementor stylesheet bundling (part of Elementor Speed). 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 — never your page CSS, your theme, or anything a builder generated — 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.
  • New (opt-in): non-blocking Elementor fonts. When Elementor hosts Google Fonts locally it writes every weight and style of a family into a single stylesheet — over 100 KB for one family is common — 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.
  • Improved: more Elementor page CSS is now inlined. 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–40 KB) were exactly the ones being skipped — 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.

1.3.8

Hotfix: video and iframe embeds render reliably again

  • Fixed YouTube/Vimeo embeds erroring in the editor and rendering empty on the site. The “Disable Embeds” optimization (on by default) removed not just WordPress’s embed assets but its embed rendering machinery — 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.
  • Changed: the click-to-play video facade is now opt-in (was on by default). 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.
  • Fixed autoplaying hero/background videos being demoted to preload="none". An autoplay video must start buffering immediately — its poster is usually the page’s LCP. Only passive click-to-play videos are now demoted.

1.3.7

Elementor Speed (opt-in), a redesigned Light/Dark admin, the Fleet Ops read-only API, and an HTML-freshness correctness fix

  • New: Elementor Speed — Boost finally optimizes Elementor instead of only protecting it (opt-in). Most Elementor sites carry the same invisible weight: 4–27 tiny render-blocking post-*.css requests per page, an always-loaded eicons icon stylesheet, and Font Awesome shims. The new module (File Optimization Elementor Speed, master toggle off 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 — that is exactly what historically breaks sliders and forms — and the advisor also warns on oversized DOM (Boost will never restructure your markup; the fix belongs in the builder).
  • New: the Boost admin now has true Light and Dark modes. Appearance Interface Mode switches the whole panel — 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.
  • Preview: Fleet Ops (BaseCloud CRM) — visible on the Advanced screen, marked “Unavailable Right Now”. The plugin side of BaseCloud’s central monitoring (a read-only bcboost/v1 REST API with a revocable, encrypted pairing key and optional signed requests) ships in this release but stays fully dormant — the API does not register and there is nothing to configure — until the BaseCloud service goes live in a future update.
  • Fixed stale HTML on hosts with an edge cache when “Browser Cache Headers” was off. That toggle previously gated all Cache-Control output — 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 (max-age=0, must-revalidate, plus logged-in no-store protection) are now sent unconditionally — the toggle only gates the static-asset caching rules, as it always should have.
  • Improved: async-CSS protection patterns can now be precise. Exclusion entries accept regex: patterns alongside substrings, so Oxygen’s numeric per-page stylesheets are protected exactly — 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.
  • Improved: cross-origin video-background heroes get a preconnect. 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.
  • Improved: GZIP compression rules are always written to .htaccess — compression is a correctness-neutral win and no longer depends on the browser-cache toggle.

1.3.6

New: a built-in Critical CSS generator (Beta, opt-in) — the key that unlocks async CSS

  • Boost can now create critical CSS itself — no Node, no headless Chrome, no external service. 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.
  • You choose — nothing turns itself on. The generator ships off; enable it under Advanced Critical CSS (“Built-In Critical CSS Generator (Beta)”), press Generate for all templates, 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 — a page can never paint unstyled because coverage was missing.
  • New: six ambient video backdrops for the Boost admin. The Appearance screen now offers looping video themes — Boost Rocket, Goop Motion, Lava Lamp, Colours, Fish Tank, and Zombies — 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.
  • Improved: smarter preconnects. Boost no longer preconnects to a fixed list of third-party origins on every page — it now checks which origins the page actually references (Tag Manager, Analytics, Google Fonts…) 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.
  • Improved: one hero per page — competing image priorities are demoted. 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 fetchpriority="high" — 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.
  • Improved: the cache preloader now warms the mobile variant too. With “Separate mobile cache” enabled, the preloader previously warmed only the desktop copy of each page — 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.
  • Built defensively. 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 — 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 — e.g. after the “may be stale” banner appears following a theme or builder change.

1.3.5

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

  • New: automatic preconnect to the hero image’s origin and your CDN. The browser now opens the network connection (DNS + TCP + TLS) to the CDN and to whichever origin serves the page’s hero image before it is asked to download it, saving a full round-trip on high-latency mobile connections — 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 “Auto-Preconnect Hero & CDN Origin”.
  • New: leading above-the-fold images are kept eager. On phones the first screen usually holds 2–3 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 “Above-the-Fold Images Kept Eager”. Below-the-fold images are additionally hinted fetchpriority="low" so the hero keeps the bandwidth.
  • New: lazy images download at their true rendered size. Every lazy-loaded responsive image now carries sizes="auto" (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 — on phones this substantially cuts image bytes and fixes the PageSpeed “Properly size images” flag. Older browsers simply ignore it. Toggle under Media “Right-Size Lazy Images”.
  • Fixed icon fonts flashing a wrong character or placeholder box while loading. The font-display optimisation applied swap to every font, including icon fonts (Font Awesome, Dashicons, Divi/Elementor icon packs, WooCommerce stars) — 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 block — briefly invisible, then the correct icon — while text fonts keep swap 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.
  • Improved: more third-party scripts can be safely delayed. 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.
  • Improved: hero detection now reads Elementor’s external page CSS. When Elementor stores a page’s styles as an external file (its default mode), a section’s background hero lives in uploads/elementor/css/post-*.css where detection previously could not see it — 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.
  • Changed: image serving is now WebP-only by default — AVIF becomes a deliberate opt-in. 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.
  • New: WebM video served automatically when a copy exists. Boost never converts video on your server (PHP can’t, and re-encoding would be slow and lossy) — 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.
  • New: hero background videos get their poster preloaded. On pages whose hero is a self-hosted video, the video frames can never paint first — 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 — it is the single biggest LCP fix for video headers; a tip in Media settings explains this.)
  • New: Appearance settings — make Boost yours. A new Appearance screen lets you pick the admin backdrop — Goop (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), Classic (the original drifting particles), or Minimal (static gradient) — 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.

1.3.4

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

  • Fixed a corrupted WebP/AVIF conversion being served as a broken or blank image. A conversion whose write was interrupted (e.g. a killed server process) or that a faulty server encoder produced could pass Boost’s checks — its file header and pixel dimensions looked valid — 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 — 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 — the original image is always used instead, and a WP_DEBUG_LOG entry names the offending file once.
  • AVIF conversion is now skipped on servers that can’t verify their own AVIF output. If the server has no AVIF decoder to validate with, Boost no longer produces AVIF files it cannot check (WebP is unaffected); a WP_DEBUG_LOG entry explains this once.
  • New: wp bcboost verify-conversions repairs existing conversions. The WP-CLI command scans every existing WebP/AVIF conversion, reports corrupt ones, and with --delete-broken --regenerate removes and rebuilds them (batchable via --batch). 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 — but Boost’s own conversions that turn out broken are now regenerated instead of being skipped forever.

1.3.3

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

  • Fixed images with 4-digit widths (e.g. width="1000") being wrongly treated as tracking pixels. The tracking-pixel check matched any width/height starting with 1, so full-size content images with widths like 1000 or 1200 were silently excluded from lazy-loading and from hero (LCP) prioritisation. These images now lazy-load normally and are eligible to be the preloaded hero again; only genuine 1×1 pixels remain exempt.
  • Fixed the hero preload targeting the wrong image on some themes. Detection could latch onto a theme background band declared via a CSS custom property (e.g. Avada’s --awb-background-image) 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, thumb-named files) are vetoed, and affected pages self-correct on the next cache clear.
  • Improved: hero detection now also reads the page’s own inline <style> blocks (Elementor-embedded CSS and Critical CSS) to find section background heroes — it never fetches external stylesheets to do so. It also skips images hidden on mobile (e.g. elementor-hidden-mobile wrappers), and when it cannot confidently identify the hero it now emits nothing rather than guessing — a per-page bcboost_lcp_image custom field remains available as the manual override (a WP_DEBUG_LOG hint names it when detection stands down).

1.3.2

Hotfix: WebP/AVIF serving no longer picks up unrelated same-name files, and hidden images are no longer treated as the hero

  • Fixed WebP/AVIF serving displaying the wrong image when a separately-uploaded file shared a filename with an image Boost optimized. If your Media Library contained both photo.jpg and an unrelated photo.webp that you uploaded yourself, Boost’s modern-format serving assumed the .webp was its own conversion of the .jpg and served it in its place — showing a completely different (or distorted) image on the page. Boost now verifies that a .webp/.avif sibling really is a conversion of the original — its pixel dimensions must match the original exactly — before ever serving it; anything that doesn’t match is left alone and the original image is served (behaviour tunable via the BCBOOST_verify_modern_conversion 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.
  • Hero-image detection now ignores images inside hidden containers and inactive tab panels. Images inside aria-hidden/hidden/display:none containers or non-active tab panels are no longer promoted or preloaded as the page’s LCP hero, so the visible hero gets the priority treatment.

1.3.1

Hotfix: settings saves no longer appear to “not stick” on Redis / persistent-object-cache hosts

  • Fixed settings toggles appearing not to save on hosts with a persistent object cache (e.g. Redis on Cloudways). Saving a setting while the 1.3.0 cache preloader was running could look like the save was ignored: the value was 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 — and the plugin — 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. No settings were ever lost, and no action is needed: the fix repairs itself on the first wp-admin page load after updating — any toggles that looked “lost” reappear with their saved values.

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

  • Fixed “my visitors still see the old site even after I cleared the cache”. Boost told browsers to keep every CSS/JS file for a year without re-checking (immutable), while the Remove Query Strings option stripped …