Changelog
Features
- wp-env: Add an experimental runtime using locally installed PHP and SQLite. (85512)
Enhancements
Components
- RadioControl: Place group help text below the fieldset label and remove its legacy
components-base-control__helpclass. (85126) - UI: Add Menu width presets and make Select and SelectControl popup presets size to content up to a maximum width. Use CSS when a fixed width is required. (84086)
- DataViews: Standardize action-label punctuation. Consumers should supply labels without ellipses; modal menu actions add translated ellipses. (85396)
- Align focus indicators across AlignmentMatrixControl, DataViews grids, FormToggle, Modal scrollable content, RangeControl, RotationRuler, and disabled items. (85528, 85364, 85285, 85251, 85536, 85535, 86125)
- Badge: Add optional infotips using a consumer-supplied Popover. (85309)
- Align Modal colors and corners, and Tooltip backgrounds, with the design system. (85855, 85858)
- Migrate CustomGradientPicker and BackgroundClipControl select controls to
@wordpress/ui. (85750, 86046) - DataViews: Migrate Sort by and relative-date Unit controls to
@wordpress/ui. (86167) - DataViews: Use
@wordpress/uibuttons in the bulk actions bar. (85939) - Align the standalone Spinner appearance with the design system and scale its stroke width with its size. (85859, 85378)
- Theme: Report insufficient contrast of focus-ring and strong brand-fill colors against theme surfaces. (85449)
- Use solid brand highlights for popup items. (84583)
Block Library
- Improve content-only editing for Button content, Comments Pagination link labels, and Query Loop pagination link labels. (84854, 86175, 70165)
- Add border support to Comments Pagination Numbers, and border and padding support to Query Pagination Numbers. (85164, 85245)
- Migrate select controls in the Archives, Audio, File, Latest Comments, List, Playlist, Post Author Avatar, Social Icons, and Tag Cloud blocks to
@wordpress/ui. (86137, 86194, 86199, 86138, 86141, 86161, 86160, 86196, 86198) - Remove the Auto/Manual grid toggle and add an experimental Canvas variation of the Group block. (85985)
- Social Icon: Support editing the link from the inspector. (84860)
Block and Site Editors
- Rich Text: Give formats in the More dropdown a consistent order and reserve dedicated name-based toolbar slots for known core formats. (85843)
- Add an alignment-menu action to select the block constraining a child block's width. (82607)
- Guard entity preload filters and share entity actions and fields logic. (85390)
- Experimental Site Editor v2: Unregister the View revisions action on the server. (85279)
Design Tools and Global Styles
- Show an icon for each aspect ratio option in the Dimensions tool. (85812)
- Global Styles: List core block types that override an element's styles. (84671)
- Place background and text colors first in the color palette. (62548)
Media
- Experimental media editor: Show file type and size in the header and reposition the settings dropdown. (86154, 86020)
- Add PDF previews to the experimental media editor. (86002)
- Animate the media editor sidebar when opening and closing it. (85889)
- Group Reset and Restore original under a History menu. (85891)
- Prevent MediaEdit item-removal animations. (85372)
Collaboration
- Hide collaborator avatars while typing. (83490)
- Notes: Add search and a status filter to the All Notes sidebar. (84060)
- Notes: Add thumbs-up and plus reactions, and show the reaction picker as a row of emoji. (85565, 85819)
Dashboard and Widgets
- Widget Dashboard: Forward grid settings to the surface. Stop applying the automatic 600px and 960px breakpoints to numeric column counts; hosts that relied on them must supply a column-step map. Render positive row heights without snapping to presets. (85228)
- Add
useWidgetIdentityfor translated widget titles. (85729) - Support an
exampledeclaration inwidget.json. (85240) - Grid: Support column-count steps based on container width. (85216)
Icons
- Add the database icon and expose error, info, and postComments in the
core-admincollection. (85273, 85452) - Promote Dashicon replacements to the
core-admincollection and map their Dashicons. (85541)
Developer Tools
- Design System MCP: Add pattern tools using Storybook MDX manifest output. (84864)
- Storybook: Show icon details in the Icon Library. (86057)
- Limit wp-build esbuild concurrency. (79889)
Bug Fixes
Components
- CheckboxControl: Use design system color tokens; legacy
--wp-components-color-accentand--wp-components-color-accent-invertedoverrides no longer apply. Use ThemeProvider for customization. (85856) - Widget Dashboard: Give the footer strip a consistent height. (85237)
- BoxControl: Add fallback units for the input slider. (70288)
- DataViews: Correct filter-chip focus styling and prevent the remove button from overlapping chip text. (85374)
- ColorPicker: Preserve hex and RGB edits when the picker closes. (85734)
- ControlWithError: Skip unchanged validity-state updates. (85479)
- Core fields: Preserve status-icon sizing when labels wrap and remove extra spacing in slug inputs. (85828, 85935)
- DataViews: Use a page-number input for pagination above 100 pages. (85303)
- DropdownMenu: Account for Button borders in menu-item padding. (85503)
- Keep MenuItem and ToggleGroupControl widths stable when selection changes. (85831, 85454)
- Modal: Restore each modal's
aria-hiddenstate when modals close out of order. (85720) - PaletteEdit: Preserve existing slugs when deduplicating presets. (85817)
- ToolsPanel: Keep Reset labels visible on highlighted menu items. (86045)
- Calendar: Show only the day number in day cells. (86010)
Block Library
- Comment Author Avatar: Pass the configured size to
get_avatar(). (86113) - Comments Pagination Next: Remove the link filter from the correct hook. (85244)
- Cover: Prevent Navigation overlays from being clipped in Safari. (86041)
- Playlist: Preserve track metadata after failed replacement uploads, handle URLs containing query-string ampersands, and render tracks without attachment IDs. (86018, 85931, 83880)
- Table of Contents: Show previewed headings in published-post previews and keep list styles editable in templates. (86155, 86251)
- Heading: Preserve combining marks in generated anchors. (85096)
- Navigation Link: Preserve text formatting when editing in the sidebar. (85223)
- Page List: Keep pages visible in the Navigation sidebar. (85357)
- Paragraph: Support removing theme-disabled drop caps and avoid empty toolbar groups when alignment controls are unavailable. (84839, 85796)
- Social Icon: Prevent closing a popover from stealing focus. (86215)
- Social Links: Restore the larger icon size for the Logos Only style. (85506)
- Tabs: Correct the classic-theme selector for tab-button styles. (85504)
Editors and Saving
- Rich Text: Handle full-content deletion through
beforeinput, including Safari deletion commands. (85886) - Copy the text of bound fields. (85403)
- Preserve HTML anchors when editing as HTML and converting Classic blocks. (82836)
- Inserter: Keep focused results below the sticky search field. (85706)
- Link Control: Preserve preview focus while the selected post's record loads. (85945)
- Match the block-visibility viewport once per canvas. (85808)
- Preserve child layout attributes when transforming a block. (85045)
- Rich Text: Remove stale format boundaries when a field loses selection. (86168)
- Correct non-breaking-space replacement behavior and its tooltip. (85873, 85777)
- Writing flow: Correct triple-click list selection, parent-block select-all behavior, and arrow-key navigation at viewport edges. (85569, 85987, 85408)
- Raw handling: Keep shortcodes within text inline. (85795)
- Vertically center the Categories loading spinner. (85563)
- Save current content before restoring a browser backup. (85406)
- Revisions: Include only revisioned metadata in revision REST responses. (85509)
- Command Palette: Correct the classic-theme guard for template commands. (86142)
Design Tools and Global Styles
- Apply globally: Show the block type's current value. (84823)
- Contrast checker: Check the visible color of text clipped to its background. (86148)
- Global Styles: Preserve individual sides when editing padding and margin shorthand. (85437)
- Typography: Clear the synced link color when resetting all settings. (85376)
- Pass
blockNameto style-state inspector slots. (86084) - Allow separate row and column block gaps in the block-style theme.json schema. (86044)
- Allow CSS custom properties when sanitizing block gaps. (82817)
- KSES: Allow CSS color functions in inline styles. (84213)
- Correct the deprecated duotone render wrapper's arguments and document known limitations in deprecated duotone functions. (68397)
- Duotone: Avoid undefined-array-key warnings when parsing hue units. (68399)
Media
- Experimental media editor: Correct canvas border radii and footer controls. (86143)
- RotationRuler: Keep the center marker visible in forced-colors mode. (85546)
- Prevent endless image-sideloading loops when the browser cannot decode a large image. (83530)
Collaboration
- Notes: Handle inline notes in merged text. (85744)
- Notes: Handle notes shared by duplicated or split blocks. (85906)
- Notes: Share thread-focus recovery across actions. (85455)
- Notes: Correct reaction-deletion permissions, including author checks and preventing changes on resolved threads. (85415, 85883)
Interactivity API
- Ignore router regions and
attachTotargets insidedata-wp-htmlcontent. (84919) - Load Interactivity Router script modules without
eval()or WebAssembly to support Content Security Policy restrictions. (84056)
Developer Tools
- Storybook: Match icon labels when searching the icon library. (85399)
- Storybook: Remove BaseControl from the component manifest. (85847)
- Update the sprintf dependency to resolve TypeScript module-resolution issues. (85562)
- wp-env: Preserve Debian security updates in Bullseye-based images. (85469)
- wp-env: Report the PHP runtime's actual automatically selected port and preserve it when resetting the site. (85574)
Accessibility
- Prevent invalid LaTeX from trapping keyboard focus in the Math block and inline math controls. (86027)
- Migrate Separator and Table of Contents select controls to
@wordpress/ui. (86047) - Modal: Preserve dialog boundaries in forced-colors mode. (85888)
- UI: Add
Notice.Listwith live announcements. (85209) - Notes: Show reaction pills' pressed state in forced-colors mode. (85904)
- Give URL submit buttons consistent identification. (85725)
- Improve the accessibility and usability of the error copy button. (85477)
- Grid: Preserve tile content semantics when dragging is disabled. (84869)
Performance
- Reduce Rich Text initialization and editing overhead by batching DOM updates, parsing unfocused fields on mount, and simplifying field registration, event listeners, selection tracking, and undo handling. (85177, 85874, 86007, 86021, 85887, 85994, 85983)
- Reduce block action and store-subscription overhead. (85991, 85804)
- Preserve unchanged blocks when resetting content so undo does not re-render the entire post. (85427)
- Skip measuring the collaborators overlay when there is nothing to draw. (85179)
- ThemeProvider: Use prebuilt color ramps for the default seeds. (85182)
- withFilters: Track mounted instances in a Set. (86012)
- Log block migrations only when
SCRIPT_DEBUGis enabled. (85736) - Expose script exports on globals as data properties. (85180)
- Reduce parser memory use and processing time for documents with deeply nested, unclosed blocks. (74427)
Documentation
- Add agent guidance for escaping PHP output and preventing cross-site scripting. (84596)
- Add migration guides for CustomSelectControl and SelectControl. (85377, 85220)
- Document
createInterpolateElementin the internationalization guide. (86015) - Clarify the design system introduction and document the legacy-component replacement process. (85764, 85480)
- Focus package changelogs on consumer-facing changes. (85079)
- Document SelectControl callbacks when reselecting the current value. (86200)
- Add DropdownMenu selection stories. (85551)
- Document the 7.1.4 security patch releases. (85930)
- Add a Design System MCP page to Storybook. (85464)
- Add guidance for agents reading Storybook without JavaScript. (85757)
- Complete Storybook guidance for copy-to-clipboard feedback. (85745)
- Correct minified component names in Storybook code snippets. (85966)
- Make the Save & Submit Canvas example fully copyable and add a Notice disclosure composition example. (85766, 84627)
- Keep documentation before attached, named MDX pages in Storybook. (85308)
- Remove ThemeProvider's private badge in Storybook. (85529)
- Update Figma border-import documentation. (85304)
- Document
npm run other:cherry-pick -- --dry-runin the release guides. (85465)
Code Quality
Components
- Remove the public
checkbox-controlandradio-controlSass mixins from@wordpress/base-styles; their styles now live in CheckboxControl and RadioControl. (85248) - Require distinct aliases for legacy IconButton, Menu, Notice, Popover, Tabs, validated controls, Card, and VisuallyHidden imports. (85846, 85845, 85839, 85838, 85852, 85950, 85519, 85837)
- Replace legacy DataViews selection-indicator mixins. (85191)
- Deprecate the legacy FormToggle, Tooltip, ProgressBar, TabbableContainer, and CustomGradientPicker components. (85517, 85518, 85520, 85521, 85953)
- Restore change-case for component class-name generation. (85192)
Icons
- Update
lockto use the former outline artwork and remove thelockOutlineandlockSmallexports. (85740) - Remove the
insertBefore,insertAfter, andofflineicon exports. (85445)
Blocks and Editors
- Reduce effects in core blocks using render-time state, core-data,
useEvent, anduseRefEffect, and restrict new effects with a lint rule. (85814, 85864, 85810, 85862, 85867) - Remove unused Button outline styles and redundant Site Title fit-text CSS. (85471, 85166)
- Correct PHPDoc, private static access, redundant conditions, and return values in block rendering and style support. (86092, 86090, 86094, 86091)
- Use null-coalescing assignment for Navigation, Tab Panel, and background-size defaults. (86033, 85548)
- Navigation: Replace the button block appender with a dropdown appender. (70524)
- Remove ignored
parseFloatradix arguments and an unused SpacingSizesControl constant. (85163, 85877) - Centralize focus-capture prevention once per canvas. (85815)
- Remove non-iframe meta-box code from Edit Post. (86009)
- Set welcome-guide preferences to false when closing the guides. (85742)
Media
- Simplify cropper state and instruction handling and remove unnecessary media-editor effects. (85881, 86147, 85882, 85880)
- Tidy cropper code before exposing it. (85429)
Styles and Server APIs
- Correct theme JSON types, cached-property PHPDoc, and private static calls, and simplify CSS-variable matching. (68407, 86111, 86096, 68386, 68401)
- Make PHP types explicit and simplify duotone, layout, shadow, style-variation, typography, and compatibility code. (68405, 68389, 68404, 68398, 68396, 68392, 86099)
- Remove the Global Styles inheritance-indicators experiment. (85884)
- Use
gutenberg_prepare_json_value_for_client()for view configurations and entity fields. (85206) - Move the Site patterns view-configuration change into the WordPress 7.2 compatibility directory. (85905)
- Remove obsolete
--wp-components-color-*overrides. (85938)
TypeScript
- Expand TypeScript coverage for block-editor components, core-data utilities and actions, Patterns stores, and Core Commands; add split TypeScript configuration and a typed test to Blocks. (84950, 85058, 85070, 85534, 85253, 84385)
- Convert package tests and test utilities to TypeScript across Components, DOM, LaTeX to MathML, Redux Routine, Element, API Fetch, Viewport, Plugins, E2E Test Utils, Hooks, and Preferences Persistence. (85150, 85161, 85084, 85121, 85159, 85145, 85115, 85088, 84917, 85141, 85162)
Tools
Testing
- Add split TypeScript configuration for most packages to support typed tests, and disable Vitest CommonJS globals injection. (85470, 85878)
- Add
npm run browsefor driving the local WordPress site from the command line. (85525) - Stabilize drag tests by handling insertion-indicator remounts and setting the initial caret position. (85270, 85988)
- Improve synchronization in autocomplete, rich-text selection, link-field, cut-and-paste, template, and editor-canvas tests. (85572, 85975, 85996, 85976, 85978, 85974)
- Stabilize the Interactivity Router URL-fragment navigation test. (85473)
- Replace the Page List unit test with end-to-end coverage, update entity-fields assertions for Core trunk, and use real components in interface tests. (85564, 85201, 86171)
- Remove redundant Site Editor and comments-count checks and simplify entity-action loader test labels. (85259, 85979, 85798)
- Shrink and speed up the block Notes end-to-end tests. (86209)
- Measure page-load performance without tracing and record end-to-end traces only on failed-test retries. (86025, 85428)
- Run end-to-end tests in parallel with a separate wp-env site per two CPU cores. (85420)
- Stabilize web-editor selection tests in iOS Safari. (85461, 85481)
Build Tooling
- Docgen: Remove Babel core, project Babel-configuration support, and support for syntax requiring custom parsers, including Flow. (85183)
- Move theme build and Stylelint plugins to
@wordpress/theme-build-toolsand remove their old@wordpress/themeexports; consumers must update their imports. (83568) - wp-build: Pass
falseinstead of an empty string as the source inwp_register_script(). (86106) - Introduce PHPStan level-5 analysis, a dedicated tooling workspace, updated WordPress stubs, and corrected baseline configuration. (66693, 86222, 86109, 86093)
- Load Storybook previews from a Blueprint bundle. (85946)
- Update Storybook to 10.6.5 and
@storybook/iconsto 2.2.0, including Vitest addon fixes. (86172, 85741) - Update Vite to 8.3.5 and Vitest to 5.0.5. (85739, 86173)
- Streamline CI with lighter runners, scoped changelog checks, updated baseline tooling, and fresher reads of unfinished-job status. (85907, 85459, 85076, 85077)
- Warn when a bug fix's new end-to-end test also passes on trunk. (85717)
- Migrate the build pipeline from esbuild to Rolldown. (85476)
- Remove the legacy Storybook manifest shim and type-check manifest post-processing scripts. (85778, 85769)
- Declare
@wordpress/themeas a peer dependency of@wordpress/theme-build-tools. (85388) - Update Terrazzo token-generation tools to 2.10.0. (85737)
- Remove redundant
tsconfig.test.jsonfiles from split packages. (85516) - Derive wp-build CSS-module class names from each stylesheet's CSS. (85900)
- Improve ESLint component recommendations with migration-guide links,
getWpCompatOverlaySlotguidance, and per-import exceptions. (85752, 85835, 85188)
Repository and Release Management
- Update PHPStan tooling ownership rules. (86204, 86112)
- Move backport changelog entries into the appropriate WordPress 7.2 and 7.3 directories. (85064, 85418)
- Configure the props bot's introduction through the action input. (83917)
- Require a hash-prefixed issue number or full issue URL when assigning fixed issues. (86130)
- Correct the
.gitignorecomment about re-included.cachepaths. (85375)
First-time contributors
The following PRs were merged by first-time contributors:
- @justlevine: Add PHPStan static analysis at rule level 5. (66693)
- @lucatume: iOS tests: De-flake the selection handle test. (85461)
- @mattmiklic: Theme: Update Figma border import documentation. (85304)
- @RajkiranBagal: DataViews: Use a page number input in the footer pagination above 100 pages. (85303)
- @theritiktiwari: Fix typo in .gitignore comment about re-included .cache paths. (85375)
Contributors
The following contributors merged PRs in this release:
@00kaku @aaronrobertshaw @adamsilverstein @adamwoodnz @aduth @amitraj2203 @andrewserong @ciampo @CookieDarb @DAreRodz @desrosj @DevinWalker @dmsnell @draganescu @drewmt @ekamran @ellatrix @fushar @hbhalodia @himanshupathak95 @huubl @huzaifaalmesbah @im3dabasia @jasmussen @jeryj @jorgefilipecosta @jsnajdr @justlevine @karthikeya-io @kushagra-goyal-14 @lazerg @louwie17 @lucatume @luisherranz @Mamaduka @manzoorwanijk @mattmiklic @mcsf @mikachan @mirka @noruzzamans @ntsekouras @oandregal @peterwilsoncc @R1shabh-Gupta @RajkiranBagal @ramonjd @retrofox @SainathPoojary @salvatorecorsi @sarthaknagoshe2002 @shail-mehta @simison @singhakanshu00 @sirreal @Soean @stokesman @t-hamano @tellthemachines @theaminulai @theritiktiwari @USERSATOSHI @westonruter @yashjawale @youknowriad