The WordPress coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. development team builds WordPress! Follow this site for general updates, status reports, and the occasional code debate. There’s lots of ways to contribute:
Found a bugbugA bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority.?Create a ticket in the bug tracker.
The “Post” (or “Page”) tab of the editor’s Settings sidebarSidebarA sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme. is being rebuilt on top of DataForm, the same form that Quick Edit uses in the Site Editor. It’s available as a GutenbergGutenbergThe Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc.
https://wordpress.org/gutenberg/ experiment and it’s ready for testing, mostly by pluginPluginA plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. developers whose code extends that part of the editor. If you’re a site owner using plugins that add things there, there is a flow for you too.
What is it?
With the “Editor Inspector: Use DataForm” experiment on, in the blockBlockBlock is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. editor the classic summary panels of the post inspector (featured imageFeatured imageA featured image is the main image used on your blog archive page and is pulled when the post or page is shared on social media. The image can be used to display in widget areas on your site or in a summary list of posts., excerptExcerptAn excerpt is the description of the blog post or page that will by default show on the blog archive page, in search results (SERPs), and on social media. With an SEO plugin, the excerpt may also be in that plugin’s metabox., status, date, author, template, etc.) are replaced by a DataForm, for every post type that uses the block editor. The settings follow what each post type supports.
The same form definition is also used to build the Quick Edit interface in the Site Editor.
For users, a cohesive experience: the inspector in the post editor and Quick Edit in the Site Editor show the same information and should look and behave the same, instead of drifting apart.
Quick Edit interface
For developers, APIs that work across both screens: controlling which settings show (this is one example, and it’s possible today with the view config filterFilterFilters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output.), and adding your own fields through the fields APIAPIAn API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways., so they show up in the inspector and in Quick Edit (#61084, #74865). The fields API is aimed for 7.2.
How to test
Install Gutenberg 24.0 or newer on a test site and turn on “Editor Inspector: Use DataForm” under Settings > Gutenberg. Then open a post and compare the Post tab with the experiment on and off. It’s always better to test in trunktrunkA directory in Subversion containing the latest development code in preparation for the next major release cycle. If you are running "trunk", then you are on the latest revision. because it’s the most current version, but Gutenberg 24.0 is acceptable.
Note: Gutenberg trunk needs WordPress 7.0 or later, the 24.0 release also works on 6.9. Either way, please mention which version you tested.
If you develop a plugin, your own dev environment with Gutenberg installed is all you need.
For a quick look without setting anything up there is WordPress Playground, with the experiment already on: Gutenberg 24.0, trunk or the PRs for editor.MediaUpload and editor.PostFeaturedImage (more on those below). To test your own plugin there, install it from the Plugins screen as usual, or upload its zip.
What to expect
PluginDocumentSettingPanel, PluginPrePublishPanel, PluginPostPublishPanel, PluginSidebar, PluginPostStatusInfo fills and removeEditorPanel keep working.
The PluginPostExcerpt slot is not ported. It’s a deprecated API and we’re considering not adding it at all, so whatever you render there should move to a PluginDocumentSettingPanel.
The editor.PostFeaturedImage filter doesn’t work yet. There is a PR (#83133) which adds it, though not in Quick Edit. Anything targeting the classic panels’ CSSCSSCascading Style Sheets. class names or markup won’t be ported.
The featured image picker doesn’t go through the editor.MediaUpload filter yet. There is an exploratory PR which adds that, but it’s on hold for now (see why).
Hiding a default setting or changing where its label sits is already possible with the server side view config filter, get_entity_view_config_posttype_post for posts (see docs). There is an example in this GitHub issue.
Suggested testing flows
You don’t have to follow these exactly, they’re mostly here to give you ideas.
What your plugin adds to the inspector
Open a post with your plugin active. Is everything you add to or change in the Post tab (panels, fills, filters, styles, scripts) still there, and does it still work?
Your custom post types
If you register post types that use the block editor, open one of them. You should only see the settings the post type supports (for example no excerpt setting without excerpt support). Please report anything missing or extra there.
Other user roles
Log in as an editor, author or contributor and open a post. The settings should match what the role can do, like in the classic inspector (an author doesn’t get the Author setting, for example), and saving should still work. Some known issues have already be fixed in trunk (#82844, #82857, #82858).
The editor.MediaUpload and editor.PostFeaturedImage filters
The featured image picker doesn’t go through the editor.MediaUpload filter yet. If your plugin replaces the media picker through editor.MediaUpload, you should test against this PR that adds it. You can try it in Playground or with the PR applied, both in the post editor and in Quick Edit in the Site Editor, and share what you find on the PR.
The same goes for editor.PostFeaturedImage: this PR adds it (not in Quick Edit), and you can try it in Playground too.
Site owners
You don’t need to be a developer for this one. If you use plugins that add things to the Post or Page tab (SEO or social fields, custom panels, that kind of thing), enable the experiment on a test site or in Playground and check they are still there. If something is missing, please share the plugin name and version, and a screenshot with the experiment on and off.
Sharing your feedback
Comments on this post are fine, but the best place is the GitHub issue for this call for testing. Share what you extend, what changed, and whether you can adapt on your side or need something from Gutenberg. “Checked X, nothing changed” is useful too. Feedback about the inspector itself (layout, labels, missing controls) is welcome on the tracking issue, where the open design questions are discussed.
There is no deadline, but the sooner the better, since this is aimed for 7.2.
Out of scope
The goal here is compatibility, what happens to the things plugins add to the inspector. A few things are handled separately:
Block editing, taxonomyTaxonomyA taxonomy is a way to group things together. In WordPress, some common taxonomies are category, link, tag, or post format. https://codex.wordpress.org/Taxonomies#Default_Taxonomies. panels and metaMetaMeta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. boxes. The experiment doesn’t touch them.
Some design questions are still open, like which settings should be regular fields instead of panels, or the Reset button of the Date setting, which isn’t there for now and may come back in a follow up. These live in the tracking issue.
Thanks in advance for testing! Props to @mcsf for reviewing this post.
“What’s new in GutenbergGutenbergThe Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc.
https://wordpress.org/gutenberg/…” posts (labeled with the #gutenberg-new tag) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, here’s an overview of different ways to keep up with Gutenberg and the Editor.
This version extends visual revisionsRevisionsThe WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision. to include the post title, gives the Gallery blockBlockBlock is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. a grid layout with per-breakpoint controls, and lets a site title scale to the width it is given.
Visual revisions now cover the post title
Visual revisions have been growing over the last few releases, and until now the post title sat outside them. In 24.0, the title participates like any other piece of content, including displaying change diffs directly in the post title (#82536, #82586).
Seeing it in the same view as body changes removes the need to guess when a rename happened.
A more adaptable Gallery block
The Gallery block gains a Grid variation that can be switched on from the block inspector, replacing the default non-editable flex layout with a fully customizable grid (#81909).
“Column count” and “Crop images to fit” can now also be set per breakpoint through viewport states. A gallery can show four columns on a wide screen and two on a tablet without any custom CSSCSSCascading Style Sheets. (#82003).
Site titles that fill their available space
The Site Title block now supports fit-text (#82074). Toggle it on from the ellipsis menu in the typography panel and the title scales to the full width available to it, rather than being sized in points and left to wrap or fall short.
Other notable highlights
A redrawn icon set. Nearly 100 icons have been redrawn from a mix of filled and outlined shapes into a single, consistently stroke-based visual language (78812, 78808, 82338).
Tab indents lists. In the List block, Tab and Shift+Tab now indent and outdent a fully selected list item, and work across a multi-item selection instead of only at the caret (82460, 82411).
Background images from a URLURLA specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org. Background image support can now accept an image URL, rather than requiring an entry in the Media Library (82230).
Non-breaking spaces are visible. The format library now visualizes non-breaking spaces, so a character that silently changes wrapping is no longer invisible while editing (74040).
Changelog
Enhancements
Components
Add defaultShown, onShownChange to ToolsPanelItem. (78010)
Border Box Control: Try moving the unlink button to the label row, and rename the panel to Borders. (82163)
DataForm: Add a showPlaceholderIfEmpty option to the panel layout. (82527)
DataForm: Communicate the timezone in the datetime control. (82291)
Editor: Migrate post-card-panel Badge to UI Badge. (82500)
Global Styles UI: Migrate revisions Active Badge to UI Badge. (82560)
Icons: Redraw 35 prominent icons with consistent stroke widths. (78808)
Icons: Redraw 64 icons to be stroke-based. (78812)
Menu: Stabilize portaled iframeiframeiFrame is an acronym for an inline frame. An iFrame is used inside a webpage to load another HTML document and render it. This HTML document may also contain JavaScript and/or CSS which is loaded at the time when iframe tag is parsed by the user’s browser.unit testunit testCode written to test a small piece of code or functionality within a larger application. Everything from themes to WordPress core have a series of unit tests. Also see regression.. (82092)
Menu: Use Text for item labels and descriptions. (82237)
SearchableSelect: Add form primitive to wordpress/ui. (80961)
Storybook: Persist sidebarSidebarA sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme. theme in URL. (82111)
Support isAny and isNonefilterFilterFilters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. operators for numeric fields. (77942)
Tab Panel: Show focus with outline instead of legacy box-shadow ring. (82421)
Validated form controls: Use design token for invalidinvalidA resolution on the bug tracker (and generally common in software development, sometimes also notabug) that indicates the ticket is not a bug, is a support request, or is generally invalid. focus rings. (82410)
List: Indent and outdent a fully selected list item with Tab. (82460)
List: Indent and outdent multi-selected items with Tab. (82411)
Query LoopLoopThe Loop is PHP code used by WordPress to display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post. https://codex.wordpress.org/The_Loop: Rename the “Keyword” filter to “Search terms” and add help text. (82387)
Query: Replace the “Reload full page enabled” modal with a snackbar notice. (82246)
feat: Introduce ‘Add Media’ in the block controls for media-text block. (82420)
Post Editor
Autocompleters: Consider email address context in user mention. (47249)
CSS Styling: Represent focus with outline for list view component. (82129)
DataViews: Append an ellipsis to action labels that open a dialog. (81994)
Editor: Refactor the Options menu to use the Menu component. (81564)
Editor: Refactor the View menu to use the Menu component. (82321)
Editor: Render change diffs in the post title in revisions. (82586)
Editor: Show revision data in Post Title component. (82536)
Media: Attach unattached media to the current post on save/publish. (81977)
Menu: Align selection indicators and prefix icons with item labels. (82346)
Post slug: Prefer server sanitization in the editor. (78135)
Try: Add “reading settings” link to Front Page template. (81987)
Site Editor
Add New Template: Show the design system focus ring instead of legacy box-shadow rings. (82164)
Add a root error boundary to prevent a blank screen. (82486)
Site editor v2: Identity takes its form from the view configuration endpoint. (82692)
Site editor v2: Navigation takes view configuration from endpoint. (82138)
Site editor v2: Pages take view configuration from endpoint. (82140)
Site editor v2: Patterns take view configuration from endpoint. (82458)
Site editor v2: Template parts take view configuration from endpoint. (82457)
Site editor v2: Templates take view configuration from endpoint. (82456)
Site editor v2: Use the canonical template fields in the templates list. (82666)
Site editor v2: Use the canonical wp_block fields in the patterns list. (82672)
Block Editor
Background image: Support setting the image from a URL. (82230)
BlockPreview: Assert preview contents are inert. (82682)
Format library: Visualise non-breaking spaces. (74040)
List View: Disable block icon colors while the block is selected. (82498)
Show the block outline where the grab cursor shows. (81798)
Tab trap escape hatch: Leave/enter the canvas with Escape/Enter. (82314)
Dashboard
Site Health widgetWidgetA WordPress Widget is a small block that performs a specific function. You can add these widgets in sidebars also known as widget-ready areas on your web page. WordPress widgets were originally created to provide a simple and easy-to-use way of giving design and structure control of the WordPress theme to the user.: Route the body’s review link through the host. (82066)
Widget Dashboard: Add a Policy provider to govern what users may do. (81967)
Widget Dashboard: Enforce the policy on the staging layer for every instance operation. (82256)
Widget Dashboard: Govern Reset to default through the policy. (82255)
APIAPIAn API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. fetch
Add unregister to remove a registered middleware. (82408)
Expose defaultFetchHandler so overrides can restore it. (82553)
api-fetch: Resolve to null for a 200 response with an empty body. (79325)
Accordion Panel: Reset padding-block when panel is hidden. (81782)
Fix categories block handling of invalid taxonomyTaxonomyA taxonomy is a way to group things together. In WordPress, some common taxonomies are category, link, tag, or post format. https://codex.wordpress.org/Taxonomies#Default_Taxonomies.. (82153)
Fix: Footnote IDs can start with a digit and break CSS selectors. (82398)
Fix: Tabs block: Anchor links in tab panels are not functional. (81744)
Gallery block: Fix ‘Crop images to fit’ broken in editor. (82318)
Gallery: Shorten “Use images attached to the post” button, add description. (82617)
Image block cropping: Sync image size and link destination settings. (82316)
List: Merge into the previous line on Backspace instead of outdenting. (82145)
List: Outdent an empty middle item without adding an item. (82011)
Navigation: Restore flex-grow on container when accessible label is present. (78447)
Query Loop: Fall back to post when the query has no postType. (82465)
Query: Don’t write excludeCurrent into blocks that never had it. (82147)
Block Editor
Columns: Fix appender drop zone visibility when dragging into empty column. (77852)
DOM: Exclude visibility-hidden elements from focusable results. (82574)
Fix auto-capitalization after Enter on iOSiOSThe operating system used on iPhones and iPads. Safari. (82475)
Fix editor link colour cascade order for nested blocks. (77833)
Fix: Responsive horizontal orientation does not override a vertical layout. (82364)
Fix: Retain focus and caret position after Backspace undo of a prefix block transform. (82116)
List View: Don’t focus the last Table cell on keyboard activation. (81964)
Rich text: Restore contenteditable on pointercancel. (82598)
Writing Flow: Bail out of Enter handling when no block is selected. (82424)
Post Editor
Editor: Deprecate the as prop of the pluginPluginA plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. menu item components. (82319)
Editor: Derive post-only block list layout from the assigned template. (82599)
Editor: Store the finalize response as the attachment record. (81947)
Fields: Hide the slug field for posts without a permalink. (82341)
Media: Refuse a multi-file drop on a placeholder that takes one file. (82046)
Media: Stop claiming “Upload complete” when every upload failed. (81397)
MetaMetaMeta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. Boxes: Move meta box markup with moveBefore to keep classic editors alive. (82243)
Post URL: Translate the copy permalink button label. (82642)
wp-build
Build Package: Restore CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. Boot layout compatibility. (82112)
Build: Fix regular CSS injection in Vitest Browser Mode. (82154)
Pages: Require authentication and a capabilitycapabilityA capability is permission to perform one or more types of task. Checking if a user has a capability is performed by the current_user_can function. Each user of a WordPress site might have some permissions but not others, depending on their role. For example, users who have the Author role usually have permission to edit their own posts (the “edit_posts” capability), but not permission to edit other users’ posts (the “edit_others_posts” capability). to render generated standalone pages. (82254)
Data Layer
Core Data: Return a stable record for equivalent _fields queries. (82552)
Core Data: Scope revisionId to the entity it is provided for. (82517)
Media: Only blame the browser’s codecs when HEIC really cannot be decoded. (82265)
Media: Report server upload failures in plain language. (81735)
Site Editor
Boot, Site Editor: Seed content surfaces with default background color. (81646)
Fields: Remove unused custom sort from the author fields. (82559)
Global Styles
Global styles engine: Return a copy from getResolvedValue instead of mutating. (82278)
Resolve theme-relative background image URLs for display. (82242)
Env
wp-env: Fix Docker build errors with Debian Bullseye repositories. (82478)
Layout
Fix: Restore layout styles for block style variations. (82335)
Format library
Fix Edit as HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. crash with background-only highlight. (82215)
Views
useViewConfig: Don’t request the view configuration twice. (82141)
Dashboard
Widget Dashboard: Keep the plain anchor for an empty-string download. (82073)
Font Library
Keep CSS custom properties unquoted in font previews. (82010)
Fields
Fix pattern export filenames by normalizing special characters. (77033)
AccessibilityAccessibilityAccessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility)
Workflow: Replace cmdk with the wordpress/ui Autocomplete primitive. (82504)
Components
Match the wordpress/ui disabled styles in form controls. (82454)
Tests: Skip pull requests that only change Storybook stories. (82459)
Themes
Theme JSONJSONJSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML.: Avoid rebuilding identical block schemas during sanitization. (82203)
Block Supports: Bail early in state styles when a block has no style attribute. (81908)
Block Editor
Rich text: Resolve owned event listeners once instead of per subscriber. (80605)
Experiments
Editor assets endpoint: Prime the theme JSON resolver before capturing. (82134)
Post Editor
ExtensibleExtensibleThis is the ability to add additional functionality to the code. Plugins extend the WordPress core software. site editor: Add a revisions entry point to the Styles route. (82142)
Media Modal Experiment: Allow filtering by attached to the post, or unattached. (81974)
Block Fields Media: Handle ‘audio’ in chooseItemLabel. (82389)
Site Editor
Extensible site editor: Fall back to the raw title in edit route document titles. (82143)
Navigation Menus
Extensible Site Editor: Let menu items be added from the navigation screen. (82125)
Documentation
API Fetch: Rename defaultFetchHandler parameter to options. (82588)
Add recommended bulk suppressions configuration for ESLint VSCode. (82303)
Components: Add an Emotion-to-SCSS migrationMigrationMoving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. skill and guide. (82567)
CI: Pin npm version in the private API check job. (82222)
CodeRabbit: Disable the review status comment. (82534)
CodeRabbit: Only review on request, keep PR descriptions untouched. (82448)
Docs: Align param tagtagA directory in Subversion. WordPress uses tags to store a single snapshot of a version (3.6, 3.6.1, etc.), the common convention of tags in version control systems. (Not to be confused with post tags.) columns in lib/ docblocks. (81902)
Docs: Align param tag columns in phpunit/ docblocks. (81904)
Docs: Remove the blank line between param and return in test docblocks. (81907)
Packages: Exclude src from block-serialization-default-parser package. (77307)
Performance tests: Reuse the plugin an earlier trunktrunkA directory in Subversion containing the latest development code in preparation for the next major release cycle. If you are running "trunk", then you are on the latest revision. run already built. (82223)
Replace npm-run-all with native npm script chaining. (82166)
Reusable Blocks: Remove leftover merge conflictconflictA conflict occurs when a patch changes code that was modified after the patch was created. These patches are considered stale, and will require a refresh of the changes before it can be applied, or the conflicts will need to be resolved. markers from the changelog. (82126)
list-reusable-blocks: Exclude src from published files. (77305)
CSS Styling: Cleanup focus outline override for grid component. (82337)
Migrate __experimentalText and __experimentalHeading to wordpress/ui Text in Inspector Popover HeaderHeaderThe header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes.. (77449)
Migrate __experimentalText to wordpress/ui Text in Allowed Blocks Modal. (78119)
Migrate __experimentalText to wordpress/ui Text in Block switcher bindings hint. (77366)
Migrate __experimentalText to wordpress/ui Text in Pattern Overrides Dropdown. (77492)
Span the writing flow focus capture elements over the canvas. (82354)
TypeScript: Migrate format-library package to TS. (79486)
Post Editor
Block Editor: Remove the dead Write/Design editor tool plumbing. (82677)
Editor: Apply the showListViewByDefault preference in the shared editor. (82119)
Editor: Fix disabled and link items of the more menu adapter. (82428)
Editor: Mark __unstableSaveForPreview options as optional. (81858)
Remove the content-only inspector fields (block fields) experiment. (82531)
Data Layer
Core Data: Convert hooksHooksIn WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same. tests to renderHook and drop JSX. (82276)
Remove the template activation experiment. (82241)
Validate tsconfig references against declared dependencies. (82106)
feat: Improve TypeScript definitions in the getEntityRecord function. (81863)
Fields
Declare the caption, alt text, description and pingPingThe act of sending a very small amount of data to an end point. Ping is used in computer science to illicit a response from a target server to test it’s connection. Ping is also a term used by Slack users to @ someone or send them a direct message (DM). Users might say something along the lines of “Ping me when the meeting starts.” status controls through the Field API. (82539)
Remove unused CSS rule from slug field control. (77961)
Widgets Editor
Edit Widgets: Guard canInsertBlockInWidgetArea against an empty block list. (82107)
Widgets: Replace {TODO} placeholder with PR number in changelog entries. (82450)
REST APIREST APIThe REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think “phone app” or “website”) can communicate with the data store (think “database” or “file system”)
https://developer.wordpress.org/rest-api/
Templates REST API: Prevent fatal error when a null template reaches prepare_item_for_response. (82374)
View Config: Move the table column style descriptions to the 7.2 compat layer. (82372)
Create Block
Test package at supported Node.js versions. (82657)
Site Editor
View config: Remove stale fields from the wp_template default view. (82602)
Make BlockTransform a discriminated union over its type. (81831)
A11yAccessibilityAccessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility)
Packages: Exclude src from autop published package. (77283)
Tools
Point to docmumentation about release assets. (82250)
Project Management: Add validation for missing GitHubGitHubGitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the ‘pull request’ where code changes done in branches by contributors can be reviewed and discussed before being merged by the repository owner. https://github.com/ labels configuration. (76263)
Project Management: Remove empty entries from CODEOWNERS. (82292)
Project Management: Restore CODEOWNERS exclusions for suppression lists. (82538)
Project Management: Update CODEOWNERS to reflect current participation. (82262)
Add more end-to-end tests for the editor inspector consolidation experiment. (82239)
Add more end-to-end tests for the editor inspector consolidation experiment. (82327)
Add promptfoo for testing agent development setup and skills. (80812)
Add the template end-to-end tests for the editor inspector consolidation experiment. (82394)
Automated Testing: Enforce .tsx for all new ReactReactReact is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces.
https://reactjs.org files. (80123)
Automated Testing: Fix failing categories test on trunk. (82182)
Automated Testing: Fix unit test compatibility with Node.js v26. (82618)
CI: Add “Required changes from trunk” PR check. (82272)
CI: Add a per-workflow status check job and filter paths. (81015)
CI: Unify the automation comments into a single PR comment. (82249)
DataViews: Remove obsolete Node 20 timezone test gate. (82644)
DateTime tests: Freeze the clock in the empty-value calendar test. (82282)
e2e-test-utils-playwright: Update Lighthouse and web-vitals. (81916)
E2E: Run the site editor suite against the extensible site editor too. (82117)
Fix privacy policy page setting unit test on multisitemultisiteUsed to describe a WordPress installation with a network of multiple blogs, grouped by sites. This installation type has shared users tables, and creates separate database tables for each blog (wp_posts becomes wp_0_posts). See also network, blog, site. (82467)
Test: Drop the jest-dom Vitest entry point from test files. (82606)
Test: Enforce JavaScriptJavaScriptJavaScript or JS is an object-oriented computer programming language commonly used to create interactive effects within web browsers. WordPress makes extensive use of JS for a better user experience. While PHP is executed on the server, JS executes within a user’s browser.
https://www.javascript.com test runner ownership. (82299)
Bundled packages: Add a check for transitive private API usage. (82027)
CI: Collapse package CHANGELOG check exclusions into a single grep pattern. (82121)
CI: Read the required npm version from a single source. (82235)
Change stray ubuntu-latest to ubuntu-24.04. (82156)
Fix the high-severityseverityThe seriousness of the ticket in the eyes of the reporter. Generally, severity is a judgment of how bad a bug is, while priority is its relationship to other bugs. sharp audit failure in AI development tests. (82627)
Framework: Error on npm versions older than the required floor. (82320)
“What’s new in GutenbergGutenbergThe Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc.
https://wordpress.org/gutenberg/…” posts (labeled with the #gutenberg-new tag) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, here’s an overview of different ways to keep up with Gutenberg and the Editor.
This version of Gutenberg brings some big quality-of-life editing improvements around blockBlockBlock is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. insertion and custom styling.
Stop searching for the inserter
Finding the inserter was challenging on some block selections. Now, you can insert from the block toolbar. Easily add a new block to a group or another image to your gallery without having to change selection or scroll to find the inserter. Be on the lookout for more improvements to the block inserter in upcoming releases.
Easily find custom style overrides
Global Styles now makes it easy to see which blocks have custom overrides applied to them. Rather than drilling through each block to find which ones have custom styles, a dot indicator is on each block with a custom style. If you want to see all of the customized blocks together, there’s an option to filterFilterFilters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. only by blocks with custom styles.
Other Notable Highlights
Axial block gap for the group block. Flex and grid layouts can now have independent vertical and horizontal block gap spacing so you can dial in your design. (81476)
Global Styles for more elements: Citations, Inputs, and Selects were all available in theme.json, but now you can use Global Styles to easily customize them. (80852)
Add custom Duotone colors to Global Styles.theme.json could provide duotone palettes, but you couldn’t add custom ones via Global Styles. Now, if you don’t like the theme’s provided duotones, add your own via the new Duotone tab in the Global Styles Colors section. (81605)
Changelog
Enhancements
Components
Adminadmin(and super admin)UIUIUser interface: Add Navigation component and Page navigation slot. (79746)
Align legacy form control focus rings with WPDS. (80417)
Base Styles: Align input-control mixin to design system. (81357)
Base styles: Streamline focus ring override. (81242)
CollapsibleCard: Support multiple headerHeaderThe header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes. descriptions. (81227)
DataViews: Pass the WordPress localeLocaleA locale is a combination of language and regional dialect. Usually locales correspond to countries, as is the case with Portuguese (Portugal) and Portuguese (Brazil). Other examples of locales include Canadian English and U.S. English. to the date/datetime calendar controls. (81592)
Global Styles: Allow editing duotone palettes. (81605)
More block: Clarify description about excerptExcerptAn excerpt is the description of the blog post or page that will by default show on the blog archive page, in search results (SERPs), and on social media. With an SEO plugin, the excerpt may also be in that plugin’s metabox. vs full content. (80619)
Playlist Track: Show upload spinner inline. (81445)
Command Palette: Allow commands to override the categoryCategoryThe 'category' taxonomy lets you group posts / content together that share a common bond. Categories are pre-defined and broad ranging. icon. (81787)
Editor: Defer hierarchical term filtering and soften announcements. (81422)
Editor: Migrate hierarchical term selector to @wordpress/ui. (81848)
Editor: Refactor ‘ErrorBoundary’ to use the new recommended components. (81638)
Editor: Simplify List View sidebarSidebarA sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme. shortcut handling. (81693)
Editor: Surface debugging details in the ErrorBoundary. (81642)
Editor: Use PluginSidebar in GlobalStylesSidebar. (81570)
Pre-publish panel: Remove the headings that repeat the panel title. (81806)
Global Styles: Expose additional elements in Typography and Colors. (80852)
Patterns explorer: Refactor the category sidebar to use Tabs. (81807)
Quick Inserter: Standardize the design of the Browse all button. (81827)
Writing flow: Select next block on Enter key. (63484)
Inbetween Inserter: Use average width of adjacent blocks for inserter size. (68074)
Dashboard
Dashboard Widgets: Let the host decide which component renders an action link. (81740)
Dashboard Widgets: Promote high-relevance actions into a chrome footer. (81556)
Dashboard Widgets: Resolve widgetWidgetA WordPress Widget is a small block that performs a specific function. You can add these widgets in sidebars also known as widget-ready areas on your web page. WordPress widgets were originally created to provide a simple and easy-to-use way of giving design and structure control of the WordPress theme to the user. types without a metadata module. (81738)
DataViews: Sync the displayed calendar month with external value changes. (81635)
Duotone Picker: Stop the duotone bar offering to move its control points. (81850)
Fix Storybook accessibilityAccessibilityAccessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility) issues in stories. (81777)
Improve text detection for button icon-with-text. (81521)
InputControl: Vertically center date and time input values in Safari. (81361)
Menu: Close non-modal menus on iframeiframeiFrame is an acronym for an inline frame. An iFrame is used inside a webpage to load another HTML document and render it. This HTML document may also contain JavaScript and/or CSS which is loaded at the time when iframe tag is parsed by the user’s browser. interaction. (81952)
Modal: Stop Escape key propagation on dismiss. (81785)
PaletteEdit: Expose palette swatches as command buttons. (82023)
Storybook: Handle production module load failures. (81867)
Theme: Improve color ramp contrast safeguards. (81185)
UI: Fix accessibility issues in form primitives and their stories. (81853)
Block Library
Accordion Heading: Route theme.jsonJSONJSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML. spacing to the toggle button. (81976)
Dynamic Gallery block: Skip transforms that expect inner blocks, e.g. Image and Grid transforms. (82009)
Enable blockGap spacing supports in Query loopLoopThe Loop is PHP code used by WordPress to display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post. https://codex.wordpress.org/The_Loop block. (79689)
Fix: Accordion: Anchored hash inside the accordion throws the malformed URLURLA specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org console error. (81780)
Fix: Skip empty block markup in navigation to prevent split UL elements. (78793)
Icon: Fix margin being applied twice in the editor. (81292)
Inner Blocks: Fix bugbugA bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. that caused alignment controls to show in Image blocks within a Gallery. (81606)
Post Template: Fix mover arrows and labels for blocks inside the grid view. (81120)
Preserve layout and style attributes on Column transform. (81855)
Rename the media editor toolbar button to ‘Edit image’. (81705)
Post Editor
Add context to change “revisionsRevisionsThe WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision. code diff”. (81820)
Editor: Correctly mark ToolsMoreMenuGroup as a private SlotFill. (81503)
Clamp the truncated file name slice in filterURLForDisplay. (81529)
Fix: getQueryArgs discards everything after the second = in a query argument value. (81066)
Fix: URL: normalizePath drops the rest of the query after a second “?”. (81612)
Stop normalizePath throwing on a malformed percent sequence. (81086)
Data Layer
CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. Data: Stop storing NaN pagination totals for unpaginated endpoints. (82059)
Core Data: Validate the parsed-blocks cache against registered block types. (81809)
Env
Fall back to cached docker images when the registry is unreachable. (81631)
Update git to latest commit when --update passed. (81447)
Build Package: Use Core’s boot module when a pluginPluginA plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. has none. (81761)
Font Library
Fix the preview weight for variable fonts. (81748)
Media
Fix clipped focus outlines in the media editor Details sidebar. (81703)
Site Editor
Use inverted ThemeProvider seed for portaled UI. (81653)
DOM
Treat a caret at a soft line wrap as an ambiguous position in Firefox. (81003)
Media Utils
Prevent white screen crash during undo operations when Media Modal is open. (79898)
Parsing
Fix: Line Break Tags Added to Scripts and Styles. (77542)
Paste
Fix: Stop stripping spaces inside inline HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. elements on paste. (76696)
Accessibility
Post Editor
Editor: Announce publish date changes to screen readers. (81629)
Boot: Preview the site where the canvas has nothing to open. (81749)
Boot: Sync the editor’s device preview with the URL. (81617)
Boot: Translate the canvas click-to-edit label. (81620)
Boot: Warn before leaving with unsaved changes. (81625)
Edit Site Init: Seed the editor preferences the editor expects. (81628)
ExtensibleExtensibleThis is the ability to add additional functionality to the code. Plugins extend the WordPress core software. Site Editor: Add a theme preview page with global styles editing. (81954)
Extensible Site Editor: Add the Identity route. (81576)
Extensible Site Editor: Preview the site on Home for classic themes. (81578)
Extensible Site Editor: Show only the style book on Styles for classic themes. (81579)
Extensible Site Editor: Gate theme screens on theme support. (81581)
Lazy Editor: Keep the theme’s editor styles on the canvas. (81747)
Lazy Editor: Render the editor preferences modal. (81630)
Docs: Fix broken link to the Document-Isolation-Policy explainer. (81790)
Docs: Fix broken link to the getEntityRecords selector reference. (81791)
Docs: Fix broken links to the Block APIAPIAn API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. reference guides. (81571)
Docs: Fix broken skip ahead anchor on the custom block editor guide. (81835)
Docs: Fix dead link in the dynamic blocks tutorial. (81399)
Docs: Narrow the tsconfig split guidance to the standard layout. (81828)
Docs: Require site editor features to land in the extensible site editor too. (81752)
Docs: Align param tagtagA directory in Subversion. WordPress uses tags to store a single snapshot of a version (3.6, 3.6.1, etc.), the common convention of tags in version control systems. (Not to be confused with post tags.) columns in test/ docblocks. (81905)
Components
BorderControl, BorderBoxControl: Migrate styles to CSS Modules. (80437)
ComboboxControl: Narrow onChange callback type to string | null. (81568)
Tabs: Number generated tab IDs from 1 and keep them sequential. (81781)
Playlist: Remove block toolbar sharing between parent and child blocks. (81432)
Update waveform player dependency patchpatchA special text file that describes changes to code, by identifying the files and lines which are added, removed, and altered. It may also be referred to as a diff. A patch can be applied to a codebase for testing.. (81454)
Post Editor
ActionItem: Move the more menu deduplication out of the Slot. (81507)
Block Editor: Never spotlight blocks in a preview. (81615)
Editor: Remove FlexItem usage from NoteCard. (81851)
Use WCInputControl alias for legacy InputControl imports. (81830)
Use WCTextareaControl alias for legacy TextareaControl imports. (81834)
Data Layer
Core Data: Allow keyless entities to be addressed without a record ID. (81857)
TypeScript: Drop redundant undefined casts for keyless entity record IDs. (82018)
refactor: Convert createColorHOC to functional component. (70408)
Dashboard
Dashboard widgets & Grid: Use kebab-case for CSS selectors. (82053)
Quick Draft widget: Drop a reference to a class that does not exist. (82064)
Media
Media Editor Route: Add missing dependency to media-editor route. (81845)
Fields
Migrate last remaining JSJSJavaScript, a web scripting language typically executed in the browser. Often used for advanced user interfaces and behaviors. file to TS. (81808)
Styles Route: Reference the api-fetch and html-entities projects. (81989)
Test: Add Vitest ReactReactReact is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces.
https://reactjs.org, Emotion compilation, console, and snapshot parity. (81039)
TypeScript: Add typecheck script and split root tsconfig into build and dev solutions. (81499)
TypeScript: Put route projects under the typecheck run. (81829)
Validation: Update dependency-audit to 0.4.6 and ignore the dataviews ./wp bundle. (81928)
Testing
Automated Testing: Change Storybook default a11yAccessibilityAccessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility) test to error on failure. (81597)
Block Library: Fix failing test in playlist block. (81950)
List View: Fix flaky global shortcut test and re-enable it. (81690)
Perf: Report the first block selection as its own metric. (81616)
Test: Port shared Vitest test environment. (81038)
Tests: Make PHPUnit tests independent of test configuration flags and theme root. (79159)
Vitest: Resolve @flakiness/vitest reporter to an absolute path. (81582)
end-to-end Tests: Use str_starts_with()/str_contains() in hide-user-rest-routes plugin. (82030)
Data Layer
Update 23.8 release changes on trunktrunkA directory in Subversion containing the latest development code in preparation for the next major release cycle. If you are running "trunk", then you are on the latest revision.. (81485)
ESLint plugin
Remove fixable on i18n-no-flanking-whitespace. (70279)
First-time contributors
The following PRs were merged by first-time contributors:
Thanks to @mciampini and @aduth for helping with the npm package distribution and stable release, @manzoorwanijk, @onemaggie and @softglaze for release candidaterelease candidateOne of the final stages in the version release cycle, this version signals the potential to be a final release to the public. Also see alpha (beta). support and testing, @coreyhall93 for the video highlights, and @tyxla, @ramonopoly, and @ellatrix for reviewing this post.
“What’s new in GutenbergGutenbergThe Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc.
https://wordpress.org/gutenberg/…” posts (labeled with the #gutenberg-new tag) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, here’s an overview of different ways to keep up with Gutenberg and the Editor.
Version 23.8 continues to build on recent releases, adding shareable URLs and an in-editor code diff view to visual revisionsRevisionsThe WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision., email notifications for users mentioned in a note, major List View performance improvements on large posts, and a smoother writing flow that renders a real default blockBlockBlock is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. in place of the empty-canvas appender.
Visual revisions: Shareable URLs and a code diff view
Visual revisions keep getting more capable. You can now link directly to a specific revision: opening a URLURLA specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org with a revision parameter takes you straight to that revision in the editor, and the address bar stays up to date as you move through history so sharing the exact change you’re discussing is as simple as copying the URL. Toggle the code editor to see the diff in code. (79934, 80314)
Email notifications for mentions in notes
Collaboration in the editor took another step forward: when someone @-mentions you in a note, you now receive an email letting you know, written in your own language and linking to the editor where the conversation is happening. This completes the mentions feature whose autocomplete UIUIUser interface landed in a previous release. (79606)
Other notable highlights
The List View received a series of performance improvements that add up to a dramatically better experience on long posts. Opening it is faster thanks to a leaner rendering path that cuts most of its DOM nodes and skips a second render pass, expanding and collapsing sections triggers far fewer re-renders, and a freeze when selecting all blocks on large posts is gone. On a post with 1,000 paragraphs, “Select all” dropped from 16.8 seconds to 0.4 seconds. (81210, 80953, 80929, and others)
The empty canvas now renders a real default block instead of a lookalike appender, so what you see before typing is exactly what you get (81231). Along the same lines, a new block added next to an existing one now inherits its neighbor’s styling consistently, no matter how it was inserted (81250).
The experimental Playlist block became easier to work with: Audio blocks can transform into a Playlist and back, and you can select multiple audio files from the Media Library at once (80926). The Tabs block now shows each tab’s actual title in the Document Overview instead of a generic “Tab” label (81427) and supports Home and End keys for keyboard navigation (80912).
For developers, blocks can now declare their inner blocks template directly in registerBlockType() settings, applied synchronously at insertion (80027); @wordpress/element is importable in ReactReactReact is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces.
https://reactjs.org 19 (80053); DataViews gained a time field type (80830) and configurable preview aspect ratios (79329); and @wordpress/ui now offers public Calendar and RangeCalendar components (81337).
Element: Make the package importable in React 19. (80053)
Interface: Let CSSCSSCascading Style Sheets. own the ComplementaryArea width and use AnimatePresence custom for exit. (81363)
WidgetWidgetA WordPress Widget is a small block that performs a specific function. You can add these widgets in sidebars also known as widget-ready areas on your web page. WordPress widgets were originally created to provide a simple and easy-to-use way of giving design and structure control of the WordPress theme to the user. Dashboard: Preserve widget chrome flex layout. (80570)
DataViews: Add time field type and control. (80830)
DataViews: Make grid and table item preview aspect ratio configurable. (79329)
IconButton: Improve keyboard shortcut accessibilityAccessibilityAccessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility). (80402)
Icons: Move the inline image icon into the library. (81271)
SearchableChipSelect: Add form primitive to wordpress/ui. (80779)
UI: Add Calendar and RangeCalendar, moved from components private APIs. (81337)
UI: Derive Base UI direction from WordPress i18ni18nInternationalization, or the act of writing and preparing code to be fully translatable into other languages. Also see localization. Often written with a lowercase i so it is not confused with a lowercase L or the numeral 1. Often an acquired skill.. (80399)
Editor: Migrate settings sidebarSidebarA sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme. to Tabs from wordpress/ui. (81054)
Notes: Display shortcut for form action buttons. (81064)
Visual revisions: Add a code diff view inside the editor. (80314)
Dashboard
Dashboard Widgets: Add icon and relevance to the widget action envelope. (81275)
Dashboard Widgets: Split action icons into wire and resolved forms. (81381)
Widget Dashboard: Host-tunable tile spacing via public custom properties. (81352)
Widgets: Carry a declarative icon through the widget pipeline. (80969)
Widgets Editor
Add ThemeProvider for adminadmin(and super admin) color schemes. (81173)
CustomizerCustomizerTool built into WordPress core that hooks into most modern themes. You can use it to preview and modify many of your site’s appearance settings. widgets: Add ThemeProvider for admin color schemes. (81174)
Global Styles
Migrate font size presets to the shared preset layer. (79811)
Migrate shadows presets to use the preset management layer. (79812)
Bug Fixes
BackportbackportA port is when code from one branch (or trunk) is merged into another branch or trunk. Some changes in WordPress point releases are the result of backporting code from trunk to the release branch.coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. fixes for finalize route. (81465)
Boot: Adjust specificity of the image reset styles so components can size their own images. (80845)
Fix end-to-end tests that break when shard rebalancing changes their neighbors. (81117)
Fix: Add missing target to the webpack dev server proxy configuration. (81141)
Interface: Increase footer breadcrumb height to prevent focus ring clipping. (81145)
Views: Honor all developer-defined view configuration overrides. (80832)
Interface: Stop the secondary sidebar animating into place on page load. (81362)
Site editor: Fix sidebar item hover color. (81317)
theme.jsonJSONJSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML. schema: Allow responsive states on block style variations. (81309)
Dashboard Widgets: Remove the Hello Dolly download action. (81272)
Decode HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. entities in Identity fields. (81269)
Make downloadable block item labels translatable. (81237)
Edit Widgets: Fix headerHeaderThe header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes. toolbar button focus ring. (81176)
Fix template modified and date return value for file templates. (80733)
Block Editor
Background: Fix the legacy gradient UI where a gradient cannot be selected. (81056)
Block Inspector: Disable the ‘Edit original’ button when the entity ID is missing. (81288)
Copy: Preserve the block when its entire text is selected. (80994)
Disclose the nested block count of a multi selection. (80745)
Fix Escape from the block toolbar and stop redundant last focus dispatches. (81319)
Fix empty list block with anchor persisting after backspace deletion. (77000)
Fix overflowing block UI being covered after a block is moved. (80824)
Link Control: Restore the preview title underline. (81083)
Make the Group action wrap blocks with a group transform. (80891)
PanelColorSettings: Restore the missing space below the panel header. (81155)
Quote & List v2: Deleting empty list item should delete list block. (42503)
Return false from isBlockSelected when there is no client ID. (81212)
Style states: Fix state deselection when selecting the already selected block. (81277)
URLInput: Skip search requests while an IME composition is in progress. (80602)
Writing flow: Forward delete an empty paragraph without breaking apart the next block. (80813)
Block Library
Clarify the GIF Video variation description. (81181)
Fix: Tabs block: Start with empty tab labels with placeholders. (81009, 81429)
Media: Reword the HEIC upload error and keep it up until dismissed. (81130)
Navigation Overlay Close: Inherit typography and color from the overlay. (80751)
Playlist: Improve audio conversion and track selection. (80926)
Playlist: Normalize Waveform Player configuration handling. (81342)
Post Author Biography: Fix horizontal overflow with long unbroken text. (81018)
Remove the editableRoot opt-in from the paragraph block. (81184)
Video: Hide settings for the GIF variation. (81142)
Fix: Add optional chaining for empty reusable block (#81165). (81177)
Components
Button: Suppress UA focus ring when focused and pressed. (81113)
DataViews: Fix array field type validation for empty values. (81378)
DataViews: Fix the between datefilterFilterFilters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. losing a manually typed date on blur. (81150)
DataViews: Pass only eligible items to a bulk action callback. (81198)
Scope breakpoint media queries to screen so printing does not look like a resize. (81367)
Theme: Omit color properties when neither provided nor inherited. (80600)
Admin UI: Reset the wp-admin li margin that misaligns Breadcrumbs. (81134)
Post Editor
Add ThemeProvider for admin color schemes. (81112)
DataViews: Move the rich text control into the editor package. (81430)
Footnotes: Guard against invalidinvalidA resolution on the bug tracker (and generally common in software development, sometimes also notabug) that indicates the ticket is not a bug, is a support request, or is generally invalid. post metaMetaMeta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. values. (81201)
RTC: Remove excess autosave notices (when not useful). (80539)
Render viewport state element styles in the editor. (81307)
Collaboration
Notes: Fix the mention notification email composition. (81187)
RTC: Disable custom autosave controller when RTC is disabled. (80769)
Accessibility
Fix: New route-based admin pages are empty when no JSJSJavaScript, a web scripting language typically executed in the browser. Often used for advanced user interfaces and behaviors.. (80628)
Interface: Remove incorrect aria-expanded from pin-to-toolbar button. (79874)
wp-build: Render the no-JS fallback in the generated page templates. (81365)
Block Editor
Block Mover: Add the keyboard shortcut to the buttons’ spoken description. (81380)
Components
Menu: Restore Modal focus return when menu items close. (81164)
Block Library
Tabs: Support Home and End keys for keyboard navigation. (80912)
List View: Collapse off-window placeholder rows into a single spacer row. (80953)
List View: Narrow the dependants of the memoized List View tree. (81129)
List View: Only subscribe to the block subtree for rows that can show images. (81076)
List View: Reduce per-row store subscriptions. (81136)
List View: Speed up opening by removing a forced style recalculation. (80929)
List View: Speed up opening by removing a second render pass. (80935)
List View: Pass only minimal required data to sub-tree branches. (81111)
List View: Split the context and drop dead props to cut re-renders on expand and collapse. (81159)
Documentation
Agents: Add a defensive data design skill and route to the copy guide. (81131)
Block JSON schema & PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher-only blocks: Add autoRegister support. (80173)
Block Library: Document security patchpatchA special text file that describes changes to code, by identifying the files and lines which are added, removed, and altered. It may also be referred to as a diff. A patch can be applied to a codebase for testing. releases. (81295)
Changed Build Process Link and remove unused tags. (81360)
Docs: Explain how the theme.json schema fixtures work. (81263)
Docs: Fix broken Figma links on the design resources page. (81166)
Docs: Fix broken link to the Node.js debugging guide. (81398)
Docs: Fix broken links to the removed JavaScriptJavaScriptJavaScript or JS is an object-oriented computer programming language commonly used to create interactive effects within web browsers. WordPress makes extensive use of JS for a better user experience. While PHP is executed on the server, JS executes within a user’s browser.
https://www.javascript.com build setup guide. (81232)
Docs: Fix typo in block file structure guide. (81348)
Docs: Remove breakpoint-only element style example from global styles guide. (81308)
Docs: Remove dependency group import guidance. (81245)
Docs: Use gutenberg instead of Gutenberg in package name. (81051)
Keycodes: Make withIgnoreIMEEvents a public APIAPIAn API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways.. (81343)
Migrate Spinner styles from Emotion to SCSS module. (80511)
New kebab-case package: Extract utility and migrate private API calls. (81294)
Theme: Colocate pluginPluginA plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. tests with implementations. (81247)
Types: Replace remaining @ts-expect-error suppressions with proper typing. (81200)
UI: Upgrade React DayPicker to version 10. (81439)
Spacing Sizes Control: Make the control label translatable independently of the input aria label. (81240)
URLInput: Simplify keyboard handling and fix arrow keys with a text selection. (80780)
Block Library
Cover: Avoid passing null as the featured imageFeatured imageA featured image is the main image used on your blog archive page and is pulled when the post or page is shared on social media. The image can be used to display in widget areas on your site or in a summary list of posts. size. (81444)
List View: Replace expand/collapse callbacks with reducer dispatch. (81138)
Query: Guard non-scalar queryId to avoid fatal in enhanced pagination. (80724)
Revise CODEOWNERS for package ownership (removing nerrad). (81175)
ESLint: Ban @ts-ignore in favour of @ts-expect-error. (81148)
Testing
Automated Testing: Add Storybook component documentation regressionregressionA software bug that breaks or degrades something that previously worked. Regressions are often treated as critical bugs or blockers. Recent regressions may be given higher priorities. A "3.6 regression" would be a bug in 3.6 that worked as intended in 3.5. testing. (80655)
CI: Add job timeouts to E2E, static checks, bundle size, and create block. (80801)
CI: Build once and reuse the build across end-to-end tests shards. (81031)
CI: Cache the system packages Playwright downloads for WebKit. (80846)
Fix: TrunktrunkA directory in Subversion containing the latest development code in preparation for the next major release cycle. If you are running "trunk", then you are on the latest revision. end-to-end failures caused by the navigation spec leaving plain permalinks. (81238)
Storybook e2e: Add small, compact and icon examples to button matrix. (80793)
Test: Add Vitest migrationMigrationMoving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. routing guardrails. (81036)
Test: Add private Vitest configuration and migrate a pilot test. (81037)
Tests: Replace page-level selectors with locators in end-to-end specs. (81053)
“What’s new in GutenbergGutenbergThe Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc.
https://wordpress.org/gutenberg/…” posts (labeled with the #gutenberg-new tag) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, here’s an overview of different ways to keep up with Gutenberg and the Editor.
Version 23.7 includes many improvements over features added with 23.6, with updates to the BlockBlockBlock is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. Editor, the new Gallery block’s dynamic mode, user control to enable the Global Styles inheritance UIUIUser interface, and a series of smaller visible editor layout fixes.
Much of the 23.7 cycle has been focused on smaller visual editor improvements. Floated blocks no longer overlap sticky blocks, the empty block appender now sits in the right place inside blocks that capture their own toolbars, and the Pullquote block finally honors a custom line height in the editor so it matches the front end. Fixed device preview heights are also restored for the mobile and tablet views.
Gallery block dynamic mode improvements
The new Gallery block dynamic mode that shipped in Gutenberg 23.6 had an ambiguous “Convert to images” toolbar button that didn’t describe what it actually did. That button has been renamed to “Detach”, and a modal appears to better explain to the user what happens when detaching images
Other Notable Highlights
Global Styles inheritance UI. This experimental feature is now opt-in, and is enabled from the Gutenberg Experiments settings page (#80815).
Math block: LaTeX errors stop interrupting you. Parse errors no longer fire on every keystroke — LaTeX input now uses ValidatedTextareaControl, so feedback is deferred until the field first loses focus and the per-keystroke screen reader announcement is gone (#80500).
Grouped options across the form primitives. Combobox, Select, and SelectControl gain Group and GroupLabel subcomponents, so grouped options compose consistently across the item-popup families (#80574).
Changelog
Enhancements
Base styles: Allow overriding focus ring color in outset-ring__focus. (80587)
WidgetWidgetA WordPress Widget is a small block that performs a specific function. You can add these widgets in sidebars also known as widget-ready areas on your web page. WordPress widgets were originally created to provide a simple and easy-to-use way of giving design and structure control of the WordPress theme to the user. Dashboard: Measure the headerHeaderThe header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes. fit and document the chrome. (80423)
Widget Primitives: Ship as a script module. (80149)
Components
Combobox, Select, SelectControl: Add Group and GroupLabel. (80574)
DataViews/Font Library: Give search fields a fixed width to stop layout shift. (80315)
DataViewsPicker: Add Shift+Click range selection to the picker-table, picker-grid, and picker-activity layouts. (80413)
Enhance sandbox component to accept sandbox prop. (69617)
Input: Hide native spin controls for type=”number”. (80646)
SearchControl: Render the suffix only if there’s one. (80356)
Update view configuration APIAPIAn API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. versioning. (80319)
Account for non-lowercase VIDEO tagtagA directory in Subversion. WordPress uses tags to store a single snapshot of a version (3.6, 3.6.1, etc.), the common convention of tags in version control systems. (Not to be confused with post tags.) in render_block_core_video(). (80537)
Query LoopLoopThe Loop is PHP code used by WordPress to display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post. https://codex.wordpress.org/The_Loop: Add translationtranslationThe process (or result) of changing text, words, and display formatting to support another language. Also see localization, internationalization. context to the ‘Offset’ setting label. (80582)
Social Link: Fix stray closing tag in Tumblr icon markup. (80257)
Block Tools: Fix empty block appender position inside blocks that capture toolbars. (80592)
Fix cursor position during forward delete of empty blocks. (77525)
Fix preset round-trip test imports after preset utils consolidation. (80589)
Global Styles panels: Fix wrong preset committed and shown when two color presets share a hex. (80497)
Global Styles: Resolve link element styles in block inspector controls for blocks that are links. (80607)
RTC: Prevent controlled block synchronization from intercepting undo. (80503)
Rich text: Remove tabIndex from editable elements again to fix shift+click selection. (80651)
Writing flow: Extend block selections with shift+arrow when there is no native selection. (80687)
Writing flow: Mark shift+click as a multi-selection gesture. (80286)
Writing flow: Stop the page scrolling on caret moves within blocks taller than the viewport. (80708)
RichText: Don’t apply input transform when there’s no onReplace. (80978)
RichText: Fix paste handler crash when pasting files. (81010)
Post Editor
Editor: Leave undo to the browser in fields that handle their own undo. (80768)
Editor: Restore fixed device preview height for mobile and tablet. (80271)
MetaMetaMeta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. boxes: Match heading styles with Gutenberg panels. (80670)
Notes: Capture the target block before saving a block-level note. (80690)
Notes: Register the inline note format at import time. (80576)
Notes: Report save success consistently from note actions. (80748)
Notes: Sync the sidebarSidebarA sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme. selection to the inline marker under the caret. (80610)
Post Lock: Fix modal flipping to “Someone else has taken over” for a locked-out viewer. (79997)
Wrap notices in ThemeProvider with 0 corner radius. (79523)
iOSiOSThe operating system used on iPhones and iPads.: Remove jumping hack, add typewriter. (74596)
Components
DataForm: Stop card and details validation from hijacking focus. (80685)
ToolsPanel: Migrate styles to an SCSS Module. (80445)
Client Side Media
Fix upload hang when converting long animated GIFs: Decode only the first frame for still outputs. (80260)
Media: Stop forcing crossorigin on IMG tags in media templates. (80532)
wp-build: Sync the page template preload field list with coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress.-data. (80648)
Collaboration
Notes: Detach core’s mention kses filterFilterFilters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. in the baseline strip test. (80656)
Media REST APIREST APIThe REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think “phone app” or “website”) can communicate with the data store (think “database” or “file system”)
https://developer.wordpress.org/rest-api/: BackportbackportA port is when code from one branch (or trunk) is merged into another branch or trunk. Some changes in WordPress point releases are the result of backporting code from trunk to the release branch. sideload from URLURLA specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org path upload size check. (80659)
Global Styles
Theme JSONJSONJSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML.: Level block-level preset class specificity with :Where(). (80657)
Data Layer
RTC: Preserve collaborators’ unsaved edits when another user saves. (79936)
AccessibilityAccessibilityAccessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility)
Block Library
Improve the various Alignment controls props handling. (63696)
Navigation: Fixes aria-expanded not updating on hover submenu inside overlay. (77563)
Performance
Block Editor
Rich text: Read the contentEditable attribute in ownsSelection to avoid forced layout. (80549)
Try to fix typing performance regressionregressionA software bug that breaks or degrades something that previously worked. Regressions are often treated as critical bugs or blockers. Recent regressions may be given higher priorities. A "3.6 regression" would be a bug in 3.6 that worked as intended in 3.5.. (80507)
Post Editor
Editor: Avoid unnecessary term re-fetches in FlatTermSelector. (80623)
Data Layer
Core Data: Move EntitiesSavedState component out of editor (rebase of #71948). (80485)
Docs: Clarify getBlock behavior with inner block controllers. (80773)
Docs: Expand the back-porting to WP Core guide. (80593)
Docs: Require view configuration filter callbacks to return the container. (80642)
Docs: Update iframeiframeiFrame is an acronym for an inline frame. An iFrame is used inside a webpage to load another HTML document and render it. This HTML document may also contain JavaScript and/or CSS which is loaded at the time when iframe tag is parsed by the user’s browser. guidance for Gutenberg 23.6. (80629)
Theme: Update Storybook adminadmin(and super admin) color scheme examples. (80569)
Update documentation for server-side view configuration filters. (80744)
Used link for URL in inline documentation. (80716)
Code Quality
ESLint: Add missing not-recommended components to denylist. (80754)
Fix: Update webpack-dev-server to ^5.2.1 to help with dep alerts. (80347)
GitHubGitHubGitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the ‘pull request’ where code changes done in branches by contributors can be reviewed and discussed before being merged by the repository owner. https://github.com/ workflows: Fix changelog checks for forked PRs. (80538)
Interactivity API: Refactor directives into self-registering modules. (79975)
RTC: Use array_any() for newer-compaction check in polling sync server. (80522)
RTC: Use str_contains() in WP_Sync_Config. (80476)
Storybook: Build the resolve specifier as a URL-style string. (80416)
Tools: Resolve dependencies independently of the node_modules layout. (80414)
Components
Autocomplete: Reference the suggestions list with aria-controls and aria-haspopup. (80403)
ExternalLink: Use shared focus ring mixin. (80573)
Make useSelectionProps hook layout agnostic. (80677)
Theme: Update colorjs.io dependency and drop bugbugA bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. workaround. (80272)
UI: Improve component code readability in Storybook by using arrays for children. (80352)
Rename unit testunit testCode written to test a small piece of code or functionality within a larger application. Everything from themes to WordPress core have a series of unit tests. Also see regression. files and drop .spec.js suffix. (80711)
Site Editor
Edit Site: Replace Theme usage in canvas loader with CSSCSSCascading Style Sheets.. (80688)
Collaboration
Move real-time collaboration code to lib/experimental/collaboration. (80469)
Tools
Docs: Update the release form screenshot for GitHub’s new Release label UI. (80567)
Release: Require a working GitHub CLICLICommand Line Interface. Terminal (Bash) in Mac, Command Prompt in Windows, or WP-CLI for WordPress. for cherry-picking. (80568)
Build Tooling
Build: Add independent reactReactReact is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces.
https://reactjs.org-18 vendor package. (80367)
Build: Handle project paths containing spaces in dev script. (80519)
Components: Skip polymorphism prop typings on intersection. (80364)
DependencyExtractionWebpackPlugin: Include extracted styles in the asset version hash. (80601)
React 19: Add end-to-end compat test for boolean inert attribute. (80397)
Resolve Prettier explicitly for isolated layout. (80529)
Storybook: Remove Emotion as JSX import source. (80647)
RTC: Fix deleted-user test on multisitemultisiteUsed to describe a WordPress installation with a network of multiple blogs, grouped by sites. This installation type has shared users tables, and creates separate database tables for each blog (wp_posts becomes wp_0_posts). See also network, blog, site. (80463)
Site Editor: Add end-to-end coverage for view configuration extensibility. (80577)
Various
Components
Base Styles: Remove accent color parameter from input-control. (80595)
“What’s new in GutenbergGutenbergThe Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc.
https://wordpress.org/gutenberg/…” posts (labeled with the #gutenberg-new tag) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, here’s an overview of different ways to keep up with Gutenberg and the Editor.
This release adds cropping controls to the Media editor, brings it to the Cover blockBlockBlock is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience., and extends responsive style states with aspect-ratio, flex-alignment, and text-shadow controls. Other changes include a minimum WordPress version bump to 6.9, Icon block transforms, and real-time collaboration improvements.
Two blocks that have lived behind the block experiments flag are now part of the default block library, and are available to everyone without enabling an experiment.
The Playlist block plays a list of audio tracks with track metadata, artwork, and the waveform and track length options. The tracklist itself is configurable: you can set the play order, and toggle the artwork, artist names, track numbers, and track length individually to suit the design of your page. For more details on where the block is headed, see the iteration issue for WordPress 7.1.
Notes continues to move toward a full commenting workflow, with two significant additions in this release.
Inline notes let you attach a note to a specific text selection rather than to a whole block. Select part of a paragraph, add a note, and the highlight stays anchored to that text as you keep editing around it. A single block can carry multiple inline notes, sorted by the order they appear in the block, and none of the highlighting shows up in the published post. (#78218)
@mention autocomplete makes it possible to direct a note at a specific person. Typing @ inside a note opens an inline, keyboard-navigable list of users; selecting one inserts a mention chip that links to the user’s author page and carries the mentioned user’s ID. (#79604)
A dynamic mode for the Gallery block
The Gallery block can now display media dynamically instead of only the images you pick by hand. The new Dynamic Gallery variation shows all media currently attached to the post, in both the editor and on the frontend.
Rather than being a separate block, it is a variation of the Gallery block, so you can move between the two without losing your settings: start a Dynamic Gallery from the block placeholder, and switch it to a regular gallery whenever you want to edit the list of images by hand. (#78796)
Icon collections and a custom icon registration APIAPIAn API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways.
Icons can now be registered by plugins and themes, and are organized into collections.
Alongside the default coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. icons, the API has been extended and utility functions added so that you can publish an icon set of your own as a collection. Icons are shared data for the whole site, available in both the editor and on the frontend. (#77260)
The icon picker has been updated to match. A new Collections tab lists collections in the sidebarSidebarA sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme. — like the Pattern Explorer — so you can browse and search within one set rather than scrolling a single combined list. The collection containing the currently selected icon is opened by default, and icons load asynchronously to keep the UIUIUser interface responsive when a large number of them are registered. (79681) (#78332)
Other Notable Highlights
Customizable viewport sizes. Tablet and mobile preview widths can now be set in theme.json, so device previews can match your theme’s actual breakpoints. (#79104)
The adminadmin(and super admin) bar is shown by default in both the Post Editor and the Site Editor. (#79197)
Apply Globally is now selective. When applying a block’s styles globally, you can choose which style properties to apply instead of applying all of them. (#79839)
New block support for the Custom HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. block.innerContent support for static inner blocks has been added and adopted by the HTML block. (#79115)
Background gradient support has been added to the Accordion, Post Content, Pullquote, Quote, and Verse blocks. (#79840, #79842, #79841, #79843, #79391)
The Post Editor is now always iframed, aligning its rendering with the Site Editor. (#74042)
Changelog
Features
Post Editor
Allow setting viewport tablet and mobile values in theme.jsonJSONJSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML.. (79104)
Experimental: Expand DataForm inspector to patterns. (79452)
Show the admin bar in the Post and Site Editor by default. (79197)
Block Editor
Share block-bindings context assembly between call sites. (79855)
Data Layer
Blocks: Add innerContent support for static inner blocks, adopt it in the HTML block. (79115)
Components
DataViews: Add a richtext control backed by a private RichTextControl shell in wordpress/components. (78471)
Block Library
Icons: Add PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher method(s) for rendering inline SVG icons from the registry. (78332)
Enhancements
CSSCSSCascading Style Sheets.: Follow-up fixes to split_selector_list(). (79723)
Document widgetWidgetA WordPress Widget is a small block that performs a specific function. You can add these widgets in sidebars also known as widget-ready areas on your web page. WordPress widgets were originally created to provide a simple and easy-to-use way of giving design and structure control of the WordPress theme to the user. relevance, help. (80007)
Expose widget categoryCategoryThe 'category' taxonomy lets you group posts / content together that share a common bond. Categories are pre-defined and broad ranging. through the build pipeline and REST APIREST APIThe REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think “phone app” or “website”) can communicate with the data store (think “database” or “file system”)
https://developer.wordpress.org/rest-api/. (79638)
Omnibar: Move the ‘site icon in admin bar’ feature from experiment to 7.1 compat. (79807)
Scripts: Make ‘test-e2e’ run Playwright and remove Puppeteer. (80058)
Site Editor v2 experiment: Hide admin bar in distraction-free mode. (79937)
Widget Dashboard: Reserve paint space for tile focus rings. (79990)
Widget Primitives: Add WidgetAttributeField for typed attribute schemas. (79544)
Widgets: Add a declarative help metadata field, surfaced as a headerHeaderThe header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes. infotip. (79830)
Widgets: Add attribute relevance and inline editing in the tile toolbar. (79735)
Widgets: Translate title, description, and keywords server-side. (79701)
Add ariaLabel supports for Tab List Block. (79948)
Add icon state classes to Accordion block. (74257)
Add layout and block spacing support to Latest Posts block. (77989)
Add option to exclude current post from query block. (64916)
Animated GIF to video conversion (via mediabunny). (78410)
Classic block: Remove migrationMigrationMoving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. notice and restore inserter availability. (79894)
Cover: Allow restricting video embed providers. (80092)
File Block: Deduplicate the file to audio/video/image transforms. (80158)
GIF to video conversion: Make it opt-in. Switching via block transforms. (80072)
Icons: FilterFilterFilters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. the icon library picker by collection. (79681)
UI: Update @base-ui/reactReactReact is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces.
https://reactjs.org to 1.6.0. (79408)
UnitControl: Hard deprecate 40px default size. (79721)
View config: Add better post type default form. (79625)
Visual revisionsRevisionsThe WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision.: Label autosaves in the revisions timeline. (79950)
Visual revisions: Make the autosave notice work with the visual revisions UI. (79947)
Notes: Remove “Add note” from the inline styles dropdown. (80531)
Device preview dropdown: Use active color for device icon when responsive styles are active. (80346)
Editor: Allow selecting which block styles to apply globally. (79839)
Notes: Add placeholders to the RichText fields. (80296)
Notes: Increase contrast between avatarAvatarAn avatar is an image or illustration that specifically refers to a character that represents an online user. It’s usually a square box that appears next to the user’s name. border colors. (80285)
Block Editor
Add contrast checking for viewport and pseudo states. (80223)
Block variations: Support innerContent for the Custom HTML block. (79659)
PluginPluginA plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party.
Experiments: Move screen under Settings, drop top-level Gutenberg menu and Demo page. (79456)
Release: Harden all npm package release paths. (79905)
Command Palette: Show the search icon on desktop as well. (79881)
Fix: DataForm inspector shows raw “auto-draft” status for new posts. (79914)
Media: Fix fatal error from narrowed create_item_from_url() visibility. (79972)
Site Editor: Update default theme color from fresh to modern. (79814)
design-system-mcp: Use fixed version for alpha MCP server. (80061)
lintstaged: Avoid appending filenames to the prelint:Js command. (79800)
Core Abilities: Restore the ready promise and lazy-load via dynamic import. (79155)
Block Library
Add translationtranslationThe process (or result) of changing text, words, and display formatting to support another language. Also see localization, internationalization. comment to waveform styles. (80112)
Block position: Allow options dropdown to flip. (79798)
Blocks: Rename _gutenberg_apply_content_filters() to _wp_apply_content_filters(). (80191)
Cover Block: Fix unsaveable state when clearing an embed video background. (80184)
Enable default gap processing on Gallery block. (79984)
File Block: Changed the context for fetching the media. (80085)
Fix – Accordion: Text in a closed accordion panel cannot be found via the browser search. (74744)
Fix and permit unitless zeros used in CSS calc functions. (79786)
GIF block variation: Remove icons from “Display as” toolbar buttons and only show when block can be inserted. (79985)
Icon block: When the default icon is unregistered, nothing is displayed. (80166)
Latest Posts: Parse blocks in full content display. (74866)
Make playlist pause button visually match play button. (80217)
Navigation Link/Submenu: Run post-status check also without Gutenberg plugin (draft/deleted links regressionregressionA software bug that breaks or degrades something that previously worked. Regressions are often treated as critical bugs or blockers. Recent regressions may be given higher priorities. A "3.6 regression" would be a bug in 3.6 that worked as intended in 3.5.). (79748)
Navigation Link: Fix “[object Object]” in link preview for untitled entities. (79616)
PHP-Only blocks: Forward current post ID to server render. (78909)
Playlist block: Avoid laggy layout shift when changing tracks. (79497)
Playlist: Fix flashing track state when adding new track. (80076)
Responsive editing: Apply crop dimensions to image block placeholder. (80162)
Select tab panel when caret moves into tab. (79558)
Tab List: Fix render inline formatting on frontend. (79554)
Tabs: Fix active tab switching from a stale inner-block selection. (79981)
Tabs: Fix dirty editor state on mount caused by tab-list sync. (79540)
Tabs: Fix rich text label comparison when syncing the list. (79582)
Tabs: Prevent tab list from moving focus during revision navigation. (79730)
Tabs: Remove redundant block selection from Add/Remove tab actions. (79571)
Fix crashes when manipulating locked blocks. (80509)
Playlist: Fix playback of tracks served without CORS headers. (80533)
Fix default aspect ratio for lazy loaded Featured imageFeatured imageA featured image is the main image used on your blog archive page and is pulled when the post or page is shared on social media. The image can be used to display in widget areas on your site or in a summary list of posts.. (80386)
Tabs: Fix stale overflow fade as content settles on load. (79856)
Theme: Fix token story swatch accessibilityAccessibilityAccessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility). (79960)
useMergeRefs: Apply ref changes after out-of-render attachment. (80133)
ContentEditableControl: Fix invalidinvalidA resolution on the bug tracker (and generally common in software development, sometimes also notabug) that indicates the ticket is not a bug, is a support request, or is generally invalid. label association with contenteditable div. (80441)
BackportbackportA port is when code from one branch (or trunk) is merged into another branch or trunk. Some changes in WordPress point releases are the result of backporting code from trunk to the release branch. ColorPicker cursor shaking fix to WordPress 7.1. (80435)
DataViews: Fix the list layout ignoring some settings when groupBy is set. (80255)
DataViews: Fix the unintended gap between list layout items when groupBy is set. (80254)
UI: Backport compat overlay fixes to WordPress 7.1. (80322)
fix: Set dataviews popover hover text color. (80105)
Block Editor
DimensionControl: Include styles in stylesheet. (79916)
Editor: Use the DS focus color for all sidebar elements. (80087)
Fix clipped/doubled focus outline on inserter block list items. (79845)
Fix unsetting values in viewport states for grid and constrained layouts. (79520)
HTML Block: Preserve innerContent when transforming to group, columns. (79887)
Move inspector controls styles slot back to previous position. (80111)
Render the selected static inner block synchronously. (79726)
Rich text: Cut through the record instead of execCommand. (80155)
Writing flow: Fix selection end mapping at block boundaries. (80126)
useTypingObserver: Capture the window reference for cleanup. (78772)
Global Styles: Resolve per-level heading element styles in block inspector controls. (80495)
Redirect editing events to extension handlers under editableRoot. (80287)
Writing flow: Fully select the items when a selection extends down into a nested item. (80492)
Post Editor
Editor: Render back button as proper , which cleans up custom CSS. (79862)
Editor: Render post preview action as a menu item. (80195)
Fix clipped focus ring on the document bar. (80084)
Image: Sideload external images on the server when uploading to the library. (79409)
Notes: Allow canceling the autocompleter popover with Escape without dismissing the note form. (80224)
Device type preview: Fix collapsing to content height. (80553)
Notes: Align floating threads with their inline marker. (79877)
Wrap notices in ThemeProvider with 0 corner radius. (80557)
Editor: Disable canvas resizing while zoomed out. (80391)
Fix upload snackbar stuck in uploading state on server-side uploads. (80345)
Notes: Finish WPDS treatment for mention chips. (80300)
Responsive styles: Open inspector sidebar when toggling. (80307)
Responsive styles: Use viewport dropdown to control states for in-editor global styles sidebar. (80339)
Fix upload snackbar double-counting a single HEIC upload in Safari. (80436)
Editor: Restore fixed device preview height for mobile and tablet. (80466)
Site Editor
Editor: Fix regression and restore the back button focus ring. (80029)
Editor: Render mobile back button as proper and remove custom CSS. (80032)
Editor: restore the behavior of only showing back button focus ring on :Focus-visible. (80114)
Style Book: Pass site editor settings to StyleBookPreview on the styles route. (80035)
Media
Experimental Media Modal: Ensure selection is properly cleared between open/close. (79731)
Media Modals: Invalidate attachment caches when closing the modal. (79844)
Media editor modal: Balance top padding for sidebar controls. (79660)
Client Side Media
Apply and correct EXIF orientation for client side sub-sizes. (79384)
Media: Backport client-side media improvements from WordPress core backports. (79603)
Vips: Preserve bit depth of high-bit-depth AVIF in sub-sizes. (79556)
Icons
Playlist icon: Fix bugbugA bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. with missing viewbox. (80180)
Store the sanitized SVG content when registering an icon. (80508)
Block API
Block Supports: Ensure that custom CSS is output after the block library styles. (80062)
Guidelines
Render block icons like the editor so every icon displays correctly. (79738)
Notes: Arm the mention kses allowance on REST note creation. (80221)
Style States
Style Engine: Preserve important gradient declarations. (79568)
Hide block style variations when state is enabled in global styles. (80341)
Data Layer
RTC: Fix undo / redo breakage when plug-in with metaboxMetaboxA post metabox is a draggable box shown on the post editing screen. Its purpose is to allow the user to select or enter information in addition to the main post content. This information should be related to the post in some way. is loaded. (79510)
Connectors screen
Prevent overscroll bounce for stage and inspector surfaces. (78587)
Global Styles
Block Supports: Handle nested array block gap values properly. (80464)
Style Book: Restore live global styles updates on the styles route. (80459)
Accessibility
Media
Media editor: Address accessibility review feedback. (79966)
Post Editor
Editor: Move focus to revisions slider when entering revisions mode. (79691)
Replaces the title attributes used by revision inline diff annotations with aria-describedby. (80440)
Revisions: Specify block level diff status via aria-label. (77779)
Components
A11yAccessibilityAccessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility): Replace local aria-live regions with speak(). (79600)
CI: Avoid full-history checkout for the root-dependencies check. (79489)
Block Library
Latest Posts: Fix slow category selection with large category lists. (80198)
Data Layer
RTC: Only apply CRDT updates synchronously when collaborating. (79991)
Block API
Block Supports: Prevent Additional CSS duplication inside Query LoopLoopThe Loop is PHP code used by WordPress to display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post. https://codex.wordpress.org/The_Loop. (78282)
Global Styles
prepend_to_selector: Optimized with str_replace(). (76556)
Backfill unreleased changelog entries for the widget packages. (79909)
Badge: Update storybook with “don’t use icons” example. (79585)
Components: Add missing descriptions for design system components. (79460)
Components: Document CSS module class composition. (79490)
Components: Link recommended UI component. (80127)
Design system MCP: Document Codex CLICLICommand Line Interface. Terminal (Bash) in Mac, Command Prompt in Windows, or WP-CLI for WordPress. prerequisite for MCP setup. (79917)
Docs: Add a widget anatomy doc and lighten the widget system doc. (79435)
Docs: Add image hosting guidance to the documentation contributors guide. (79574)
Docs: Add missing since, param, and return tags in REST API compat file. (80079)
Block Supports: Guard elements hover rendering against missing hover selector. (79511)
Plugin
Move icon tests out of phpunit/experimental. (79695)
Move real-time collaboration compat code to wordpress-7.1. (79863)
Icons: Fix collection unregister not removing icons after core added its own registry. (80292)
Guidelines
Guidelines end-to-end Tests: Wait for boot to load copy page. (79663)
Use str_starts_with() in is_block_meta_key(). (79491)
DataViews
Sync changes from core for view-config version handling. (80170)
Widgets Editor
Edit Widgets: Remove unused customizerCustomizerTool built into WordPress core that hooks into most modern themes. You can use it to preview and modify many of your site’s appearance settings.-edit-widgets-initializer style.scss. (79915)
Client Side Media
Vips: Add positional-crop test for high-bit-depth AVIF. (79880)
Vips/upload-media: Consolidate optional params into options objects. (80330)
CI: Enforce pruned ESLint suppressions during lint. (79708)
Docs: Generalize the npx guidance in AGENTS.md to cover wp-scripts. (79973)
GithubGitHubGitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the ‘pull request’ where code changes done in branches by contributors can be reviewed and discussed before being merged by the repository owner. https://github.com/ workflows: Extend package changelog nudge to bundled packages. (78934)
React 19 patchpatchA special text file that describes changes to code, by identifying the files and lines which are added, removed, and altered. It may also be referred to as a diff. A patch can be applied to a codebase for testing.: Log warnings when polyfills are hit. (79624)
React 19: Patch to support legacy inert attribute values. (79475)
Backport changelog and package version updates from NPM. (79816)
Components
Add an editableRoot block support for native cross-block selection. (79105)
Post Editor
Always iframeiframeiFrame is an acronym for an inline frame. An iFrame is used inside a webpage to load another HTML document and render it. This HTML document may also contain JavaScript and/or CSS which is loaded at the time when iframe tag is parsed by the user’s browser.. (74042)
Security
Opt in to npm v11 supply-chain security features. (79614)
“What’s new in GutenbergGutenbergThe Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc.
https://wordpress.org/gutenberg/…” posts (labeled with the #gutenberg-new tag) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, here’s an overview of different ways to keep up with Gutenberg and the Editor.
This release adds cropping controls to the Media editor, brings it to the Cover blockBlockBlock is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience., and extends responsive style states with aspect-ratio, flex-alignment, and text-shadow controls. Other changes include a minimum WordPress version bump to 6.9, Icon block transforms, and real-time collaboration improvements.
The experimental Media editor gains several cropping improvements: a magnified crop canvas for fine adjustments (79044), crop handles that snap to source pixels (79139), and fixed keyboard resizing for locked aspect-ratio crops (79207). The Cover block now supports the Media editor modal, bringing inline cropping to cover images. (79258)
Unified Device Preview and Resizable Editor
You can now drag the editor canvas to any width, instead of being limited to the Desktop, Tablet, and Mobile presets. The device preview dropdown and the resize handles work together, so you can jump to a preset viewport or fine-tune to an exact width in between. Blocks set to show only on specific viewports respond as you resize, appearing and disappearing at their breakpoints. The preview dropdown also now holds a toggle for responsive editing, making it the central place to both preview your content across screen sizes and make viewport-specific adjustments. (75121)
Other Notable Highlights
Minimum WordPress version. The Gutenberg pluginPluginA plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. now requires WordPress 6.9 or later (79196).
Global Styles adds text shadows. A new textShadow style adds support for configuring text shadows in Global Styles. (73320)
Icon block. Adds flip and rotate controls (77017) and inserts a default icon instead of an empty placeholder (79111).
Real-time Collaboration. Can now be disabled per post type (78984), and the code-editor cursor no longer jumps to the end on remote sync (79005).
ThemeProvider available as a public export. ThemeProvider is now exported directly from @wordpress/theme. (78664)
Changelog
Enhancements
Style Engine: Export public TypeScript types. (79079)
WidgetWidgetA WordPress Widget is a small block that performs a specific function. You can add these widgets in sidebars also known as widget-ready areas on your web page. WordPress widgets were originally created to provide a simple and easy-to-use way of giving design and structure control of the WordPress theme to the user. Primitives: Decouple discovery from a hardcoded endpoint. (79322)
Widget Primitives: Make @types/react an optional peer dependency. (79272)
Components
Add corner radius presets to ThemeProvider. (78816)
Autocomplete: Add Group and GroupLabel primitives. (78901)
Base Styles: Add wpds-var Sass helper for design token fallbacks. (78698)
UI: Use isomorphic layout effects for SSR. (79458)
Update @ariakit/reactReactReact is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces.
https://reactjs.org to 0.4.29. (79055)
[DataViewsPicker]: DataViewsPicker.BulkActionToolbar now renders only the bulk-selection info and action buttons. (79180)
theme: Rename bg/fg design token groups to background/foreground. (79098)
Block Library
Add support for aspect ratio and related controls in viewport states. (78795)
Audio: Apply inert directly instead of wrapping in Disabled. (79423)
Classic Block: Port PHPUnit coverage for hiding it from the inserter. (79434)
File Block: Combine audio/video/image to file transforms. (79242)
File Block: Replace on-mount downloadButtonText effect with a default variation. (79236)
Icon Block: Add flip and rotate transformation controls. (77017)
Icon block: Default to coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress./info via block.jsonJSONJSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML. instead of an insert-time effect. (79212)
Icon block: Move flip controls to toolbar group. (79192)
Rename Toolbar in editor experiment to match iteration issue. (79074)
RevisionsRevisionsThe WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision. screen with picker-activity layout. (77333)
Style states: Use symbols for property keys to avoid clashes. (79210)
Integrate Resizable Editor with Device Preview and add Responsive editing. (75121)
Site Editor
Add xl border radius token for page shell surfaces. (78913)
Correct behaviour of flex child fixed width and introduce max width option. (79073)
Global Styles: Add textShadow style support. (73320)
List View block support: Hide list tab when allowedBlocks is empty, with no children. (78932)
Pattern editing: Show root block identity when editing pattern sections. (79417)
Media
Media Editor Modal: Add a loading and simple error state. (79101)
Media Editor: Magnify the crop to fill the canvas. (79044)
Media Fields: Ensure the current post is always included in the initial options. (79467)
Media editor: Snap crop handles to source pixels. (79139)
Data Layer
RTC: Allow disabling collaboration by post type. (78984)
TextControl: Hard deprecate 40px default size. (79386)
View Config: Request a subset of properties with the _fields parameter. (79355)
Client Side Media
Media: Rename HEIC companion metadata key to source_image. (79307)
Upload Media: Add error taxonomyTaxonomyA taxonomy is a way to group things together. In WordPress, some common taxonomies are category, link, tag, or post format. https://codex.wordpress.org/Taxonomies#Default_Taxonomies., localized messages, and dev diagnostics. (74917)
Vips: Inline WASM with compact UTF-8 binary encoding instead of base64. (79188)
Dashboard
Boot: Run page init modules in initSinglePage. (79394)
Widget Dashboard: Extract into wordpress/widget-dashboard. (79268)
npm Packages
Grid: Prepare wordpress/grid for npm publishing as experimental 0.1.0. (79071)
Widget Primitives: Extract into wordpress/widget-primitives. (79134)
DataViews
View configuration APIAPIAn API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. and REST Endpoint: Make them core ready. (79347)
Plugin
Bump minimum required WordPress version to 6.9. (79196)
Global Styles
Global styles revisions: Replace active text with badge. (79137)
DataFormPostSummary: Fix different useSelect returned values. (79478)
Editor: Disable saving while a non-post entity is being saved. (79069)
Editor: Guard PostViewLink against post types without a labels object. (79160)
Mark all controlled/mode block changes non-persistent. (79350)
Paste: move spaces out of inline formatting elements. (79637)
RTC: Fix code editor cursor jumping to the end on remote sync. (79005)
Revisions: Ignore empty []/{} metaMetaMeta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. values in the Meta diff panel. (79185)
Style Book: Fix crash when previewing variations for blocks without examples. (79131)
Block Library
Avoid dirtying related navigation entities during passive render. (79000)
Custom HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers.: Fix scrollbar becoming non-functional after switching tabs. (78571)
Gallery: Hide Navigation button type when lightbox editing is disabled. (79147)
Image block: Remove duplicate data-wp-bind–srcset in the lightbox overlay. (79202)
Image: Fix pasted images stretching when dimensions are preserved. (79067)
Navigation block: Fix responsive style states for typography settings. (79072)
Components
BoxControl: Respect a supplied placeholder via inputProps. (79466)
DataForm panel layout: Fix double-clicking a field row leaving the flyout stuck open. (79348)
DataForm: Fix panel field control overflow clipping and remove button overrides. (79275)
Fix: Custom HTML block preview keeps expanding when iframeiframeiFrame is an acronym for an inline frame. An iFrame is used inside a webpage to load another HTML document and render it. This HTML document may also contain JavaScript and/or CSS which is loaded at the time when iframe tag is parsed by the user’s browser. uses height:100vh. (78677)
Block Editor
Fix potential crash from ‘useBlockToolbarPopoverProps’. (79178)
Fix: State styles – clear background-image when hover sets a solid background-color. (78992)
Grid overlays: Use canvas iframe window for viewport visibility detection. (79255)
RichText: Fix duplicated format wrappers when typing inside an applied format. (79091)
Template Part: Remove restriction on tabs / inspector fills. (79181)
Fix duplicate enqueue breaking the palette in the Site Editor. (79396)
Client Side Media
Vips: Bump wasm-vips to 0.0.18 for high-bit-depth AVIF decoding. (79179)
Icons
KSES: Allow SVG-specific presentation attributes in safe_style_css. (79172)
Style States
Fix responsive element styles front end output. (79135)
Data Layer
Core Data: Cleanup edits matching persisted record on undo/redo. (77100)
AccessibilityAccessibilityAccessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility)
Media
Media Fields: Avoid focus loss when detaching the current parent. (79468)
Dashboard
Revert H1 to “Dashboard” and fix heading hierarchy. (79251)
Components
UI Button: Fix loading state in forced colors. (78820)
Performance
Blocks: Migrate Markdown converter from showdown to marked. (77953)
Post Editor
Use the correct directory for recent preload improvements. (79359)
Experiments
Post Editor
Editor Inspector with DataForm – remove revision panel and add link. (79195)
al: Expand Editor Inspector: Use DataForm experiment to template parts. (79399)
Experimental: Expand Editor Inspector: Use DataForm experiment to templates. (76934)
Experimental: Preserve editor panel visibility in the DataForm post summary. (79441)
Site Editor
Omnipresent Toolbar: Increase top padding in sidebarSidebarA sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme. nav title. (79083)
Block Library
Unwrap Classic block migrationMigrationMoving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. notice experiment. (78165)
Documentation
Clarify Core-specific steps when bumping support. (79416)
ConfirmDialog: Document AlertDialog as successor in Storybook. (79293)
Fix Small Typo in block-filterFilterFilters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. file. (79367)
Panel: Recommend CollapsibleCard for use outside the block inspector. (78863)
Storybook: Reorganize design system introduction for first touch-point usefulness. (79360)
Theme: Add tests for ThemeProvider and useThemeProviderStyles. (79126)
Theme: Drop –wpds-dimension-base from the public token surface. (79254)
Theme: Rename –wpds-color-stroke-focus-brand token to –wpds-color-stroke-focus. (79125)
Theme: Run stylelint plugin tests via the Node API. (79199)
Post Editor
Edit Post: Refactor MetaBoxesSection to use data hooksHooksIn WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same.. (79433)
Edit Post: Refactor and cleanup InitPatternModal component. (79190)
Editor: Migrate FlatTermSelector to UI Stack component. (78659)
Editor: Refactor AutosaveMonitor to a function component. (79043)
Fields: Move author fields for templates and template parts. (79395)
Validation: Add a published-dependency audit script. (79094)
Block Library
Blocks: Use positional sprintf placeholders in avatarAvatarAn avatar is an image or illustration that specifically refers to a character that represents an online user. It’s usually a square box that appears next to the user’s name., comment, and search renderers. (79290)
Image block: Simplify metadata syncing logic by removing chained get entity calls. (79469)
Math format: Simplify the onClick handler and use canonical selected-text capture. (79081)
Navigation: Use block context to determine whether Page List is nested in Submenu. (79048)
Automated Testing: Use static value for IS_GUTENBERG_PLUGIN env setup. (79201)
CI: Run PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher unit tests on PHP 8.4 and 8.5. (79260)
Components: Improve Menu unit tests performance by removing sleeps. (79295)
E2E: Support WordPress installs served from a subdirectory. (79166)
Ignore markdown linting for backportbackportA port is when code from one branch (or trunk) is merged into another branch or trunk. Some changes in WordPress point releases are the result of backporting code from trunk to the release branch.-changelog MD files. (79392)
devops: Dedicated histories for different node.js versions. (79473)
devops: Separate environments for jest date tests. (79453)
wp-build: Resolve wordpress/build from __dirname in resolve-miss test. (79208)
Build Tooling
Build: Add GUTENBERG_CHECK_INSTALLED_DEPS env var to opt out of installed-deps check. (79068)
Build: Use GUTENBERG_TOKEN when creating the release draft. (79747)
Configure Flakiness.io reporting for end-to-end tests. (79173)
Handle WP.org SVNSVNSubversion, the popular version control system (VCS) by the Apache project, used by WordPress to manage changes to its codebase. missing tagtagA directory in Subversion. WordPress uses tags to store a single snapshot of a version (3.6, 3.6.1, etc.), the common convention of tags in version control systems. (Not to be confused with post tags.) warnings. (79257)
Remove Lighthouse patchpatchA special text file that describes changes to code, by identifying the files and lines which are added, removed, and altered. It may also be referred to as a diff. A patch can be applied to a codebase for testing.. (79319)
Remove unused build:Profile-types and component-usage-stats scripts. (79113)
Storybook: Include playground stories and MDX in CI smoke tests. (79454)
design-system-mcp: Remove Storybook dependency in TypeScript types. (79132)
devops: Configure end-to-end report auto-upload for flakiness.io dashboard. (79411)
devops: Upload unit testunit testCode written to test a small piece of code or functionality within a larger application. Everything from themes to WordPress core have a series of unit tests. Also see regression. results to flakiness dashboard. (79414)
Data Layer
Backport changelog and package version updates from wp/latest. (79234)
Block Editor
Block Supports: Relocate text and bg color controls to Typography and Background panels. (77279)
Security
Dependabot: Add npm entry so security update PRs can be rebased. (79076)
Various
View configuration endpoint: Bring back changes from core. (79438)
“What’s new in GutenbergGutenbergThe Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc.
https://wordpress.org/gutenberg/…” posts (labeled with the #gutenberg-new tag) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, here’s an overview of different ways to keep up with Gutenberg and the Editor.
Gutenberg 23.4 brings resilient media uploads, continued media editor refinements, visual updates for the Site Editor and experimental dashboard, new Grid transforms, and developer-facing improvements for DataViews and design-system foundations and a whole lot more. Thanks to everyone who contributed to the release.
Preparing WordPress for ReactReactReact is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces.
https://reactjs.org 19
23.4 introduces a new experimental flag that can register version 19 of React runtime scripts: react, react-dom, and react-jsx-runtime. This gives developers a way to test plugins, themes, blocks, and editor integrations against the React 19 runtime before it becomes the default (#79077, #78685, #79142). To test, head to the experiments page /wp-admin/admin.php?page=experiments-wp-admin and activate the “React 19” experiment.
Tips for testing: Although React 18 and 19 APIs are practically identical, there are some runtime incompatibilities that had to be resolved with an additional compatibility layer. When testing a pluginPluginA plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. or theme with the React 19 experiment, developers should pay close attention to any warnings and console errors. Test all custom adminadmin(and super admin) pages that your plugin registers and that use React. Test everything in the editor UIUIUser interface that uses refs, ref callbacks, portals, or third-party component libraries. Review your build pipeline to check that usages of react/jsx-runtime link to the externalized WordPress script instead of bundling it.
The Site Editor follows your admin color scheme
The Site Editor sidebarSidebarA sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme. and page shell now follow the user’s WordPress admin color scheme instead of always using a fixed dark background. This brings the Site Editor chrome closer to the rest of the admin experience across color schemes (#78397).
Media
The media editor modal received a round of usability and design improvements. Editable attachment fields appear at the top of the details panel (#78896, #78792). The mobile toolbar has been updated to include aspect ratio control, zoom uses plus and minus buttons (#78935, #78928, #79011, #79024).
Client-side media processing introduced an upload progress snackbar to the BlockBlockBlock is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. Editor, including batch upload counts (#77249). The upload queue will pause while offline, resuming automatically when the connection returns (#76765).
Columns and Gallery blocks can transform into grid layouts
Block transforms can now target a specific variation of another block. In practice, this enables new transforms from Columns and Gallery blocks into a Grid variation, preserving content while changing the layout type (#78713).
Other notable highlights
UltraHDR image support — UltraHDR JPEGs are detected during upload, originals are kept unmodified, and resized sub-sizes preserve the ISO 21496-1 gain map (#74873).
New Dashboard experience experiment — A new Events widgetWidgetA WordPress Widget is a small block that performs a specific function. You can add these widgets in sidebars also known as widget-ready areas on your web page. WordPress widgets were originally created to provide a simple and easy-to-use way of giving design and structure control of the WordPress theme to the user. for upcoming WordPress community events was added (#78553), as well as a responsive grid columns with container breakpoints (#78732).
DataViews configuration becomes filterable —A new filterable APIAPIAn API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. extracts entity view configuration out of the REST controller and into a reusable function (#78977).
Playlist block — Adds a visualization style selector for waveform styles, plus a track length setting (#76147, #78954).
Login/out block — This block can now be inserted inside the Navigation Submenu block (#75497).
Block transforms — For transforms, you can target a variation of another block (#78713).
Real time collaboration (RTC) reliability work — RTC shipped improvements including a separate document persistence endpoint, collaborator overlay rerenders, polling improvements, forbidden room handling, CRDT typing fixes, and undo manager fixes (#78891, #78636, #78811, #78748, #78756, #78864).
Revert client-side media processing plugin-only gate. (76751)
Enhancements
Tooltip migrationMigrationMoving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies.: Boot consumers + shell-level Tooltip.Provider (5/5). (78692)
UI: Tooltip.Provider — forward upstream closeDelay and timeout props. (78642)
Upload Media: Add retry with exponential backoff and networknetwork(versus site, blog) resilience. (76765)
Use search_columns=post_title for parent page selector REST APIREST APIThe REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think “phone app” or “website”) can communicate with the data store (think “database” or “file system”)
https://developer.wordpress.org/rest-api/ searches. (78683)
Data Layer
RTC: Add separate doc persistence endpoint. (78891)
RTC: Re-render collaborators overlay when the block tree changes. (78636)
Maintain absolute stroke-width regardless of icon-size. (78774)
Font Library
Fix Update button staying active when changes are reverted. (78567)
Client Side Media
Extract entity view configuration into a filterable API. (78977)
New APIs
Extensibility
Extract entity view configuration into a filterable API. (78977)
Bug Fixes
Build: Document the hooksHooksIn WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same. generated by the wp-build page templates. (78826)
Scripts: Use require.resolve for SVG webpack loaders to fix pnpm compatibility. (78777)
[Content Types]: Fix extra Page padding causing vertical scrollbar. (78661)
env: Replace extract-zip with adm-zip to fix hang on Node 24.16. (78828)
wp-build: Fix black flash on wp-admin pages before hydration. (78493)
Block Library
Common CSS: Avoid false-positive border-style on custom properties. (77476)
Fix playlist metadata edits recreating player. (78876)
Fix type of $block_instance parameter in block_core_image_render_lightbox(). (78790)
Paragraph: Strip stale block-support classes from className during align attribute migration. (78731)
Prevent font-size propagation in Navigation items causing em compounding. (77419)
ShortcodeShortcodeA shortcode is a placeholder used within a WordPress post, page, or widget to insert a form or function generated by a plugin in a specific location on your site. block: Fix editor crash when selecting transform menu. (78770)
Writing flow: Delete at end of nested list item should merge into next block. (78742)
Image block: Don’t show crop icon while image is uploading. (79103)
Media
Media Editor: Fix media editor sidebar close button label. (78895)
Media Editor: Fix sidebar overflowing the modal between the small and medium breakpoints. (78931)
Media Editor: Keep crop handles operable on large images. (79011)
Media Editor: Remove lag when toggling the sidebar. (79024)
Elements: Align class name parsing with custom CSS implementation. (79023)
Elements: Guard against non-string className in render filterFilterFilters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output.. (78841)
Preserve nested list when deleting a selection across sibling list items. (78776)
Client Side Media
Media: Skip cross-origin isolation on the classic-theme site editor home route. (78404)
Upload Media: Gate very large images out of client-side processing. (78949)
Plugin
Fix Gutenberg plugin assuming its directory is named “gutenberg”. (78705)
Fix experiments page form layout with box-sizing and width. (78910)
Data Layer
RTC: Fix CRDT deferred updates resulting in jumbled typing. (78756)
RTC: Fix Yjs undo manager to update UI state when undo stack changes. (78864)
Post Editor
Editor: Fix keyboard activation of the template actions preview. (78641)
Notes: Show default avatarAvatarAn avatar is an image or illustration that specifically refers to a character that represents an online user. It’s usually a square box that appears next to the user’s name. in the indicator when user avatars are disabled. (78849)
Connectors screen
Fix: Block auto-complete for AI API Keys in Connectors. (78946)
Icons
Revert “Icons: Maintain absolute stroke-width regardless of icon-size (#78774)”. (78854)
Dashboard
Fix Add widget error on non-secure HTTPHTTPHTTP is an acronym for Hyper Text Transfer Protocol. HTTP is the underlying protocol used by the World Wide Web and this protocol defines how messages are formatted and transmitted, and what actions Web servers and browsers should take in response to various commands. origins. (78850)
Block API
Block Visibility: Keep hide-everywhere working after a block opts out of visibility support. (78780)
AccessibilityAccessibilityAccessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility)
Boot navigation: Wrap items in a list role for valid listitem semantics. (78829)
Block Editor
Inserter: Fix error being thrown for spoken message when inserting default/direct block. (79004)
Block Library
Navigation Link: Fix duplicate block htmlHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. attributes in editor. (78973)
Patterns
Fix focus loss when closing the Create pattern dialog from the block toolbar. (78957)
DataViews: Add DataViews components to components manifest. (78960)
Docs: Auto-generate per-block API reference pages from block.jsonJSONJSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML.. (77612)
Docs: Fix stale, incorrect, or missing documentation. (78686)
Docs: Remove stale mobile references from tooling and primitives documentation. (79041)
Format Library: Migrate to recommended @wordpress/ui components. (79059)
Framework: Remove invalidinvalidA resolution on the bug tracker (and generally common in software development, sometimes also notabug) that indicates the ticket is not a bug, is a support request, or is generally invalid. stale nested npm package references. (79014)
Make @wordpress/nux a no-op compatibility package. (77773)
Remove migrated dependencies from root package.json. (78813)
Tools: Migrate docs/tool into tools/docs workspace. (78870)
Block Library
Fix sprintf format specifiers in post-date and read-more blocks. (78933)
Fix: Escape URLs in block render functions using esc_url(). (78912)
Refactor workspace configuration for Babel dependencies. (78974)
Revert navigation morph & playlist commits pushed directly to trunktrunkA directory in Subversion containing the latest development code in preparation for the next major release cycle. If you are running "trunk", then you are on the latest revision.. (78857)
RichText: Remove dead native-only prop filtering. (79037)
Refactor: Remove jest/test deps from root package.json. (78801)
Remove React Native implementation, framework, and dependencies. (78747)
Post Editor
Editor: Refactor ‘PostPublishButton’ into function component. (78737)
Editor: Remove dead native guard in block removal warnings. (79039)
Post RevisionsRevisionsThe WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision.: Upgrade diff from v4 to v8. (77992)
TypeScript: Migrate server-side-render package to TS. (71383)
Remove orphaned mobile bugbugA bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. report issue template. (79038)
Update AGENTS.md to mention additional pitfalls. (78718)
Update CODEOWNERS for tooling directories. (78874)
Build Tooling
Build Scripts: Fix Windows path handling in dev script. (78939)
CI: Skip plugin repo release when SVNSVNSubversion, the popular version control system (VCS) by the Apache project, used by WordPress to manage changes to its codebase.tagtagA directory in Subversion. WordPress uses tags to store a single snapshot of a version (3.6, 3.6.1, etc.), the common convention of tags in version control systems. (Not to be confused with post tags.) already exists. (78476)
Lint dependency version consistency with Syncpack. (77950)
Release: Drop mobile-specific changelog omit rules. (79042)
Skip including inactive or experimental routes when building for WordPress CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress.. (76715)
feat: Migrate performance results to tools release. (78761)
“What’s new in GutenbergGutenbergThe Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc.
https://wordpress.org/gutenberg/…” posts (labeled with the #gutenberg-new tag) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, here’s an overview of different ways to keep up with Gutenberg and the Editor.
This release ships the new modal-based media editor as the default cropping experience, advances the experimental customizable WordPress dashboard with five new widgets and significant layout polish, and upgrades the editor to ReactReactReact is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces.
https://reactjs.org 19. Responsive styles now extend to individual blockBlockBlock is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. instances, and Notes blocks gain support for multiple discussion threads. Other changes include DataViews adopting @wordpress/theme design tokens, accessibilityAccessibilityAccessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility) refinements across the RevisionsRevisionsThe WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision. interface, continued Real-time Collaboration reliability fixes, and broader preload coverage for faster post editor loads.
Table of contents
Media editor modal becomes the default crop experience
The Media editor modal replaces the existing inline cropping tool in the Block Editor. The modal pattern keeps the familiar Crop button entry point, and brings freeform and aspect-ratio cropping, flip, fine-grained and snap rotation, and metadata editing into one dedicated workflow. (78653)
Experimental customizable WordPress dashboard
The experimental customizable WordPress dashboard — a widgetWidgetA WordPress Widget is a small block that performs a specific function. You can add these widgets in sidebars also known as widget-ready areas on your web page. WordPress widgets were originally created to provide a simple and easy-to-use way of giving design and structure control of the WordPress theme to the user.-based surface available for testing behind an experimental flag in the Gutenberg pluginPluginA plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party., allowing users to add, move, resize, and rearrange widgets. It introduces a complete set of widgets — Welcome, Quick Draft, Activity, Site Health, Site Preview, and more — that automatically adapt to different tile sizes. You can fully customize your dashboard by choosing which widgets to display, arranging the layout, adjusting the number of columns, and resizing each widget’s width and height. (77616)
This change is experimental; to give it a try, first go to WP-Adminadmin(and super admin) > Gutenberg > Experiments and enable “New Dashboard experience”.
Responsive styles for block instance
Responsive styles for block instances (78384) building on 23.2’s responsive Global Styles, the Block Style States APIAPIAn API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. extends to the per-instance level (76491). Block instance responsive styles include layout styles (78543) and an Inspector that shows only the relevant settings when a style state is selected. (78280) (78658, 78763, 78670, 78709)
Other Notable Highlights
Real-time Collaboration improvements — Notes blocks support multiple threads (75147), better handling of oversized payloads (>16 MiB) and connection-loss states (77724), protocol-mismatch error handling (76991), fewer refresh storms when peers edit (78483), and a mobile fix for Edit/Join row actions in the post list (78597).
DataViews adopts @wordpress/theme design tokens (75204) — the first significant in-codebase adoption of the design tokens package. A new “Introduction” Storybook page has been added for the tokens themselves (78449).
Accessibility wins — Image block gains a “Mark as decorative” toggle (78064); Revisions diff markers get higher-contrast stripes and scale with user text-size preferences (78473, 78273, 78393); Breadcrumbs block hides separators from screen readers (78524).
Performance — Optimized block-supports CSSCSSCascading Style Sheets. class rendering (78217), lazy-fetched user pattern categories (78568), shared window listeners across block instances (78310), shared MediaQueryList listener in useMediaQuery (78297), and broader preload coverage on edit-post load (78508, 78565).
Components migrations — Continued migrationMigrationMoving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. of __experimentalText, __experimentalHStack, and __experimentalVStack to their stable @wordpress/ui counterparts (78155); Tooltip migration progressed across block-editor, editor, and DataViews consumers (78411, 78466, 78470).
React 19 upgrade (61521) — Gutenberg is now built against React 19. Most code keeps working unchanged; plugin authors using removed legacy patterns (string refs, ReactDOM.render fallbacks, defaultProps on function components) should review React’s upgrade notes.
Changelog
Features
Post Editor
Notes: Support multiple note threads per block. (75147)
UI Card: Full bleed as headerHeaderThe header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes. hero image and content cover. (77856)
Visually align Notice from @wordpress/components with Notice from @wordpress/ui. (78231)
Collab SidebarSidebarA sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme.: Swap near-identical pink for red in avatarAvatarAn avatar is an image or illustration that specifically refers to a character that represents an online user. It’s usually a square box that appears next to the user’s name. palette. (78299)
Media Editor: Make the modal the default crop experience. (78653)
RTC: Provide PROTOCOL_MISMATCH error handling. (76991)
useDialog: Handle Escape via React onKeyDown so cascade works through portals. (78433)
Block Library
Block/Tabs: Fix editor dirty state on reload by removing unnecessary mount-time attribute init. (78339)
Breadcrumbs block: Hide separator from screen readers. (78524)
Fix ‘InvalidinvalidA resolution on the bug tracker (and generally common in software development, sometimes also notabug) that indicates the ticket is not a bug, is a support request, or is generally invalid. Date’ when clicking on Now in DateTimePicker on Date Block. (78284)
Fix Tabs block losing added tabs when the editor is reopened. (78250)
Fix: Discard unsaved HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. block changes on cancel. (78580)
Image: Preserve width/height when converting Classic blocks to blocks. (78610)
Navigation Link: Preserve custom labels during link updates. (77186)
Navigation: Restore block_core_navigation_submenu_render_submenu_icon() as deprecated shim. (78484)
Prevent images from appearing squished when only one dimension is set. (70575)
Post Editor
Editor: Disable Visual Revisions when classic metaMetaMeta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. boxes are present. (78249)
Editor: Fix Visual Revisions meta keys overlap. (78156)
Editor: Use _n() for revisions count aria-label. (78382)
Fix: Register user-defined taxonomies after user-defined post types. (78497)
Fix: Show collaborators when the top toolbar is active. (78049)
Global styles revisions: Ensure stylebook shows revision previews. (78490)
Script Loader: Defer single-page admin init until DOMContentLoaded (TracTracAn open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress.#65103). (78136)
Upload Media: Render srcset on the front end for client-side-media uploads. (78359)
Block Editor
Block Inspector: Hide Styles tab in preview mode. (78230)
Block Toolbar: Prevent position shifts when using mover control. (77798)
Fix inconsistencies in feature selector processing part 2: Pseudo block instances. (78326)
Fix: Properly merge schema during mergeSchemas part in getBlockContentSchemaFromTransforms. (70615)
List View: Place caret at end of block when selecting. (76797)
Unset grid span defaults with viewport states enabled. (78709)
Data Layer
CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. Data: Avoid duplicate ID-less entity permission requests. (78262)
Fix: Disable collab sync when incompatible meta boxes are present. (78145)
RTC: Fix cursor awareness / presence bugbugA bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority. in nested rich text elements. (77673)
RTC: Fix block refresh on every update when a peer edits within the code editor. (78483)
RTC: Sync the content even if it’s a function. (76796)
Real-time Collaboration: Use minimal save payload in persistCRDTDoc. (77050)
Media
Media Editor Modal: Only show the crop active state when using keyboard. (78266)
Media Editor: Anchor cursorless zoom (slider/keyboard) at crop center. (78385)
Media Editor: Enforce a minimum crop size in the image editor. (78268)
Media Editor: Scope keyboard shortcuts to the modal. (78322)
Media Fields: Fix filename truncation with Tooltip. (78453)
Collaboration
RTC: Fix Edit/Join row action invisible on mobile in post list. (78597)
RTC: Fix connection lost error modal when /wp-json/wp-sync/v1/updates exceeds 16 MiB limit. (77724)
Global Styles
Fix block preview for responsive style states. (78538)
Fix inconsistencies in feature selector processing part 1: Global styles. (78276)
Client Side Media
Upload Media: Stop propagating -scaled to sub-size filenames. (78038)
VIPS: Remove dead batchResizeImage and vipsBatchResizeImage exports. (77975)
Paste
Keep <img> inside <a> when pasting plain-text HTML. (78015)
Image Editor: Focus return after closing image crop modal. (78711)
Revisions: Increase diff marker stripe contrast to 75% primary color proportion. (78473)
Revisions: Scale diff markers width with user text-size preference. (78273)
Revisions: Use CSS outline as secondary non-color indicator for diff blocks. (78393)
Block Library
Image block: Add “Mark as decorative” toggle for accessibility. (78064)
Image: Fix missing aria-label on lightbox trigger button for single images. (78426)
Performance
Block supports: Optimize custom CSS class rendering and parsing. (78217)
Fix performance tests when running against old reference commit. (78288)
Post Editor
Edit Post: Hoist setupEditor to run before root.render. (78581)
Edit Post: Consume preload cache before React mount. (78508)
Editor / Block Editor: Lazy-fetch user pattern categories. (78568)
Post Taxonomies: Drop redundant per_page: -1 from taxonomyTaxonomyA taxonomy is a way to group things together. In WordPress, some common taxonomies are category, link, tag, or post format. https://codex.wordpress.org/Taxonomies#Default_Taxonomies. queries. (78569)
Docs: Update iframeiframeiFrame is an acronym for an inline frame. An iFrame is used inside a webpage to load another HTML document and render it. This HTML document may also contain JavaScript and/or CSS which is loaded at the time when iframe tag is parsed by the user’s browser. editor migration guide for WordPress 7.0/7.1. (78401)
Editor: Inline text editor toolbar z-index. (78309)
REST: Guard setAccessible() behind PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher < 8.1 in block-editor settings controller. (78478)
Use WCIcon alias for component Icon imports. (78366)
Use WCTooltip alias for component Tooltip imports. (78396)
Block Editor
Fix additional issues with block registration types. (78416)
Migrate __experimentalText, __experimentalHStack, and __experimentalVStack to Text and Stack. (78155)
Refactor: useMemo on elements and useCallback is back on resetAllFilter. (78329)
Simplify component ESLint rules and extend to routes/widgets. (78519)
Update the BlockAttribute typedef to allow for multi-type attributes. (78517)
Guidelines
Add data-slug attribute to settings list items. (78676)
Fix flaky tests (publish-panel.spec.js focus assertion before panel close completed). (77893)
Guard PHP unit testunit testCode written to test a small piece of code or functionality within a larger application. Everything from themes to WordPress core have a series of unit tests. Also see regression. to avoid failures on old WP versions. (78547)
Perf tests: Capture loading durations before stopTracing(). (78294)
Perf tests: Disable Playwright tracing to remove snapshot overhead. (78295)
Perf tests: Save Chromium traces as CI artifacts. (77974)
Performance tests: Fix template click, delete pages at startup. (78193)
Post Editor perf test: Remove unwanted actions from timed area. (78323)
Preload: BackportbackportA port is when code from one branch (or trunk) is merged into another branch or trunk. Some changes in WordPress point releases are the result of backporting code from trunk to the release branch. user global styles entry for classic themes on WP 6.9. (78546)
RTC: Add command to run in WebSockets mode. (78363)
Tests: Add timezone-mock to test/unit/package.json. (78277)
The addition of a free-form image cropper in the BlockBlockBlock is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. Editor has been a long-standing feature request. A GutenbergGutenbergThe Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc.
https://wordpress.org/gutenberg/ experiment that integrates this and other image editing features in a “Media EditorModal” is ready for testing and feedback.
What is it?
The Media Editor Modal replaces the existing inline cropping tool in the Block Editor. The modal pattern keeps the familiar Crop button entry point, and brings freeform and aspect-ratio cropping, flip, fine-grained and snap rotation, and metadata editing into one dedicated workflow.
Under the hood, the modal consumes a coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. collection custom tools and components that will eventually live in a WordPress package. This will remove the reliance on third-party cropping libraries.
Why the change?
Image cropping in the Block Editor hasn’t changed much since its introduction. The existing inline image cropper is built on top of the react-easy-crop library. This implementation has a couple of constraints:
it’s limited by what’s achievable in the editor canvas and block toolbar, and
the library itself has a narrow set of features.
Why build our own library? Well-maintained, open sourceOpen SourceOpen Source denotes software for which the original source code is made freely available and may be redistributed and modified. Open Source **must be** delivered via a licensing model, see GPL. alternatives that do most of what users expect are few and far between. Furthermore, there’s a general preference for a WordPress-native surface that:
has all the features we want “out of the box” such as aspect ratios, freeform cropping handles, intuitive zooming, flip and rotation,
includes all the usability features we’d expect such as touch and keyboard support, and
is extensibleExtensibleThis is the ability to add additional functionality to the code. Plugins extend the WordPress core software. in ways idiomatic to the WordPress ecosystem.
There was an attempt to build a custom, editor-first cropper component, but it was abandoned. Rather than developing separate, one-off flows across blocks, the Media Editor Modal aims to provide a consistent foundation for both a new Media Library experience and various editor contexts, and also serve as platform for building more sophisticated experiences later.
How to test
If you’re familiar with the Gutenberg plugin development environment, you can check out trunktrunkA directory in Subversion containing the latest development code in preparation for the next major release cycle. If you are running "trunk", then you are on the latest revision. right now and enable the Media Modal experiment from the experiments page at /wp-admin/admin.php?page=experiments-wp-admin
Update: #78653 merged, which makes the modal the default experience. No requirement to enable any experiment.
The quickest way to test is via Playground. Here’s a link that loads up Playground with Gutenberg Trunk and the Media Editor Modal active:
The steps are provided just in case you need structure. Don’t feel any need to follow any or all of them.
The important question is whether the modal is solid enough as a replacement for the Image block crop flow, and whether you notice any bugs, UXUXUser experience gaps or unexpected behaviors.
Basic crop flow
Open the modal from an Image block.
Resize the crop area.
Pan and zoom the image.
Rotate or flip the image.
Save.
Confirm the block updates to use the edited image.
Details editing
In a saved post with a title, upload or insert an image.
Open the modal from the Image block.
Switch to the Details tab.
Confirm Author and Attached to fields are populated with your author handle and the current post’s title.
Update alt text and caption.
Save.
Confirm the media item updates.
Confirm the Image block updates when its existing alt/caption values were empty or matched the original media values.
Existing custom block values
Add an Image block.
Manually enter custom alt text or a custom caption in the block.
Open the media editor modal.
Change the attachment’s alt text or caption.
Save.
Confirm custom block-level values are not unexpectedly overwritten.
Keyboard
Open the modal.
Use Tab to move through the crop area, crop handles, toolbar controls, sidebarSidebarA sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme. controls, Save, Cancel, and Close.
Use arrow keys to move or resize the crop area.
Confirm focus is visible and does not get lost.
Try undo/redo with keyboard shortcuts.
Confirm Escape behaves as expected when there are unsaved changes.
Touch gestures
On a touch device, open the modal from an Image block.
Test drag panning, pinch zoom, and crop area handle dragging for responsiveness and smoothness.
Ensure toolbar actions like rotate, flip, undo, redo, and reset are tappable.
Sharing your feedback
Comments on this post are a great way to share feedback, but if you’d like to jump into Gutenberg feel free to leave feedback on this tracking issue as it’s the main one covering current tasks for the experimental modal. We’d love to know for example:
Did the modal open where you expected it to?
Was cropping understandable without extra instruction?
Did anything feel slower, confusing, or broken?
Did the image tools, including Save and Cancel behave as you’d expect?
Out of scope
The goal is to make the basic crop/edit workflow solid first, not to ship every image editing feature. Some related work is still being explored separately, for example:
Manual pixel crop controls.
Restoring original image.
Improving undo/redo history states.
Broader image editor extensibility for image filterFilterFilters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. and/or AI integration options.
Thank you for making it this far, and thanks in advance for testing.
You must be logged in to post a comment.