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.
Good news, everyone! WordPress 7.0 has a new release date: May 20th, 2026!
Thank you all for your flexibility in these recent weeks while WordPress contributors around the world worked tirelessly on necessary architectural improvements for the 7.0 release. The team aims to ensure that this software version is the most stable and most performant it can be, while still delivering the much anticipated cornerstone features mapped out for WordPress 7.0.
Below is the new release schedule, with expected dates and times for each release party, and the release squad contributors involved in each party for the 7.0 milestone. It also includes the pre-release versions that have already been released, and a (pending) call for testing from web hosts meant to help ensure compatibility across hosting systems.
Note: While the most recent pre-release version was RC2, the RC3 release will be treated like aย betaBetaA pre-release of software that is given out to a large group of users to trial under real conditions. Beta versions have gone through alpha testing in-house and are generally fairly close in look, feel and function to the final product; however, design changes often occur as part of the process.ย version in practice. That means that your continued testing and feedback, particularly on the part of web hosts, will be incredibly valuable in keeping the development process informed during the next phase of this release cycle. Thank you all for your continued testing!
Release Schedule
As always, last-minute adjustments to this schedule are possible, and there could be additional timeline iterations based on the impact of host feedback to ensure that feedback is properly addressed. The release squad will do its best to communicate any changes promptly by posting in the #core Slack channel, publishing a post on the change, and updating this post as the canonical reference.
Date (UTC)
Milestone
Emcee / Release LeadRelease LeadThe community member ultimately responsible for the Release.
CommittercommitterA developer with commit access. WordPress has five lead developers and four permanent core developers with commit access. Additionally, the project usually has a few guest or component committers - a developer receiving commit access, generally for a single release cycle (sometimes renewed) and/or for a specific component.
@audrasjb Committing from WordCampWordCampWordCamps are casual, locally-organized conferences covering everything related to WordPress. They're one of the places where the WordPress community comes together to teach one another what theyโve learned throughout the year and share the joy. Learn more. Nice Contributor DayContributor DayContributor Days are standalone days, frequently held before or after WordCamps but they can also happen at any time. They are events where people get together to work on various areas of https://make.wordpress.org/ There are many teams that people can participate in, each with a different focus. https://2017.us.wordcamp.org/contributor-day/https://make.wordpress.org/support/handbook/getting-started/getting-started-at-a-contributor-day/!
RCrelease 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). 1
WordPress 7.0 removesโor facilitates removingโtitle attributes from links relating to post authors.
Authorโs Website link (from the user profile)
get_the_author_link() and the_author_link() have a new $use_title_attr parameter, which can be set to false to remove the โVisit Authorโs websiteโ tooltip. By default, these functions continue to include a title attribute.
<?php
// either
the_author_link();
// or
echo get_the_author_link();
Default output is the same in 7.0 as in 6.9: <a href="https://author.example.com" title="Visit Author’s website" rel="author external">Author</a>
<?php
// either
the_author_link( false );
// or
echo get_the_author_link( false );
Output in 7.0: <a href="https://author.example.com" rel="author external">Author</a>
Authorโs posts archive link
The โPosts by Authorโ title attribute is removed from the link by default. However, the title text is still available for use within the the_author_posts_link hook, along with the authorโs display name.
<?php
// either
the_author_posts_link();
// or
echo get_the_author_posts_link();
Output in 6.9: <a href="https://example.org/author/author/" title="Posts by Author" rel="author">Author</a>
Output in 7.0: <a href="https://example.org/author/author/" rel="author">Author</a>
Editing the posts link text
To replace the author name with the โPosts by Authorโ text, use multiple arguments in the the_author_posts_linkfilterFilterFilters 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..
<?php
/**
* Edits text for the link to the author page of the author of the current post.
*
* Add "Posts by" before the author's display name (or after the name in some translations):
* `<a href="https://example.org/author/author/" rel="author">Posts by Author</a>`
*
* @param string $link HTML link.
* @param string $author Author's display name. Default empty string.
* @param string $title Text originally used for a title attribute. Default empty string.
*/
function wpdocs_author_posts_link( $link, $author = '', $title = '' ) {
// In WordPress versions prior to 7.0, $author and $title would be empty.
if ( '' !== $title && '' !== $author ) {
$link = str_replace(
'>' . $author . '</a>',
'>' . esc_html( $title ) . '</a>',
$link
);
}
return $link;
}
add_filter( 'the_author_posts_link', 'wpdocs_author_posts_link', 10, 3 );
Authors list HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers.
wp_list_authors() simply removes the โPosts by Authorโ tooltips.
<?php
wp_list_authors(
array(
'html' => true // This is true by default.
)
);
Output in 6.9: <li><a href="https://example.org/author/author/" title="Posts by Author">Author</a></li><li><a href="https://example.org/author/editor/" title="Posts by Editor">Editor</a></li>
Output in 7.0: <li><a href="https://example.org/author/author/">Author</a></li><li><a href="https://example.org/author/editor/">Editor</a></li>
This guide outlines major developer features and breaking changes in 7.0 and is published in the 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). phase to help inform WordPress extending developers, CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. developers, and others.
Below is a breakdown of the most important developer-related changes included in WordPress 7.0.
AI building blocks of the future
Step into a new era with WordPress 7.0, shipped with AI integration and abilities. Provider-agnostic architecture gives you full control over units and capabilitiescapabilityAย 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). while tapping into the endless opportunities AI can bring to life. These critical building blocks are just the beginning, paving the way for agentic collaborators and so much more.
WP AI Client
WordPress 7.0 unlocks AI capabilities right in your website. The new WP AI client adds a central interface that lets plugins communicate with generative AI models while remaining provider-agnostic. WordPress Core handles request routing for you. Managed in the Settings > Connectors screen with 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. keys funneled through the Connectors API, you can start with some preset models and add your favorites.
As a bonus, the Abilities API is integrated directly into the WP AI Client, delivering new and expansive AI abilities that can be built into workflows that run abilities fluidly, one after another.
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 can use the new using_model_preference() function to indicate which models to use in order of preference, then add feature detection to match capabilities against available models โ lowering cost and speeding up processing time. The AI Client includes a series of advanced configuration controls, and a WP_AI_Client_Prompt_Builder class for calling methods. For easy upgrades, the wordpress/wp-ai-client package handles transitioning to 7.0 automatically.
WordPress 7.0 expands on the Abilities API by introducing a 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 counterpart: the Client-Side Abilities package with new and hybrid abilities, an intuitive UIUIUser interface, a command palette, and 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 query functionality.
Plugin developers can enqueue @wordpress/core-abilities to automatically fetch and register server-side abilities via the 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/, or enqueue only @wordpress/abilities to work with the pluginโs client-side abilities. Registered abilities are organized in customizable categories, and abilities and categories can be unregistered via the PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher API. ย 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. data annotation is supported, and core/abilities makes useSelect available for reactive queries in ReactReactReact is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces.
https://reactjs.org components.
Manage all of your AI provider connections in one place on the new Connectors screen. Found under Settings > Connectors in the dashboard, the screen gives you everything you need to manage your connections. Registered connectors are displayed automatically on the page, and so is detailed registry meta data in a card format. The Connectors screen includes three default providers: Anthropic, Google, and OpenAI, while also allowing users to configure their own connections.
Connectors API
The Connectors API is the backbone of the Connectors screen; an extensibility API that facilitates and supports the inclusion of agents.
The API supports two authentication methods (api_key and none) based on provider metadata, and is designed to facilitate additional connector types in future releases. The Connectors API uses the WP AI Clientโs default registry to automatically discover providers, and corresponding metadata to generate connectors, while connectors authenticated via other methods are stored in the PHP registry. You can use the wp_connectors_init action to override connectors metadata, which will be the key for registering new connector types in future releases. The API includes three public functions for querying the registry, and the frontend UI can be customized using client-side JavaScript registration.
WordPress 7.0 delivers an upgraded adminadmin(and super admin) experience, with a sleek, new color scheme named โModernโ, numerous enhancements throughout the dashboard, and seamless visual transitions as you navigate from screen to screen. A new Command Palette shortcut in the upper admin bar lets you access tools from anywhere in the dashboard, while a new dedicated dashboard page for font management centralizes and simplifies managing fonts. The enhanced iframed post editor stabilizes the screen, while editors leave comments on blocks, receive notifications for notes and even visually compare two revision versions.
New admin color scheme and styles
WordPress administration has been reinvigorated with a new, chic color scheme throughout the dashboard. The new Modern admin theme is live across admin headers, the 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., the color scheme picker, script loader, various user functions, and even the 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 user signup has been reskinned. The Modern theme is clean and easy on the eyes, boasting a refreshed color palette, higher contrast, and upgraded typography, uplifting and elevating the admin experience.
View Transitions in WP Admin
Navigating the dashboard is a smooth ride in 7.0. User views slide from one screen to the next as you move across wp-admin. Cross-document view transitions use distinct transition names for admin menu items in order to facilitate this simple visual slide effect, firing when the active submenu changes between screens. With consideration for all users, View Transitions are only activated if a preference is not set for reduced motion on the OS level.
Command Palette shortcut
Access your editing toolset from anywhere in the dashboard with a single click of the new Command Palette shortcut in the Omnibar. WordPress 7.0 includes a โK or Ctrl+K icon for logged-in users in the upper admin bar, which unfurls the command palette on click. The new shortcut speedruns editing and gives full control from anywhere in the dash: while building, designing or simply browsing notes.
Font Library
The Font Library has expanded in 7.0 with the introduction of a dedicated font management page. Now you and your team can manage, upload and install fonts from one place in 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., hybrid and classic themes.
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.
In WordPress 7.0, Visual Revisions make editing easier and more intuitive, while adding insight into post or page edit history. Users can now visually compare two revision versions directly in the Editor using a slider bar to visually switch between revisions. The document inspector shows a summary of changes, while color indicators and sizes of changes can be seen for each location, jumping to that location on the page when clicked.
Iframed Editor
An improved, iframed editor in 7.0 offers more stability to the post editor experience. An iframed post editor is now enforced when all Block API blocks inserted into the post are using version 3 of the API or higher. If not, the 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. is removed, upholding backwards compatibility for lower-versioned blocks.
Notes are even better in 7.0, with a focus on streamlining team workflows. Data now syncs automatically, while a new keyboard shortcut, new dashboard 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., and new notifications help you stay on top of team communication. Support for multi-block notes has been added, along with support for partial selections and rich text editing.
Creative Customization
7.0 inspires creativity with enhanced design tools and new editing capabilities. Users can now customize navigation overlays on mobile, granular control of the responsiveness for individual blocks, and edit at the pattern level in different modes.
Custom Navigation Overlays on mobile
Hamburger menu overlays can now be customized and built from blocks and patterns in the Site Editor, with a dedicated Navigation Overlay Close block for placing and styling a close button anywhere within the overlay, giving users and theme authors flexibility to define mobile navigation experiences. In-place overlay selection and previews create a seamless editing experience, while users can review and assign overlays, and themes can offer default templates for quick setup.
WordPress 7.0 introduces customizable block visibility based on device type, allowing editors to hide or reveal blocks by device, without affecting other viewports. Controls to launch a block visibility options modal are available in the block toolbar, block inspector 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 command palette. Icons are displayed in List View next to blocks that have active visibility rules, indicating what viewports they are being hidden on.
Offering even more responsiveness enhancements, 7.0 introduces the ability to change styles for different breakpoints, customize breakpoint sizes and more.
7.0 introduces Pattern Overrides for custom blocks, Pattern-level editing modes for contextual and symbol patterns, a parent-child tree view for buttons and list blocks, and the ability to opt out of contentOnly mode.
contentOnly mode will now be default for patterns that previously relied on unrestricted editing of their inner blocks, while a new disableContentOnlyForUnsyncedPatterns setting or block_editor_settings_all PHP filter allows contentOnly mode to be opted out of for unsynced patterns.
In 7.0 contentOnly mode is applied more broadly, so if a block is nested in a contentOnly pattern, plugin developers will want to ensure attributes representing the blockโs content have "role": "content" set in block.json to retain their ability to be edited and prevent them from being hidden in list view.
Block developers can now add a "listView": true block supports declaration to add a List View tab to the block inspector with a dedicated view for the block that allows editors to update and customize the block more easily.
Block attributes that support Block Bindings now also support Pattern Overrides for custom blocks. Pattern Overrides now apply to any block, including custom blocks, and can be opted-in through block_bindings_supported_attributes filter(s). Attribute values appear in the rendered blocksโ markup for dynamic and static blocks, and if static blocks have more complex attributes than the HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. API can process, a render_callback() function can be used to ensure bound attribute values render.
Designing in WordPress 7.0 has become more flexible with the introduction of new blocks, new block supports and new design tools. A new Heading block, Icons block, Breadcrumbs block, and Playlist block with CSSCSSCascading Style Sheets. inheritance are shipped with 7.0, with added lightbox support for the Gallery block, and dynamic URLURLA specific web address of a website or web page on the Internet, such as a websiteโs URL www.wordpress.org support in the Navigation Link block. 7.0 includes text line indent support, text column support, dimensions width and height support, dimension presets, tools and controls, and aspect ratios for wide and full images.
Custom CSS on the block level
7.0 introduces the ability for custom CSS to be applied on-page to individual blocks. This allows granular control over every detail of your content, with quick and intuitive access to style controls.
Headings Block
A new Heading Block includes variations of all heading levels, easy toggling in the sidebar inspector and quick transforms, and display in the search and slash inserter.
Breadcrumbs Block
The new Breadcrumbs Block in 7.0 automatically reflects the siteโs navigational hierarchy with the ability for global application in site parts like the theme 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.. New filters allow developers to add, remove, and modify breadcrumb trails, and specify which 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. and terms appear in the Breadcrumbs trails.
Editing the navigation block is now more simple with improved insertion, Interactivity for pattern editing and ContentOnly, and improved โboundโ page items presentation.
Video embed cover blockย
Videos can now be embedded as section backgrounds in the Cover block.ย
Gallery blockย
The Gallery block now has lightbox support with an added slideshow option. Just create and insert a Gallery, click the link icon and then hit โenlarge on clickโ. Click below to see!
Added <p> Block Supports
Text in the Paragraph block can now be arranged in a columns layout.
More details on new and improved blocks are available here:
7.0 introduces height and width block support, typography text indent support in paragraphs, presets support, and pseudo elements support on the core/button block for ( ':hoverโ, ':focusโ, ':focus-visible', ':active' ) at the theme.json level. Support for preset dimensions values in theme.json have been added for block supports such as width, height and min-height, allowing the blockโs variations to control the same pseudo elements, while a defined set of preset values for dimensions block supports can be leveraged to reduce the need to know and manually set the same value across multiple blocks.
7.0 delivers an expansive developer toolbox including new tools for building, enhanced supportive structures, and expanded API abilities. Developers can now create a PHP-only representation of blocks on the server level, customize plugin list filters, and explore the foundational layout for a more extensibleExtensibleThis is the ability to add additional functionality to the code. Plugins extend the WordPress core software. Site Editor.
PHP Only Block Registration
WordPress 7.0 allows blocks and patterns to be created directly on the server with PHP, and registered with the Block API. The PHP-only representation of blocks and patterns includes pattern creation and syntax that streamlines block creation and bindings, registering blocks automatically When a block declares 'supports' => array( 'autoRegister' => true ) along with a render callback, exposing it to the client-side via a JavaScript global variable. PHP-registered block attributes can be edited in the editor and inspector controls can be generated from attributes, with automatic DataForm inspector controls added for PHP auto-registered blocks.
Introducing a new watch() function to the @wordpress/interactivity package that subscribes to changes in any signal accessed inside a callback, re-running the callback whenever those signals change. The APIโs data-wp-watch can be added to a DOM elementโs lifecycle and react to state changes. The state.url value is now populated server-side during directive processing, remaining unchanged until the first client-side navigation occurs.
Experience a new Activity layout, new Details layout, Improved modal appearance, and the ability to register 3rd party types in the Field API.
Block bindings API iterationsย
Introducing the Block bindings and patterns overrides feature, with the ability to filter available attribute sources by format, aligning with the Field API.
New plugin list filterย
A new plugins_list_status_text filter in get_views() has been added to allow custom filtering. Custom statuses added with plugins_list now appear as tabs to filter the related plugins. The tab label can be customized using the new plugins_list_status_text hook.
Site Editor wordpress/build and routing
In 7.0 the foundation has been laid for an extensible site editor and routing, route validation, a new @wordpress/boot package that allows plugins to build custom site-editor pages, and a refactored @wordpress/scripts that builds from directories and reduces Webpack dependence.
Bonus dev goodies
WordPress 7.0 introduces updates that span every area of Core. These changes support ongoing initiatives to create a flexible foundation for developers while boosting usability and opportunity.
Block 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. for content-like Custom Post Types.
The Block Hooks logic has been moved from individual post type filters to the REST controller.
More secure user registration
Administrator and Editor roles have been removed from the new user default selector under General in the admin screen. Site Health now alerts if one of those roles was selected before updating, while a new default_role_dropdown_excluded_roles filter allows developers to change default excluded roles.
CodeMirror Update to v5
CodeMirror has been updated to the latest v5 version, along with CSSLint, HTMLHint, and JSONLint, while Esprima has been replaced with Espree for ES6 support and JavaScript linting.
PHPMailer has been updated to version 7.0.2, which includes a Sender address 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. fix.
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)
WordPress 7.0 includes numerous improvements and additions that make content more accessible for everyone. The login password reset now pre-populates with a username to comply with WCAGWCAGWCAG is an acronym for Web Content Accessibility Guidelines. These guidelines are helping make sure the internet is accessible to all people no matter how they would need to access the internet (screen-reader, keyboard only, etc) https://www.w3.org/TR/WCAG21/. 2.2, and a new wp_get_image_alttext() function imports Image Alt text metadata from image IPTC metadata. The word-break property has been added to .screen-reader-text to ensure screen readers wonโt read text as individual letters in hidden text, and view transitions are only activated when reduced motion is not set.
Title attributes can now be removed from two functions using a new $use_title_attr parameter, and are removed from three author link functions by default.
But wait, thereโs more!
7.0 offers so much more! More than 300 Core bugs, 486GutenbergGutenbergThe 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/ bugs, 77 enhancements and feature requests, and 35 blessed tasks have been marked as fixed in WordPress 7.0.
Below are a few to highlight:
Site Health: OPCache added to Site Health > Info > Server (Trac #63697)
Editor: Name/description metadata added to patterns when saved (Trac #64123 )
Script Loader: Allow scripts to depend on modules: (Trac #61500)
Script Loader: HTML5 script theme support deprecated and removed (Trac #64442)ย
General: Allow hooking into wp_trigger_error() when WP_DEBUG is not truthy. (Trac #60886)ย
Multisite: Networks and Sites no longer automatically mark website as spam when an account is marked as spam (Trac #61146)
Thank you to everyone who contributed to this version of WordPress, whether through code, testing, or something else โ your contributions matter and help Make WordPress.
The live meeting will focus on the discussion for upcoming releases, and have an open floor section.
The various curated agenda sections below refer to additional items. If you haveย ticketticketCreated for both bug reports and feature development on the bug tracker.ย requests for help, please continue to post details in the comments section at the end of this agenda or bring them up during the dev chat.
The discussion section of the agenda is for discussing important topics affecting the upcoming release or larger initiatives that impact the CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. Team. To nominate a topic for discussion, please leave a comment on this agenda with a summary of the topic, any relevant links that will help people get context for the discussion, and what kind of feedback you are looking for from others participating in the discussion.
Open floor ย ๐๏ธ
Any topic can be raised for discussion in the comments, as well as requests for assistance on tickets. Tickets in the milestone for the next major or maintenance release will be prioritized.
Please include details of tickets / PRs and the links in the comments, and indicate whether you intend to be available during the meeting for discussion or will be async.
Call for RTC testing from hosts. Submissions still welcome. Thank you to Bluehost, Kinsta, XServer, GoDaddy,WordPress.comWordPress.comAn online implementation of WordPress code that lets you immediately access a new WordPress environment to publish your content. WordPress.com is a private company owned by Automattic that hosts the largest multisite in the world. This is arguably the best place to start blogging if you have never touched WordPress before. https://wordpress.com/, Ionos, and any other hosts for helping test RTC.
A decision about RTC introduction is about to be finalized (and it was finalized). See ticketticketCreated for both bug reports and feature development on the bug tracker.#64696.
@jorbin proposed to run a dedicated 7.0 scrub after the chat.
@juanmaguitar will host a dedicated 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/ scrub on Thursday.
@jorbin and @audrasjb asked about the Field GuideField guideThe field guide is a type of blogpost published on Make/Core during the release candidate phase of the WordPress release cycle. The field guide generally lists all the dev notes published during the beta cycle. This guide is linked in the about page of the corresponding version of WordPress, in the release post and in the HelpHub version page. timeline. It is currently under review and should be published ASAP.
@joefusco asked: โIs there a process for getting systems team feedback on the RTC custom table?ย The code and testing infrastructure are ready, including a standalone testing 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. that can run on production sites without changes 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..ย Iโm not sure who to direct this to or what the next gate is in the process.โ
@desrosj answered the systems team has been involved with the discussions and I know that they have been testing.
@joefusco replied โMainly whether there are any outstanding concerns with the table structure or the approach that would prevent it from landing in 7.0.ย Also, is there a documented process for new table proposals that require systems review?ย This wonโt be the last time a feature needs a schema change, and it would help future contributors know the path.โ
Several attendees noted that itโs likely not worth the effort to formalize a process, as that kind of change doesnโt occur regularly.
Following the decision to remove real-time collaboration from WordPress 7.0, this post summarizes what the latest hosting test data showed and outlines the recommended storage strategy for future iteration. A huge thank you to every web host that submitted results in response to last weekโs call for testing. Submissions came in from eight hosting environments between April 29 and May 4, and analysis of the aggregated, anonymized data is now complete. Based on the results, the recommendation is to use custom-table-with-transients as the default RTC storage strategy for continued testing and future iteration.
custom-table โ a dedicated table for all RTC data.
post-meta-transients โ 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. for storage with transients for client awareness.
custom-table-with-transients โ a dedicated table with an object cache-backed awareness (Note: while contributors have been referring to this as a transient approach, it is a convenient short hand rather than a technical description)
The test runner captured per-request REST dispatch time and database query counts during sustained 30-second polling windows. Eight complete captures from a mix of shared, shared-with-Redis, managed-cloud, and no-object-cache environments form the basis of the analysis below.
What the data showed
Across the cohort, custom-table-with-transients was first or tied-first on six of seven complete environments, and was never slower than the RC2 baseline (post-meta approach). On average, the custom-table-with-transients approach was ~52% faster and the purely custom-table approach was ~37% faster than the current implementation. On hosts without a persistent object cache, it landed within 0.05โ0.17 ms of plain custom-tableโclose enough that the two are effectively tied where caching is absent.
Two clean signals showed up in the database query counts during dispatch:
With a persistent object cache present, both transient-based strategies dropped to a single database query per dispatch.
Independent of caching, the custom-table schema cut the query count roughly in half compared to the post-meta strategies.
custom-table-with-transients wins because it gets the schema reduction when caching is absent, and the cache reduction when itโs present. post-meta-transients, by contrast, is not recommended even as a fallback. It nearly doubles in latency without a persistent cache, and on one no-cache shared environment it exhibited a pathological transient code path that pushed dispatch latency past 26 ms โ several times worse than any other strategy on that host.
Recommendation for the future
The recommended storage strategyย custom-table-with-transients is considered the best case among the candidates. It wins decisively on environments with a persistent object cache, remains comfortably ahead of the baseline on environments without one, and degrades gracefully across the full spread of hosting tiers represented in the data.
Read the full analysis
The full anonymized analysisโincluding per-environment dispatch tables, query counts, cross-cuts comparing cache effects, and bootstrap floorsโis available here. All submissions remain anonymized in line with the commitment made in the original call for testing.
Summary
The data from this testing window was sufficient to make the call confidently: custom-table-with-transients is the best option forward as the default for real time collaboration. When work resumes after clean up from 7.0, this is the approach best positioned to explore more deeply next.
Thank you again to every host that participated. Your contributions provided the data needed to make this storage recommendation and will help set real-time collaboration up for success across the wide range of environments where WordPress runs. Props to Ionos, BlueHost, Kinsta, XServer, and WordPress.comWordPress.comAn online implementation of WordPress code that lets you immediately access a new WordPress environment to publish your content. WordPress.com is a private company owned by Automattic that hosts the largest multisite in the world. This is arguably the best place to start blogging if you have never touched WordPress before. https://wordpress.com/ for their contributions here.
Today, @matt made the decision to remove real-time collaboration from WordPress 7.0 and shared that he is not confident the current approach is robust enough to include in CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. at this time, citing concerns around surface area, race conditions, server load, memory efficiency, and recurring bugs found through fuzz testing.
This is a difficult decision, especially given the amount of work that has gone into the feature, but it is being made in service of shipping a stable and reliable WordPress 7.0 release for our users. Work to remove the feature from the release is being organized in #65205 and in the #feature-realtime-collaboration. At this time, the release schedule remains as is and further updates will be provided if the schedule needs to change to unwind this feature.
Real-time collaboration remains an important and exciting feature for WordPress. Once the immediate release work is complete, a plan will be shared for broader testing and continued iteration to help prepare the feature for a future release. Thank you to everyone who has contributed to this work so far from so many angles.
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/ 23.1? (07 May)
โWhatโs new in 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 introduces two new experiments aimed at managing content inside the editor. A Custom Taxonomies management screen lets you create and edit taxonomies from Settings, and a new Media Editor brings better image manipulation into the WordPress media flow. Outside of the editor, the @wordpress/ui package gains new compound primitives, Drawer and Autocomplete, alongside overlay polish. Other changes include an experiment to hide the classic 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. from the inserter, parallel thumbnail uploads, an early developer preview of @wordpress/grid, and a batch of real-time collaboration reliability fixes.
Faster image upload finalization
Sideload requests for an imageโs generated thumbnail sizes used to run sequentially within a single upload. They now run in parallel up to the existing concurrency limit, which speeds up upload completion. (#75888)
The speed improvement is most noticeable on bulk uploads via the Gallery block, large images, and slower connections.
@wordpress/ui primitives
The @wordpress/ui package gains two new primitives and polish across overlay components.
Two new compound primitives ship in 23.1:
Drawer, for slide-in side panels and bottom sheets. (#76690)
Autocomplete, a low-level form primitive for combobox-style inputs. (#77642)
Other polish across overlay components:
The Dialog component gains a new Description subcomponent, plus several tweaks to its spacing and typography to align it better with Drawer. Additionally, its Backdrop only dims the page when the Dialog is modal. (#77194)
Dialog, AlertDialog, and Drawer now support sticky headers and footers when their content scrolls vertically. (#77559)
All overlays *.Popup subcomponents gain a new portal prop which, combined with new optional *.Portal subcomponents, allows for better customization of the portaling behavior. (#77452)
Other Notable Highlights
Custom Taxonomies management (Experiment). An experimental UIUIUser interface for managing custom taxonomies inside WordPress adminadmin(and super admin). With the โContent types: manage custom taxonomiesโ experiment enabled, a new Taxonomies screen lets you create, edit, activate or deactivate, and delete taxonomies without writing PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher. Enable it via Gutenberg โ Experiments โ โContent types: manage custom taxonomiesโ, then visit Settings โ Taxonomies. (#77497, #77524, #77657, #77697)
Image Editor with Freeform Cropper (Experiment). A new experimental Image Editor modal for image manipulation in the Block Editor. The modal enables freeform cropping and other manipulation tools for Image and Site Logo blocks. To test it out, enable the experiment via Gutenberg โ Experiments โ Media Editor Modal, then, in the editor, click on the Crop icon in the block toolbar. (#77479, #77537, #77540, #77585, #77641)
Disable Classic Block from the inserter. The โDisable TinyMCEโ experiment was refocused and landed to disable the Classic block from the inserter. The reason for the change is that removing TinyMCE everywhere broke too many existing flows. Existing Classic block instances continue to work normally, since the change only affects the inserter. A new wp_classic_block_supports_inserterfilterFilterFilters 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. was introduced to allow controlling this behavior. (#77747, #77838, #77840, #77845, #77911)
@wordpress/grid package (developer preview). A new @wordpress/grid package introduces DashboardGrid, a two-dimensional grid component with drag-to-reorder and resize handles for dashboard-style surfaces. The package is in active development, and the 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. is expected to evolve in upcoming releases. (#77562)
Real-time Collaboration reliability improvements. Several fixes improve RTC reliability and load behavior. The โConnection Lostโ dialog no longer appears when a page registers more sync rooms than the serverโs per-request cap. A client/server size-check mismatch that could reject large Yjs updates has been corrected. When two offline users reconnect and both push compactions, they no longer end up in a divergent state. Sync observers also attach after the persisted CRDT document is hydrated, which avoids redundant block re-parsing during editor load. (#77631, #77669, #77980, #77966)
Experimental Image Cropper: Tweak the keyboard interactions with drag handles and canvas. (77639)
Admin UI: Change default heading level from h2 to h1. (77617)
CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. Data: Remove redundant memoization wrapper from โgetQueriedItemsโ. (77483)
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.: Polyfill script module translations for WordPress < 7.0. (77214)
Enhancements
Storybook: Add global preview styles for @wordpress/ui overlays. (77451)
Widgets: Add 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 data layer. (77752)
Components
Admin UI: Add visual prop to Page 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. component. (76469)
Admin UI: Ensure consistent header spacing with and without actions. (76683)
Admin UI: Use UI Text component in header. (77372)
DataForm: Render field description as help text in the array control. (77554)
ExternalLink: Align appearance with Link from @wordpress/ui. (77790)
Tabs: Rename tabs blocks to follow WCAGWCAGWCAG is an acronym for Web Content Accessibility Guidelines. These guidelines are helping make sure the internet is accessible to all people no matter how they would need to access the internet (screen-reader, keyboard only, etc) https://www.w3.org/TR/WCAG21/. Tabs pattern. (77418)
Block Editor
Embed: Restore paragraph with URLURLA specific web address of a website or web page on the Internet, such as a websiteโs URL www.wordpress.org when undoing paste-to-embed transform. (77551)
Split singleton 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/ into dedicated /content-guidelines route. (77734)
Bug Fixes
Core Abilities: Export initialization promise as ready. (77254)
Disable Custom CSSCSSCascading Style Sheets. command for non-block themes. (77685)
Grid: Fix width: 'fill' when tiles span multiple rows. (77769)
Tests: Connectors point to the right page. (77272)
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.: Gutenberg Experiments: Ensure the experiment is active before outputting flags. (77728)
Connectors: Treat networknetwork(versus site, blog)-active plugins as active. (77661)
Command Palette: Fix macOs label for sites unable to determine UA via PHP. (77638)
Design Tools: viewport visibility โ use โkeyโ instead of โvalueโ for device type. (77410)
Layout: Ensure layout classnames are applied to the inner blocks wrapper and not to its siblings. (77408)
Global Styles: Fix pseudo selector block style rendering in the editor. (76879)
Data Layer: Media โ move image output format filtering to upload response. (75793)
Media Upload Modal: Fix pagination and search. (77872)
Accordion: Add missing dimension controls and limited customization. (77780)
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.: Change toggle label to โMake image a linkโ. (71931)
Image: Preserve aspectRatio and scale when switching to wide/full alignment. (76914)
Form blocks: Update block categories for form, form-input, form-submission-notification, and form-submit-button. (61916)
Image: Fix non-local image ID removal undo trap. (77367)
Tabs: Add classic theme styles to reset button defaults. (77607)
Tabs: Lock top-level structure and disable visibility controls. (77370)
Video Block: Update z-index for tracks popover to ensure proper stacking context. (77517)
Components
CollapsibleCard: Prevent focus ring clipping by content overflow. (77667)
Add cursor pointer to the ariakit menu item component. (70412)
Link: Remove underline from unstyled icon links. (77420)
Storybook: Fix โ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. fileโ links for storybook-local stories. (76758)
Storybook: Fix component descriptions in manifest files. (77112)
Text: Apply both heading and paragraph CSS defenses unconditionally. (77461)
UI: Fix focus-trap broken by ThemeProviderโs display: contents. (77381)
UI: Update @base-ui/react from 1.4.0 to 1.4.1. (77520)
Block Editor
Fix blockGap fallback handling for nested var() fallback values. (77750)
Template parts: Make โDetachโ context menu item consistent across patterns and template parts. (77581)
Client Side Media
Deduplicate client-side image sizes with matching dimensions. (77036)
Declare convert_format as boolean arg on sideload route. (77565)
Upload Media: Use .jpg extension for HEIC-to-JPEG client conversion. (77506)
Collaboration
RTC: Fix โConnection Lostโ dialog when too many entities are loaded. (77631)
RTC: Fix connection-lost error on large updates caused by mismatch between update size bounds check and expanded base64 update size. (77669)
RTC: Fix divergence when two offline users reconnect. (77980)
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)
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.: Improve screen reader accessibility for diff markers region and slider. (77660)
Fix accessibility issues in admin Font Library. (77482)
Connectors
Add role="list" wrapper to connector cards for valid ARIA structure. (77689)
Keep focus on action Button during install. (77544)
Components
CollapsibleCard: Fix missing keyboard focus ring on the header chevron icon when rendered inside wp-admin. (77468)
Tabs: Fix missing keyboard focus ring on the panel in Windows High Contrast mode when rendered inside wp-admin. (77469)
Performance
Post Editor
Notes: Extract floating notes state into a dedicated store. (77424)
Notes: Reduce passes in useBlockComments memo and rename outputs. (77440)
RTC: Attach sync observers after hydrating persisted CRDT doc. (77966)
Dashboard: Register admin page route + 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. menu (shell). (77573)
Fix console errors/warnings for taxonomies. (77601)
Follow up improvements on taxonomies (#77497). (77567)
Media editor: Avoid double-mount flicker on open. (77732)
Media editor: Confirm before discarding unsaved changes. (77730)
Update labels for media experiments to better clarify what they do. (77536)
Media Upload Modal: Add MIME type filtering to support text/vtt tracks. (77550)
Experimental Image Cropper: Ensure focus is on canvas when dragging. (77591)
Block Library
Disable TinyMCE: Warn instead of redirecting directly. (77747)
Site Logo Block: Enable the media editor modal experiment for the crop button. (77548)
Classic Block: Unwrap experiment to hide it from inserter. (77911)
Disable Classic block: Always register, hide from inserter conditionally. (77840)
Disable TinyMCE: Repurpose experiment as Classic block removal. (77838)
Post Editor
Image Editor experiment: Pass theme aspect ratios to media editor. (77665)
Media Editor Modal: Add a media editor modal experiment. (77480)
Documentation
Base styles: Update changelog to be clearer. (77767)
Docs: Add ESLint v10 migrationMigrationMoving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. guide and polish documentation. (77217)
Docs: Update parameter type from number to int. (77519)
UI/Docs: Clarify package setup for custom WP Admin pages. (77338)
Tooltip: Fix flaky 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.. (77751)
ui: Align WithCustomZIndex Storybook examples across overlays. (77648)
Block Library
Accordion: 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.isBlock prop from ToggleControl. (77776)
Paragraph: Refactor replacement logic in useOnEnter hook. (77383)
Stylelint: Add cursor-pointer rule and block-library override. (77501)
Notes: Refactor and extract offset calculation logic. (77414)
TypeScript: Share ReactReactReact is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces.
https://reactjs.org CSS custom properties typing. (77394)
TypeScript: Migrate keyboard-shortcuts to TS. (76287)
Admin UI: Move to CSS modules and implement logical properties. (77088)
Block Editor
Fix import order in block-editor custom-css.js. (77566)
Remove stale reusable block z-index styles. (77774)
Site Editor
Edit Site: Move show-icon-labels handling to specific edit-site call sites. (77287)
Use node_modules/.bin/stylelint to avoid npm warnings on Node 24. (77512)
Jest setup: Remove unneeded rAF and URL polyfills. (77378)
Revert tsgo update (#77177) that broke 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.. (77680)
e2e: Shorten visit-site-editor canvas-loader visible wait. (77725) Connectors: Stop end-to-end 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). restriction from leaking across specs. (77857)
Fix PHP 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 tests. (77825)
The live meeting will focus on the discussion for upcoming releases, and have an open floor section.
The various curated agenda sections below refer to additional items. If you haveย ticketticketCreated for both bug reports and feature development on the bug tracker.ย requests for help, please continue to post details in the comments section at the end of this agenda or bring them up during the dev chat.
Thank you to Bluehost, Kinsta, XServer, GoDaddy, WordPress.comWordPress.comAn online implementation of WordPress code that lets you immediately access a new WordPress environment to publish your content. WordPress.com is a private company owned by Automattic that hosts the largest multisite in the world. This is arguably the best place to start blogging if you have never touched WordPress before. https://wordpress.com/, Ionos, and any other hosts for helping test RTC!
The discussion section of the agenda is for discussing important topics affecting the upcoming release or larger initiatives that impact the CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. Team. To nominate a topic for discussion, please leave a comment on this agenda with a summary of the topic, any relevant links that will help people get context for the discussion, and what kind of feedback you are looking for from others participating in the discussion.
Open floor ย ๐๏ธ
Any topic can be raised for discussion in the comments, as well as requests for assistance on tickets. Tickets in the milestone for the next major or maintenance release will be prioritized.
Please include details of tickets / PRs and the links in the comments, and indicate whether you intend to be available during the meeting for discussion or will be async.
The full chat log is available beginning here on Slack.
WordPress Performance TracTracAn open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. tickets
@spacedmonkey asked whether commits 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. are currently allowed or if only RTC-related changes should be committed. @westonruter clarified that trunk is still frozen, except for 7.0-specific fixes that get back-ported, and testing commits.
@spacedmonkey said they would hold off committing any performance-related changes for now and asked others to 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.โ them if anything needs review or commit.
@westonruter added that @pbearne already has a few PRs for testing changes that could be moved forward for commit now, though not performance-related.
@pbearne mentioned that there are more PRs to come.
@westonruter shared that there is about a 10% 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. in TTFB in WordPress 7.0 compared to 6.9, based on benchmarking noticed by @mukesh27. @westonruter mentioned that TTFB-LCP does not show a regression, so this appears to be additional PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher processing slowing things down, but no single cause has stood out yet.
@westonruter also shared ticketticketCreated for both bug reports and feature development on the bug tracker.#65165, which was recently opened, about script modules depending on classic scripts. @westonruter noted that this is related to performance because it can reduce the amount of scripts loaded on the page thanks to dynamic imports, which are non-blocking, and mentioned that the ticket had just come in and had not yet been reviewed in depth.
@westonruter further pointed out ticket #64696, which focuses on improving the scalability of real-time collaboration via 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. polling and its impact on persistent post caches, noting that things seem to have gone a bit quiet on that ticket.
Performance Lab 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. (and other performance plugins)
@westonruter shared that PR #2461 which updates @wordpress/scripts and related packages while fixing backward compatibility issues, is currently top of mind.
Open Floor
@westonruter shared a LinkedIn post highlighting that appending <link rel="preload"> tags late in the <head> can be too late for optimal performance if an initial chunk of HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. is sent without those tags, which can happen when a lot of CSSCSSCascading Style Sheets. is inlined. @westonruter noted that this is relevant for Optimization Detective, since it currently appends these preload tags to the end of the head.
@westonruter mentioned that HTTP Link headers are also being sent, so in practice this might not be an issue. However, @westonruter pointed out issue #2304, where large Link headers can exceed NginxNGINXNGINX is open source software for web serving, reverse proxying, caching, load balancing, media streaming, and more. It started out as a web server designed for maximum performance and stability. In addition to its HTTP server capabilities, NGINX can also function as a proxy server for email (IMAP, POP3, and SMTP) and a reverse proxy and load balancer for HTTP, TCP, and UDP servers. https://www.nginx.com/. limits and cause 502 errors.
The Block Editor Handbook is one of the primary resources for developers building with 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/ and WordPress coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress.. Keeping it accurate and up-to-date as the editor evolves is an ongoing challenge.
Recently, a detailed Core Blocks reference section was proposed for the Handbook โ providing structured 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. documentation for every 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. shipped in Gutenberg. The approach was to auto-generate these pages directly from each blockโs block.json file, the single source of truth for a blockโs attributes, supports, and metadata.
The initial pull request (#77350) was merged but subsequently reverted (#77590) due to insufficient community discussion before landing. That feedback was valid, and this post is the next step: bringing the proposal to the wider community before moving forward.
Understanding how a core block works today means reading its source code directly. A block is defined by attributes, supports, context, selectors, and parent/child relationships โ but none of these are documented in context for any individual block. To learn about a specific block, a developer has to read its 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. file โ which shows the values but does not explain what they mean โ and then separately hunt through the general documentation to understand each property. Per-block documentation with contextual links to each concept would close that gap entirely.
The same problem affects LLMs: without documented context for each property, they have to parse source files to infer semantics, spending more tokens and filling context unnecessarily. This is important for AI-assisted creation of templates, template parts, patterns, and other block editor content.
Most of this detail already exists in the codebase. If it can be surfaced automatically, thereโs no good reason to leave it buried.
The proposed solution
The proposal introduces an automated pipeline that generates per-block API reference pages by reading each blockโs block.json at build time. This means:
Every block shipped in Gutenberg automatically gets a documentation page reflecting its current attributes, supports, selectors, and other metadata.
Keeping docs in sync becomes a byproduct of keeping block.json accurate โ which developers already do.
The Block Editor Handbook gains a canonical, always-current API reference for all core blocks.
The generated docs would live at paths like: developer.wordpress.org/block-editor/reference-guides/core-blocks/[block-category]/[block-name] and would look like this:
README.md per block in the repository
A key part of the proposal is that documentation is generated into a README.md file inside each blockโs source directory โ for example, packages/block-library/src/paragraph/README.md.
This follows the same convention already established for component documentation, where gen-components-docs generates a README.md inside each componentโs directory at packages/components/src/{component}/README.md.
Having documentation live next to the code has a specific benefit: it allows hand-written narrative and auto-generated API reference to coexist in the same file. Generated content is wrapped in token delimiters (<!-- START TOKEN / END TOKEN -->), so any hand-written prose above the token is preserved across regenerations. The Navigation block README is a working example of this.
This mirrors the approach already used by the package API docs generator (update-api-docs.js) to document each package API inside each package README.md.
What this means for contributors
For block developers
No separate docs PR is needed when you add or change a block.json attribute โ the reference page updates automatically.
The README.md lives next to the blockโs source, making the API surface discoverable when browsing the codebase.
The expectation for what constitutes โwell-documentedโ becomes clearer and more tractable.
For documentation contributors
A reliable, auto-generated foundation means energy can be focused on narrative guides and tutorials rather than maintaining API reference tables.
Custom hand-written explanations in a blockโs README.md are preserved across regenerations, so narrative docs and API reference can grow independently.
Having a public view of block documentation may encourage contributors to get involved by creating issues or PRs if they find errors.
For users of the Handbook
Reference pages stay current with each Gutenberg release rather than drifting behind.
Open questions โ we want your input
README.md in the repo vs. the docs site: Should per-block README.md files live in the Gutenberg repository, or be generated solely at the docs site level (as PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher references currently are)?
Process fit: Does auto-generating docs from block.json fit naturally into the existing contribution workflow? Where might it break down?
block.json as source of truth: Are there things about a block that canโt or shouldnโt be derived from block.json? How should those gaps be handled?
Anything weโre missing: What challenges or risks hasnโt this proposal addressed?
Join the conversation live: Weโll be hosting a Hallway Hangout with Docs and Core team members approximately two weeks after this post. Details will be shared in the comments โ watch this post if youโd like to join. The Meeting link will be shared in the #core-editor channel the day of the Hallway Hangout.
Timeline
Milestone
Date
Feedback period opens
5th May
Hallway Hangout
18th May โ 14:00 UTC
Feedback period closes
25th May
Next steps announced
Shortly after close
Feedback collected from the community will help refine the proposal and inform next steps for implementation.
You must be logged in to post a comment.