IndexLane Safe WebP Queue

A WordPress plugin that creates WebP copies of your images while keeping the originals. Convert on the server or use the optional browser mode when your host cannot write WebP, with progress reporting and checks before converted files are saved.

DownloadVersion 1.0.1
IndexLane Safe WebP Queue
IndexLane Safe WebP Queue main plugin page

About IndexLane Safe WebP Queue

Safe WebP Queue converts WordPress images to WebP while keeping the original JPEG and PNG files. It handles generated image sizes too, reports what happened, and can skip conversions that would make a file larger.

Hosting support is where this gets awkward. WordPress might handle your existing images perfectly well while its image editor cannot write WebP.

Version 1.0.0 adds another route: conversion in the administrator’s browser, using a WebAssembly encoder bundled with the plugin. There is no separate conversion service or desktop application to install. Your browser processes the image and sends the finished WebP back to WordPress.

The resulting file goes through the same checks and file management as a server conversion. Before accepting it, the plugin checks that the source and conversion settings are still current. It also coordinates browser saves with server conversion and cleanup, so those operations do not interfere with each other.

The browser panel shows progress, individual results and a stop control. It checks whether the browser and site configuration support conversion and explains what is missing when they do not.

Browser conversion is off by default and needs the admin page to stay open while it runs. The persistent server queue and automatic conversion of new uploads still require a compatible server encoder.

I’ve tested the browser route in Chrome and Safari, including transparent PNGs, generated sizes, saved results and conversions that turn out larger than the original.

Notes & updates

Release history

Version 1.0.1
  • Detected ImageMagick builds that silently ignore WebP quality and routed conversion to GD or the browser instead. Added a small, request-cached encoder probe and regression coverage for the Linux fallback.
  • Corrected the WordPress.org Tested up to header to 7.1; compatibility testing still uses WordPress 7.1.1.
  • Explicitly sanitized Media Library row-action IDs before normalizing them, resolving the Plugin Check input warning.
  • Updated release metadata and packaging checks for 1.0.1, and ignored the local codec/ directory.

1.0.0 - 2026-09-19

  • Added browser (WebAssembly) conversion. A WebP encoder compiled to WebAssembly ships with the plugin and runs in the administrator's browser, so images on hosts whose image editor cannot write WebP are still convertible. Nothing is installed on the machine and no service is contacted; only the finished WebP file returns to the site.

  • Added a browser conversion panel to the plugin page: capability detection that names the missing browser feature, HTTPS and Content Security Policy checks, a per-file progress bar, a running result log, a stop control, and a report refresh when the run ends.

  • Added the "Convert images in the browser" setting, off by default, plus a browser conversion row in the server checks and a report reason and editor label for files that only the browser can convert.

  • Routed browser output through the same staging, ownership, conflict, totals and generated-map code as the local image editor backends, so a browser conversion is indistinguishable from a server conversion afterwards, including frontend serving.

  • Kept the persistent queue honest on hosts without a WebP writer: conversion jobs, whole-library jobs and automatic new-upload conversion are refused with a clear message instead of failing attachment by attachment, and browser-only files are reported as skipped rather than failed.

  • Blocked a browser run while a server conversion job holds the queue, and suspended the page's queue worker while a browser run is in progress, so the two backends never write the same attachment at the same time.

  • Added tests/browser-wordpress.php: integration coverage for capability routing, the REST prepare/finish handshake, container validation, replay, changed sources, foreign sibling files, cross-user tokens, WebP validation, stored metadata, totals and cleanup.

  • Added a CI job that type checks the WebAssembly module, rebuilds the committed bundle, compares it with the shipped files and confirms the bundled codec licences.

  • Fixed server conversion ignoring the selected quality when WordPress changes the output format to WebP.

  • Fixed stale browser results after quality changes, damaged outputs, or a replaced attachment source; browser saves recheck the current source and settings.

  • Serialized cleanup, totals recalculation, and browser saves with the server queue, kept conflicting controls disabled during a browser run, and allowed conversion after a server job is paused.

  • Added a real worker/codec capability probe, useful server error messages, bounded uploads, and EXIF rotation/mirror rejection before decoding.

  • Corrected encoder labels and savings for partially converted attachments, and applied memory limits to regeneration too.

  • Stopped automatic uploads from retrying browser-only images.

  • Verified WordPress 7.1.1 with GD, Imagick, WP-CLI, and the browser backend regressions; updated the CI matrix.

  • Added measured size and speed comparisons for large/small JPEG and PNG files using Chrome, GD, and Imagick at quality 80.

  • Rewrote the description for shared-hosting users and refreshed six screenshots, including a live WebAssembly conversion.

  • Tested browser WebAssembly conversion in Google Chrome 153.0.8010.52 on WordPress 7.1.1 and real Safari 26.6.2 on WordPress 7.1 (macOS), covering JPEGs, transparent PNGs, generated sizes, saved results, and larger-output skips.

External download

Download 1.0.1
Version 0.3.0
  • Added whole-library background conversion with bounded batches, attachment ID cursors, pause/resume/cancel, and retries that remain available after large failure counts.
  • Added Media Library WebP status and savings, row and bulk conversion actions, and per-image exclusions from conversion and frontend serving.
  • Added incremental savings totals and bounded recalculation for earlier conversions, partial cleanup, and attachment-deletion retries.
  • Added WP-CLI status, scan, convert, totals, queue, and cleanup commands with dry runs and whole-library conversion.
  • Fixed exclusions changed after queuing, CLI output formatting and command registration, automatic queue draining, and cleanup/recalculation conflicts with queued conversion.
  • Expanded WordPress and CLI regression coverage for library changes between batches and consistent savings after cleanup retries.

External download

Download 0.3.0
Version 0.2.1
  • Added report search by filename, attachment title, and ID with matching result counts.
  • Made CSV exports and conversion selection respect the active search and status filter, including selecting only visible eligible images.
  • Added a clear-search control, a no-results message, and accessible status-filter states.
  • Included existing WebP results in the Skipped filter and convertible review items in the Eligible filter to match their counters.

External download

Download 0.2.1
Version 0.2.0
  • Added a persistent, resumable conversion queue with bounded batches, duplicate-worker locking, progress reporting, pause, resume, cancel, and failed-item retry controls.
  • Moved automatic new-upload conversion out of the upload request and into retryable WP-Cron work.
  • Added generation fingerprints so source-file or quality-setting changes are detected before plugin-owned WebP files are safely regenerated.
  • Reconciled plugin-owned WebP files when attachment sizes change and cleaned them up when attachments are deleted.
  • Retained failed attachment cleanup as background orphan work so temporary deletion failures can be retried safely.
  • Expanded browser and WordPress smoke coverage for persistent jobs, retries, asynchronous uploads, fingerprints, and attachment lifecycle cleanup.

External download

Download 0.2.0
Version 0.1.5
  • Renamed the displayed plugin to IndexLane Safe WebP Queue and removed the third-party update URI.
  • Changed the WordPress.org contributor to wpfixpath and declared testing through WordPress 7.1.
  • Treated unrelated sibling WebP files as conflicts and prevented them from being overwritten or deleted.
  • Staged and validated generated WebP files before replacing plugin-owned output.
  • Made PHP statuses, JavaScript request errors, CSV headers, selection labels, and result summaries translation-ready.
  • Added the root GPL license and repeatable WordPress.org release packaging with top-level SVN assets.
  • Changed CI to test the unmodified release package with WordPress 7.1 using GD and Imagick and to run Plugin Check against that same package.

External download

Download 0.1.5
Version 0.1.4
  • fix cleanup pagination and preserve ownership after deletion failures
  • harden CSV export and validate every generated WebP in the report
  • cache frontend generated-file inspection and add regression coverage

External download

Download 0.1.4
Version 0.1.3
  • bump plugin and readme metadata to 0.1.3
  • add changelog notes for WebP validation copy and refreshed screenshots

External download

Download 0.1.3
Version 0.1.2

Prepare 0.1.2 CI and repo hardening release

  • bump plugin and readme release metadata to 0.1.2
  • update README positioning copy
  • ignore IDE/build artifacts and remove tracked .idea/dist files
  • run Plugin Check against a clean WordPress.org build directory
  • harden uploads-path validation before scan/conversion
  • replace direct filesystem calls flagged by Plugin Check

External download

Download 0.1.2
Version 0.1.0
  • Added server capability checks and a Media Library dry-run scan.
  • Added selected, small-batch sibling WebP conversion while preserving original images.
  • Added skip reasons, CSV export, and explicit cleanup for plugin-generated WebP files.

External download

Download 0.1.0