Repository navigation
Client Side Media iteration for WordPress 7.1: stabilization, docs, and Core backports #76756
Description
Overall Goal
Land client side media as a rich core feature in WordPress 7.1.
Status: done. With WordPress 7.1 at Beta 1, client-side media is feature complete for the release. All originally scoped enhancements have shipped; unfinished enhancements were punted to the 7.2+ tracking issue (#80159). This issue now tracks the remaining 7.1 work through the release: stabilization bug fixes, documentation, and Core backports.
Client-side media provides a progressive enhancement to the current server-based approach to media processing and delivers more robust and consistent media processing across WordPress installs, regardless of their underlying hosting stack. If the user's browser is not capable of processing media, the editor silently falls back to existing server-side processing.
Previous tracking issue:
- Client Side Media iteration for WordPress 7.0 #74333 (WordPress 7.0 iteration)
Next iteration: - Client Side Media iteration for WordPress 7.2 and beyond #80159 (WordPress 7.2 and beyond)
What shipped during the 7.0 development cycle
In 7.0, the client media feature graduated from a Gutenberg experiment to a core Gutenberg feature.
Significant groundwork was completed during the 7.0 cycle, including:
- Core client-side image compression infrastructure using WebAssembly (WASM) and wasm-vips
@wordpress/upload-mediapackage with upload queue system@wordpress/vipspackage with fully inlined wasm-vips build@wordpress/web-workerpackage to offload processing in a worker thread- SharedArrayBuffer / Cross-Origin Isolation support
- AVIF, WebP, and efficient JPEG output encoding
- Sub-size generation, EXIF metadata handling, auto-rotation, and large-image-size logic
- Graceful fallback to server-side processing for unsupported browsers or formats
- WebAssembly support detection and capability-based feature gating to avoid running on low powered devices
What shipped during the 7.1 development cycle
All of the enhancements originally scoped for 7.1 landed:
- HEIC image support with canvas fallback, so iPhone photos are transcoded in the browser before upload (Media: Add HEIC canvas fallback for client-side processing #76732)
- Ultra HDR (ISO 21496-1) gain map preservation through the resize and encode pipeline (Add UltraHDR isupport #74874)
- Comprehensive upload error handling, retry logic, and network resilience (Add comprehensive error handling #74366, Add retry logic and network resilience media uploads #76790)
- Upload progress tracking and progress UI (Track progress during media uploads #74362, Images: Implement upload progress UI #74363, Show upload progress with snackbar #77241)
- Concurrent uploading of images and sub-size sideloads (Investigate concurrent uploading of images #75257)
- Performance metrics for client-side media processing (Add performance metrics for client-side media processing #76789)
- Playground compatibility (Client Side Media does not work in Playground #75941)
image_editor_output_formatfiltering moved to the upload response (Moveimage_editor_output_formatdata to the full sized image upload response #75784)- Sideload REST API endpoint requirements completed (Ensure REST API endpoint for side-loaded media covers all requirements #74360)
- Post saving locked during media uploads (Post saving should be locked during media uploads #76971)
- Crash and console error fixes during image upload processing (Investigate and fix crashes and console errors during client-side image upload processing #76706)
- Complete e2e test coverage for client side media (Ensure complete e2e testing for client side media #74367)
- Animated GIF to video conversion (Add animated GIF to web video conversion #76942)
The cycle also included many performance and correctness fixes, including single-decode sub-size generation (#76753), faster thumbnail generation (#77248), high-bit-depth AVIF support (#78889, #79557), scaled-image filename and srcset fixes (#78037, #78358), a smaller inlined WASM worker bundle (#79187), a full audit of server vs. client upload hooks (#80210), and honoring image_strip_meta and image_max_bit_depth on the client upload path (#80218). Late in the cycle a round of stabilization fixes hardened the animated GIF and HEIC paths: first-frame-only sub-size generation to match core (#80268), a fix for uploads hanging on long GIFs (#80260), timeout and size guardrails on GIF to video conversion (#80379), a fix for the upload snackbar sticking on server-side uploads (#80345), and a fix for Safari double-counting a single HEIC upload (#80371). See the closed sub-issues on this issue for the complete list.
Remaining work for the 7.1 release
With Beta 1 shipped, the in-scope stabilization enhancements originally listed here have all resolved:
Upload queue: a vips worker failure leaves uploads hanging forever (worker RPC promises never settle) #79953 - a vips worker failure leaves uploads hanging forever- fixed in Worker threads: reject pending RPC calls on worker failure or termination #79955 (merged; backported towp/7.1)Some server-side image-processing hooks never fire on the client upload path #80216 - some server-side image-processing hooks never fire on the client upload path- fixed in Client Side Media: Honor image_strip_meta and image_max_bit_depth on the client upload path #80218 (merged; Core backport in REST API: Expose image_strip_meta and image_max_bit_depth in the index wordpress-develop#12508)Media: Where should EXIF rotation belong — server, client, or hybrid? #77582 - decide where EXIF rotation should be handled (server, client, or hybrid)- resolvedAdd thorough documentation for Client Side Media #75111 - thorough documentation for client side media- shipped in Docs: Add client-side media processing documentation #75895 (merged)
What remains through the release is ongoing hardening and syncing to Core:
- Continued stabilization of the animated GIF to video path (progress UI Media: Show determinate GIF conversion progress in the upload snackbar #80329, opt-in animated sub-sizes Generate animated image sub-sizes by default #80385) and other bug fixes reported during beta testing
- Core backports: the PHP portions of this work are being backported to WordPress Core via wordpress-develop during the beta period
Punted to 7.2 and beyond
At Beta 1, all unfinished enhancements were moved off the 7.1 milestone to the next iteration issue, #80159, including:
- Video transcoding to web-safe formats #79363 - video transcoding to web-safe formats
- Local poster generation during video upload #79366 - local poster generation during video upload
- Resume uploads after a crash or reload (durable upload queue) #79365 - durable upload queue (resume uploads after a crash or reload)
- Optimize previously uploaded media #79364 - optimize previously uploaded media
- Add JPEG XL (JXL) support #76981 - JPEG XL (JXL) support (removed from 7.1 scope, see Add JPEG XL support #77584)
- Document-Isolation-Policy header scope is too narrow, breaking cross-window communication across admin screens #77633 - broaden the Document-Isolation-Policy header scope
Longer-term roadmap items (audio transcoding, image editing, BlurHash placeholders, per-size format optimization, saliency-based cropping, and more) are also tracked in #80159.
Metadata
Metadata
Assignees
Labels
Type
Projects
- StatusShow more project fields✅ Done
Activity
image_editor_output_formatdata to the full sized image upload response #7578496 remaining items
adamsilverstein commentedon Jul 17, 2026
7.1 status update: wrapping up
Following up on the Jun 27 status update. This is likely the final update on this issue: the 7.1 client-side media work is effectively complete. Nearly all remaining items have landed, the PHP portions are committed to Core, documentation has shipped, and continued work now tracks under #80159 (Client Side Media iteration for WordPress 7.2 and beyond).
Thank you to everyone who reviewed, tested, and contributed across this cycle. 🎉
Core backports:
The PHP portions of this work are backported to WordPress Core via wordpress-develop. Since the last update, essentially every open backport PR has been committed to Core trunk:
urlREST param, r62659 ↔ #79409image_qualityREST field, r62630 ↔ #78420convert_formatarg tests (committed)The counterpart Gutenberg PR #79603 (backport CSM improvements from Core) also merged.
Documentation: shipped
Bugs & correctness: resolved
wp_editor_set_qualityvalue in the upload response, closing #78419create_item_from_url()visibilityStill open: #79559 (HDR NCLX/CICP color metadata stripped from AVIF output) is blocked upstream in libvips and moves to 7.2.
Hardening & stabilization (new since the last update)
A round of hooks-parity and animated-GIF robustness work landed as part of stabilization:
image_strip_metaandimage_max_bit_depthon the client upload path (closing #80216)Discussion outcomes
Carried forward to 7.2+ (#80159)
The proposed-additions and longer-horizon items from the last update now track under the 7.2 iteration issue as sub-issues:
Wrap-up
With the Core backports committed, documentation shipped, and the correctness and hardening items resolved, client-side media processing for 7.1 is in good shape. Continued iteration will happen in #80159 while bug fixes for 7.1 will continue to be tracked here. 🙏
__heicUploadSupportflag #80451adamsilverstein commentedon Aug 12, 2026
With all attached issues resolved, I am closing this out for 7.1! Work continues for 7.2 and beyond here: