Repository navigation
Update wordpress monorepo - #53004
Conversation
|
Thanks for the thorough pass; this is exactly the kind of cross-plugin case the matrix misses. widget-primitives across plugin copies (the blocker): fixed in The polyfill build now emits For widget-primitives (the one module Core never ships), a newer bundled copy now replaces an older plugin's registration, and an older copy leaves a newer one alone, whichever plugin loads first; a build predating the version file counts as older. With a supported Gutenberg, its copy still wins, and Four PHP tests cover the order permutations and the version-less copy, and a node test checks every emitted version file against the bundled package. So the "Jetpack updated ahead of the standalone Stats/VideoPress" case now takes Jetpack's copy. The rest are in too, since they were small:
Noted the interactivity 7 two-hyphen IDs in Forms and Search for a follow-up; they only bite once Core or Gutenberg ships that runtime. |
…onorepo # Conflicts: # pnpm-lock.yaml # projects/packages/premium-analytics/widgets/store-performance/package.json # projects/packages/sharing-likes/package.json # projects/packages/sharing-likes/routes/settings/package.json
Manual matrix on a local Docker site (build of
|
| Cell | Core | Gutenberg | Surfaces | Provenance | Console |
|---|---|---|---|---|---|
| G | 7.1 | off | Stats v2 (dashboard, Referrers), Forms, My Jetpack, VideoPress, Boost, Protect, classic Settings, editor with the Jetpack sidebar (SEO + Social) | Core serves notices, private-apis, rich-text, theme, boot, route, a11y; wp-views and @wordpress/widget-primitives from the polyfill |
clean (Settings shows two pre-existing React warnings from FormToggle/WritingSettings) |
| G2 | 7.1 | 24.1.0 | Stats v2, Forms, My Jetpack, editor | everything from Gutenberg (its widget-primitives has HostLink); wp-views from the polyfill |
clean |
| G3 | 7.1 | 24.0.0 | Stats v2, Forms | Gutenberg, except wp-views and @wordpress/widget-primitives from the polyfill: the new 24.1.0 gate replaced Gutenberg 24.0's copy, which lacks HostLink |
clean |
| E | 7.0.4 | off | Stats v2, Forms, My Jetpack, editor with the Jetpack sidebar | Core serves notices, theme, boot, route, a11y; private-apis 2.0, rich-text, views and widget-primitives from the polyfill | clean |
| F | 7.0.4 | 24.1.0 | Stats v2, editor with the Jetpack sidebar | everything from Gutenberg; wp-views from the polyfill |
clean |
G3 is the Gutenberg side of @louwie17's report; the plugin-copy side (an older wp-build-polyfills registering first) is covered by the new PHP tests, since every standalone plugin on this site already carries the 0.9.0 copy.
…onorepo # Conflicts: # pnpm-lock.yaml # projects/plugins/jetpack/package.json
…onorepo # Conflicts: # projects/packages/backup/src/dashboard/components/query-error/index.tsx # projects/packages/backup/src/dashboard/components/storage-space/addon-upsell.tsx # projects/packages/backup/src/dashboard/screens/restore.tsx
louwie17
left a comment
There was a problem hiding this comment.
Thanks @retrofox for the quick turnaround on all of these! I retested on a local Docker site with WP 7.0 and 7.1, GB off, 24.0 and 24.1, with Stats and VideoPress active, and Stats v2 loads fine in every combination now. The 24.1.0 gate does its job too, GB 24.0's copy gets replaced and the dashboard renders.
One correction on my side, the "older standalone plugin registers first" case I reported was most likely a local artifact. All plugins on my site report the same dev version, so the autoloader picked trunk's polyfill class and your fix never ran. On real sites the autoloader picks the highest package version, so I don't think that case can happen in practice.
The one thing I'd like to change before merging is how the version gets to PHP. Instead of introducing a brand new version.php file per module (plus a separate webpack plugin to emit it), lets make use of the index.asset.php that PolyfillModulePlugin already generates for each module. It's already the file that describes the build, register_modules() already loads it right before the version check, and it saves an extra file and an extra file read per module. I left inline comments with code examples for the webpack plugin, the PHP and both tests.
The AI meter, Form icon and notice announcement fixes look good from the diff (didn't recheck those visually).
Let me know what you think.
| * | ||
| * WP_Build_Polyfills reads it to keep the newest copy when several plugins register the module. | ||
| */ | ||
| class ModuleVersionPlugin { |
There was a problem hiding this comment.
Instead of a separate plugin emitting a new version.php, could we pass the version into PolyfillModulePlugin and add it to the index.asset.php it already writes ( L454 )? Then this whole class can go:
class PolyfillModulePlugin {
constructor( { skipPackage, packageVersion } ) {
this.skipPackage = skipPackage;
this.packageVersion = packageVersion;
}
// ...
}parts.push( `'version' => '${ hash }'` );
if ( this.packageVersion ) {
parts.push( `'package_version' => '${ this.packageVersion }'` );
}| new PolyfillModulePlugin( { skipPackage: polyfill.packageName } ), | ||
| new ModuleVersionPlugin( resolvePackageVersion( polyfill.packageName ) ), |
There was a problem hiding this comment.
And here we'd hand the version to the existing plugin:
| new PolyfillModulePlugin( { skipPackage: polyfill.packageName } ), | |
| new ModuleVersionPlugin( resolvePackageVersion( polyfill.packageName ) ), | |
| new PolyfillModulePlugin( { | |
| skipPackage: polyfill.packageName, | |
| packageVersion: resolvePackageVersion( polyfill.packageName ), | |
| } ), |
| // Builds before this file carry no version and count as older than any that does. | ||
| $version_file = $build_dir . '/modules/' . $name . '/version.php'; | ||
| $version = file_exists( $version_file ) ? require $version_file : null; | ||
| $replace = $gutenberg_too_old; | ||
| $record = false; |
There was a problem hiding this comment.
With the version in the asset file, which is already loaded a few lines up, this becomes a key lookup instead of a second file:
| // Builds before this file carry no version and count as older than any that does. | |
| $version_file = $build_dir . '/modules/' . $name . '/version.php'; | |
| $version = file_exists( $version_file ) ? require $version_file : null; | |
| $replace = $gutenberg_too_old; | |
| $record = false; | |
| // Builds without `package_version` predate it and count as older than any that does. | |
| $version = $asset['package_version'] ?? null; | |
| $replace = $gutenberg_too_old; | |
| $record = false; |
| file_put_contents( | ||
| $dir . '/modules/widget-primitives/index.asset.php', | ||
| "<?php return array('dependencies' => array(), 'version' => '$asset_version', 'module_dependencies' => array());" | ||
| ); | ||
| if ( null !== $package_version ) { | ||
| file_put_contents( $dir . '/modules/widget-primitives/version.php', "<?php return '$package_version';" ); | ||
| } |
There was a problem hiding this comment.
The helper would then write the version into the asset file:
| file_put_contents( | |
| $dir . '/modules/widget-primitives/index.asset.php', | |
| "<?php return array('dependencies' => array(), 'version' => '$asset_version', 'module_dependencies' => array());" | |
| ); | |
| if ( null !== $package_version ) { | |
| file_put_contents( $dir . '/modules/widget-primitives/version.php', "<?php return '$package_version';" ); | |
| } | |
| $package_version_php = null === $package_version ? '' : ", 'package_version' => '$package_version'"; | |
| file_put_contents( | |
| $dir . '/modules/widget-primitives/index.asset.php', | |
| "<?php return array('dependencies' => array(), 'version' => '$asset_version', 'module_dependencies' => array()$package_version_php);" | |
| ); |
| test( `build/modules/${ name }/version.php returns the bundled ${ packageName } version`, () => { | ||
| const file = path.join( packageRoot, 'build/modules', name, 'version.php' ); | ||
| const expected = JSON.parse( | ||
| fs.readFileSync( localRequire.resolve( `${ packageName }/package.json` ), 'utf8' ) | ||
| ).version; | ||
|
|
||
| assert.equal( fs.readFileSync( file, 'utf8' ), `<?php return '${ expected }';\n` ); |
There was a problem hiding this comment.
Same here, checking the asset file instead:
| test( `build/modules/${ name }/version.php returns the bundled ${ packageName } version`, () => { | |
| const file = path.join( packageRoot, 'build/modules', name, 'version.php' ); | |
| const expected = JSON.parse( | |
| fs.readFileSync( localRequire.resolve( `${ packageName }/package.json` ), 'utf8' ) | |
| ).version; | |
| assert.equal( fs.readFileSync( file, 'utf8' ), `<?php return '${ expected }';\n` ); | |
| test( `build/modules/${ name }/index.asset.php carries the bundled ${ packageName } version`, () => { | |
| const asset = fs.readFileSync( path.join( packageRoot, 'build/modules', name, 'index.asset.php' ), 'utf8' ); | |
| const expected = JSON.parse( | |
| fs.readFileSync( localRequire.resolve( `${ packageName }/package.json` ), 'utf8' ) | |
| ).version; | |
| assert.ok( asset.includes( `'package_version' => '${ expected }'` ) ); |
drops the version.php plugin; register_modules reads package_version
louwie17
left a comment
There was a problem hiding this comment.
Thanks @retrofox for moving the version into the index.asset.php, that's much cleaner 🙂 I retested the latest on a local Docker site with WP 7.1, GB on and off, and Stats v2, Forms, Jetpack AI, Backup, Newsletter, VideoPress and the Form block all match trunk. Stats v2 now picks up the polyfill copy with package_version when GB is off, and GB's own copy when it's on. I also tested on Atomic and Simple sites and those looked good too.
LGTM 🚀
…onorepo # Conflicts: # projects/packages/backup/src/dashboard/components/query-error/index.tsx # projects/packages/premium-analytics/widgets/conversion-rate/package.json # projects/packages/premium-analytics/widgets/plan-usage/package.json # projects/packages/premium-analytics/widgets/store-conversion-rate-bookings/package.json # projects/packages/woocommerce-stats/widgets/sessions-by-device/package.json
…onorepo # Conflicts: # pnpm-lock.yaml # projects/packages/backup/src/dashboard/screens/restore.tsx # projects/packages/connection/package.json # projects/packages/newsletter/src/settings/sections/email-design-section.tsx # projects/packages/podcast/package.json # projects/packages/premium-analytics/packages/widgets-toolkit/src/components/chart-empty-state/chart-empty-state.tsx # projects/packages/premium-analytics/widgets/sales-by-coupon-usage/package.json # projects/packages/premium-analytics/widgets/utm-insights/package.json # projects/packages/protect/routes/dashboard/sections/scan/delete-software.tsx # projects/packages/protect/routes/dashboard/sections/scan/threat-details.tsx # projects/packages/woocommerce-stats/widgets/bookings-by-device/package.json # projects/packages/woocommerce-stats/widgets/bookings-revenue-by-customer-type/package.json # projects/packages/woocommerce-stats/widgets/revenue-by-customer-type/package.json # projects/packages/woocommerce-stats/widgets/sales-by-coupon/package.json # projects/packages/woocommerce-stats/widgets/sales-by-device/package.json # projects/packages/woocommerce-stats/widgets/total-returns/package.json # projects/packages/woocommerce-stats/widgets/visitors-by-location/package.json
…onorepo # Conflicts: # projects/packages/jetpack-mu-wpcom/src/features/ai-launchpad/js/tailored-list/tailored-list.tsx
louwie17
left a comment
There was a problem hiding this comment.
Thanks @retrofox for keeping this one up to date with trunk! I did a couple more tests on a local Docker site with WP 7.1.3, GB on and off, across Stats v2, Forms, Jetpack AI, Backup, Newsletter, My Jetpack, Social, VideoPress and the editor, and everything still matches trunk. Stats v2 also still picks up the polyfill's widget-primitives with GB off and Gutenberg's own copy with GB on 👍
This is still good to go!
…onorepo # Conflicts: # pnpm-lock.yaml
…onorepo # Conflicts: # pnpm-lock.yaml # projects/plugins/classic-theme-helper-plugin/package.json
|
Head audited: What changed since the 2026-10-09 matrix (
|
| Cell | Core | Gutenberg | Surfaces | Provenance | Console | Result |
|---|---|---|---|---|---|---|
| G2 | 7.1.3 | 24.1.0 | PA (WooCommerce, Traffic, Insights, Subscribers, Ads, Settings, date menu), Forms, My Jetpack, Newsletter (Overview + Settings), Protect (Scan + Firewall), Boost (pricing), classic Settings, editor + Jetpack sidebar (SEO) | GB serves notices/theme/private-apis/rich-text/a11y/components/data/element and the boot/route/a11y/abilities/connectors/widget-primitives modules; wp-views POLYFILL; PA SDK APP (jetpack) |
clean everywhere except classic Settings: 6 React warnings (StrictMode from boot over legacy components: UNSAFE_componentWillMount in Main/NoticesList/PrivacySettings/Query*/Search/Tracker, setState in WritingSettings, FormToggle uncontrolled→controlled, Cannot update Transitioner while rendering HashRouter); trunk class (#52667 retired the flag, the page now runs under boot), not the bump. Absent on Atomic, which runs the production React build: dev-only noise |
green |
| G | 7.1.3 | off | PA (WooCommerce + Traffic), Forms, My Jetpack, core editor + Jetpack sidebar (SEO) | CORE serves notices/theme/private-apis/rich-text/a11y/components/data/element and boot/route/a11y/abilities/connectors; wp-views and @wordpress/widget-primitives POLYFILL, served from jetpack-protect's copy (/plugins/jetpack-protect/jetpack_vendor/.../wp-build-polyfills/build/modules/widget-primitives/index.js): the three active copies (jetpack, jetpack-protect, jetpack-boost) are 0.9.0 with package_version, Protect registered first and Jetpack left an equal version alone; Stats v2 loads with HostLink |
clean | green |
| G3 | 7.1.3 | 24.0.0 | PA (WooCommerce + Traffic) | GB serves everything except wp-views and @wordpress/widget-primitives POLYFILL (jetpack-protect's copy, 0.9.0): the GUTENBERG_WIDGET_PRIMITIVES_MIN_VERSION 24.1.0 gate replaced GB 24.0's copy, which lacks HostLink, now reading package_version from index.asset.php |
clean | green: the case from Lourens' review, with the final implementation |
| E | 7.0.4 | off | PA (WooCommerce + Traffic), Forms, core editor + Jetpack sidebar (SEO) | CORE serves notices/theme/a11y/components/data/element and boot/route/a11y/abilities/connectors; wp-private-apis 2.0, wp-rich-text, wp-views and @wordpress/widget-primitives POLYFILL (jetpack-protect's copy) |
clean | green (summary tiles with smaller type = pre-existing in E, same as on 10-09 and in #52187) |
| F | 7.0.4 | 24.1.0 | PA (WooCommerce + Traffic), editor + Jetpack sidebar (SEO) | GB serves everything, including @wordpress/widget-primitives (24.1.0 ships HostLink, the gate does not replace it); wp-views POLYFILL (jetpack-protect's copy) |
clean | green |
Findings
No regression attributable to the bump. Console clean in all 5 cells and on every surface, except Jetpack's classic Settings (see the G2 row), whose 6 warnings are StrictMode over legacy components: trunk retired the jetpack-settings-wp-build flag (#52667) and the page now runs under @wordpress/boot; no package from the bump is involved (route and boot come from GB/core), and they do not show up on Atomic (production React build).
Verified in this round:
- Polyfill with
package_versioninindex.asset.php: the three active copies (jetpack, jetpack-protect, jetpack-boost) are 0.9.0 and declare the version; in G and Ewp-views+@wordpress/widget-primitivesare served by jetpack-protect's copy (it registered first, Jetpack does not replace an equal copy) and Stats v2 loads withHostLink. In G3 (GB 24.0.0) the 24.1.0 gate replaces Gutenberg's copy; in G2/F (GB 24.1.0) Gutenberg wins. - PA empty states (
chart-empty-statewithEmptyState.Visual+ButtonLink): Top referrers, Devices, Locations (Retry), Top UTM, Top videos (Upload video) render in G, G2, G3, E and F. - ui 0.24 Menu (PA date range) opens and closes correctly.
- Stroke icons (icons 18): Protect navigation and accordion, firewall "Paid feature" tiles, My Jetpack, tinted through
colorinstead offill. - Editor + Jetpack sidebar (SEO) on core 7.0.4, 7.1.3 and with GB 24.0.0/24.1.0.
Not exercisable on the Docker site (covered by typecheck/jest, not by the browser):
- Boost overview with
ProgressBarmeters: without a plan or a user connection the plugin shows the pricing page. - Newsletter
email-design-section.tsx(ButtonLink+addQueryArgs): the Email design section belongs to WordPress.com (Atomic/Simple) and does not show up self-hosted. - PA
plan-limit-notice.tsx(Notice.CloseIconButton): needs a site near its views limit. - PA
utm-url-builder-dialog.tsx(Dialog.CloseIconButton): the UTM widget shows "You don't have access to this data" on this site, not the empty state with "Build URL". - Backup
backup-detail/index.tsx(ButtonLink.Icon): the Backup dashboard is not in the menu without a Backup product; the standalone plugin is inactive and unbuilt. - Protect
threat-details.tsx/delete-software.tsx: no threats, so no detail panel. - mu-wpcom
tailored-list.tsx+difm-offer-banner.tsx: AI Launchpad is WordPress.com only. - VideoPress and Social: no user connection (My Jetpack asks to "Connect your user account").
Environment
Base checkout ~/lab/jetpack on renovate/wordpress-monorepo @ 0d49bab05a; builds by Damián 16:15-16:46 UTC (plugins/jetpack, premium-analytics, boost, protect, all with --deps), after deleting the orphaned node_modules inside PA's sub-packages (see memory stale-nested-node-modules-non-importers). Docker jetpack_dev (:8888) through ibardaga.ngrok.app, session jp_docker_acct. Changes made and reverted: Boost activated for the check and deactivated; core downgraded to 7.1 by cell-g.sh and restored to 7.1.3 (the scripts now ask for 7.1.3); Gutenberg 24.0.0 downloaded into the gutenberg slug for G3 and the slug restored to 24.1.0 (the gutenberg-24-1-0 copy removed); two auto-drafts created by post-new.php (WordPress purges them). Final state: WP 7.1.3 + Gutenberg 24.1.0 active, plugins as at the start.
Atomic: retrofoxsuperdeploy.wpcomstaging.com (2026-10-14, afternoon)
WP 7.1.3, Gutenberg 23.9.0-rc.1 active, Commerce plan, WooCommerce 11.2.1, jetpack-dev = Beta build 16.4-a.0-38582201632-g0d49bab0 (head 0d49bab05a), Debug Helper with provenance. Damián's Chrome through the a8c proxy (PROXIED V2). Screenshots atomic-*.jpg.
The real cross-plugin case: two polyfill copies, jetpack-dev (0.9.0 with package_version) and wpcomsh (/wordpress/plugins/wpcomsh/latest/jetpack_vendor/.../wp-build-polyfills, an older build without package_version, which counts as older).
| Surface | Provenance | Console | Result |
|---|---|---|---|
| PA WooCommerce (empty store: generic empty states) and Traffic (map, Top referrers/UTM/links/videos in empty/error state) | GB 23.9.0-rc.1 serves react/element/notices/theme/private-apis/rich-text/data/components/a11y and boot/route/a11y/abilities/connectors; wp-views and @wordpress/widget-primitives POLYFILL from jetpack-dev (beats GB 23.9 through the 24.1.0 gate and wpcomsh's versionless copy) |
clean | green |
| My Jetpack | — | — | does not exist on Atomic ("Sorry, you are not allowed"): the WoA Jetpack menu is Social, Akismet, Activity Log, Scan, Backup, Forms, Monetize, Search, Newsletter, Settings, Jetpack AI, VideoPress |
| Newsletter Overview (onboarding checklist) | GB | clean | green |
| Newsletter Settings | GB | clean | green; the Email design section (ButtonLink + addQueryArgs) does not show up: on Atomic the blog sticker enables it (#53496) and this site lacks it |
Backup (admin.php?page=jetpack-backup) |
— | clean | minimal "Manage your backup files" page (file browser); the new dashboard with backup-detail (ButtonLink.Icon) is not exposed on this site |
| VideoPress (connected library, welcome modal, then the "Upload your first video" empty state) | GB | clean | green |
| Scan | — | — | on Atomic the menu goes to Calypso (wordpress.com/scan/…), not plugin code |
| Social (no connected accounts, empty state with a stroke icon) | GB | clean | green |
| Forms (DataViews 20, empty forms list, 8 responses) | GB | clean | green |
Jetpack AI (admin.php?page=jetpack-ai: "turned off" notice, 20/20 requests meter with ProgressBar tinted blue through the > div rule, MCP quick start, videos) |
GB | clean | green |
Jetpack Settings (admin.php?page=jetpack-settings, Security) |
GB | clean: the 6 React warnings from Docker do not appear on Atomic because they come from React's development build (production does not emit them) | green |
| Editor (GB 23.9.0-rc.1) + Jetpack sidebar: SEO, Shortlink, Share to social media (network icons, "Connect your accounts"), Link preview, Insert likes and sharing | GB | clean | green |
Atomic conclusion: green. No regressions; console clean on every surface. The real cross-plugin case (wpcomsh with a versionless polyfill + jetpack-dev 0.9.0 + Gutenberg 23.9 below the gate) resolves to jetpack-dev's copy and Stats v2 loads. Not exercisable on this site: My Jetpack (absent on Atomic), Scan (Calypso), the new Backup dashboard, Newsletter Email design (no sticker), Boost (not installed), Protect threats. Pending: Simple (Damián's sandbox).
Simple: jetpackme.wordpress.com through the sandbox (2026-10-14, afternoon)
Sandbox retrofocs.dev.dfw on wpcom trunk @ 04dc2917ac6 with wp-content/mu-plugins/jetpack-plugin/sun/ replaced by the Beta build of our head (16.4-a.0-38582201632-g0d49bab0); moon still on 16.4-a.0. Without the Debug Helper, the proof that our build is running comes from two sides:
- Server (ssh sandbox):
sun/jetpack.phpdeclares16.4-a.0-38582201632-g0d49bab0(CI run 38582201632 = head0d49bab05a) andsun/jetpack_vendor/automattic/jetpack-wp-build-polyfills/build/modules/widget-primitives/index.asset.phpcarriespackage_version => 0.9.0, a key that exists only on this branch;moonlacks it. The loader (0-wpcom-jetpack-loader.php) picksJETPACK_PLUGIN_LOADERunless thejetpack-sun-moon-oppositesticker or adev/directory says otherwise. - Browser (no Debug Helper): the import map and the
<script src>entries classified by path.@automattic/jetpack-premium-analytics-sdkis served from/wp-content/mu-plugins/jetpack-plugin/sun/…;react,element,notices,theme,private-apis,rich-text,data,components,a11yand theboot/route/a11y/widget-primitivesmodules come from/wp-content/plugins/gutenberg-core/v24.1.0/(24.1.0 shipsHostLink, the gate does not replace it). On top of that, the servedroutes/dashboard/content.min.jsbundle containsCloseIconButton×7 andButtonLink×2, with zeroLinkButtonand zerospokenMessage: ui 0.24 code.
| Surface | Provenance | Console | Result |
|---|---|---|---|
| PA Traffic (41.9K views, Top pages/referrers/Devices with data), Insights (Year in review, All-time, Most popular), Subscribers (60.5K) | GB core 24.1.0 + SDK from SUN | clean | green |
| Newsletter Overview + Settings | GB core + SUN | clean | green; Email design does not show up here either (sticker) |
| Podcast (welcome page, "included with your plan") | GB core + SUN | clean | green |
| Forms responses (DataViews 20 with 3,926 real responses, filters, pagination 1/197) | GB core + SUN | clean | green |
Editor (Gutenberg core 24.1.0) + Jetpack sidebar opened through wp.data (enableComplementaryArea( 'core', 'jetpack-sidebar/jetpack' )): Improve with AI ("moved to the WordPress Agent" notice), Optimize SEO with the metadata generator |
GB core + SUN | clean (pattern widened with Error) |
green; Simple's editor has no Jetpack button in the top bar and find fails on the tree size (>200K tokens), hence the wp.data shortcut |
Simple conclusion: green. Our build (sun) serves PA, Forms, Newsletter, Podcast and the editor sidebar without console errors; Gutenberg core 24.1.0 provides the shared packages, so the polyfill never kicks in (neither widget-primitives nor private-apis from the polyfill are exercised on Simple). mu-wpcom was not touched on the sandbox (still trunk's copy), so AI Launchpad stays out of scope.











This PR contains the following updates:
4.55.0→4.57.04.54.0→4.57.02.9.0→2.12.02.10.0→2.12.07.55.0→7.57.07.54.0→7.57.013.1.0→13.3.04.55.0→4.57.017.1.0→18.1.011.0.0→11.2.05.55.0→5.57.016.0.0→16.2.0^0.22.0→^0.24.00.22.0→0.24.06.55.0→6.57.00.23.0→0.25.01.55.0→1.57.040.1.0→42.0.040.0.0→42.0.08.8.0→8.10.08.0.0→8.2.010.55.0→10.57.010.54.0→10.57.04.55.0→4.57.018.1.0→20.0.019.0.0→20.0.019.0.1-next.v.202609031004.0→20.0.05.55.0→5.57.04.55.0→4.57.04.55.0→4.57.02.0.0→3.0.08.55.0→8.57.015.0.0→15.2.08.7.0→9.0.08.6.0→9.0.03.55.0→3.57.05.55.0→5.57.04.55.0→4.57.04.55.0→4.57.06.28.0→6.30.06.27.0→6.30.016.0.0→18.0.015.5.0→18.0.0^16.0.0→^18.0.06.55.0→7.0.010.1.0→10.3.04.55.0→4.57.01.21.0→1.23.05.55.0→5.57.05.54.0→5.57.05.55.0→5.57.07.55.0→7.57.04.54.0→4.57.04.55.0→4.57.04.54.0→4.57.04.55.0→4.57.01.55.0→2.0.0^1.8.1→^2.0.07.55.0→7.57.00.20.0→0.23.00.21.0→0.23.0^0.21.0→^0.23.01.54.0→1.57.06.31.0→6.33.025.0.0→26.1.01.55.0→2.0.02.1.0→2.3.02.0.0→2.3.02.1.1-next.v.202609031004.0→2.3.03.55.0→3.57.00.22.0→0.24.00.21.0→0.24.0^0.22.0→^0.24.04.55.0→4.57.04.54.0→4.57.06.55.0→6.57.0~1.22.0→~2.0.00.7.1-next.v.202609031004.0→0.9.00.7.0→0.9.04.55.0→4.57.04.55.0→4.57.0Release Notes
WordPress/gutenberg (@wordpress/a11y)
v4.57.0Compare Source
New Features
prefersReducedMotion, which reports whether the user has asked their operating system to reduce motion. It is the counterpart to theuseReducedMotionhook in@wordpress/compose, for code that runs outside React such as block view scripts (#83452).v4.56.0Compare Source
WordPress/gutenberg (@wordpress/admin-ui)
v2.12.0Compare Source
Bug Fixes
react-domand@types/react-domas peer dependencies, forwarding the peers of@wordpress/element, so strict package managers such as Yarn PnP can resolve them (#83765).Internal
ADMIN_THEME_COLORSfrom its own module, without adding it to the package's exports, so tooling in the repository can read the bundled admin colour schemes instead of copying them (#82425).v2.11.0Compare Source
v2.10.0Compare Source
Internal
srcdirectory to npm. The package'sexportsfield only exposes the built artifacts, so the source files were unreachable by consumers and only inflated the package size (#77285).WordPress/gutenberg (@wordpress/api-fetch)
v7.57.0Compare Source
v7.56.0Compare Source
WordPress/gutenberg (@wordpress/base-styles)
v13.3.0Compare Source
Enhancements
--wp-admin-theme-colorto#​3858e9, the WordPress 7.0 default admin color scheme, instead of the legacy#​007cba. To keep the old color, includeadmin-scheme(#​007cba)on:rootin your own stylesheet.wordpress-admin-schemes()and the default custom properties now set#​007cbafor the Fresh scheme, which had used the:rootdefault (#83749).radio-control: Use the design system color tokens (#83270).Bug Fixes
radio-control: Keep radio circles and checked dots visually 16px and 8px on narrow screens while providing a 24px pointer target (#83840).v13.2.0Compare Source
Enhancements
checkbox-control: Use the design system tokens for the default border, hover, and disabled icon colors (#83271).checkbox-control: Use the design system disabled fill and border tokens (#82555).WordPress/gutenberg (@wordpress/blob)
v4.57.0Compare Source
v4.56.0Compare Source
WordPress/gutenberg (@wordpress/block-editor)
v18.1.0Compare Source
New Features
useBackgroundPropsandgetBackgroundClassesAndStyles, and honourbackground.__experimentalSkipSerializationin the editor (#83943).Enhancements
@wordpress/componentsBadgeto@wordpress/uiBadge(#82608).inertValuehelper to setinertattributes, for better React 18/19 compatibility (#83871).LinkControl: Add atransformSuggestionsprop, so a consumer can filter, order or add to the search suggestions before they are shown (#83652).Bug Fixes
allowedBlocksand no anchor), by counting the allowed-blocks fills when deciding whether to show the tab. The control is also now hidden while editing a section (pattern) block, matching the other inspector controls (#84067).BlockCompare: Show whitespace differences in the Resolve Block dialog. The markup's spaces and blank lines are kept instead of collapsed by the browser, and each added or removed line break gets a visible marker, so a diff made only of whitespace no longer looks identical on both sides. The dialog also shows the markup of a converted Custom HTML block, which is kept in itsinnerContentrather than produced bysave, instead of an empty diff (#82397).getSelectedBlockStyleStatewhen anundefinedclientIdis passed as an argument. (#84140)Internal
v18.0.0Compare Source
Breaking Changes
InspectorControls: Remove the__experimentalGroupprop from the fill and the slot. It was deprecated in WordPress 6.2 in favour ofgroup, with removal scheduled for 6.4 (#83171).New Features
getStyleForStateandsetStyleForState, for reading and writing block style values for a given viewport or pseudo state, and stabilize thegetSelectedBlockStyleStateandhasSelectedBlockStyleState(renamed fromhasSelectedStyleState) store selectors. (#82741).Enhancements
react-autosize-textareadependency.PlainTextand the block "Edit as HTML" field now auto-grow with CSSfield-sizing: content. Browsers without support use scrollable fields.PlainTextconsumers should use CSS height constraints instead ofrows(#64208).BlockCard: Migrate the block-type badge from the private ComponentsBadgeto@wordpress/uiBadge. (#82503).gutenberg-global-styles-inheritance-uiexperiment now gates only the indicators for that value: the dotted underline on an inherited label, and the dot that resets a local override (#82840).TypographyPanel: Setting a text color starts an unset link color tracking it whenever no link color is set on the block or inherited from Global Styles. Previously the link color was left alone (#82840).LinkControl,LinkPicker: migrate the link preview badges from the private@wordpress/componentsBadgeto@wordpress/uiBadge(#82684).BlockQuickNavigation: Highlight a block on the canvas while its item is hovered or focused, matching the List View. This affects the inspector Content tab, the pattern overrides panel, and the template and template part content panels (#83049).ViewportVisibilityInfo: Migrate the block visibility badge from the private@wordpress/componentsBadgeto@wordpress/uiNoticecomponent (#82670).Bug Fixes
BlockAlignmentControl: Hide the control again when none of a block's alignments are available. Paragraph, Heading, List and other blocks that support only wide and full were showing a menu of unavailable options that could not change anything (#83265).dragstarttarget instead of thepointer-events: nonerule that also kept the image from any click (#83370).RichText: The edit UI of a format follows the active object when the selection moves from one object straight to another, for example from one inline image to the next, so the popover shows the attributes of that object at its position (#83370).FontAppearanceControl: List only the weights inside a variable font's range, reading both ends of the range as whole numbers or as the keywordsnormalandbold(#83128).LinkControl: Only label pages as the front page or blog home. Posts, terms and media are separate tables and can share an id, so an unscoped search could label a term "Front page" (#83082).InnerBlocks: Resolve a container's legacy layout markup (inherit: true, or a barecontentSize/wideSizewith notype) to a constrained layout for its inner blocks, so they are offered the wide and full alignments. Previously only the container's styles honoured the legacy form, and the inner blocks resolved to the flow layout (#82637).Configuration
📅 Schedule: (in timezone UTC)
* 0-2 1 * *)🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.
This PR has been generated by Mend Renovate CLI.