Skip to content

Add @wordpress/worker-threads package and migrate @wordpress/vips from @shopify/web-worker#74629

Closed
adamsilverstein wants to merge 33 commits into
trunkfrom
feature/74352-new-wordpress-vips-package-no-shopify
Closed

Add @wordpress/worker-threads package and migrate @wordpress/vips from @shopify/web-worker#74629
adamsilverstein wants to merge 33 commits into
trunkfrom
feature/74352-new-wordpress-vips-package-no-shopify

Conversation

@adamsilverstein

@adamsilverstein adamsilverstein commented Jan 14, 2026

Copy link
Copy Markdown
Member

What?

Follow on from #74478

Fixes #74352

See #69254

This PR introduces a new @wordpress/worker-threads package that provides type-safe Web Worker RPC communication, and migrates @wordpress/vips to use it instead of @shopify/web-worker.

Why?

The @shopify/web-worker package has several issues for Gutenberg:

  1. Unmaintained - The repository is archived
  2. Requires webpack and Babel - Gutenberg has moved to esbuild
  3. Build-time magic - Uses webpack chunk naming and Babel transforms that don't work with our build system

Alternative libraries were evaluated:

  • Comlink - Uses Apache 2.0 license, incompatible with GPL-2.0+ for combined work in WordPress core
  • threads.js - Unmaintained
  • workerize - Unmaintained, requires webpack

The solution is to create our own lightweight package that:

  • Works with esbuild (no webpack/babel required)
  • Is GPL-2.0+ licensed
  • Provides similar ergonomics to Comlink/Shopify web-worker

How?

New @wordpress/worker-threads package

Provides three main exports:

  • wrap(worker) - Creates a proxy for a Worker that exposes its methods as async functions
  • terminate(remote) - Terminates a wrapped worker and cleans up resources
  • expose(api) - Exposes an object's methods to be called from the main thread (used in worker script)

Features:

  • Automatic transferable detection for efficient ArrayBuffer transfer (zero-copy)
  • Full TypeScript support with Remote<T> type
  • ~1.5KB bundle size
  • Promise-based RPC with proper error propagation

Build system enhancement

Added wpWorkers field support to @wordpress/build. Packages can now declare worker entry points in package.json:

{
  "wpWorkers": {
    "./worker": "./src/worker.ts"
  }
}

Workers are bundled as self-contained files with all dependencies included.

Migration of @wordpress/vips

  • Updated worker.ts to use expose() from the new package
  • Updated vips-worker.ts to use wrap() and terminate()
  • Made package ESM-only (wasm-vips uses top-level await which is incompatible with CJS)
  • Removed @shopify/web-worker dependency

Testing Instructions

  1. Run npm install to update dependencies
  2. Run npm run build to build all packages
  3. Verify the build succeeds without errors
  4. Check that packages/worker-threads/build-module/ contains the built files
  5. Check that packages/vips/build-module/ contains:
    • index.mjs - Main entry point
    • vips-worker.mjs - Worker API wrapper
    • worker.mjs - Self-contained worker bundle (~17MB with WASM)

Testing the worker functionality

The vips package functionality can be tested after merging to to the feature/client-side-media-dev branch through the media upload flow:

  1. Start wp-env: npm run wp-env start
  2. Upload an image to the media library
  3. Image processing (resize, format conversion) should work via the worker

adamsilverstein and others added 10 commits January 8, 2026 15:38
* Add wasmInlinePlugin to inline vips

* Add wasm inlining tests

* doc blocks
* Add shopify/webworker to babel config

* Add "@shopify/web-worker" dependency

* Add vips-worker build files
* Add wasmInlinePlugin to inline vips

* Add wasm inlining tests

* prettier

* Tests, try 2

* Improve doc blocks

* plugin: match other plugin pattern

* Add shopify/webworker to babel config

* Add "@shopify/web-worker" dependency

* Add vips-worker build files

* try: add worker setup test

* prettier

* correct package order

* Fix the build

* fix @shopify/web-worker version

* stub shopify/web-worker

* remove console log
This new package provides utilities for type-safe Web Worker communication
using an RPC (Remote Procedure Call) pattern. It allows calling methods on
a worker as if they were local async functions.

Key features:
- wrap(): Creates a proxy for a Worker that exposes its methods as async functions
- terminate(): Terminates a wrapped worker and cleans up resources
- expose(): Exposes an object's methods to be called from the main thread
- Automatic transferable detection for efficient ArrayBuffer transfer
- Full TypeScript support with the Remote<T> type

This package replaces the need for @shopify/web-worker without requiring
webpack or babel, making it compatible with esbuild.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds support for a new wpWorkers field in package.json that declares
worker entry points to be bundled as self-contained JavaScript files.

Workers are bundled with all dependencies included (no externals)
since they need to be fully self-contained when loaded in a
Worker context. The WASM inlining plugin is included to support
packages like @wordpress/vips that embed WASM modules.

Example usage in package.json:
  "wpWorkers": {
    "./worker": "./src/worker.ts"
  }

This will produce worker.mjs (ESM) and optionally worker.cjs (CJS)
in the respective build output directories.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace the @shopify/web-worker dependency with the new
@wordpress/worker-threads package for Web Worker RPC communication.

Changes:
- Update worker.ts to use expose() from @wordpress/worker-threads
- Update vips-worker.ts to use wrap() and terminate()
- Add wpWorkers field to package.json for worker bundling
- Make package ESM-only (remove CJS) due to wasm-vips using top-level await
- Update tsconfig.json to reference the new worker-threads package

The new implementation maintains the same public API while removing
the dependency on webpack/babel-specific tooling.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Remove the @shopify/web-worker package from devDependencies since it's
no longer needed after migrating to @wordpress/worker-threads.

This removes the dependency on webpack and babel-specific tooling
for Web Worker RPC communication.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Jan 14, 2026

Copy link
Copy Markdown

Size Change: 0 B

Total Size: 3.09 MB

ℹ️ View Unchanged
Filename Size
build/modules/a11y/index.min.js 355 B
build/modules/abilities/index.min.js 42.3 kB
build/modules/block-editor/utils/fit-text-frontend.min.js 548 B
build/modules/block-library/accordion/view.min.js 779 B
build/modules/block-library/file/view.min.js 346 B
build/modules/block-library/form/view.min.js 528 B
build/modules/block-library/image/view.min.js 1.95 kB
build/modules/block-library/navigation/view.min.js 1.12 kB
build/modules/block-library/query/view.min.js 518 B
build/modules/block-library/search/view.min.js 498 B
build/modules/block-library/tabs/view.min.js 859 B
build/modules/boot/index.min.js 104 kB
build/modules/core-abilities/index.min.js 892 B
build/modules/edit-site-init/index.min.js 2.14 kB
build/modules/interactivity-router/full-page.min.js 451 B
build/modules/interactivity-router/index.min.js 11.5 kB
build/modules/interactivity/index.min.js 15 kB
build/modules/latex-to-mathml/index.min.js 56.5 kB
build/modules/latex-to-mathml/loader.min.js 131 B
build/modules/lazy-editor/index.min.js 18.8 kB
build/modules/route/index.min.js 24.6 kB
build/modules/workflow/index.min.js 37.2 kB
build/scripts/a11y/index.min.js 1.06 kB
build/scripts/annotations/index.min.js 2.39 kB
build/scripts/api-fetch/index.min.js 2.84 kB
build/scripts/autop/index.min.js 2.18 kB
build/scripts/base-styles/index.min.js 98 B
build/scripts/blob/index.min.js 631 B
build/scripts/block-directory/index.min.js 8.04 kB
build/scripts/block-editor/index.min.js 330 kB
build/scripts/block-library/index.min.js 296 kB
build/scripts/block-serialization-default-parser/index.min.js 1.16 kB
build/scripts/block-serialization-spec-parser/index.min.js 3.08 kB
build/scripts/blocks/index.min.js 56.6 kB
build/scripts/commands/index.min.js 19.9 kB
build/scripts/components/index.min.js 266 kB
build/scripts/compose/index.min.js 13.9 kB
build/scripts/core-commands/index.min.js 4.3 kB
build/scripts/core-data/index.min.js 62.3 kB
build/scripts/customize-widgets/index.min.js 12.3 kB
build/scripts/data-controls/index.min.js 795 B
build/scripts/data/index.min.js 9.64 kB
build/scripts/date/index.min.js 23.6 kB
build/scripts/deprecated/index.min.js 756 B
build/scripts/dom-ready/index.min.js 476 B
build/scripts/dom/index.min.js 4.91 kB
build/scripts/edit-post/index.min.js 16.4 kB
build/scripts/edit-site/index.min.js 241 kB
build/scripts/edit-widgets/index.min.js 20 kB
build/scripts/editor/index.min.js 314 kB
build/scripts/element/index.min.js 5.2 kB
build/scripts/escape-html/index.min.js 586 B
build/scripts/format-library/index.min.js 10.8 kB
build/scripts/hooks/index.min.js 1.83 kB
build/scripts/html-entities/index.min.js 494 B
build/scripts/i18n/index.min.js 2.46 kB
build/scripts/is-shallow-equal/index.min.js 572 B
build/scripts/keyboard-shortcuts/index.min.js 1.57 kB
build/scripts/keycodes/index.min.js 1.56 kB
build/scripts/list-reusable-blocks/index.min.js 2.44 kB
build/scripts/media-utils/index.min.js 72.3 kB
build/scripts/notices/index.min.js 1.12 kB
build/scripts/nux/index.min.js 1.89 kB
build/scripts/patterns/index.min.js 7.77 kB
build/scripts/plugins/index.min.js 2.15 kB
build/scripts/preferences-persistence/index.min.js 2.15 kB
build/scripts/preferences/index.min.js 3.3 kB
build/scripts/primitives/index.min.js 1.01 kB
build/scripts/priority-queue/index.min.js 1.62 kB
build/scripts/private-apis/index.min.js 1.08 kB
build/scripts/react-i18n/index.min.js 833 B
build/scripts/redux-routine/index.min.js 3.37 kB
build/scripts/reusable-blocks/index.min.js 2.92 kB
build/scripts/rich-text/index.min.js 12.9 kB
build/scripts/router/index.min.js 5.96 kB
build/scripts/server-side-render/index.min.js 1.91 kB
build/scripts/shortcode/index.min.js 1.59 kB
build/scripts/style-engine/index.min.js 2.35 kB
build/scripts/theme/index.min.js 21.8 kB
build/scripts/token-list/index.min.js 739 B
build/scripts/undo-manager/index.min.js 918 B
build/scripts/url/index.min.js 3.98 kB
build/scripts/vendors/react-dom.min.js 43 kB
build/scripts/vendors/react-jsx-runtime.min.js 691 B
build/scripts/vendors/react.min.js 4.27 kB
build/scripts/viewport/index.min.js 1.21 kB
build/scripts/warning/index.min.js 454 B
build/scripts/widgets/index.min.js 7.81 kB
build/scripts/wordcount/index.min.js 1.04 kB
build/styles/base-styles/admin-schemes-rtl.css 1.71 kB
build/styles/base-styles/admin-schemes-rtl.min.css 775 B
build/styles/base-styles/admin-schemes.css 1.71 kB
build/styles/base-styles/admin-schemes.min.css 775 B
build/styles/block-directory/style-rtl.css 1.96 kB
build/styles/block-directory/style-rtl.min.css 1.05 kB
build/styles/block-directory/style.css 1.97 kB
build/styles/block-directory/style.min.css 1.05 kB
build/styles/block-editor/content-rtl.css 5.44 kB
build/styles/block-editor/content-rtl.min.css 4.01 kB
build/styles/block-editor/content.css 5.43 kB
build/styles/block-editor/content.min.css 4 kB
build/styles/block-editor/default-editor-styles-rtl.css 697 B
build/styles/block-editor/default-editor-styles-rtl.min.css 224 B
build/styles/block-editor/default-editor-styles.css 697 B
build/styles/block-editor/default-editor-styles.min.css 224 B
build/styles/block-editor/style-rtl.css 18.3 kB
build/styles/block-editor/style-rtl.min.css 15.7 kB
build/styles/block-editor/style.css 18.3 kB
build/styles/block-editor/style.min.css 15.7 kB
build/styles/block-library/accordion-heading/style-rtl.css 346 B
build/styles/block-library/accordion-heading/style-rtl.min.css 325 B
build/styles/block-library/accordion-heading/style.css 346 B
build/styles/block-library/accordion-heading/style.min.css 325 B
build/styles/block-library/accordion-item/style-rtl.css 239 B
build/styles/block-library/accordion-item/style-rtl.min.css 180 B
build/styles/block-library/accordion-item/style.css 238 B
build/styles/block-library/accordion-item/style.min.css 180 B
build/styles/block-library/accordion-panel/style-rtl.css 110 B
build/styles/block-library/accordion-panel/style-rtl.min.css 99 B
build/styles/block-library/accordion-panel/style.css 110 B
build/styles/block-library/accordion-panel/style.min.css 99 B
build/styles/block-library/accordion/style-rtl.css 69 B
build/styles/block-library/accordion/style-rtl.min.css 62 B
build/styles/block-library/accordion/style.css 69 B
build/styles/block-library/accordion/style.min.css 62 B
build/styles/block-library/archives/style-rtl.css 101 B
build/styles/block-library/archives/style-rtl.min.css 90 B
build/styles/block-library/archives/style.css 101 B
build/styles/block-library/archives/style.min.css 90 B
build/styles/block-library/audio/editor-rtl.css 166 B
build/styles/block-library/audio/editor-rtl.min.css 149 B
build/styles/block-library/audio/editor.css 166 B
build/styles/block-library/audio/editor.min.css 151 B
build/styles/block-library/audio/style-rtl.css 945 B
build/styles/block-library/audio/style-rtl.min.css 132 B
build/styles/block-library/audio/style.css 945 B
build/styles/block-library/audio/style.min.css 132 B
build/styles/block-library/audio/theme-rtl.css 967 B
build/styles/block-library/audio/theme-rtl.min.css 134 B
build/styles/block-library/audio/theme.css 967 B
build/styles/block-library/audio/theme.min.css 134 B
build/styles/block-library/avatar/editor-rtl.css 127 B
build/styles/block-library/avatar/editor-rtl.min.css 115 B
build/styles/block-library/avatar/editor.css 127 B
build/styles/block-library/avatar/editor.min.css 115 B
build/styles/block-library/avatar/style-rtl.css 117 B
build/styles/block-library/avatar/style-rtl.min.css 104 B
build/styles/block-library/avatar/style.css 117 B
build/styles/block-library/avatar/style.min.css 104 B
build/styles/block-library/breadcrumbs/style-rtl.css 233 B
build/styles/block-library/breadcrumbs/style-rtl.min.css 203 B
build/styles/block-library/breadcrumbs/style.css 233 B
build/styles/block-library/breadcrumbs/style.min.css 203 B
build/styles/block-library/button/editor-rtl.css 306 B
build/styles/block-library/button/editor-rtl.min.css 265 B
build/styles/block-library/button/editor.css 317 B
build/styles/block-library/button/editor.min.css 265 B
build/styles/block-library/button/style-rtl.css 609 B
build/styles/block-library/button/style-rtl.min.css 554 B
build/styles/block-library/button/style.css 622 B
build/styles/block-library/button/style.min.css 554 B
build/styles/block-library/buttons/editor-rtl.css 391 B
build/styles/block-library/buttons/editor-rtl.min.css 291 B
build/styles/block-library/buttons/editor.css 391 B
build/styles/block-library/buttons/editor.min.css 291 B
build/styles/block-library/buttons/style-rtl.css 452 B
build/styles/block-library/buttons/style-rtl.min.css 349 B
build/styles/block-library/buttons/style.css 453 B
build/styles/block-library/buttons/style.min.css 349 B
build/styles/block-library/calendar/style-rtl.css 271 B
build/styles/block-library/calendar/style-rtl.min.css 239 B
build/styles/block-library/calendar/style.css 271 B
build/styles/block-library/calendar/style.min.css 239 B
build/styles/block-library/categories/editor-rtl.css 171 B
build/styles/block-library/categories/editor-rtl.min.css 132 B
build/styles/block-library/categories/editor.css 170 B
build/styles/block-library/categories/editor.min.css 131 B
build/styles/block-library/categories/style-rtl.css 226 B
build/styles/block-library/categories/style-rtl.min.css 169 B
build/styles/block-library/categories/style.css 235 B
build/styles/block-library/categories/style.min.css 169 B
build/styles/block-library/classic-rtl.css 363 B
build/styles/block-library/classic-rtl.min.css 321 B
build/styles/block-library/classic.css 363 B
build/styles/block-library/classic.min.css 321 B
build/styles/block-library/code/editor-rtl.css 59 B
build/styles/block-library/code/editor-rtl.min.css 53 B
build/styles/block-library/code/editor.css 59 B
build/styles/block-library/code/editor.min.css 53 B
build/styles/block-library/code/style-rtl.css 158 B
build/styles/block-library/code/style-rtl.min.css 139 B
build/styles/block-library/code/style.css 179 B
build/styles/block-library/code/style.min.css 139 B
build/styles/block-library/code/theme-rtl.css 135 B
build/styles/block-library/code/theme-rtl.min.css 122 B
build/styles/block-library/code/theme.css 135 B
build/styles/block-library/code/theme.min.css 122 B
build/styles/block-library/columns/editor-rtl.css 119 B
build/styles/block-library/columns/editor-rtl.min.css 108 B
build/styles/block-library/columns/editor.css 119 B
build/styles/block-library/columns/editor.min.css 108 B
build/styles/block-library/columns/style-rtl.css 1.3 kB
build/styles/block-library/columns/style-rtl.min.css 421 B
build/styles/block-library/columns/style.css 1.3 kB
build/styles/block-library/columns/style.min.css 421 B
build/styles/block-library/comment-author-avatar/editor-rtl.css 136 B
build/styles/block-library/comment-author-avatar/editor-rtl.min.css 124 B
build/styles/block-library/comment-author-avatar/editor.css 136 B
build/styles/block-library/comment-author-avatar/editor.min.css 124 B
build/styles/block-library/comment-author-name/style-rtl.css 79 B
build/styles/block-library/comment-author-name/style-rtl.min.css 72 B
build/styles/block-library/comment-author-name/style.css 79 B
build/styles/block-library/comment-author-name/style.min.css 72 B
build/styles/block-library/comment-content/style-rtl.css 137 B
build/styles/block-library/comment-content/style-rtl.min.css 120 B
build/styles/block-library/comment-content/style.css 137 B
build/styles/block-library/comment-content/style.min.css 120 B
build/styles/block-library/comment-date/style-rtl.css 72 B
build/styles/block-library/comment-date/style-rtl.min.css 65 B
build/styles/block-library/comment-date/style.css 72 B
build/styles/block-library/comment-date/style.min.css 65 B
build/styles/block-library/comment-edit-link/style-rtl.css 77 B
build/styles/block-library/comment-edit-link/style-rtl.min.css 70 B
build/styles/block-library/comment-edit-link/style.css 77 B
build/styles/block-library/comment-edit-link/style.min.css 70 B
build/styles/block-library/comment-reply-link/style-rtl.css 78 B
build/styles/block-library/comment-reply-link/style-rtl.min.css 71 B
build/styles/block-library/comment-reply-link/style.css 78 B
build/styles/block-library/comment-reply-link/style.min.css 71 B
build/styles/block-library/comment-template/style-rtl.css 213 B
build/styles/block-library/comment-template/style-rtl.min.css 191 B
build/styles/block-library/comment-template/style.css 213 B
build/styles/block-library/comment-template/style.min.css 191 B
build/styles/block-library/comments-pagination-numbers/editor-rtl.css 135 B
build/styles/block-library/comments-pagination-numbers/editor-rtl.min.css 122 B
build/styles/block-library/comments-pagination-numbers/editor.css 144 B
build/styles/block-library/comments-pagination-numbers/editor.min.css 121 B
build/styles/block-library/comments-pagination/editor-rtl.css 184 B
build/styles/block-library/comments-pagination/editor-rtl.min.css 168 B
build/styles/block-library/comments-pagination/editor.css 184 B
build/styles/block-library/comments-pagination/editor.min.css 168 B
build/styles/block-library/comments-pagination/style-rtl.css 224 B
build/styles/block-library/comments-pagination/style-rtl.min.css 201 B
build/styles/block-library/comments-pagination/style.css 236 B
build/styles/block-library/comments-pagination/style.min.css 201 B
build/styles/block-library/comments-title/editor-rtl.css 83 B
build/styles/block-library/comments-title/editor-rtl.min.css 75 B
build/styles/block-library/comments-title/editor.css 83 B
build/styles/block-library/comments-title/editor.min.css 75 B
build/styles/block-library/comments/editor-rtl.css 968 B
build/styles/block-library/comments/editor-rtl.min.css 842 B
build/styles/block-library/comments/editor.css 968 B
build/styles/block-library/comments/editor.min.css 842 B
build/styles/block-library/comments/style-rtl.css 754 B
build/styles/block-library/comments/style-rtl.min.css 637 B
build/styles/block-library/comments/style.css 752 B
build/styles/block-library/comments/style.min.css 637 B
build/styles/block-library/common-rtl.css 2.48 kB
build/styles/block-library/common-rtl.min.css 1.11 kB
build/styles/block-library/common.css 2.49 kB
build/styles/block-library/common.min.css 1.11 kB
build/styles/block-library/cover/editor-rtl.css 1.05 kB
build/styles/block-library/cover/editor-rtl.min.css 631 B
build/styles/block-library/cover/editor.css 1.05 kB
build/styles/block-library/cover/editor.min.css 631 B
build/styles/block-library/cover/style-rtl.css 2.5 kB
build/styles/block-library/cover/style-rtl.min.css 1.82 kB
build/styles/block-library/cover/style.css 2.51 kB
build/styles/block-library/cover/style.min.css 1.81 kB
build/styles/block-library/details/editor-rtl.css 72 B
build/styles/block-library/details/editor-rtl.min.css 65 B
build/styles/block-library/details/editor.css 72 B
build/styles/block-library/details/editor.min.css 65 B
build/styles/block-library/details/style-rtl.css 97 B
build/styles/block-library/details/style-rtl.min.css 86 B
build/styles/block-library/details/style.css 97 B
build/styles/block-library/details/style.min.css 86 B
build/styles/block-library/editor-elements-rtl.css 117 B
build/styles/block-library/editor-elements-rtl.min.css 75 B
build/styles/block-library/editor-elements.css 117 B
build/styles/block-library/editor-elements.min.css 75 B
build/styles/block-library/editor-rtl.css 12.1 kB
build/styles/block-library/editor-rtl.min.css 9.88 kB
build/styles/block-library/editor.css 12.1 kB
build/styles/block-library/editor.min.css 9.89 kB
build/styles/block-library/elements-rtl.css 84 B
build/styles/block-library/elements-rtl.min.css 54 B
build/styles/block-library/elements.css 84 B
build/styles/block-library/elements.min.css 54 B
build/styles/block-library/embed/editor-rtl.css 391 B
build/styles/block-library/embed/editor-rtl.min.css 331 B
build/styles/block-library/embed/editor.css 390 B
build/styles/block-library/embed/editor.min.css 331 B
build/styles/block-library/embed/style-rtl.css 1.29 kB
build/styles/block-library/embed/style-rtl.min.css 448 B
build/styles/block-library/embed/style.css 1.29 kB
build/styles/block-library/embed/style.min.css 448 B
build/styles/block-library/embed/theme-rtl.css 967 B
build/styles/block-library/embed/theme-rtl.min.css 133 B
build/styles/block-library/embed/theme.css 967 B
build/styles/block-library/embed/theme.min.css 133 B
build/styles/block-library/file/editor-rtl.css 352 B
build/styles/block-library/file/editor-rtl.min.css 324 B
build/styles/block-library/file/editor.css 353 B
build/styles/block-library/file/editor.min.css 324 B
build/styles/block-library/file/style-rtl.css 318 B
build/styles/block-library/file/style-rtl.min.css 278 B
build/styles/block-library/file/style.css 331 B
build/styles/block-library/file/style.min.css 278 B
build/styles/block-library/footnotes/style-rtl.css 220 B
build/styles/block-library/footnotes/style-rtl.min.css 198 B
build/styles/block-library/footnotes/style.css 219 B
build/styles/block-library/footnotes/style.min.css 197 B
build/styles/block-library/form-input/editor-rtl.css 247 B
build/styles/block-library/form-input/editor-rtl.min.css 229 B
build/styles/block-library/form-input/editor.css 246 B
build/styles/block-library/form-input/editor.min.css 229 B
build/styles/block-library/form-input/style-rtl.css 467 B
build/styles/block-library/form-input/style-rtl.min.css 366 B
build/styles/block-library/form-input/style.css 467 B
build/styles/block-library/form-input/style.min.css 366 B
build/styles/block-library/form-submission-notification/editor-rtl.css 368 B
build/styles/block-library/form-submission-notification/editor-rtl.min.css 344 B
build/styles/block-library/form-submission-notification/editor.css 368 B
build/styles/block-library/form-submission-notification/editor.min.css 341 B
build/styles/block-library/form-submit-button/style-rtl.css 77 B
build/styles/block-library/form-submit-button/style-rtl.min.css 69 B
build/styles/block-library/form-submit-button/style.css 77 B
build/styles/block-library/form-submit-button/style.min.css 69 B
build/styles/block-library/freeform/editor-rtl.css 1.12 kB
build/styles/block-library/freeform/editor-rtl.min.css 288 B
build/styles/block-library/freeform/editor.css 1.12 kB
build/styles/block-library/freeform/editor.min.css 288 B
build/styles/block-library/gallery/editor-rtl.css 1.52 kB
build/styles/block-library/gallery/editor-rtl.min.css 615 B
build/styles/block-library/gallery/editor.css 1.52 kB
build/styles/block-library/gallery/editor.min.css 616 B
build/styles/block-library/gallery/style-rtl.css 2.84 kB
build/styles/block-library/gallery/style-rtl.min.css 1.84 kB
build/styles/block-library/gallery/style.css 2.84 kB
build/styles/block-library/gallery/style.min.css 1.84 kB
build/styles/block-library/gallery/theme-rtl.css 941 B
build/styles/block-library/gallery/theme-rtl.min.css 108 B
build/styles/block-library/gallery/theme.css 941 B
build/styles/block-library/gallery/theme.min.css 108 B
build/styles/block-library/group/editor-rtl.css 772 B
build/styles/block-library/group/editor-rtl.min.css 335 B
build/styles/block-library/group/editor.css 772 B
build/styles/block-library/group/editor.min.css 335 B
build/styles/block-library/group/style-rtl.css 120 B
build/styles/block-library/group/style-rtl.min.css 103 B
build/styles/block-library/group/style.css 120 B
build/styles/block-library/group/style.min.css 103 B
build/styles/block-library/group/theme-rtl.css 468 B
build/styles/block-library/group/theme-rtl.min.css 79 B
build/styles/block-library/group/theme.css 468 B
build/styles/block-library/group/theme.min.css 79 B
build/styles/block-library/heading/style-rtl.css 604 B
build/styles/block-library/heading/style-rtl.min.css 205 B
build/styles/block-library/heading/style.css 604 B
build/styles/block-library/heading/style.min.css 205 B
build/styles/block-library/html/editor-rtl.css 1.24 kB
build/styles/block-library/html/editor-rtl.min.css 419 B
build/styles/block-library/html/editor.css 1.25 kB
build/styles/block-library/html/editor.min.css 419 B
build/styles/block-library/image/editor-rtl.css 1.63 kB
build/styles/block-library/image/editor-rtl.min.css 763 B
build/styles/block-library/image/editor.css 1.62 kB
build/styles/block-library/image/editor.min.css 763 B
build/styles/block-library/image/style-rtl.css 2.63 kB
build/styles/block-library/image/style-rtl.min.css 1.6 kB
build/styles/block-library/image/style.css 2.63 kB
build/styles/block-library/image/style.min.css 1.59 kB
build/styles/block-library/image/theme-rtl.css 971 B
build/styles/block-library/image/theme-rtl.min.css 137 B
build/styles/block-library/image/theme.css 971 B
build/styles/block-library/image/theme.min.css 137 B
build/styles/block-library/latest-comments/style-rtl.css 394 B
build/styles/block-library/latest-comments/style-rtl.min.css 355 B
build/styles/block-library/latest-comments/style.css 394 B
build/styles/block-library/latest-comments/style.min.css 354 B
build/styles/block-library/latest-posts/editor-rtl.css 154 B
build/styles/block-library/latest-posts/editor-rtl.min.css 139 B
build/styles/block-library/latest-posts/editor.css 153 B
build/styles/block-library/latest-posts/editor.min.css 138 B
build/styles/block-library/latest-posts/style-rtl.css 1.36 kB
build/styles/block-library/latest-posts/style-rtl.min.css 520 B
build/styles/block-library/latest-posts/style.css 1.37 kB
build/styles/block-library/latest-posts/style.min.css 520 B
build/styles/block-library/list/style-rtl.css 498 B
build/styles/block-library/list/style-rtl.min.css 107 B
build/styles/block-library/list/style.css 498 B
build/styles/block-library/list/style.min.css 107 B
build/styles/block-library/loginout/style-rtl.css 68 B
build/styles/block-library/loginout/style-rtl.min.css 61 B
build/styles/block-library/loginout/style.css 68 B
build/styles/block-library/loginout/style.min.css 61 B
build/styles/block-library/math/editor-rtl.css 491 B
build/styles/block-library/math/editor-rtl.min.css 105 B
build/styles/block-library/math/editor.css 502 B
build/styles/block-library/math/editor.min.css 105 B
build/styles/block-library/math/style-rtl.css 70 B
build/styles/block-library/math/style-rtl.min.css 61 B
build/styles/block-library/math/style.css 70 B
build/styles/block-library/math/style.min.css 61 B
build/styles/block-library/media-text/editor-rtl.css 389 B
build/styles/block-library/media-text/editor-rtl.min.css 321 B
build/styles/block-library/media-text/editor.css 389 B
build/styles/block-library/media-text/editor.min.css 320 B
build/styles/block-library/media-text/style-rtl.css 873 B
build/styles/block-library/media-text/style-rtl.min.css 552 B
build/styles/block-library/media-text/style.css 903 B
build/styles/block-library/media-text/style.min.css 550 B
build/styles/block-library/more/editor-rtl.css 796 B
build/styles/block-library/more/editor-rtl.min.css 393 B
build/styles/block-library/more/editor.css 798 B
build/styles/block-library/more/editor.min.css 393 B
build/styles/block-library/navigation-link/editor-rtl.css 1.21 kB
build/styles/block-library/navigation-link/editor-rtl.min.css 645 B
build/styles/block-library/navigation-link/editor.css 1.21 kB
build/styles/block-library/navigation-link/editor.min.css 647 B
build/styles/block-library/navigation-link/style-rtl.css 579 B
build/styles/block-library/navigation-link/style-rtl.min.css 190 B
build/styles/block-library/navigation-link/style.css 579 B
build/styles/block-library/navigation-link/style.min.css 188 B
build/styles/block-library/navigation-overlay-close/style-rtl.css 257 B
build/styles/block-library/navigation-overlay-close/style-rtl.min.css 236 B
build/styles/block-library/navigation-overlay-close/style.css 257 B
build/styles/block-library/navigation-overlay-close/style.min.css 236 B
build/styles/block-library/navigation-submenu/editor-rtl.css 1.12 kB
build/styles/block-library/navigation-submenu/editor-rtl.min.css 295 B
build/styles/block-library/navigation-submenu/editor.css 1.12 kB
build/styles/block-library/navigation-submenu/editor.min.css 294 B
build/styles/block-library/navigation/editor-rtl.css 3.29 kB
build/styles/block-library/navigation/editor-rtl.min.css 2.28 kB
build/styles/block-library/navigation/editor.css 3.29 kB
build/styles/block-library/navigation/editor.min.css 2.28 kB
build/styles/block-library/navigation/style-rtl.css 3.41 kB
build/styles/block-library/navigation/style-rtl.min.css 2.35 kB
build/styles/block-library/navigation/style.css 3.41 kB
build/styles/block-library/navigation/style.min.css 2.34 kB
build/styles/block-library/nextpage/editor-rtl.css 799 B
build/styles/block-library/nextpage/editor-rtl.min.css 392 B
build/styles/block-library/nextpage/editor.css 800 B
build/styles/block-library/nextpage/editor.min.css 392 B
build/styles/block-library/page-list/editor-rtl.css 1.18 kB
build/styles/block-library/page-list/editor-rtl.min.css 356 B
build/styles/block-library/page-list/editor.css 1.18 kB
build/styles/block-library/page-list/editor.min.css 356 B
build/styles/block-library/page-list/style-rtl.css 207 B
build/styles/block-library/page-list/style-rtl.min.css 192 B
build/styles/block-library/page-list/style.css 207 B
build/styles/block-library/page-list/style.min.css 192 B
build/styles/block-library/paragraph/editor-rtl.css 315 B
build/styles/block-library/paragraph/editor-rtl.min.css 292 B
build/styles/block-library/paragraph/editor.css 314 B
build/styles/block-library/paragraph/editor.min.css 292 B
build/styles/block-library/paragraph/style-rtl.css 746 B
build/styles/block-library/paragraph/style-rtl.min.css 341 B
build/styles/block-library/paragraph/style.css 752 B
build/styles/block-library/paragraph/style.min.css 340 B
build/styles/block-library/post-author-biography/style-rtl.css 81 B
build/styles/block-library/post-author-biography/style-rtl.min.css 74 B
build/styles/block-library/post-author-biography/style.css 81 B
build/styles/block-library/post-author-biography/style.min.css 74 B
build/styles/block-library/post-author-name/style-rtl.css 76 B
build/styles/block-library/post-author-name/style-rtl.min.css 69 B
build/styles/block-library/post-author-name/style.css 76 B
build/styles/block-library/post-author-name/style.min.css 69 B
build/styles/block-library/post-author/style-rtl.css 213 B
build/styles/block-library/post-author/style-rtl.min.css 188 B
build/styles/block-library/post-author/style.css 214 B
build/styles/block-library/post-author/style.min.css 189 B
build/styles/block-library/post-comments-count/style-rtl.css 79 B
build/styles/block-library/post-comments-count/style-rtl.min.css 72 B
build/styles/block-library/post-comments-count/style.css 79 B
build/styles/block-library/post-comments-count/style.min.css 72 B
build/styles/block-library/post-comments-form/editor-rtl.css 104 B
build/styles/block-library/post-comments-form/editor-rtl.min.css 96 B
build/styles/block-library/post-comments-form/editor.css 104 B
build/styles/block-library/post-comments-form/editor.min.css 96 B
build/styles/block-library/post-comments-form/style-rtl.css 585 B
build/styles/block-library/post-comments-form/style-rtl.min.css 525 B
build/styles/block-library/post-comments-form/style.css 584 B
build/styles/block-library/post-comments-form/style.min.css 525 B
build/styles/block-library/post-comments-link/style-rtl.css 78 B
build/styles/block-library/post-comments-link/style-rtl.min.css 71 B
build/styles/block-library/post-comments-link/style.css 78 B
build/styles/block-library/post-comments-link/style.min.css 71 B
build/styles/block-library/post-content/style-rtl.css 68 B
build/styles/block-library/post-content/style-rtl.min.css 61 B
build/styles/block-library/post-content/style.css 68 B
build/styles/block-library/post-content/style.min.css 61 B
build/styles/block-library/post-date/style-rtl.css 69 B
build/styles/block-library/post-date/style-rtl.min.css 62 B
build/styles/block-library/post-date/style.css 69 B
build/styles/block-library/post-date/style.min.css 62 B
build/styles/block-library/post-excerpt/editor-rtl.css 78 B
build/styles/block-library/post-excerpt/editor-rtl.min.css 71 B
build/styles/block-library/post-excerpt/editor.css 78 B
build/styles/block-library/post-excerpt/editor.min.css 71 B
build/styles/block-library/post-excerpt/style-rtl.css 171 B
build/styles/block-library/post-excerpt/style-rtl.min.css 155 B
build/styles/block-library/post-excerpt/style.css 171 B
build/styles/block-library/post-excerpt/style.min.css 155 B
build/styles/block-library/post-featured-image/editor-rtl.css 1.14 kB
build/styles/block-library/post-featured-image/editor-rtl.min.css 719 B
build/styles/block-library/post-featured-image/editor.css 1.14 kB
build/styles/block-library/post-featured-image/editor.min.css 717 B
build/styles/block-library/post-featured-image/style-rtl.css 392 B
build/styles/block-library/post-featured-image/style-rtl.min.css 347 B
build/styles/block-library/post-featured-image/style.css 392 B
build/styles/block-library/post-featured-image/style.min.css 347 B
build/styles/block-library/post-navigation-link/style-rtl.css 234 B
build/styles/block-library/post-navigation-link/style-rtl.min.css 215 B
build/styles/block-library/post-navigation-link/style.css 245 B
build/styles/block-library/post-navigation-link/style.min.css 214 B
build/styles/block-library/post-template/style-rtl.css 1.25 kB
build/styles/block-library/post-template/style-rtl.min.css 414 B
build/styles/block-library/post-template/style.css 1.25 kB
build/styles/block-library/post-template/style.min.css 414 B
build/styles/block-library/post-terms/style-rtl.css 108 B
build/styles/block-library/post-terms/style-rtl.min.css 96 B
build/styles/block-library/post-terms/style.css 108 B
build/styles/block-library/post-terms/style.min.css 96 B
build/styles/block-library/post-time-to-read/style-rtl.css 77 B
build/styles/block-library/post-time-to-read/style-rtl.min.css 70 B
build/styles/block-library/post-time-to-read/style.css 77 B
build/styles/block-library/post-time-to-read/style.min.css 70 B
build/styles/block-library/post-title/style-rtl.css 175 B
build/styles/block-library/post-title/style-rtl.min.css 162 B
build/styles/block-library/post-title/style.css 175 B
build/styles/block-library/post-title/style.min.css 162 B
build/styles/block-library/preformatted/style-rtl.css 511 B
build/styles/block-library/preformatted/style-rtl.min.css 125 B
build/styles/block-library/preformatted/style.css 511 B
build/styles/block-library/preformatted/style.min.css 125 B
build/styles/block-library/pullquote/editor-rtl.css 146 B
build/styles/block-library/pullquote/editor-rtl.min.css 133 B
build/styles/block-library/pullquote/editor.css 146 B
build/styles/block-library/pullquote/editor.min.css 133 B
build/styles/block-library/pullquote/style-rtl.css 765 B
build/styles/block-library/pullquote/style-rtl.min.css 365 B
build/styles/block-library/pullquote/style.css 764 B
build/styles/block-library/pullquote/style.min.css 365 B
build/styles/block-library/pullquote/theme-rtl.css 195 B
build/styles/block-library/pullquote/theme-rtl.min.css 176 B
build/styles/block-library/pullquote/theme.css 195 B
build/styles/block-library/pullquote/theme.min.css 176 B
build/styles/block-library/query-pagination-numbers/editor-rtl.css 134 B
build/styles/block-library/query-pagination-numbers/editor-rtl.min.css 121 B
build/styles/block-library/query-pagination-numbers/editor.css 144 B
build/styles/block-library/query-pagination-numbers/editor.min.css 118 B
build/styles/block-library/query-pagination/editor-rtl.css 168 B
build/styles/block-library/query-pagination/editor-rtl.min.css 154 B
build/styles/block-library/query-pagination/editor.css 168 B
build/styles/block-library/query-pagination/editor.min.css 154 B
build/styles/block-library/query-pagination/style-rtl.css 254 B
build/styles/block-library/query-pagination/style-rtl.min.css 237 B
build/styles/block-library/query-pagination/style.css 265 B
build/styles/block-library/query-pagination/style.min.css 237 B
build/styles/block-library/query-title/style-rtl.css 71 B
build/styles/block-library/query-title/style-rtl.min.css 64 B
build/styles/block-library/query-title/style.css 71 B
build/styles/block-library/query-title/style.min.css 64 B
build/styles/block-library/query-total/style-rtl.css 71 B
build/styles/block-library/query-total/style-rtl.min.css 64 B
build/styles/block-library/query-total/style.css 71 B
build/styles/block-library/query-total/style.min.css 64 B
build/styles/block-library/query/editor-rtl.css 1.28 kB
build/styles/block-library/query/editor-rtl.min.css 438 B
build/styles/block-library/query/editor.css 1.28 kB
build/styles/block-library/query/editor.min.css 438 B
build/styles/block-library/quote/style-rtl.css 255 B
build/styles/block-library/quote/style-rtl.min.css 238 B
build/styles/block-library/quote/style.css 256 B
build/styles/block-library/quote/style.min.css 238 B
build/styles/block-library/quote/theme-rtl.css 253 B
build/styles/block-library/quote/theme-rtl.min.css 233 B
build/styles/block-library/quote/theme.css 254 B
build/styles/block-library/quote/theme.min.css 236 B
build/styles/block-library/read-more/style-rtl.css 146 B
build/styles/block-library/read-more/style-rtl.min.css 131 B
build/styles/block-library/read-more/style.css 146 B
build/styles/block-library/read-more/style.min.css 131 B
build/styles/block-library/reset-rtl.css 936 B
build/styles/block-library/reset-rtl.min.css 467 B
build/styles/block-library/reset.css 936 B
build/styles/block-library/reset.min.css 467 B
build/styles/block-library/rss/editor-rtl.css 144 B
build/styles/block-library/rss/editor-rtl.min.css 126 B
build/styles/block-library/rss/editor.css 144 B
build/styles/block-library/rss/editor.min.css 126 B
build/styles/block-library/rss/style-rtl.css 1.11 kB
build/styles/block-library/rss/style-rtl.min.css 284 B
build/styles/block-library/rss/style.css 1.12 kB
build/styles/block-library/rss/style.min.css 283 B
build/styles/block-library/search/editor-rtl.css 217 B
build/styles/block-library/search/editor-rtl.min.css 199 B
build/styles/block-library/search/editor.css 217 B
build/styles/block-library/search/editor.min.css 199 B
build/styles/block-library/search/style-rtl.css 1.1 kB
build/styles/block-library/search/style-rtl.min.css 665 B
build/styles/block-library/search/style.css 1.1 kB
build/styles/block-library/search/style.min.css 666 B
build/styles/block-library/search/theme-rtl.css 130 B
build/styles/block-library/search/theme-rtl.min.css 113 B
build/styles/block-library/search/theme.css 130 B
build/styles/block-library/search/theme.min.css 113 B
build/styles/block-library/separator/editor-rtl.css 106 B
build/styles/block-library/separator/editor-rtl.min.css 100 B
build/styles/block-library/separator/editor.css 106 B
build/styles/block-library/separator/editor.min.css 100 B
build/styles/block-library/separator/style-rtl.css 284 B
build/styles/block-library/separator/style-rtl.min.css 248 B
build/styles/block-library/separator/style.css 297 B
build/styles/block-library/separator/style.min.css 248 B
build/styles/block-library/separator/theme-rtl.css 226 B
build/styles/block-library/separator/theme-rtl.min.css 195 B
build/styles/block-library/separator/theme.css 226 B
build/styles/block-library/separator/theme.min.css 195 B
build/styles/block-library/shortcode/editor-rtl.css 1.1 kB
build/styles/block-library/shortcode/editor-rtl.min.css 286 B
build/styles/block-library/shortcode/editor.css 1.1 kB
build/styles/block-library/shortcode/editor.min.css 286 B
build/styles/block-library/site-logo/editor-rtl.css 1.12 kB
build/styles/block-library/site-logo/editor-rtl.min.css 696 B
build/styles/block-library/site-logo/editor.css 1.12 kB
build/styles/block-library/site-logo/editor.min.css 692 B
build/styles/block-library/site-logo/style-rtl.css 239 B
build/styles/block-library/site-logo/style-rtl.min.css 218 B
build/styles/block-library/site-logo/style.css 238 B
build/styles/block-library/site-logo/style.min.css 218 B
build/styles/block-library/site-tagline/editor-rtl.css 94 B
build/styles/block-library/site-tagline/editor-rtl.min.css 87 B
build/styles/block-library/site-tagline/editor.css 94 B
build/styles/block-library/site-tagline/editor.min.css 87 B
build/styles/block-library/site-tagline/style-rtl.css 72 B
build/styles/block-library/site-tagline/style-rtl.min.css 65 B
build/styles/block-library/site-tagline/style.css 72 B
build/styles/block-library/site-tagline/style.min.css 65 B
build/styles/block-library/site-title/editor-rtl.css 93 B
build/styles/block-library/site-title/editor-rtl.min.css 85 B
build/styles/block-library/site-title/editor.css 93 B
build/styles/block-library/site-title/editor.min.css 85 B
build/styles/block-library/site-title/style-rtl.css 153 B
build/styles/block-library/site-title/style-rtl.min.css 143 B
build/styles/block-library/site-title/style.css 153 B
build/styles/block-library/site-title/style.min.css 143 B
build/styles/block-library/social-link/editor-rtl.css 346 B
build/styles/block-library/social-link/editor-rtl.min.css 314 B
build/styles/block-library/social-link/editor.css 348 B
build/styles/block-library/social-link/editor.min.css 314 B
build/styles/block-library/social-links/editor-rtl.css 737 B
build/styles/block-library/social-links/editor-rtl.min.css 339 B
build/styles/block-library/social-links/editor.css 738 B
build/styles/block-library/social-links/editor.min.css 338 B
build/styles/block-library/social-links/style-rtl.css 1.57 kB
build/styles/block-library/social-links/style-rtl.min.css 1.51 kB
build/styles/block-library/social-links/style.css 1.57 kB
build/styles/block-library/social-links/style.min.css 1.51 kB
build/styles/block-library/spacer/editor-rtl.css 774 B
build/styles/block-library/spacer/editor-rtl.min.css 346 B
build/styles/block-library/spacer/editor.css 774 B
build/styles/block-library/spacer/editor.min.css 346 B
build/styles/block-library/spacer/style-rtl.css 55 B
build/styles/block-library/spacer/style-rtl.min.css 48 B
build/styles/block-library/spacer/style.css 55 B
build/styles/block-library/spacer/style.min.css 48 B
build/styles/block-library/style-rtl.css 20.3 kB
build/styles/block-library/style-rtl.min.css 16.7 kB
build/styles/block-library/style.css 20.4 kB
build/styles/block-library/style.min.css 16.7 kB
build/styles/block-library/tab/style-rtl.css 222 B
build/styles/block-library/tab/style-rtl.min.css 202 B
build/styles/block-library/tab/style.css 222 B
build/styles/block-library/tab/style.min.css 202 B
build/styles/block-library/table-of-contents/style-rtl.css 89 B
build/styles/block-library/table-of-contents/style-rtl.min.css 83 B
build/styles/block-library/table-of-contents/style.css 89 B
build/styles/block-library/table-of-contents/style.min.css 83 B
build/styles/block-library/table/editor-rtl.css 1.25 kB
build/styles/block-library/table/editor-rtl.min.css 394 B
build/styles/block-library/table/editor.css 1.25 kB
build/styles/block-library/table/editor.min.css 394 B
build/styles/block-library/table/style-rtl.css 1.06 kB
build/styles/block-library/table/style-rtl.min.css 641 B
build/styles/block-library/table/style.css 1.06 kB
build/styles/block-library/table/style.min.css 640 B
build/styles/block-library/table/theme-rtl.css 985 B
build/styles/block-library/table/theme-rtl.min.css 152 B
build/styles/block-library/table/theme.css 985 B
build/styles/block-library/table/theme.min.css 152 B
build/styles/block-library/tabs/editor-rtl.css 264 B
build/styles/block-library/tabs/editor-rtl.min.css 236 B
build/styles/block-library/tabs/editor.css 263 B
build/styles/block-library/tabs/editor.min.css 236 B
build/styles/block-library/tabs/style-rtl.css 1.09 kB
build/styles/block-library/tabs/style-rtl.min.css 991 B
build/styles/block-library/tabs/style.css 1.09 kB
build/styles/block-library/tabs/style.min.css 991 B
build/styles/block-library/tag-cloud/style-rtl.css 283 B
build/styles/block-library/tag-cloud/style-rtl.min.css 248 B
build/styles/block-library/tag-cloud/style.css 283 B
build/styles/block-library/tag-cloud/style.min.css 248 B
build/styles/block-library/template-part/editor-rtl.css 1.2 kB
build/styles/block-library/template-part/editor-rtl.min.css 368 B
build/styles/block-library/template-part/editor.css 1.2 kB
build/styles/block-library/template-part/editor.min.css 368 B
build/styles/block-library/template-part/theme-rtl.css 492 B
build/styles/block-library/template-part/theme-rtl.min.css 113 B
build/styles/block-library/template-part/theme.css 492 B
build/styles/block-library/template-part/theme.min.css 113 B
build/styles/block-library/term-count/style-rtl.css 70 B
build/styles/block-library/term-count/style-rtl.min.css 63 B
build/styles/block-library/term-count/style.css 70 B
build/styles/block-library/term-count/style.min.css 63 B
build/styles/block-library/term-description/style-rtl.css 138 B
build/styles/block-library/term-description/style-rtl.min.css 126 B
build/styles/block-library/term-description/style.css 138 B
build/styles/block-library/term-description/style.min.css 126 B
build/styles/block-library/term-name/style-rtl.css 69 B
build/styles/block-library/term-name/style-rtl.min.css 62 B
build/styles/block-library/term-name/style.css 69 B
build/styles/block-library/term-name/style.min.css 62 B
build/styles/block-library/term-template/editor-rtl.css 267 B
build/styles/block-library/term-template/editor-rtl.min.css 225 B
build/styles/block-library/term-template/editor.css 267 B
build/styles/block-library/term-template/editor.min.css 225 B
build/styles/block-library/term-template/style-rtl.css 124 B
build/styles/block-library/term-template/style-rtl.min.css 114 B
build/styles/block-library/term-template/style.css 124 B
build/styles/block-library/term-template/style.min.css 114 B
build/styles/block-library/text-columns/editor-rtl.css 481 B
build/styles/block-library/text-columns/editor-rtl.min.css 95 B
build/styles/block-library/text-columns/editor.css 481 B
build/styles/block-library/text-columns/editor.min.css 95 B
build/styles/block-library/text-columns/style-rtl.css 177 B
build/styles/block-library/text-columns/style-rtl.min.css 165 B
build/styles/block-library/text-columns/style.css 177 B
build/styles/block-library/text-columns/style.min.css 165 B
build/styles/block-library/theme-rtl.css 1.59 kB
build/styles/block-library/theme-rtl.min.css 715 B
build/styles/block-library/theme.css 1.6 kB
build/styles/block-library/theme.min.css 719 B
build/styles/block-library/verse/style-rtl.css 140 B
build/styles/block-library/verse/style-rtl.min.css 123 B
build/styles/block-library/verse/style.css 140 B
build/styles/block-library/verse/style.min.css 123 B
build/styles/block-library/video/editor-rtl.css 825 B
build/styles/block-library/video/editor-rtl.min.css 415 B
build/styles/block-library/video/editor.css 826 B
build/styles/block-library/video/editor.min.css 416 B
build/styles/block-library/video/style-rtl.css 1.02 kB
build/styles/block-library/video/style-rtl.min.css 202 B
build/styles/block-library/video/style.css 1.02 kB
build/styles/block-library/video/style.min.css 202 B
build/styles/block-library/video/theme-rtl.css 967 B
build/styles/block-library/video/theme-rtl.min.css 134 B
build/styles/block-library/video/theme.css 967 B
build/styles/block-library/video/theme.min.css 134 B
build/styles/commands/style-rtl.css 1.86 kB
build/styles/commands/style-rtl.min.css 1 kB
build/styles/commands/style.css 1.86 kB
build/styles/commands/style.min.css 1 kB
build/styles/components/style-rtl.css 16.9 kB
build/styles/components/style-rtl.min.css 13.7 kB
build/styles/components/style.css 17 kB
build/styles/components/style.min.css 13.8 kB
build/styles/customize-widgets/style-rtl.css 2.35 kB
build/styles/customize-widgets/style-rtl.min.css 1.44 kB
build/styles/customize-widgets/style.css 2.35 kB
build/styles/customize-widgets/style.min.css 1.44 kB
build/styles/edit-post/classic-rtl.css 1.29 kB
build/styles/edit-post/classic-rtl.min.css 426 B
build/styles/edit-post/classic.css 1.31 kB
build/styles/edit-post/classic.min.css 427 B
build/styles/edit-post/style-rtl.css 4.08 kB
build/styles/edit-post/style-rtl.min.css 2.63 kB
build/styles/edit-post/style.css 4.09 kB
build/styles/edit-post/style.min.css 2.63 kB
build/styles/edit-site/style-rtl.css 22 kB
build/styles/edit-site/style-rtl.min.css 17 kB
build/styles/edit-site/style.css 22 kB
build/styles/edit-site/style.min.css 17 kB
build/styles/edit-widgets/style-rtl.css 5.24 kB
build/styles/edit-widgets/style-rtl.min.css 3.83 kB
build/styles/edit-widgets/style.css 5.23 kB
build/styles/edit-widgets/style.min.css 3.84 kB
build/styles/editor/style-rtl.css 25.8 kB
build/styles/editor/style-rtl.min.css 20.4 kB
build/styles/editor/style.css 25.9 kB
build/styles/editor/style.min.css 20.4 kB
build/styles/format-library/style-rtl.css 735 B
build/styles/format-library/style-rtl.min.css 326 B
build/styles/format-library/style.css 746 B
build/styles/format-library/style.min.css 326 B
build/styles/list-reusable-blocks/style-rtl.css 1.07 kB
build/styles/list-reusable-blocks/style-rtl.min.css 250 B
build/styles/list-reusable-blocks/style.css 1.07 kB
build/styles/list-reusable-blocks/style.min.css 249 B
build/styles/media-utils/style-rtl.css 1.57 kB
build/styles/media-utils/style-rtl.min.css 710 B
build/styles/media-utils/style.css 1.57 kB
build/styles/media-utils/style.min.css 710 B
build/styles/nux/style-rtl.css 1.48 kB
build/styles/nux/style-rtl.min.css 622 B
build/styles/nux/style.css 1.5 kB
build/styles/nux/style.min.css 618 B
build/styles/patterns/style-rtl.css 1.46 kB
build/styles/patterns/style-rtl.min.css 611 B
build/styles/patterns/style.css 1.46 kB
build/styles/patterns/style.min.css 611 B
build/styles/preferences/style-rtl.css 1.26 kB
build/styles/preferences/style-rtl.min.css 415 B
build/styles/preferences/style.css 1.26 kB
build/styles/preferences/style.min.css 415 B
build/styles/reusable-blocks/style-rtl.css 1.11 kB
build/styles/reusable-blocks/style-rtl.min.css 275 B
build/styles/reusable-blocks/style.css 1.11 kB
build/styles/reusable-blocks/style.min.css 275 B
build/styles/theme/style-rtl.css 2.66 kB
build/styles/theme/style-rtl.min.css 1.37 kB
build/styles/theme/style.css 2.66 kB
build/styles/theme/style.min.css 1.37 kB
build/styles/widgets/style-rtl.css 2.04 kB
build/styles/widgets/style-rtl.min.css 1.15 kB
build/styles/widgets/style.css 2.04 kB
build/styles/widgets/style.min.css 1.15 kB

compressed-size-action

adamsilverstein and others added 4 commits January 14, 2026 13:51
Adds comprehensive test coverage for the worker-threads package:

- rpc.test.ts: Tests for RPC protocol utilities (message creation,
  validation, posting)
- transferables.test.ts: Tests for transferable object detection
  (ArrayBuffer, TypedArrays, nested structures, circular refs)
- main-thread.test.ts: Tests for wrap() and terminate() functions
- worker-thread.test.ts: Tests for expose() function

Also fixes transferables.ts to check for MessagePort availability
before using instanceof (not available in all environments).

Total: 89 unit tests

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The vips-worker.ts test file was mocking @shopify/web-worker which
has been removed. This test is no longer applicable since vips now
uses @wordpress/worker-threads.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@adamsilverstein adamsilverstein marked this pull request as ready for review January 14, 2026 23:48
@github-actions

github-actions Bot commented Jan 14, 2026

Copy link
Copy Markdown

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

Unlinked Accounts

The following contributors have not linked their GitHub and WordPress.org accounts: @Copilot, @kleisauke.

Contributors, please read how to link your accounts to ensure your work is properly credited in WordPress releases.

If you're merging code through a pull request on GitHub, copy and paste the following into the bottom of the merge commit message.

Unlinked contributors: Copilot, kleisauke.

Co-authored-by: adamsilverstein <adamsilverstein@git.wordpress.org>
Co-authored-by: jsnajdr <jsnajdr@git.wordpress.org>
Co-authored-by: swissspidy <swissspidy@git.wordpress.org>

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR introduces a new @wordpress/worker-threads package to provide type-safe Web Worker RPC communication and migrates @wordpress/vips away from the archived @shopify/web-worker library. The motivation is to replace an unmaintained dependency that requires webpack/Babel with a lightweight, esbuild-compatible GPL-2.0+ licensed solution.

Changes:

  • Created new @wordpress/worker-threads package with wrap(), terminate(), and expose() APIs for Worker RPC communication
  • Enhanced build system with wpWorkers field support and WASM inlining in @wordpress/build
  • Migrated @wordpress/vips to ESM-only using the new worker-threads package, removing @shopify/web-worker dependency

Reviewed changes

Copilot reviewed 24 out of 26 changed files in this pull request and generated 4 comments.

Show a summary per file
File Description
packages/worker-threads/* New package providing type-safe Worker RPC with automatic transferable detection
packages/wp-build/lib/build.mjs Added wpWorkers field support and WASM inlining plugin for bundling worker scripts
packages/vips/src/worker.ts New worker entry point using expose() from worker-threads
packages/vips/src/vips-worker.ts New wrapper using wrap() and terminate() from worker-threads
packages/vips/src/index.ts Updated WASM loading to use inline base64 data URLs
packages/vips/package.json Made ESM-only, added worker-threads dependency and wpWorkers field
test/e2e/specs/editor/various/wasm-inlining.spec.js Added build verification test for WASM inlining
test/unit/jest.config.js Added stub mapping for shopify/web-worker transformed imports
test/unit/config/shopify-web-worker-stub.js Jest stub for shopify/web-worker transformed paths
tsconfig.json Added worker-threads package reference
pr-description.md PR description documentation file

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/worker-threads/src/transferables.ts Outdated
Comment thread packages/vips/src/vips-worker.ts Outdated
Comment thread test/e2e/specs/editor/various/wasm-inlining.spec.js Outdated
Comment thread pr-description.md Outdated

Copilot AI commented Jan 15, 2026

Copy link
Copy Markdown
Contributor

@adamsilverstein I've opened a new pull request, #74635, to work on those changes. Once the pull request is ready, I'll request review from you.

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>

Copilot AI commented Jan 15, 2026

Copy link
Copy Markdown
Contributor

@adamsilverstein I've opened a new pull request, #74636, to work on those changes. Once the pull request is ready, I'll request review from you.

@adamsilverstein adamsilverstein requested review from andrewserong and ramonjd and removed request for ajitbohra, nerrad and ntwb January 16, 2026 05:40
@jsnajdr

jsnajdr commented Jan 16, 2026

Copy link
Copy Markdown
Member

Yes, the generated code looks quite nice 🙂 It can be simplified at some places:

  • the isRPCMessage check could be simplified or even completely eliminated. It currently does almost complete linting of the message structure. Usually you just check something like message.type === 'my-rpc-protocol'. And it could be eliminated because we competely control the postMessage channel between the worker and its creator (who owns the handle). It's not like sending messages to iframes which are "public" objects, available to any script through DOM API, where the iframe must be very careful about who it talks to.
  • we probably don't need such a generic findTransferables implementation which finds transferables in any deeply nested field of any object. We could limit our APIs so that a transferable (i.e., a big binary buffer with image data) is always a standalone parameter.

But otherwise it looks good.

However! One alternative we should explore is using the @remote-ui/rpc library. That's also part of the Shopify stack, like @shopify/web-worker, and used internally by web-worker. That's basically a 1:1 replacement for @wordpress/worker-threads, and it has MIT licence, a compatible one. If we could use that, then the custom code we need for our "wasm in workers" scenario could be much smaller.

@adamsilverstein

adamsilverstein commented Jan 16, 2026

Copy link
Copy Markdown
Member Author

Yes, the generated code looks quite nice 🙂 It can be simplified at some places:

  • the isRPCMessage check could be simplified or even completely eliminated. It currently does almost complete linting of the message structure. Usually you just check something like message.type === 'my-rpc-protocol'. And it could be eliminated because we competely control the postMessage channel between the worker and its creator (who owns the handle). It's not like sending messages to iframes which are "public" objects, available to any script through DOM API, where the iframe must be very careful about who it talks to.
  • we probably don't need such a generic findTransferables implementation which finds transferables in any deeply nested field of any object. We could limit our APIs so that a transferable (i.e., a big binary buffer with image data) is always a standalone parameter.

But otherwise it looks good.

@jsnajdr - Excellent, thanks for the feedback. I can work on these changes specifically while also considering the alternative you suggested...

However! One alternative we should explore is using the @remote-ui/rpc library. That's also part of the Shopify stack, like @shopify/web-worker, and used internally by web-worker. That's basically a 1:1 replacement for @wordpress/worker-threads, and it has MIT licence, a compatible one. If we could use that, then the custom code we need for our "wasm in workers" scenario could be much smaller.

Which exact library are you referring to here?

I see https://github.com/developit/remote-ui from from Jason but not recently updated and the Shopify library it is forked from https://github.com/Shopify/remote-dom (renamed to remote dom at some point).

adamsilverstein and others added 2 commits January 16, 2026 09:21
Since we completely control the postMessage channel between the worker
and its creator, there's no need for detailed validation of message
structure. Now only checks if the type field matches a valid MessageType.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Instead of recursively traversing all nested objects looking for
transferables, now only checks direct elements in the args array
(for CALL messages) or the result value (for RESULT messages).

This simplification establishes an API contract that transferables
(like ArrayBuffer with image data) should be passed as standalone
parameters rather than nested within objects.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@adamsilverstein

Copy link
Copy Markdown
Member Author

However! One alternative we should explore is using the @remote-ui/rpc library. That's also part of the Shopify stack, like @shopify/web-worker, and used internally by web-worker. That's basically a 1:1 replacement for @wordpress/worker-threads, and it has MIT licence, a compatible one. If we could use that, then the custom code we need for our "wasm in workers" scenario could be much smaller.

I asked Claude to analyze this option and got this response:

Analysis: @remote-ui/rpc as Alternative to @wordpress/worker-threads

Summary

@remote-ui/rpc is not a suitable replacement for @wordpress/worker-threads in the WASM image processing use case due to a fundamental limitation: it does not support ArrayBuffer or typed array transfer.


Critical Finding: ArrayBuffer Support

From the @remote-ui/rpc documentation, the following types are explicitly unsupported:

  • Map, Set, WeakMap, WeakSet
  • ArrayBuffer, typed arrays
  • URL, RegExp
  • Class instances

This is a blocking issue for the WASM image processing use case, which relies heavily on transferring large image buffers (often 50MB+) between the main thread and worker with zero-copy semantics.


Feature Comparison

Feature @remote-ui/rpc @wordpress/worker-threads
Primary use case UI extensibility with function callbacks Binary data processing
Function passing across boundary ✅ Full support with retain/release ❌ Not supported
ArrayBuffer transfer ❌ Not supported ✅ Zero-copy transfer
TypedArray support ❌ Not supported ✅ Auto-detected
ImageBitmap transfer ❌ Not supported ✅ Auto-detected
Stream transfer ❌ Not supported ✅ Auto-detected
Memory management Automatic for functions Automatic for transferables
License MIT GPL (WordPress)
Code size ~2000+ lines ~717 lines

Different Design Goals

@remote-ui/rpc

Designed for Shopify's UI extensibility model where:

  • Extension code runs in a sandboxed worker
  • UI components need event handlers/callbacks passed across the boundary
  • Functions are proxied with automatic retain/release memory management
  • Focus is on developer ergonomics for UI interactions

@wordpress/worker-threads

Designed for efficient binary data processing where:

  • Large binary buffers (images, WASM memory) transfer between threads
  • Zero-copy ArrayBuffer transfer is essential for performance
  • Focus is on efficient data transfer, not function proxying

Current Implementation Details

How @wordpress/vips Uses Worker Threads

Main Thread: vipsResizeImage(id, 50MB buffer, ...)
  → wrap() creates CALL message with buffer
  → findTransferables() detects ArrayBuffer
  → postMessage with [buffer] in transfer list (zero-copy)
  → Worker receives buffer ownership
  → Worker processes with WASM (wasm-vips)
  → Worker returns new processed buffer
  → Main thread receives result with zero-copy

Transferables Auto-Detected by @wordpress/worker-threads

From packages/worker-threads/src/transferables.ts:

  • ArrayBuffer
  • MessagePort
  • ImageBitmap
  • OffscreenCanvas
  • ReadableStream
  • WritableStream
  • TransformStream
  • TypedArrays (Uint8Array, etc.)

What Would Be Required to Use @remote-ui/rpc

To use @remote-ui/rpc for this use case, you would need one of:

  1. Add binary data support to @remote-ui/rpc - Major upstream change, unlikely to be accepted as it doesn't align with the library's design goals

  2. Wrap @remote-ui/rpc with transferable handling - Would require writing the same transferable detection code that already exists in @wordpress/worker-threads, negating any simplicity benefit

  3. Serialize binary data differently - e.g., Base64 encoding, which would:

    • Increase payload size by ~33%
    • Require encoding/decoding overhead
    • Eliminate zero-copy benefits
    • Destroy performance for large images

Code Size Comparison

@wordpress/worker-threads (717 lines total)

 57 lines - index.ts (exports)
206 lines - main-thread.ts (wrap, terminate)
152 lines - rpc.ts (message protocol)
140 lines - transferables.ts (auto-detection)
 79 lines - types.ts (TypeScript types)
 83 lines - worker-thread.ts (expose)

This is already minimal and purpose-built for the use case.


Recommendation

Keep @wordpress/worker-threads for the following reasons:

  1. Fundamental incompatibility: @remote-ui/rpc cannot transfer ArrayBuffer/TypedArray, which is the core requirement for WASM image processing

  2. Already minimal: The current implementation is only 717 lines and well-designed for its purpose

  3. Different problems: The libraries solve different problems - function proxying vs. binary data transfer

  4. No benefit: Switching would require adding the same transferable handling code, providing no simplification


Alternative Approaches to Explore

If the goal is to reduce custom code or use established libraries, consider:

  1. Comlink (Google) - Supports transferables, similar API to worker-threads, MIT license

  2. workerize - Simpler but may not have full transferable support

  3. threads.js - Full-featured worker library with transferable support

However, the current @wordpress/worker-threads implementation is already simple, well-tested, and fit for purpose.


Sources

@adamsilverstein

Copy link
Copy Markdown
Member Author
  • the isRPCMessage check could be simplified or even completely eliminated. It currently does almost complete linting of the message structure. Usually you just check something like message.type === 'my-rpc-protocol'. And it could be eliminated because we competely control the postMessage channel between the worker and its creator (who owns the handle). It's not like sending messages to iframes which are "public" objects, available to any script through DOM API, where the iframe must be very careful about who it talks to.

Simplified in b98f484

  • we probably don't need such a generic findTransferables implementation which finds transferables in any deeply nested field of any object. We could limit our APIs so that a transferable (i.e., a big binary buffer with image data) is always a standalone parameter.

Simplied in 55a5b22

@adamsilverstein

adamsilverstein commented Jan 16, 2026

Copy link
Copy Markdown
Member Author

@swissspidy I went ahead and removed HEIF support in be86016 which I am hopeful won't break anything :)

@adamsilverstein

adamsilverstein commented Jan 16, 2026

Copy link
Copy Markdown
Member Author

However! One alternative we should explore is using the @remote-ui/rpc library. That's also part of the Shopify stack, like @shopify/web-worker, and used internally by web-worker. That's basically a 1:1 replacement for @wordpress/worker-threads, and it has MIT licence, a compatible one. If we could use that, then the custom code we need for our "wasm in workers" scenario could be much smaller.

@jsnajdr I took another pass at simplifying our library, leveraging comctx https://github.com/molvqingtai/comctx in #74702

This rcp library is MIT licensed and actively maintained (although not incredibly popular).

@jsnajdr

jsnajdr commented Jan 16, 2026

Copy link
Copy Markdown
Member

Which exact library are you referring to here?

This is an interesting question 🙂 There is the @remote-ui/rpc package published on NPM. Version 1.4.7, last published in June 2025 by the shopify-dep user. MIT license, recently updated, doesn't look bad.

But where are the sources? Not easy to find, but turns out they are in the Shopify/remote-dom repo. Just not in the main branch, but in the special remote-ui branch. I have no idea what that means 🙂 What is the relationship between remote-ui and remote-dom and what it says about the development and maintentance of remote-ui.

@swissspidy

Copy link
Copy Markdown
Member

Note: remote-ui has been completely rewritten to use native DOM APIs and now has a new name, Shopify/remote-dom#267. The original @remote-ui libraries documented here will continue to work, but only bugfixes will be made on this project going forward. We recommend you follow the migration guide to adopt the new, more flexible DOM environment used by Remote DOM.

@kleisauke

Copy link
Copy Markdown
Contributor

@swissspidy I went ahead and removed HEIF support in be86016 which I am hopeful won't break anything :)

FWIW, this would break AVIF support. Note that wasm-vips doesn't support HEIC as it includes patent-encumbered HEVC-related logic.

@adamsilverstein

adamsilverstein commented Jan 20, 2026

Copy link
Copy Markdown
Member Author

@kleisauke super - thanks for jumping in to clarify that! I will revert that commit - we certainly want AVIF support. I was under the impression from previous discussions that we needed to unbundle the vips heif support because of the licensing issues.

@jsnajdr

jsnajdr commented Jan 20, 2026

Copy link
Copy Markdown
Member

@remote-ui/rpc is not a suitable replacement for @wordpress/worker-threads in the WASM image processing use case due to a fundamental limitation: it does not support ArrayBuffer or typed array transfer.

This would be an additional reason why the original @shopify/web-worker library is unsuitable for the vips package. In addition to the Babel/webpack plugin issues, it wouldn't be able to to transfer image data to the worker and back, because it internally uses @remote-ui/rpc. I wonder if this ever worked at all in the media-experiments project.

@swissspidy

Copy link
Copy Markdown
Member

I don't know how you got to this conclusion. It definitely works in that plugin. IIRC they added ArrayBuffer support at some point, but it was not documented in the readme.

@adamsilverstein

Copy link
Copy Markdown
Member Author

I don't know how you got to this conclusion. It definitely works in that plugin. IIRC they added ArrayBuffer support at some point, but it was not documented in the readme.

This was from Claude so possible out of date or just wrong. Thanks for clarifying.

@jsnajdr

jsnajdr commented Jan 20, 2026

Copy link
Copy Markdown
Member

I don't know how you got to this conclusion. It definitely works in that plugin.

That's the conclusion of the Claude analysis in #74629 (comment). Which probably relied solely on the (outdated) information in the README.

Now when we settled on comctx it no longer matters that much, though.

@adamsilverstein

Copy link
Copy Markdown
Member Author

Closing in favor of #74785 which leverages comctx.

@github-project-automation github-project-automation Bot moved this from 🔎 Needs Review to ✅ Done in WordPress 7.0 Editor Tasks Jan 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

[Feature] Client Side Media Media processing in the browser with WASM [Type] Enhancement A suggestion for improvement.

Projects

Development

Successfully merging this pull request may close these issues.

Update @wordpress/vips package with fully inlined wasm-vips build

6 participants