Skip to content

Client Side Media iteration for WordPress 7.1: stabilization, docs, and Core backports #76756

Closed
48 of 48 issues completed

Description

@adamsilverstein

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:

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-media package with upload queue system
  • @wordpress/vips package with fully inlined wasm-vips build
  • @wordpress/web-worker package 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:

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:

What remains through the release is ongoing hardening and syncing to Core:

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:

Longer-term roadmap items (audio transcoding, image editing, BlurHash placeholders, per-size format optimization, saliency-based cropping, and more) are also tracked in #80159.

Activity

  1. added
    [Type] IterationScoped iteration of an effort from a tracking issue or overview issue ideally for a major release.
    on Mar 23, 2026
  2. 96 remaining items

  3. adamsilverstein commented on Jul 17, 2026

    @adamsilverstein
    MemberAuthor

    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:

    The counterpart Gutenberg PR #79603 (backport CSM improvements from Core) also merged.

    Documentation: shipped

    • #75895 Add client-side media processing documentation (merged), closing #75111. This was the last outstanding docs item.

    Bugs & correctness: resolved

    • #79556 preserve bit depth of high-bit-depth (10/12-bit) AVIF sub-sizes, plus follow-up test #79880, closing #79557
    • #79409 sideload external images on the server, closing #79407 (external upload under cross-origin isolation)
    • #79384 apply and correct EXIF orientation for client-side sub-sizes, closing #79383
    • #78420 return the filtered wp_editor_set_quality value in the upload response, closing #78419
    • #79972 fix fatal error from narrowed create_item_from_url() visibility

    Still 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:

    • #80210 audit of hooks fired during upload (server vs client path), leading to #80218 which honors image_strip_meta and image_max_bit_depth on the client upload path (closing #80216)
    • #80330 consolidate optional Vips/upload-media params into options objects
    • #80072 make GIF → video conversion opt-in, switchable via block transforms
    • #80260 fix upload hang when converting long animated GIFs (decode first frame only for still outputs), closing #80259, with 7.1 backport #80342
    • #80268 generate animated image sub-sizes from the first frame only, matching Core, closing #80266
    • #80379 add timeout and size guardrails to client-side GIF → video conversion
    • #80345 fix upload snackbar stuck in uploading state on server-side uploads
    • #80371 fix upload snackbar double-counting a single HEIC upload in Safari
    • #79955 reject pending worker RPC calls on worker failure or termination
    • #79952 wait for the upload queue to settle between media-upload perf iterations

    Discussion outcomes

    • #77582 EXIF rotation (server vs client vs hybrid): resolved and closed
    • #77246 batch thumbnail cancellation semantics: still open, carried to 7.2

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

  4. moved this from 🏗️ In Progress to 📋 Iteration/Tracking Issues in WordPress 7.1 Editor Taskson Aug 1, 2026
  5. adamsilverstein commented on Aug 12, 2026

    @adamsilverstein
    MemberAuthor

    With all attached issues resolved, I am closing this out for 7.1! Work continues for 7.2 and beyond here:

  6. moved this from 📋 Iteration/Tracking Issues to ✅ Done in WordPress 7.1 Editor Taskson Aug 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

[Feature] Client Side MediaMedia processing in the browser with WASM[Type] EnhancementA suggestion for improvement.[Type] IterationScoped iteration of an effort from a tracking issue or overview issue ideally for a major release.

Type

Projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions