= 4.3.3 = *Release Date - May 6, 2026* * added: filters for plugins that offload media to cloud storage to integrate with S3 detection, props @alessandrocarrera * fixed: performance regression when Lazy Load checks parent elements for skip-lazy exceptions = 4.3.2 = *Release Date - February 10, 2026* * fixed: Easy IO domain not reset after site URL is updated * fixed: PHP 8.5 compatibility * fixed: PHP warnings and notices = 4.3.1 = *Release Date - December 4, 2025* * fixed: Lazy Load auto-sizing makes images too small when screen size changes * fixed: failure to decode CSS background images contained in encoded quotes (') = 4.3.0 = *Release Date - November 18, 2025* * added: Lazy Load support for background images in external CSS files * added: View CDN bandwidth usage on settings page * changed: Lazy Load checks parent element for skip-lazy class * changed: Lazy Load auto-sizing honors High DPI setting * changed: Easy IO fills in 450px wide image when responsive (srcset) images have a gap * improved: Lazy Load performance when searching for img elements * improved: Lazy Load placeholder generation is faster and works better with Safari * fixed: Lazy Load for iframes breaks WP Remote Users Sync plugin = 4.2.1 = *Release Date - August 26, 2025* * fixed: Some preload URLs not updated = 4.2.0 = *Release Date - July 15, 2025* * added: Easy IO support for dynamic cropping (crop=1) on WordPress.com sites * fixed: PHP warnings related to HTML parsing * fixed: PHP warnings when link URLs contain special regex characters = 4.1.0 = *Release Date - March 26, 2025* * added: exclude private BuddyBoss media from Easy IO with page:buddyboss exclusion * added: ability for 3rd party plugins to hook into Lazy Load HTML parser * changed: improved performance of custom *_option functions on multisite * fixed: Easy IO rewriting some URLs when full page exclusions are used = 4.0.0 = *Release Date - November 26, 2024* * added: Above the Fold setting for Lazy Load (previously EIO_LAZY_FOLD override) * changed: gravatar images excluded from Above the Fold/EIO_LAZY_FOLD counts * fixed: Easy IO adding images to srcset combined with broken WooCommerce gallery thumbnails causes oversized image sizes to be loaded * fixed: Easy IO srcset filler using incorrect width for calculations = 3.9.4 = *Release Date - October 31, 2024* * fixed: Lazy Load for iframes results in empty src attribute * fixed: Lazy Load breaks --background CSS variable = 3.9.3 = *Release Date - September 12, 2024* * fixed: HTML syntax for noscript fall-back when lazy loading picture elements * fixed: is_file wrapper method triggers PHP warning * fixed: some strings not properly i18n = 3.9.2 = *Release Date - July 25, 2024* * changed: skip lazy load for LCP images based on fetchpriority when auto-scaling is disabled * changed: improve performance of ewwwio_is_file(), props @rmpel * changed: require PHP 8.1 or higher * fixed: Lazy Load and Easy IO fail to decode URLs with HTML-encoded characters, which causes esc_url to break the URL * fixed: Easy IO fails to update CDN domain if site is re-registered while still active = 3.9.1 = *Release Date - May 29, 2024* * added: warning when hiding query strings with Hide My WP * changed: much better resizing for PNG8 and other paletted PNG images * changed: apply async loading to lazyload JS using WP core functionality = 3.9.0 = *Release Date - April 23, 2024* * added: Easy IO delivery for JS/CSS assets from additional domains * added: Easy IO support for Divi Pixel image masks * changed: Lazy Load checks for auto-scale exclusions on ancestors of lazyloaded element * fixed: Help links broken in Firefox's Strict mode = 3.8.0 = *Release Date - April 11, 2024* * added: Lazy Load can use dominant color placeholders via Easy IO * added: ability to filter/parse admin-ajax.php requests via eio_filter_admin_ajax_response filter * changed: improved smoothing of LQIP for Lazy Load when using Easy IO = 3.7.0 = *Release Date - March 20, 2024* * added: support for upcoming Slider Revolution 7 rendering engine * added: update existing image preload URLs * added: Lazy Load automatically excludes preloaded images * fixed: Easy IO skipping Slider Revolution 6 URLs * fixed: Lazy Load incorrectly auto-scales fixed group background images = 3.6.0 = *Release Date - February 14, 2024* * added: Lazy Load for CSS background images in external CSS files or internal CSS sections * fixed: Easy IO applying resize parameters to existing (re)sizes * security: improve authentication for some plugin actions = 3.5.5 = *Release Date - January 4, 2024* * fixed: Easy IO incorrectly modifies JS/CSS URLs when using S3 on multisite = 3.5.4 = *Release Date - November 28, 2023* * fixed: Easy IO strips extra sub-folders in non-image URLs * fixed: PHP notice from VC fix = 3.5.3 = *Release Date - November 2, 2023* * fixed: too much scaling for Visual Composer background images with zoom effect = 3.5.2 = *Release Date - September 21, 2023* * fixed: Lazy Load compatibility with X/Pro themes and Cornerstone builder * security: sanitize and escape a few remaining strings = 3.5.1 = *Release Date - September 5, 2023* * changed: use updated coding standards * changed: sanitize/escape remaining strings on settings page * security: randomize filename of debug log = 3.5.0 = *Release Date - July 19, 2023* * added: Easy IO rewrites poster/thumbnail image URLs for video elements * changed: Easy IO + Auto Scale checks images on load and resize events to reduce browser upscaling * changed: prevent Easy IO font substitution when OMGF is active * fixed: Auto Scale downscales too much for landscape images displayed in portrait containers * fixed: Easy IO compatibility with Brizy thumbnail generation endpoint = 3.4.0 = *Release Date - June 28, 2023* * added: deliver Google Fonts via Easy IO or Bunny Fonts for improved user privacy * fixed: incorrect syntax for constants in namespaced code = 3.3.0 = *Release Date - May 9, 2023* * breaking: namespaced and reorganized several classes, third party integrations should check for compatibility * added: Easy IO support for BuddyBoss images, video, and documents * added: improved support for Hide My WP Ghost in Lazy Load * changed: improved Auto Scaling when using full-width layout in Elementor * changed: style tag search/regex cleaned up to prevent excess markup * fixed: content dir functions don't resolve symlinks * fixed: Easy IO image URLs leaking into image gallery block via post editor * fixed: clearing debug log does not redirect back to settings page in rare cases = 3.2.4 = *Release Date - March 23, 2023* * changed: allow video files to go through Easy IO CDN (pass through) * fixed: PHP 8.1 deprecation notices from usage of add_submenu_page and add_query_arg = 3.2.3 = *Release Date - December 1, 2022* * changed: improved Brizy Builder compatibility * fixed: Easy IO fails to apply crop for custom size in some cases * fixed: Easy IO not applying watermark consistently on PNG images * fixed: Easy IO not scaling watermark when scaling original image = 3.2.2 = *Release Date - October 18, 2022* * changed: improved detection for site URL changes * fixed: Lazy Load JS throws error if inline script vars are missing * fixed: Easy IO + Lazy Load auto-scale produces invalid URL if an image with no query string is constrained by height = 3.2.1 = *Release Date - October 4, 2022* * fixed: PHP notices when Easy IO filters srcset URLs = 3.2.0 = *Release Date - September 26, 2022* * added: exclude by page for Easy IO and Lazy Load * changed: include upstream lazysizes unveilhooks for use by developers, props @saas786 * fixed: better compatibility with S3 Uploads when using autoload * fixed: Easy IO srcset URL construction not accounting for object versioning with S3 (or other cloud storage) = 3.1.3 = *Release Date - August 25, 2022* * added: image watermarking, configure at https://ewww.io/manage-sites/ * fixed: prevent WP core from generating duplicate WebP images = 3.1.2 = *Release Date - July 28, 2022* * fixed: trailing space on image URL handled incorrectly * fixed: lazy load sometimes incorrectly scales images in AffiliateWP portal = 3.1.1 = *Release Date - July 20, 2022* * fixed: Lazy Load not using EWWWIO_CONTENT_DIR * fixed: Lazy Load Auto-scale adds query parameters to SVG images * fixed: Lazy Load prevents image loading in GiveWP iframe * fixed: Auto Scale crops too much for object-* images in Oxygen = 3.1.0 = *Release Date - June 7, 2022* * added: AVIF support via Easy IO, enable on site management at ewww.io * added: ability for Easy IO to get full-size path when using offloaded media * fixed: front-end HTML parsers running within Bricks editor * fixed: Easy IO not finding scaled full-size for dynamic size generation * fixed: cover images not cropped properly by Easy IO * fixed: Easy IO URLs leaking into post editor with WP 6.0 = 3.0.2 = *Release Date - May 19, 2022* * changed: Easy IO WebP quality can be defined separately from the JPG quality used for resizing operations * fixed: Lazy Load integration with WooCommerce Product Recommendations handling AJAX output incorrectly = 3.0.1 = *Release Date - April 7, 2022* * changed: image links constrained to 2560px, use EIO_PRESERVE_LINKED_IMAGES to override = 3.0.0 = *Release Date - April 5, 2022* * added: Lazy Load and CDN support for multiple background images and mixing with gradients * changed: all Easy IO settings available to all plan levels * fixed: LQIP and SVG placeholder options not auto-loaded correctly * fixed: invalid path in translation loader = 2.9.2 = * fixed: Easy IO was adding srcset markup for SVG images = 2.9.1 = * added: use decoding=async to prevent images from blocking text render * fixed: Auto-scale incorrectly handles Divi parallax background images * fixed: native lazy loading used on inline PNG placeholders = 2.9.0 = * changed: Lazy Load no longer excludes first image in a page due to potential CLS issues and auto-scaling suppression * fixed: AMP detection throws notices in some cases * fixed: Easy IO misses some image URLs on multi-site when using domain-mapping * fixed: Lazy Loader incorrectly parses fall-back iframe from Google Tag Manager, triggering 403 errors in some WAF systems * fixed: Easy IO URL rewriter changing links if they matched a custom upload folder * fixed: Easy IO incompatible with Toolset Blocks * fixed: Easy IO incorrectly sizing wide/full width cover blocks * fixed: SWIS CDN compat called too early in some cases = 2.8.2 = * fixed: error when disabling Easy IO * updated: instructions for disabling Jetpack site accelerator = 2.8.1 = * changed: first image in a page is assumed to be "above the fold" and will not be lazy loaded, override with EIO_LAZY_FOLD constant * fixed: mismatched quotes break HTML markup in some cases * fixed: Lazy Loader incorrectly parses fall-back iframe from Google Tag Manager, triggering 403 errors in some WAF systems * fixed: Easy IO could not properly resize PNG-8 images * fixed: default WebP quality was too high = 2.8.0 = * added: EIO_LAZY_FOLD override to configure number of images above-the-fold that will be skipped by Lazy Load * added: Easy IO URLs for custom (non-WP) srcset markup * added: Easy IO support for CSS background images with relative URLs * fixed: Easy IO scaling not working on full-size images without srcset/responsive markup * fixed: Lazy Load skips images dynamically created by Brizy builder * fixed: Easy IO conflict on Elementor preview pages * fixed: EXACTDN_CONTENT_WIDTH not effective at overriding $content_width during image_downsize filter = 2.7.4 = * added: Easy IO and Lazy Load support for AJAX responses from FacetWP * changed: Vimeo videos excluded from iframe lazy load * changed: use 'bg-image-crop' class on elements with CSS background images that need to be cropped by auto-scaling * fixed: sub-folder multi-site installs which use separate domains could not activate Easy IO * fixed: Lazy Load PNG placeholders cannot be cached if the WP_CONTENT_DIR location is read-only (notably on Pantheon servers) * fixed: is_amp() called too early * fixed: Fusion Builder (Avada) does not load when Lazy Load or Easy IO options are enabled = 2.7.3 = * fixed: local PNG placeholders enabled with Easy IO when placeholder folder is not writable * fixed: iframe lazy loading breaks Gravity Forms and FacetWP when parsing JSON * fixed: is_amp() called too early = 2.7.2 = * fixed: Lazy Load not automatically creating placeholder folder = 2.7.1 = * added: integration with JSON/AJAX respones from Spotlight Social Media Feeds plugin * fixed: img element search parsing JSON incorrectly = 2.7.0 = * changed: PNG placeholders are now inlined for less HTTP requests and better auto-scaling * fixed: LQIP query strings not allowing resize operations * fixed: Lazy Load throws error when ewww_webp_supported not defined in edge cases. * fixed: Lazy Load regression prevents above-the-fold CSS background images from loading * fixed: WebP source images ignored by URL rewriter * fixed: Lazy Load scripts loading for page builders when they shouldn't be * fixed: Easy IO does not rewrite image (href) links if image_downsize integration has rewritten the img tag = 2.6.1 = * added: disable "deep" integration with image_downsize filter via EIO_DISABLE_DEEP_INTEGRATION override * fixed: LQIP query strings not allowing resize operations * fixed: Lazy Load throws error when ewww_webp_supported not defined in edge cases. * fixed: Lazy Load regression prevents above-the-fold CSS background images from loading * fixed: WebP source images ignored by URL rewriter = 2.6.0 = * added: enable -sharp_yuv option for WebP conversion with the EIO_WEBP_SHARP_YUV override * added: Lazy Load for iframes, add 'iframe' in exclusions to disable * added: preserve metadata and apply lossless compression to linked versions of images via Easy IO with EIO_PRESERVE_LINKED_IMAGES constant * added: Easy IO rewrites URLs in existing picture elements * changed: native lazy loading is now enabled for right-sized PNG placeholders, override with EIO_DISABLE_NATIVE_LAZY constant * changed: move Easy IO check-in to wp_cron * fixed: Add Missing Dimensions overwrites smaller width/height attribute if only one is set * fixed: replacing an existing attribute (like width) with a numeric value is broken = 2.5.5 = * fixed: Easy IO's Include All Resources compat with Oxygen Builder and Beaver Builder * fixed: regex to detect SVG images in use elements caused excessive backtracking * fixed: WebP version of full-size image not removed when attachment deleted due to undefined variable * fixed: Easy IO adds invalid zoom parameter of 1920 to srcset URL = 2.5.4 = * fixed: Lazy Load fails to auto-scale with img-crop class for Easy IO * fixed: Lazy Load throws JS error in SCRIPT_DEBUG mode * fixed: warnings due to empty needle in strpos() function call = 2.5.3 = * added: use 'img-crop' id/class, or data-img-crop attribute to force cropping with Easy IO + Lazy Load. * changed: lazysizes script moved to footer of page * changed: use core wp_getimagesize() for proper error handling = 2.5.2 = * fixed: lazy load threshold missing from minified code = 2.5.1 = * change: added setting to enable adding of missing width/height dimensions, disabled by default * fixed: warning from plugins using core wp_lazy_load filter without second parameter/argument = 2.5.0 = * added: ability to use SVG placeholders for more efficient lazy load via EASYIO_USE_SIIP override * added: Easy IO and Lazy Load add missing width and height to image elements * added: Lazy Load - right-sized placeholders can be generated for full-sized images * added: configure Lazy Load pre-load threshold via EIO_LL_THRESHOLD constant * changed: Lazy Load for external (non-inline) CSS images must be configured for specific elements * changed: Easy IO's Include All Resources unlocked for all plans * changed: native lazy loading is now disabled when using Easy IO lazy load, override with EIO_ENABLE_NATIVE_LAZY constant * changed: Lazy Load pre-load threshold increased from 500px to 1000px * changed: Lazy Load picture elements use right-sized img placeholder instead of 1x1 inline GIF * fixed: native iframe lazy load disabled in WP 5.7+ * fixed: removing metadata clobbers APNG animations * fixed: some JSON elements still being altered by Lazy Load * fixed: Easy IO throws warnings when WP content is not in a sub-directory = 2.4.3 = * fixed: syntax error on PHP 7.2 or less = 2.4.2 = * changed: Easy IO supports img tags with SVG images * fixed: error when a class attribute with no value is encountered = 2.4.1 = * fixed: lazy load for external CSS breaking div elements in JS/JSON * removed: JS defer with Easy IO, use SWIS Performance instead: https://ewww.io/swis/ = 2.4.0 = * added: Lazy Load for external CSS and separate style blocks (div elements only for now) * added: Easy IO/CDN rewriting for Ultimate Member AJAX-powered activity wall * changed: better compatibility with Theia Smart Thumbnails * changed: Lazy Load auto-sizing will no longer decrease the image size, only increasing is allowed * changed: filter to include additional HTML element types via eio_allowed_background_image_elements filter for Lazy Load and Easy IO * fixed: compatibility between Easy IO and Autoptimize * fixed: Easy IO uses hard crop when constraining an image via a width/height found in the style attribute * fixed: Easy IO uses hard-coded wp-content/ and wp-includes/ paths in some cases * fixed: Easy IO doubles part of image URL when there are no thumbnails, but one is requested by a plugin or theme * fixed: Easy IO minifier breaks Beaver Builder * fixed: Lazy Load breaks Beaver Builder text editor = 2.3.1 = * changed: Easy IO verification performed via API for better reliability * fixed: Easy IO missing https availability for admin-ajax.php requests when home_url is using plain http * fixed: Easy IO silently fails to rewrite URLs when using CNAME with WP Offload Media * fixed: wp_lazy_loading_enabled filter should have 3 parameters * fixed: Easy IO shows alert for domain change when a non-default WPML language is active = 2.3.0 = * fixed: Easy IO missing https availability for admin-ajax.php requests when home_url is using plain http * fixed: wp_lazy_loading_enabled filter should have 3 parameters * fixed: Easy IO shows alert for domain change when a non-default WPML language is active = 2.2.9 = * added: display total savings on settings page * fixed: Lazy Load breaks JSON-encoded img elements * fixed: Easy IO adds excess markup for images with height and/or width set to 'auto' * fixed: memory_limit check should be case-insensitive: g vs. G * fixed: Easy IO skips images in AJAX Load More requests = 2.2.8 = * fixed: lazy loader not loading = 2.2.7 = * added: alert on domain change for Easy IO, like if you clone from a production environment to staging * changed: Easy IO domain and plan_id refresh automatically when visiting settings page * fixed: error with Lazy Load and AMP = 2.2.6 = * changed: The browser-native portion of the Lazy Load feature obeys the wp_lazy_loading_enabled filter * changed: prevent parsing of sitemap.xml * fixed: Lazy Load placeholders not rewritten for CDN usage by Autoptimize and WP Offload Media Assets Add-on * fixed: ensure video files do not have extra query parameters added = 2.2.5 = * fixed: errors with WP Offload Media 2.4 * fixed: Easy IO hard crops images when requested height/width is 9999 * fixed: Lazy Load parser running on customizer preview pane = 2.2.4 = * added: GIF to WebP conversion with API and Easy IO * added: disable Lazy Load auto-scale by defining EIO_LL_AUTOSCALE as false = 2.2.3 = * fixed: lazy load skips img elements with unquoted src attributes * fixed: sites using S3 fail verification after upgrade = 2.2.2 = * fixed: Lazy Load has nested fall-back img elements if an image is found multiple times in a page * fixed: Easy IO mangles srcset URLs when src URL is relative instead of absolute * fixed: Easy IO URLs leaking into block editor for new uploads = 2.2.1 = * added: EXACTDN_DEFER_JQUERY_SAFE override for when inline scripts depend on jQuery * changed: Easy IO uses better query-string fall-back for plugins * changed: Easy IO enforces https if available rather than protocol-relative URLs = 2.2.0 = * added: defer jQuery also with EXACTDN_DEFER_JQUERY override * added: Lazy Load supports VC grid layouts retrieved via AJAX * fixed: Lazy Load prevents loading of images in oEmbed endpoint * fixed: jQuery exclusion was preventing deferral of jQuery extensions also * fixed: Lazy Load parsing Owl Lazy images * fixed: Easy IO adds srcset/sizes to feeds = 2.1.1 = * added: defer JS with Easy IO via EXACTDN_DEFER_SCRIPTS override * fixed: AMP compatiblity for Lazy Load was broken * fixed: images not loading on WPURP/WPRM print recipe pages = 2.1.0 = * added: Easy IO replaces image URLs within style elements for page builders like Elementor and Divi * changed: potentially expensive db queries disabled by default * fixed: verification fails if server is blocking test.png with a 403 * fixed: Include All Resources rewrites wrong URLs when quotes are html-encoded * fixed: tags do not follow Lazy Load exclusions * fixed: tags broken when excluding images from Lazy Load = 2.0.3 = * fixed: debug_message() throws a warning with non-string values * fixed: notices when parsing JSON data from Envira * fixed: fatal error when a WP_Error is passed from Envira to Easy IO = 2.0.2 = * removed: data-pin-media attribute, as Pinterest is handling WebP images properly now = 2.0.1 = * fixed: data-pin-media attribute added to linked images incorrectly = 2.0.0 = * added: Easy IO sets pre-scaled image in data-pin-media for Pinterest * added: Envira Pro cache cleared when activating Easy IO * fixed: background image lazy-loading could be interrupted by other plugins copying elements * fixed: Easy IO misses some images with Envira Gallery Pro layouts * fixed: missing www in domain prevents rewrites for Easy IO * fixed: Lazy Load parsing X/Pro theme admin pages = 1.9.0 = * added: automatic plan upgrade detection * changed: plugin can be activated network-wide, though configuration is still per-site * updated: embedded help beacon code * updated: lazysizes.js to version 5.2 * fixed: custom domain for Easy IO prevents auto-scaling * fixed: full-width background images auto-scaled due to scroll bars = 1.8.0 = * changed: better compatibility with other implementations of "native lazy load" * fixed: Easy IO detects wrong domain when using separate domains for site and content = 1.7.0 = * added: exclude images from Easy IO in settings * added: exclude images from Lazy Load by string or class name * added: prevent auto-scaling with skip-autoscale * added: exclusions can be defined as overrides (single value as string, multiple values as an array) * fixed: errors due to duplicate ssl= arguments in URLs = 1.6.0 = * added: support background images on a/link elements * fixed: partial wp-content URLs being rewritten for some plugins * fixed: inconsistent settings page links * updated: new version of lazysizes JS = 1.5.0 = * added: disable native lazy-load attributes with EASYIO_DISABLE_NATIVE_LAZY * added: ability to choose LQIP or blank placeholders for lazy load * added: better compatibility with Divi filterable grid images and parallax backgrounds * changed: default to blank placeholders with Easy IO * fixed: Divi builder will not load with Easy IO and Include All Resources active * fixed: image cover block with fixed width scaled too much * fixed: low-quality placeholders sometimes had larger dimensions than necessary * fixed: Slider Revolution dummy.png not properly handled by Easy IO = 1.4.0 = * changed: turn off WebP conversion when premium optimization is disabled * fixed: incorrect debug function in ExactDN class * fixed: wrong translation slug for some strings = 1.3.0 = * added: GCS sub-folder rewriting with ExactDN for cleaner URLs = 1.2.0 = * changed: better URL detection with WP Offload Media activated * changed: lazy placeholders limited to 1920px wide = 1.1.0 = * added: use native loading="lazy" for even better performance * updated: lazysizes core library * fixed: ExactDN incorrectly scales Elementor background images rather than cropping * fixed: ExactDN cannot work with Divi/Elementor background images due to use of external CSS files * fixed: Lazy Load auto-scaling breaks if background image is enclosed in encoded quotes = 1.0.0 = * First release (ported from EWWW Image Optimizer)