Warp Performance · Release notes
What’s new
Improvements, fixes, and new features across every release.
Version 2.2.2
October 19, 2026- New: Optional REST API caching for explicitly allowed public routes, with a five-minute default TTL, per-route TTL overrides and exclusions that always take priority. WordPress checks route permissions on every request, including cache hits. Authenticated requests, writes and private responses bypass caching.
- New: Optional RSS, Atom and comment feed caching with URL/path wildcard exclusions and a 60-minute default TTL, adjustable from 1 to 1,440 minutes when enabled. Expiry is checked on every read, TTL changes apply to existing entries, and disabling caching stops serving them immediately.
- New: Refresh Security Tokens (off by default) gives older cached pages fresh WordPress security tokens, so forms, bookings and other AJAX features keep working past 12 to 24 hours.
- New: Memcached object cache, through the Memcached PHP extension or Warp’s built-in client when the extension is missing.
- New: Lazy Elements takes a list of selectors and keeps those sections out of the first render until visitors scroll near them.
- New: Dynamic Cache can keep the cached section on screen, faded with a spinner, until the fresh version loads, for guest visitors.
- New: The MCP screen can create the application password for an AI client, after a privacy notice.
- New: The Cloudflare settings can swap a Global API Key for a token limited to this site’s zone, test it, and save it in place of the key.
- New: SpinupWP, Pantheon and Pressable caches are cleared after Warp purges, page by page where the host allows it.
- Improved: Cache settings are organized into Cache Behaviour, Dynamic Cache, Exclusions, Feed Cache and REST API Cache tabs. Dynamic Fragments is now named Dynamic Cache, and feed and API controls have dedicated switches and searchable settings.
- Improved: Content and comment changes invalidate cached feeds and REST API responses immediately. API cache entries are separated by query parameters and request headers, and disabling API caching stops serving them immediately.
- Improved: Publish Warp .htaccess rules through verified temporary files with stable locking, permission preservation and concurrent-edit checks while retaining the PHP cache fallback.
- Improved: Dynamic Cache and other fresh page sections load with one request instead of two, so they arrive sooner on slower servers.
- Improved: With Refresh Security Tokens on, WP Booking System calendar dates can be picked as soon as the page opens.
- Improved: Kinsta and Cloudways caches are also cleared on Purge Pages, Nginx Helper and GridPane caches are cleared page by page, and the Cache tab shows which host cache Warp clears.
- Improved: The Redis object cache asks for a missing key once per page load instead of on every check.
- Improved: Optimization Center suggests Memcached when it runs on the server and Redis is not available.
- Improved: WP Statistics and Slimstat no longer count Warp’s cache warming as visits when they track on the server.
- Improved: Importing Perfmatters settings carries over its Lazy Elements selectors.
- Improved: Restored Lazy Elements sections fire the
WARP_PERFORMANCE_lazy_element_renderedevent so other scripts can set them up. - Improved: Font preloads come before the image preload and sit at the start of the body, so Chrome no longer holds the first paint waiting on a font.
- Improved: Used CSS no longer repeats @font-face rules that are already inline on the page.
- Improved: The Dynamic Cache loading spinner has a cleaner look.
- Improved: The note at the end of cached pages now reads “Warping performance with WARP Performance”.
- Improved: The MCP screen has ready-to-paste setup tabs for Claude Code, Codex, Cursor, VS Code and Gemini CLI, and its commands also work in Windows Command Prompt.
- Fixed: Cloudflare purges run only while the Cloudflare integration is on, so saved credentials on a disabled or cloned site no longer purge the zone.
- Fixed: Cookie-free feeds with Vary: Cookie can be cached, while requests carrying any Cookie header, including malformed cookies, bypass feed caching.
- Fixed: Cache setup preserves foreign drop-ins and site-owned WP_CACHE definitions, reports conflicts, and restores operation-owned file changes when required setup or settings persistence fails.
- Fixed: The site logo inside the header is preloaded and kept out of lazy loading, and its preload matches the WebP, AVIF or mobile file the browser uses.
- Fixed: The first images on a page are chosen from the page itself, so a cloud or visitor hint can no longer preload or eager-load an image below the fold.
- Fixed: The deferred full stylesheets load only when delayed scripts add markup the page did not already have, so clones, re-renders and scrolling alone no longer trigger them.
- Fixed: Class names that only start like a used CSS rule are no longer treated as covered by Used CSS.
- Fixed: Bricks forms, lazy images and widgets work inside restored Lazy Elements sections and refreshed Dynamic Cache sections.
- Fixed: Dynamic Cache no longer runs for visitors whose pages are not cached, such as logged-in administrators.
- Fixed: Header, body and footer code can only be changed by users allowed to add unfiltered HTML.
- Fixed: License activation, deactivation and the Google Fonts scan now verify the secure connection.
- Fixed: The Cloudflare rule that strips ignored query parameters now works on Free and Pro plans instead of being rejected.
- Fixed: The Optimization Center uses white panels in light mode, and unticked checkboxes in the dashboard are visible again.
- Fixed (WooCommerce): Prices and stock are no longer returned for draft, private or password-protected products.
Version 2.2.1
October 10, 2026- New: Dynamic Fragments refresh selected parts of a cached page through private requests. Add data-warp-dynamic attributes, scan a sample URL and save the fragments; the feature is off by default. Thanks to RIČARD JUNGIĆ for suggesting this feature.
- New: Fragment loading supports optional spinners and skeletons, with spinner size and separate desktop, tablet and mobile reserved heights to reduce layout shifts.
- New: Import settings from Perfmatters, WP Rocket, LiteSpeed Cache, W3 Total Cache, WP Super Cache and FlyingPress, with a preview, safe-settings import, guided cache handover and a seven-day Undo option.
- New: MCP assistants can inspect Script Manager assets and preview, update or remove individual JavaScript and CSS rules, with dry-run defaults and existing write permissions.
- New: Optional setting to cache pages that other plugins mark as uncacheable; cart, checkout and account exclusions remain protected.
- Improved: Saved fragment groups start collapsed, with keyboard controls, responsive settings and a closable Preview popup.
- Improved: Used CSS remains compatible with dynamic fragments, with full CSS fallback when selector evidence is incomplete.
- Improved: Used CSS jobs avoid repeated status checks for obsolete pages and pause checks while the feature is disabled.
- Fixed: Plugins that rewrite CSS with timestamp comments no longer trigger unnecessary Used CSS regeneration.
- Fixed: Rejected Used CSS jobs can be submitted again, and requests still running are protected against duplicate submission.
- Fixed: Saving settings simultaneously no longer causes a critical error.
- Fixed: Dynamic fragments tolerate stray closing HTML tags, cache later listing pages and preserve image lazy loading.
- Fixed: Stalled fragment requests retry and show a visible Retry button instead of an endless loading indicator.
- Fixed: Preload skips redirects, uncacheable pages and excluded content types instead of repeatedly retrying them.
- Fixed: Interrupted settings imports can be undone, and imports do not propose disabling Warp’s cache lifespan.
- Fixed: Cached pages revalidated with a 304 response are correctly reported as cache hits.
Version 2.2.0
October 6, 2026- New: Optimization Center with evidence-based recommendations, guarded Auto fix actions, direct feature settings links, responsive cards and support for light and dark themes.
- New: Dashboard translations for 48 language and regional options, including Hindi and other major Indian languages, with a compact toolbar selector and a WordPress profile language default.
- New: Dashboard language packs keep the plugin download smaller and let you install additional languages from the toolbar.
- New: Dashboard language preferences are saved per user, with right-to-left layouts, localized search and protection for unsaved settings when switching languages.
- New: SureCart support keeps checkout, customer dashboard and instant-checkout pages out of the page, LiteSpeed/OpenLiteSpeed, Cloudflare and Bunny caches, and its currency cookie off cached pages, including in the early cache reader when SureCart is activated after Warp.
- New: FluentCart support keeps checkout, cart, receipt, order review and customer profile pages out of the cache, restores the visitor's current cart drawer and badge through private, uncached fragments on cached public pages, including pages built with an empty cart, and purges product pages when a product or its stock changes.
- New: Performance Trends compare two completed days of device-specific RUM against a separate baseline, with minimum sample counts and explicit unavailable states.
- New: Seven default-on optimizations and CSS minification support guarded default restoration with Auto fix and Auto fix all, preserving exclusions and tuning; default-off features remain settings-only; each manual scan can freshly check Cloudflare setup with a single homepage request, without polling or retries.
- New: Capability-aware recommendations respect media offload, image delivery, license, server-cache and object-cache compatibility locks; ignored suggestions can be restored from a collapsed list.
- New: Evidence-based optimization recommendations with guarded manual application; dry runs remain available through MCP.
- New: Clickable recommendation totals filter all suggestions or available auto fixes; eligible cards have a one-click Auto fix badge, with capability checks before each change.
- New: MCP assistants can inspect optimization recommendations and, when write access is enabled, use the same guarded Apply workflow.
- New: Optimize for SureCart and Optimize for FluentCart toggles in Cache settings; cached FluentCart pages refresh the cart count and security token on load.
- New: SureCart and FluentCart public-page modules keep their settings and dependencies ahead of deferred or delayed JavaScript.
- Improved: UsedCSS handling.
- Improved: Dashboard and toolbar page purges preserve collected UsedCSS; Purge & Preload rebuilds the pages, while the separate Settings action still discards UsedCSS when explicitly requested.
- Improved: The manual cache rebuild action is called Refresh Cache; it retains existing cached pages and collected UsedCSS.
- Improved: Cache preload does not follow redirects; redirected URLs cannot warm another destination under the original page URL.
- Improved: Images uses Loading, Sizing and Optimization tabs; recommendation and search links reveal the matching tab.
- Improved: Long image-setting explanations open through Help buttons; Cloud Image Optimization has its own tab.
- Fixed: Completed settings migrations release their lock so an immediate rollback can update the stored version correctly.
- Fixed: Critical-image selection counts eligible video posters and backgrounds alongside images in page order, preventing later content images from taking a hero poster's slot.
- Fixed: Hidden popup images and videos wait until their container becomes visible, then resume viewport lazy loading.
- Fixed: Disabling Preload Critical Images also disables automatic cloud image preload links.
Version 2.1.6
October 1, 2026- New: Cache Lifespan and Auto Refresh are independent: global age-based rebuilds can run alongside selected-page refresh every 2, 6, 10, 12 or 24 hours, or daily at a set time.
- New: Cache Lifespan supports weekly, 10-day, 20-day and 30-day intervals, with a warning about cached form and booking nonces.
- New: Background Videos on Interaction holds self-hosted Bricks background videos until the visitor first scrolls, taps or presses a key, so they cannot become the LCP element.
- Improved: Auto Refresh limits the CDN lifetime only for the selected pages when a URL list is provided.
- Improved: Cache Lifespan rebuilds aged pages in batches through the preload queue instead of purging the whole site and every CDN at once.
- Improved: The Auto Refresh time follows your WordPress time format (12- or 24-hour), and the logged-in roles list can be collapsed.
- Improved: AI assistants connected over MCP are told which list entries were not saved.
- Improved: On OpenLiteSpeed, a note under Separate Cache for Mobile explains that changing it needs a server restart.
- Improved: Fewer cron conflict messages in the debug log.
- Fixed: LiteSpeed purge-all completes before preload starts warming pages.
- Fixed: On OpenLiteSpeed, logged-in visitors and visitors with a cart or bypass cookie could be served the cached guest page.
- Fixed: Purges run from WP-CLI or a server cron did not reach the LiteSpeed cache.
- Fixed: Saving settings from WP-CLI on OpenLiteSpeed could make cached pages download as a file.
- Fixed: On OpenLiteSpeed behind a CDN, pages stayed in the LiteSpeed cache without Used CSS after it became ready.
- Fixed: On LiteSpeed, a CDN could cache a page before its Used CSS was ready.
- Fixed: Warp could not be activated again after another cache plugin when its object cache had been on.
- Fixed (WooCommerce): The product gallery stayed blank until the first interaction when Delay JS was on.
Version 2.1.5
September 24, 2026- New: Exclude entire content types (homepage, posts, pages, categories, tags, attachments, or any custom post type or taxonomy) from the cache.
- New: Separate image width limits for desktop and mobile, served from the same cached page.
- New: Script Manager can load a file only on the pages you list, such as a payment script on /checkout/.
- Improved: Image width limits now also apply to images served from a media offload plugin or another host.
- Improved: Script Manager can add a file straight to the Delay JS, Defer JS or Remove Unused CSS exclusions.
- Improved: AI assistants connected over MCP need your confirmation before changing settings or switching on a database cleanup, and values of the wrong type are refused.
- Improved: New installs preload 2 pages per batch with a 300ms pause; existing sites keep their settings.
- Improved: The toolbar’s preload and purge-everything actions now match the Preload setting.
- Improved: Manual font preloads are skipped when the current page’s Used CSS never references that font.
- Improved: Skip the first images setting now also protects the same number of inline background images from lazy loading.
- Fixed: The image width limit never applied to lazy loaded images.
- Fixed: An old mobile-only image width limit was applied to desktop images. Updating turns both width limits off; set them again under Image Sizing if you used them.
- Fixed: Changing Script Manager rules did not refresh pages that were already cached.
- Fixed: Saving in Script Manager removed the rules of files not loaded on that page.
- Fixed: A bypass cookie entry such as
|,*or an empty line could stop pages from being cached for every visitor. A*inside a cookie name now works as a wildcard. - Fixed: On Apache and LiteSpeed Enterprise, a page already in cache was still served to visitors carrying one of your bypass cookies.
- Fixed: Bunny kept its old edge rules after bypass cookies or URLs were changed.
- Fixed: Cloudflare matched bypass cookies case-sensitively, unlike the site itself.
- Fixed: An autoplaying background video reported as the page’s LCP element could be sent as an early hint and downloaded a second time.
- Fixed: Switching Preload off did not stop a purging settings save, the cache lifespan refresh or license activation from crawling the whole site.
- Fixed: “View details” appeared twice for Warp Performance on the Plugins screen.
- Fixed: Checkboxes on the CSS, Images, Fonts and Object Cache pages were nearly invisible in light mode.
- Fixed: A request that ended before WordPress had finished loading could fail with a fatal error on LiteSpeed servers.
- Fixed: PHP warnings in the debug log for images pasted inline and for tasks run from WP-CLI or a server cron.
- Fixed (WooCommerce): The cart count and total stayed empty on cached pages.
- Fixed (WooCommerce): Logged-out visitors were given a cart session on their first page view, which kept their later pages out of the cache.
- Fixed (WooCommerce): The cart count badge was shown even when the cart was empty.
Version 2.1.4
September 14, 2026- New: Exclude by Parent. Images and inline backgrounds inside a container whose class, ID or attributes match a keyword load immediately.
- Fixed: Speculation rules could prerender pages such as cart, checkout and login. Exclusions are now matched exactly, and links are prefetched by default.
- Fixed: Changing Used CSS inclusions or stylesheet exclusions could keep serving CSS built for the old settings.
- Fixed: An older per-page Used CSS result could be reused for changed content and block the new one.
- Fixed: Cloud above-the-fold hints could load more images immediately than your exclusion count allows. Exclusions now match an image’s URL, class and ID, not its alt text.
- Fixed: Automatic font preloads dropped the font URL’s query string, so the browser could fetch the font twice.
- Fixed: Deferred images inside a picture element still downloaded in full, because their sources were not held back.
- Fixed: Sliders loaded every slide at once. Slides after the first now wait until they are shown.
- Fixed: Hidden slider slides, including background-image slides, could still load before the slider started. Warp now waits for the slider to start, and releases the slides anyway if it never does.
- Fixed: The first visit after a purge came without the early font and image hints, and Cloudflare could keep that copy for weeks.
- Fixed: On Apache and LiteSpeed, deeper pages also sent the early hints of every page above them. Each page now sends only its own.
- Fixed: A preload for an image inside a picture element made phones download both the desktop and the mobile file.
- Fixed (Polylang): The preloader only warmed the default language. It now covers every language, each language’s home page and post type archives.
- Fixed (Polylang): Saving a post skipped purging its archive, archive page two, author page and blog page, and could cause a fatal error before any language existed.
- Fixed: Images without a known size were left to the browser’s native lazy loading, which starts far too early. Warp now defers them itself.
- Fixed: Deferring an inline background image removed the element’s other styles, and wording such as “eager” in an
aria-labelcould disable it. Backgrounds added later, such as slider clones, are now handled too. - Fixed: A Bricks Extras tab section could render empty at first and then push the footer down.
- New: Remove Unused CSS offers opt-in stylesheet exclusion presets for the major page builders, instead of excluding builder CSS on every site.
- Improved: Page builder editor and preview requests are recognized for 12 builders and are never cached or rewritten.
- Fixed: Used CSS kept the rule hiding Bricks Extras tab panels but dropped the one showing the active tab.
- Fixed: SVG logos and icons could render stretched and cropped because Warp added a fixed width and height to them.
- Fixed: A Bricks searchable dropdown could render as an open, unstyled list because Used CSS dropped its rules.
- Improved: One database query fewer on every visit. The site address check now runs only in admin, cron and WP-CLI.
- Fixed: A cookie banner could appear unstyled and shift the page because its stylesheet was delayed.
- Fixed: A cookie consent banner could fail to appear because its own script was delayed.
- Fixed: Queue dispatches now share one rate limit, and preload starts at once without waiting for cron.
- Improved: External cron is now only a recovery fallback. A notice appears when WordPress cron is disabled and recovery has not run.
- Fixed: Rejected background requests now return HTTP 403, and authentication tokens stay out of access logs.
- Fixed: Purges from URL changes and settings saves can no longer be lost to lock contention or a failed cron.
- Fixed: Refreshing an expired cached page could tie up every PHP process and take the site down. Refreshes now go through the preload queue.
- Fixed: A page waiting for Used CSS asked to be rebuilt on every visit.
- Fixed: A lazy loaded video could fail to start because it was loaded twice.
- Fixed: A percent sign in a font or image address could make every cached page on an Apache site return a server error.
- Fixed: One missing stylesheet could disable Used CSS across the whole site.
- Improved: The Apache cache rules now skip Warp’s own cache folder.
- Fixed: Sliders and galleries could break with Delay All on. Splide, Swiper, PhotoSwipe and the Bricks scripts are now added to the exclusion list once, where you can edit them.
- Fixed: Deleting the plugin left its settings, tables and converted images behind.
- Fixed: Clicking a link before scripts had loaded could open the image file instead of the gallery lightbox.
- Fixed: A delayed script with a
crossoriginattribute could be downloaded twice. - Improved: Delayed scripts are no longer all requested at once at the highest priority, and duplicates are skipped.
- Fixed: Delayed stylesheets never loaded for visitors who did not interact, leaving things like cookie banners unstyled.
- Fixed: Files marked
data-no-minifyordata-no-optimizewere minified anyway, anddata-no-delayis now respected. - Fixed: Lazy Render could collapse the page to a fraction of its height.
- Improved: When the largest image is known, Warp now preloads only it plus at most one guess.
- New: MCP now has its own menu item.
- New: The Script Manager has a “Copy for exclusion” button for every script and stylesheet.
- Fixed (Bunny): Debug notices were logged on sites not using Bunny.
- Fixed (Bunny): Purges after publishing, or from the dashboard, could wait up to 30 seconds. They now go out within a second.
- Fixed (Bunny): Two purge runs could overlap when Bunny responded slowly.
- Fixed: With WordPress 6.7 or newer and placeholders on, lazy loaded images could download at more than twice the size needed.
- Fixed: With placeholders on, images could be laid out at the wrong size before they loaded.
- Fixed (Object Cache): Your Redis settings were never applied, so every setting used its default.
- Fixed (Object Cache): Clearing the cache emptied the whole Redis database. Now only Warp’s own entries are removed.
- Fixed (Object Cache): An empty key prefix could make Warp’s entries collide with another cache plugin’s.
- New (Object Cache): Testing the connection warns when another WordPress site already uses the chosen Redis database.
- New (Object Cache): The dashboard lists Redis settings that wp-config.php overrides.
- Fixed (Object Cache): The object cache file now refuses to run on a site it was not written for, such as a staging copy.
- Fixed (Object Cache): A request that ran out of memory could break the Redis connection for every request after it.
- Improved (Object Cache): “Flush Object Cache” is now “Clear Warp Cache”, and the dashboard shows how many entries are Warp’s.
Version 2.1.3
August 24, 2026- Improved: When Warp saves a page's Used CSS, it now also records which version of that page's structure the result belongs to. Nothing changes in how your pages are built or served today. This is groundwork for the next release, which will let a page keep its existing Used CSS while a changed version is being processed, instead of serving it with no Used CSS in the meantime.
- Fixed (Cloudflare): Automatic cache purges could remain queued indefinitely until a manual dashboard purge was performed, leaving updated posts or archive pages stale at the edge. Purges are now dispatched directly to Cloudflare without waiting for the API response, so publishing remains fast and no longer depends on a shutdown task or WordPress loopback request.
Version 2.1.2
August 21, 2026- Fixed (Cloudflare): Purging a page whose address is a query string, such as a draft preview at "?p=123", also cleared your home page from Cloudflare. Warp strips tracking parameters to find the real address of a page, which is right for a normal post address but turns "?p=123" into your home page, a different page altogether. Addresses like these are now purged on their own.
Version 2.1.1
August 17, 2026- Fixed: A single failed attempt to read one of your stylesheets could stop a page being optimized for a full day. The plugin treated a recorded failure as final and never submitted the page again, while only a new submission could clear that record. A recorded failure is now treated as a pause rather than a verdict, and the page is tried again an hour later.
- Fixed: A page whose optimization had to be requested again waited up to two hours before the finished result was collected, even though the cloud usually finishes in about a second. Until then the page was served unoptimized and could not be cached by your CDN or web server. Results are now collected within seconds.
- Fixed: Updating the plugin no longer clears every cached page. On large sites the whole cache had to be rebuilt after each update, so every visit was a full page build until it refilled. Pages are now kept through an update, and cleared only if the plugin has been left deactivated long enough for them to have gone stale.
- Fixed: A page cached before its Used CSS was ready could stay that way indefinitely, because the background refresh request never reached the site itself. It now goes to the site directly and waits for the rebuild to complete.
- Improved: Warp no longer keeps checking on an optimization indefinitely. A page that already has a finished result stops being checked, and a request that has gone missing is given up on rather than asked about every two hours forever.
- Fixed (Bunny): A priority purge queued as soon as a page finished preloading was discarded whenever a slower purge was already waiting. The waiting purge is now brought forward.
- Fixed (Bunny): A URL that could never be purged was retried every 30 seconds indefinitely. It is now dropped after five failed attempts and recorded once in the log.
- Fixed (Cloudflare): Publishing or updating a post could take a long time to show at your domain, especially during a preload crawl. Every purge waited in the same queue in the order it arrived, so a recent edit could sit behind thousands of routine background purges. Publishing, updating a post, and the manual purge buttons in the dashboard now jump ahead of routine purges.
- Improved: Removed a leftover cleanup step that ran on every update with nothing left to clean up.
- Fixed (WordPress 7.1): Images added in the editor were optimized twice. WordPress 7.1 prepares images in your browser and hands them to the site in stages, and Warp started work at the first stage, on a copy WordPress was about to replace. The optimized copy was left behind unused, and the sizes actually shown on your pages were only reached on the second attempt. Warp now waits until WordPress has finished handing over the image.
- Fixed (WordPress 7.1): Removing an image from the Media Library could leave files behind. WordPress 7.1 keeps extra files alongside an image, such as the original of a photo taken on an iPhone, or the video it creates from an animated GIF. Warp did not know about these, so its own copies of them were not cleared away with the rest.
- Improved (WordPress 7.1): Your chosen WebP and AVIF quality now applies wherever WordPress itself creates one of those images, including when your browser creates them during an upload. Photo and PNG quality is left to WordPress, as before.
- New: Resize Image. Any image already in your Media Library can now be resized on request, from its row in the Media Library, from its details panel, or for several images at once from the Bulk actions menu. It uses WordPress's own resizing, starts from your untouched original, keeps that original in place, and rebuilds the smaller sizes. Files left behind by the old dimensions are cleared away, along with the converted copies that went with them.
- Improved: "Resize Large Uploads" is now called "Resize automatically on upload", and it no longer claims your originals keep their dimensions when it is switched off. Warp has never resized anything itself; it sets the width limit WordPress uses, and when the setting is off WordPress still scales uploads above 2560px on its own. With it off, Warp now stays out of that decision entirely.
- Improved: An image you have excluded from Warp is still never resized on upload, but you can now resize it deliberately from the Media Library, and Warp tells you it is doing so because you asked.
Version 2.1.0
August 14, 2026- Improved: Optimization results in the Warp cloud are managed separately for each site. Pages are optimized again as they are visited.
- Improved: Refined request handling between your site and the Warp cloud.
- Improved: Updated connection verification for communication with the Warp cloud.
- Fixed: Regenerating Used CSS for a page did not clear the last recorded failure, so the dashboard could continue showing an old error after a successful retry.
- Improved: Lazy render now uses additional confirmation before applying changes to an element, providing more reliable results across different visitors and networks.
- Improved (Cloud): Saved optimization results are now stored in a more compact format, allowing significantly more results to be retained before older ones are removed. This reduces how often pages need to be optimized again and applies to all sites, regardless of the plugin version they are running.
Version 2.0.2
August 8, 2026- Improved: Purge Everything now keeps minified stylesheets, scripts and downloaded fonts. Their names come from their contents, so rebuilding one produces the same file. Deleting them refreshed nothing and only risked breaking pages that were still pointing at them. Run
wp warp-performance purge-assetsif you ever need them rebuilt. - Improved: Minified stylesheets are rebuilt under new names in this release, so any browser still holding a broken copy from the problem below picks up a fresh one.
- Fixed: A page could lose its styling for up to a year with nothing wrong on the server. Updating the plugin deleted every minified stylesheet and script, and the Cloudflare rule Warp creates was set to hold files for a year without being told to leave errors alone. A visitor asking for a file in the moment it was missing caused Cloudflare to store that error and keep serving it long after the file was back, because the address of the file never changes. Updates no longer delete these files, and Cloudflare is no longer allowed to store errors for them.
- Fixed: Deactivating the plugin, which every update does, threw away every saved Used CSS result. Sites had to be optimized from scratch after each update. Only cached pages are cleared now.
Version 2.0.1 (internal)
August 2, 2026- New: Regenerate Used CSS. If a page renders with missing styles, use "Regenerate Used CSS for this page" in the toolbar. For the whole site, use "Purge Everything and Regenerate" under Settings. Pages are optimized again as they are visited, so no crawl is started.
- Improved: Testing the Cloudflare connection now also reports whether your cache rules are actually in place, and tells you if the API token cannot manage cache rules. Previously it only confirmed the zone could be reached, so it could report success while no rules existed at all.
- Improved: Pages are now held by your CDN for 30 days instead of a year. Cache purges are unaffected; this only limits how long an outdated copy can survive if a purge never reaches it. Images, CSS and JavaScript are unchanged and still cached for a year.
- Improved: Pages no longer stay out of your CDN indefinitely when Remove Unused CSS cannot finish. After repeated failures, or while the cloud is unreachable, they are cached without it.
- Improved: Page rendering no longer re-reads and re-hashes every stylesheet on each visit, cutting render time on sites with a lot of CSS.
- Improved: Changing the preload amount or delay no longer clears the cache and re-crawls the site.
- Improved: Cache purges are much faster on large sites. Warp keeps small helper files that let it skip repeated work while preparing CSS, and these were never cleaned up. On sites with tens of thousands of pages they built up into the hundreds of thousands and every purge had to read through all of them. They are now cleared automatically in the background.
- Improved (Cloud): Remove Unused CSS no longer gives up on a slow stylesheet after five seconds, so a busy site can still be optimized. A genuinely missing stylesheet still fails immediately.
- Fixed: A staging site sharing a Cloudflare zone with the live site could take over the live site's cache rules and then delete them when Cloudflare was switched off on staging. The live site was left uncached at the edge with no warning. Rules are now matched to the site that created them, and a rule belonging to another install is never adopted or deleted.
- Fixed: Once Cloudflare cache rules went missing they could never come back. Warp kept updating rules that no longer existed without checking the result, and reported success every time. It now verifies the update and rebuilds any rule that has gone.
- Fixed: Activating the plugin could delete your Cloudflare cache rules when the integration was not fully configured.
- Fixed: Updating to 2.0 could push PHP workers to their limit and leave the site slow or unresponsive. The update cleared every saved Remove Unused CSS result and started a full site preload at the same time. Updates no longer do either.
- Fixed: Remove Unused CSS could leave a stylesheet out entirely and break layouts, most visibly on Bricks sites where containers ran past the edge of the screen on phones. Minified stylesheets are now written in a single step so nothing can read one half finished, and an empty cached stylesheet is rebuilt instead of used.
- Fixed: Preload could run up to twenty pages at once, double the limit of ten described in 1.2.7, because the limit applied to each batch rather than the total. The documented limit is now enforced. Default installs are unaffected; sites that raised the worker count with a filter will now stay within the same total.
- Fixed: A page could stay without its optimized CSS indefinitely. When the cloud's copy of a result expired, Warp kept asking about a result that no longer existed instead of requesting a new one, and a page already sitting in the cache never re-rendered to trigger one. Warp now spots this and sends the page for optimization again on its own. Recovery is rate limited so a large site catches up gradually instead of all at once, and your CDN is left alone.
- Fixed (Cloud): A bad Used CSS result could never be replaced. The cloud kept its own copy and returned the same result however often the cache was purged.
- Fixed (Cloud): Remove Unused CSS now stops when a stylesheet is missing or incomplete instead of saving the result, so a brief glitch cannot be stored as a finished optimization.
- Fixed (Cloud): Font fallback metrics are generated again, so text no longer shifts when a web font finishes loading.
Version 2.0.0
July 30, 2026- New: Local image optimization. Convert your images to WebP or AVIF on your own server, served through a picture element so browsers without support still get the original. One format at a time, and off by default.
- New: Optional in-place compression of the original upload, with an automatic backup you can restore at any time. Works on the whole library or one image.
- New: Media Library integration: a Warp column with per-image Optimize and Restore, bulk actions, and keyword exclusions.
- New: Optional image width limit. Oversized sizes are dropped from the list browsers choose from, cutting page weight on image-heavy pages. Off by default.
- New: Delay JavaScript now has a safety net that stops any theme or plugin from leaving the page blank or blocking scrolling while scripts wait to load.
- New: Purge Object Cache from the WordPress toolbar, shown only when a persistent object cache is in use.
- Improved: Image optimization never deletes anything in your uploads folder. Generated files and backups live outside both the media library and the Warp cache.
- Improved: Images held by a media offload plugin, on S3 or elsewhere, are detected and skipped. In-place compression is disabled entirely while one is active.
- Improved: The preload for your largest above-the-fold image now points at the converted file and declares its format, so the browser no longer downloads both copies.
- Improved: Delayed scripts now have a guaranteed start deadline, and Warp replays the scroll and resize events browsers would have sent, so sliders and counters start without waiting for the visitor.
- Improved: Stale optimization cache files are cleared automatically on upgrade.
- Improved (Cloud): Remove Unused CSS now records why it could not finish instead of failing silently, and never serves an unparsed stylesheet as "optimized" CSS.
- Fixed: AVIF images could push the rest of the page down as they loaded, because the picture element Warp wraps them in took over the image's layout box. WebP was never affected.
- Fixed: Bricks sites: Remove Unused CSS could stay stuck on "pending", pages were re-sent for optimization on every load, entrance animations left the page blank with Delay JavaScript on, and the Bricks integration never activated at all.
- Fixed: Embedded forms and widgets that load through their own script, such as Tally, could stay permanently blank.
- Fixed: With Remove Unused CSS set to Interaction, deferred stylesheets and interaction-loaded videos loaded on their own even when the visitor never touched the page.
- Fixed: Scripts declared as "application/javascript" were skipped by Delay and Defer JavaScript, so third-party scripts kept loading at full speed.
- Fixed: Entrance animations for content already on screen no longer replay once delayed scripts load.
Version 1.2.7
July 20, 2026- New: Added Etch page builder support with automatic cache purging and preloading after design changes.
- Improved: Deferred Remove Unused CSS now loads only after real user interaction, improving PageSpeed Insights "Reduce unused CSS" results.
- Improved: Background preloading is now more efficient with lower PHP worker usage, automatic cloud CSS retries, and preload concurrency capped at 10 for better server stability.
- Improved: Cloudflare cache purges are now processed reliably without loopback requests or cron, preventing stale cached assets.
- Improved: Better responsive image handling, CDN image dimension detection, LiteSpeed cache mode detection, and broader server compatibility.
- Improved (Cloud): Remove Unused CSS now preserves interaction states (hover, focus, checked, disabled, etc.), fixing styling issues on modern themes and page builders.
- Fixed: Analytics (RUM) and lazy-render verification beacons now send reliably without CORS preflight failures.
- Fixed: Responsive LCP image preloads now prevent duplicate hero image downloads and always preload the correct image size.
- Fixed: Eager images now receive proper
sizesattributes, preventing oversized LCP image downloads. - Fixed: Remove Unused CSS exclusions now work correctly even when CSS minification is enabled.
- Fixed: Mobile cache detection now stays consistent across WordPress, Apache, Nginx, and LiteSpeed.
- Fixed: Duplicate image preloads, preload queue deadlocks, unnecessary cache configuration rewrites, PHP 8.1–8.5 deprecation notices, and various dashboard/configuration issues.
- Removed: Removed the obsolete Bricks CSS exclusion, as the cloud optimizer now handles it automatically.
Version 1.2.6
July 7, 2026- New: Added AI Assistant (MCP) support for Claude, ChatGPT, the WordPress AI Client, and other MCP-compatible assistants. Secure, read-only access is enabled by default, while write access is optional and credentials are never exposed. Requires WordPress 6.9 or later.
- New: Added Cache Mode selection with Auto, File-based, and Server-native (LiteSpeed) options for better compatibility across different hosting environments.
- New: Added Brotli compression for cached pages with automatic Gzip fallback when Brotli is unavailable.
- Improved: Background preload and cloud CSS optimization no longer rely on WP-Cron, making caching more reliable on hosts where WP-Cron is disabled or throttled.
- Improved: Reduced database load on large websites by removing unnecessary WordPress cron updates during cloud status checks and Cloudflare cache purges.
- Improved: Settings now save instantly while cache purge and preload continue in the background.
- Improved: Serve-stale cache revalidation now works without scheduled events, keeping cached pages fresh automatically.
- Improved: Preload verification now uses a dedicated database table instead of large WordPress options for better performance.
- Fixed: Resolved an issue where Separate Cache for Mobile on LiteSpeed and OpenLiteSpeed servers could create invalid rewrite rules that caused site-wide 404 errors.
- Fixed: Background cache purges on LiteSpeed and OpenLiteSpeed now reliably clear the server cache after CSS optimization.
- Fixed: The Save button no longer incorrectly shows unsaved changes immediately after opening the dashboard.
- Fixed: The preload queue no longer restarts from the beginning when settings are saved multiple times during a large preload.
- Fixed: Resolved a rare crash that could occur when two cache purges ran at the same time.
- Fixed: Cache Mode is now applied consistently, preventing duplicate page caching on LiteSpeed servers when File-based mode is selected.
Version 1.2.5
June 11, 2026- Security: The Warp Performance dashboard, admin toolbar, and cache actions are now limited to administrators by default. Other roles can be granted cache-management access — without exposing plugin settings — under Settings → Access Control
- Improved: Cloudflare edge cache now clears within seconds of publishing or updating a post, even on hosts where WP-Cron is unreliable — keeping news and frequently-updated sites fresh at the edge
- Improved: Smarter Cloudflare purging — rate-limit-aware automatic retries, self-recovery if a background purge is missed, and no more redundant or unnecessary per-device purges
- Improved: Per-device Cloudflare variants are only purged when Separate Mobile Cache is enabled, cutting purge volume on high-traffic sites
- Fixed: Publishing a post no longer fires 404 warming requests for paginated tag archives that only have a single page
- Fixed: Icons now display correctly on the Core Web Vitals cards
- New: Device-aware preloading — desktop and mobile cache variants are queued, warmed and verified separately when Mobile Cache is enabled
- New: Brotli compression option in Cache settings — serve cached pages with Brotli instead of Gzip when your server supports it
- New: Early Hints support — per-page preload headers for fonts and LCP images let browsers start fetching before the HTML arrives
- New: Metric-matched font fallbacks generated in the cloud — system fallback fonts now occupy the same space as your web fonts for near-zero layout shift
- New: Background hero images are now detected in the cloud and preloaded with high priority for faster LCP on builder sites
- Improved: UsedCSS is now minified in the cloud — up to 30% smaller inline CSS on every cached page
- Improved: Smarter image preloading — logos and icons no longer consume preload slots, and only the true LCP candidate gets high priority
- New: Warp Cloud now detects above-the-fold images automatically — featured and hero images are eager-loaded and preloaded without tuning "Exclude First X Images"
- New: Immutable browser caching for static assets eliminates revalidation requests on reload
- Improved: UsedCSS is now generated per device viewport — desktop and mobile pages each get their own optimized CSS
- Improved: Preload queue worker is now protected by signed internal tokens
- Improved: LiteSpeed/OpenLiteSpeed preloads now wait for UsedCSS readiness and respect server-side mobile cache variants
- Improved: One-off preloads (post update, comment, purge) now run through the queue with full device handling and verification
- Improved: Cached pages stay eligible for the browser back/forward cache for instant history navigation
- Improved: Content-Length and Vary: Accept-Encoding headers on cached responses for better proxy and connection handling
- Fixed: Separate Mobile Cache toggle now correctly writes and serves dedicated mobile cache files
- Fixed: Apache fast-path no longer lets CDNs cache pages before UsedCSS is ready
- Fixed: Queue retries no longer purge LiteSpeed cache indefinitely when the cloud is unreachable
- New: Serve-stale-while-revalidate — pages keep serving instantly while the cache refreshes in the background, avoiding origin load spikes after a purge
- New: "CDN Varies by Device" setting — safely cache desktop pages at the CDN edge when a separate mobile cache is active
- Improved: Preload now warms very large sites reliably in the background, without stalling, timeouts, or reliance on WP-Cron
- Fixed: Purging the cache on very large sites no longer fails with an out-of-memory error
- Fixed: Cloudflare now connects with the new API token format
- Fixed: Mobile and currency cache variants are no longer incorrectly served from the CDN edge
Version 1.2.4
June 3, 2026- Fixed: Cloudflare single-url not purging after page update
- Improved: UsedCSS generation for Elementor & Bricks Builder per URL
Version 1.2.3
May 24, 2026- Fixed: Cache not purging issues
- Fixed: Cloudflare cache purge issues
- Improved: Bunny DNS URL handling
- Compatibility: WordPress 7.0 support
Version 1.2.2
May 16, 2026- New: Introducing Preload Engine 2.0 for faster and more stable cache preloads
- Improved: Better UsedCSS handling during cache generation and preload
- Improved: Safer cache writes and deletions
- Improved: Atomic WP config updates using temporary file replacement
- Improved: Social crawlers excluded from page cache for accurate previews
- Improved: Better lazy-load processing for images, iframes, videos and lazy render elements
Version 1.2.1
April 30, 2026- Improved: Better handling of responsive srcset images
- New: Lazy loading support for Elementor video widgets with self-hosted thumbnails
- New: Request-level caching for lazy-load exclusions
- Improved: Regex early-exit optimizations
- Fixed: Global replacement issue in lazy-loaded tags
- Fixed: CSS selector regex matching issue
Version 1.2.0
April 24, 2026- Added: Easy Starter for fresh installations
- Fixed: Cache preload after plugin reactivation
- Fixed: Search bar input issue
Version 1.1.9
April 22, 2026- New: Lazy Render Elements
- Fixed: Vary Cookie delivery for Nginx
Version 1.1.8
April 17, 2026- Improved: Font Manager
- Fixed: Preloading of locally hosted Google Fonts
Version 1.1.7
April 14, 2026- Improved: Nginx cookie control
- Improved: Cloudflare cache control
Version 1.1.6
April 14, 2026- New: Staging support
- Fixed: Bunny DNS Proxy compatibility
Version 1.1.5
April 13, 2026- Improved: UsedCSS and Delay Script logic
- Improved: Cloudflare edge cache rule
Version 1.1.4
April 13, 2026- Improved: Bunny DNS caching
- Improved: Cloudflare HTML caching
- Improved: Native LS/OLS and Nginx cache strategy
Version 1.1.3
April 12, 2026- Fixed: Google Font self-hosting issue
- Fixed: GenerateBlocks CSS issue
- Fixed: PHP 8.5 issue
- Added: Google Fonts v2 support
Version 1.1.2
April 11, 2026- Fixed: 3rd party delay exclusion issue
Version 1.1.1
April 10, 2026- Fixed: UsedCSS API
- Added: License fix
Version 1.1.0
April 9, 2026- New: WooCommerce nonce reload
- Fixed: Database and browser cache fixes
Version 1.0.0
April 1, 2026🎉 Initial Release