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.
Since its inception, WordPress has relied on the KSES1 subsystem to sanitize HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers.. Its purpose has grown and changed over time, but primarily serves two purposes: correct aesthetic defects that are likely the result of typos or pasting errors; and remove security risks that might appear in untrusted inputs. The original kses library was written before HTML5 fully-formalized HTML parsing and at a time when it was common to “hand type” HTML. Today, however, there is no such thing as “seriously malformed2” HTML and most people author content through rich editors, such as WordPress’ 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. This means that today, the primary purpose of wp_kses() is to prune out risks from untrusted inputs, and it’s time for it to get an overhaul.
As part of #66208, PR#13271 replaced the implementation of wp_kses() with a new one based on the HTML API. This update replaces a complicated chain of functions, string processing, PCRE regular expressions, and outdated logic to ensure that WordPress can perform its sanitization role reliably and comprehensibly.
The purpose of this proposal is to introduce minor changes to the WordPress CSS Coding Standards required to integrate Stylelint into CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress.. Please keep any feedback focused on the scope of these minor changes.
On TracTracAn open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress.ticketticketCreated for both bug reports and feature development on the bug tracker.#29792 a proposal has been made to introduce a CSSCSSCascading Style Sheets. linter to check for syntax errors and enforce the CSS Coding Standards for Core. A versioned version of the current standards is available on the WordPress Coding StandardsWordPress Coding StandardsThe Accessibility, PHP, JavaScript, CSS, HTML, etc. coding standards as published in the WordPress Coding Standards Handbook.
May also refer to The collection of PHP_CodeSniffer rules (sniffs) used to format and validate PHP code developed for WordPress according to the PHP coding standards. Docs repository.
While syntax errors are already caught by postcss, the coding standards aren’t currently enforced. There is now a proposal to introduce Stylelint as a tool to enforce them. Stylelint has been used in the 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/ editor repository for several years, and is widely used in the tech industry. It’s a flexible and powerful tool that will help make sure no new standards errors are introduced, for better compliance and future maintainability.
To introduce Stylelint in Core and in the WordPress Continuous Integration pipeline, a minor update to the CSS Coding Standards must happen first. A pull request is ready on the related repository for the proposed update.
The proposed changes
Two changes are relevant, while others are minor or purely cosmetic changes. The rest of the Stylelint configuration matches the current coding standards.
Blank lines
The sentence Add two blank lines between sections and one blank line between blocks in a section is changed to Add one blank line between sections and between blocks in a section.
Rationale: Stylelint can’t distinguish between blank lines that come before sections and blocks in a section. As such, the rule is simplified to require one blank line everywhere.
The order property and the reverse values
In the Properties and in the Values sections, two new bullet points are added to require avoiding the usage of the order property and the *-reverse values. Note that this matches the rules that are already in use in the Gutenberg repository.
Rationale: the order property and the *-reverse values are known to be potentially harmful for 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). For accessibility reasons, visual, reading, and DOM order must match. Only use order and the reverse values when they do not affect reading order, meaning, and interaction.
Authors must use order only for spatial, not logical, reordering of content. Style sheets that use order to perform logical reordering are non-conforming.
Authors must not use order or the *-reverse values of flex-flow/flex-direction as a substitute for correct source ordering, as that can ruin the accessibility of the document.
Minor and cosmetics changes
Added explicit exceptions to lowercase values for:
currentColor
optimizeLegibility
Changed the sentence Things that are not yet used in core itself, such as CSS3 animations ... by removing the part: such as CSS3 animations because CSS3 animations are now used in Core.
Entirely removed the following bullet point:
An exception is made for the wp-admin.css file in core, as it is very large and each section essentially represents a stylesheet of its own. Media queries are therefore added at the bottom of sections as applicable.
because wp-admin.css is no longer split into sections.
Other changes are purely cosmetic, for example long sentences have been split into bullet points for better readability.
Proposed timeline
I would like to propose leaving this proposal open for comments for one week to gather feedback and any concerns. After a week, in the absence of significant objections, I suggest proceeding with the update.
Any feedback and comments are welcome.
Note on future plans
Once Stylelint will be in place, WordPress will have a solid baseline for further Core CSS improvements. If the CSS Coding Standards require major changes, they can be considered based on actual data provided by Stylelint. This could be addressed in a future, more wide-ranging proposal.
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.
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
@westonruter shared that prefetching has finally been committed in changeset 64120. The next step is to default script and style concatenation to off outside development environments in PR #13090. After that, the plan is to remove load-scripts.php and load-styles.php, along with the concatenation and compression logic that has been problematic for many years.
Open Floor
@westonruter noted performance gains in PHPStan 2.3.0: a full uncached analysis of WordPress coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. went from 60 seconds to 8 seconds. He shared the PHPStan 2.3.0 release post.
WordPress 7.2 is scheduled for release on December 8, 2026! Below is the proposed calendar with expected start times for each release party, and the release squad contributors involved in release parties for the upcoming 7.2 milestone.
This release party schedule will stay in effect during 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 and the final release of WordPress 7.2. This enables contributors to attend and assist with release testing during the final weeks of the release cycle.
As always, there may be last-minute adjustments. The release squad will do its best to communicate any changes promptly by publishing a post on the change, and updating this post as the canonical reference.
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.
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. 1
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
Over the last few days, there have been a few actions taken on TracTracAn open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. and in the WordPress 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/ organization that are aimed at clarifying who is looking after areas of the project, and making it easier for contributors to do their work.
Maintainer Cleanup
The lists of CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. Component Maintainers and Core Bug GardenersBug GardenerA contributor who has been given advanced privileges in Trac. have been updated to remove contributors where they have either moved on from contributing to the project, have not contributed regularly to a given component, or have not connected their GitHub and WordPress.org accounts. If you feel that you were removed in error, please DM @desrosj or @jorbin in SlackSlackSlack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/ or comment below and you can be re-added.
As always, anyone is welcome to be a Component Maintainer or Bug Gardener. If you are interested in contributing to the project in these ways, feel free to volunteer in the comments below, share your interest during a Core Dev Chat or in #core, or stop by a component meeting in Slack if the one you’re interested in holds them regularly. Additionally, please ensure your GitHub and WordPress.org accounts are connected.
WordPress Organization GitHub Teams
The following teams have been added to the WordPress/wordpress-develop repository with triagetriageThe act of evaluating and sorting bug reports, in order to decide priority, severity, and other factors.-level access:
Gutenberg: Contributors with multiple PRs merged to 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/. This is roughly the Gutenberg equivalent of Trac bug gardeners.
Members of the WordPress Core PR Triage team have also been invited to the new WordPress Core Bug Gardeners. Since this group’s permissions and purpose align with the responsibilities of being a Bug GardenerBug GardenerA contributor who has been given advanced privileges in Trac., the old team was unnecessary.
Assigning triage-level access will allow team members to request code reviews from other members of the WordPress organization, assign labels, and generally help garden pull requests.
Efforts have been made to ensure all existing component maintainers and bug gardeners are imported to these groups, but some contributors may have been missed. If you received an invitation, it must be accepted within 7 days. Please comment on this post if you believe you were accidentally missed.
An update on the Presence APIfeature pluginFeature PluginA plugin that was created with the intention of eventually being proposed for inclusion in WordPress Core. See Features as Plugins, announced in April. Here’s everything that’s shipped since then.
Current version: 0.14.0. Requires WordPress 7.0 and PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher 7.4.
Post locks live in the presence table, so refreshing one no longer bumps the posts cache key.
Every 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. now requests the right resolution for retina screens (#481).
The “someone else updated this” banner shows up again correctly if you dismiss it and someone edits again (#371).
Keyboard users can reach every item in the adminadmin(and super admin) bar menu, and focus stays put when the dashboard widgets refresh (#271, #275, #390).
One tab now polls and shares results with the rest, background tabs stop sending presence, and idle screens back off automatically (#300, #307, #675).
The Editors column and the Online users list refresh on each heartbeat (#604, #606).
Site Health tells you when Heartbeat can’t keep presence current (#544).
Recording and privacy
Recording is on by default. Switch it off for one site on Settings > General, or for every site at once on Networknetwork(versus site, blog) Admin > Settings. If either switch is off, recording is off, and post locks keep working either way (#429, #442). A privacy policy section, exporter and eraser cover presence data too (#449).
Each site has its own switch.The network switch overrides every site’s own setting when it’s off.
From WP-CLIWP-CLIWP-CLI is the Command Line Interface for WordPress, used to do administrative and development tasks in a programmatic way. The project page is http://wp-cli.org/https://make.wordpress.org/cli/, run wp presence recording set off, or add --network for the whole network.
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
Network Admin now shows who’s online across every site, with matching REST and WP-CLI. It’s on by default for networks below wp_is_large_network(), and the wp_presence_network_aggregation_enabledfilterFilterFilters 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. turns it on or off (#332, #365).
Each site writes a summary row, so Network Admin reads one table instead of every site’s.
Post locks
Post locks now live in the presence table instead of 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., so refreshing a lock no longer invalidates every cached post query on sites with a persistent object cache (#551). Locks keep working with recording switched off (#644).
Every post type
Presence works on every post type with an editor, including what the Site Editor has open (#631, #638). Roles that can edit only pages or a custom post typeCustom Post TypeWordPress can hold and display many different types of content. A single item of such a content is generally called a post, although post is also a specific post type. Custom Post Types gives your site the ability to have templated posts, to simplify the concept. get presence too (#637).
Who sees what
Everyone online still appears in the admin bar, but where they are is now behind the view_presence_locationcapabilitycapabilityA 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)., which maps to list_users by default (#571). Everyone can always see their own. The admin bar shows whole faces beside My Account (#565, #574). A face is ringed in the person’s 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 color only when you’re both in the same post, the way the editor shows it, and in your admin color scheme everywhere else (#707).
With it, administrators see where each person is.Without it, editors see who is online but not where.
AI agents
An AI agent editing over REST or MCP sends no Heartbeat, so it wouldn’t show up on its own. As of 0.13.0, each save writes a presence row for it in that post’s room, and the row expires about 75 seconds after its last save by default. The row appears in the admin bar and the Editors column with an Agent badge (#653, #697, #701).
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. doesn’t decide who is an agent. It asks the Agent Users plugin through wpai_is_agent_user() when that’s loaded, and any plugin can answer through the wp_presence_is_agent_user filter. With neither, nobody is labeled.
Performance
In 0.12.2, each presence query is read once per request until the table changes, which took a Users screen heartbeat from 6 presence reads to 2 (#678). The plugin also stopped checking its tables on every admin page (#657, #682), and only one visible tab per site sends the Heartbeat 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.” (#675).
For developers
As of 0.14.0, REST presence entries no longer include color, and wp_presence_get_user_color() returns the block editor’s color for a user ID instead of a stored one (#707).
New functions: wp_presence_exchange(), wp_presence_leave() and wp_presence_is_available(), documented in the PHP API section of the README (#546, #519).
Each row carries its own expiry, and reads filter by client ID prefix in SQL (#541, #530).
An admin bar debugger replaces the 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 plugins can add their own rows to it (#652, #666). It’s a development tool: it loads only with WP_DEBUG on and isn’t in the WordPress.orgWordPress.orgThe community site where WordPress code is created and shared by the users. This is where you can download the source code for WordPress core, plugins and themes as well as the central location for community conversations and organization. https://wordpress.org/ download, so use a git checkout or the plugin’s Live Preview in Playground.
Gutenberg Sync Engines, a plugin for trying server-aware real-time collaboration, keeps who’s in the editor in the presence table when Presence 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 active too. To see it, launch the RTC Playground, which opens a post shared with two seeded collaborators, and open the debugger: their rows start with gse-.
101 people online, each row showing its client ID and seconds since last seen.
“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 is all about design tool consistency, with about 140 dedicated PRs. Background image, size and gradient, shadow, borders, link, heading and button colors, typography and text columns now reach almost every coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress.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 a new text-shadow control arrives alongside them.
More block design tools
Accordion, Tabs, Comments, Post blocks and more all get the same set of background and color tools (dozens of PRs, check the changelog). The Group (#83425), Post Author Biography (#83424), and Terms List (#83432) blocks gain column support. Tabs (#83431) and Tab Panel (#83428) gain typography controls.
Expanded text shadow support
The text shadow functionality introduced in Gutenberg 23.5 (#73320) now is fully supported by 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., gains its own panel in Global Styles, and is available by the Paragraph and Heading blocks (#79584).
Media selection in the block inspector panel
The block inspector panel of the Cover (#82751) and Media & Text (#82593) blocks has a new media selection functionality, matching the Image and Site Logo blocks.
Other notable highlights
Start page patterns: the modal now has categoryCategoryThe 'category' taxonomy lets you group posts / content together that share a common bond. Categories are pre-defined and broad ranging. filtering and search (#81396).
Add Template: the modal shows each template’s description (#83064).
Blocks inside patterns: the parent selector now shows for them (#82912).
Alignment menu: unavailable wide and full alignments are listed as unavailable instead of silently disappearing (#82600).
Viewport states: position can be set per viewport (#83094), and custom controls get 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. for viewport states (#82741).
Icon redraw finished: the last 238 icons were converted to strokes (#82540, #82754), completing the redraw started in 24.0.
Changelog
Features
Components
UIUIUser interface: Add CheckboxGroup form primitive. (82556)
Adminadmin(and super admin) bar: 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. removal of site icon background from 7.1.1. (83433)
Command Palette: Only add the admin bar node when Core does not provide it. (82733)
Post Date: Add background gradient support. (83218)
Post 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.: Add background image, size, and gradient support. (83221)
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.: Add context to breadcrumbs area label. (78134)
Components
Autocomplete: Show focus with design system’s focus ring. (82766)
Links: Update LinkControl and LinkPicker to use Badge from wordpress/ui. (82684)
BoxControl: Migrate the side indicator to an SCSS module. (82570)
Checkbox: Align CheckboxControl border, hover, and disabled colors with UI. (83271)
Checkbox: Align CheckboxControl checkmark and disabled styles with UI. (82555)
Checkbox: Expand hit target without changing visual size. (82597)
Circular Option Picker: Show focus with button’s outline ring. (82521)
Custom Gradient Picker: Show the control point’s focus ring with the design system’s outline. (82834)
DataViews: Let a picker compose its footer from the page select and its actions. (83281)
Palette: Use wordpress/ui Menu for palette options. (82768)
Radio: Expand hit target without changing visual size. (83275)
Select Positioner: Revert to Base UI alignItemWithTrigger default. (82043)
Snackbar: Clean up legacy focus/button overrides in Snackbar and Notice. (82640)
Storybook: Fold Foundations, DataViews, Fields, Admin UI and Icons under Design System. (82430)
Storybook: Group 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, Widget Dashboard and Grid under Widgets. (82431)
Storybook: Group component packages under Components. (82433)
Storybook: Group the editor UI under Editor. (82432)
Storybook: Guard the set of top-level 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. folders with a test. (82436)
Storybook: List every top-level folder in the sidebar order, design system first. (82429)
Storybook: Remove the legacy Tokens pages. (82434)
Storybook: Rewrite the introduction page as the front door of the design system. (82437)
Storybook: Show the component status in the sidebar as status-* tags. (82435)
UI: Add Select.ItemLabel and ItemDescription. (82369)
UI: Add statusContent to searchable selects. (82592)
UI: Tighten Fieldset legend and description gap. (82729)
Post Editor
Collaborators: Update to use design system’s focus ring in 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.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. stack when collaborator is present. (82941)
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. field: Support the editor.PostFeaturedImage 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 post summary. (83133)
Global Styles: Switch 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. screen to the DataViews pickerActivity layout. (80856)
Keycodes: Add a shared keyboard shortcut representation helper. (82632)
Media Utils: Stabilize unstableFeaturedImageFlow as featuredImageFlow. (83439)
Patterns: Add category filtering to the start page options patterns modal. (81396)
Post Taxonomies: Replace FormTokenField in the flat term selector. (80967)
Textarea: Replace TextareaAutosize with native textareas and field-sizing. (64208)
Block Editor
Blocks: Highlight the block when its content list item is hovered. (83049)
Blocks: List unavailable wide and full alignments instead of hiding them. (82600)
Block Editor: Consolidate search ranking into one shared module. (83312)
Block Inspector: Enable setting position within viewport states. (83094)
ship required icons for admin bar and menu with public: False. (79451)
Dashboard
Widget Dashboard: Default tile padding to padding-lg. (82961)
Widget Dashboard: Show a clipped widget title in the header infotip. (82226)
Widget Dashboard: Use UI Menu for dashboard controls. (81929)
Widget Dashboard: Use UI Spinner and remove Components dependency. (82837)
Widget Primitives: Add HostLink over the links 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).. (82952)
Widgets: Carry declarative attributes through the widget pipeline. (82485)
DataViews
Excerpt field: Render nothing when the excerpt is empty. (82423)
Fields: Use the post type labels in the featured image field and drop mediaUploadProps. (83445)
Data Layer
Data: Add getResolutionArgs to share a resolution across selector calls. (82638)
Data: Stabilize __unstableNormalizeArgs as normalizeArgs. (83067)
Site Editor
Add Template: Show template descriptions in the template list. (83064)
ExtensibleExtensibleThis is the ability to add additional functionality to the code. Plugins extend the WordPress core software. Site Editor: Use the view configuration form for Quick Edit. (82962)
Fix: Social Icons: In-between inserter does not work. (83327)
Hide alignment control when nothing available. (83265)
Inner Blocks: Support legacy inherit-based layouts. (82637)
Keep the iOSiOSThe operating system used on iPhones and iPads. keyboard capitalized after Return inside the editing host. (82911)
Link Control: Only 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.) pages as the front page or blogblog(versus network, site) home. (83082)
Media: Detect HEIC uploads from the file header rather than the file name. (81737)
Media: Stop injecting crossorigin attributes under Document-Isolation-Policy. (82614)
PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher-only blocks: Detect enums in array attributes. (83394)
Revise block direct dragging to fix adjacent issues. (72983)
Rich text: Fix mobile selection hair pin grab at edge of block. (83041)
Rich text: Select an inline image by clicking it, and show the edit UI of the object clicked. (83370)
Rich text: Show the format boundary when the canvas root has focus. (83385)
Show the in-between inserter on wrapped lines. (83276)
Components
BorderBoxControl: Restore the split borders layout. (82939)
DataForm: Hide the edit button of disabled fields in the panel layout. (82957)
DataViews: Label clickable grid media by the item title when the title is hidden. (82639)
Give control labels an explicit foreground color. (83318)
Menu: Fix vertical alignment across item combinations. (82847)
Storybook: Load the media editor package styles in its stories. (83303)
Storybook: Omit the recommended checkmark from the sidebar. (83309)
Post Editor
Avoid re-registering command loaders on every render. (82819)
Distraction Free: Raise top bar above notices when revealed by hover or keyboard focus. (80349)
Editor: Add a fixedRenderingMode prop for contexts with one mode. (82711)
Editor: Coerce multiple to a boolean in the media modal wrapper. (82715)
Editor: Default block gap is ignored in the editor for themes without block gap support. (82401)
Editor: Honor post types in post-thumbnails theme support when registering the featured image field. (82773)
Fix post editor: 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 become invisible in Code Editor view. (78644)
PostLastRevisionPanel: Fix doubled focus ring on the revisions button. (82955)
Template panel: Hide edit and create actions from users who can’t create templates. (82858)
Site Editor
Site Editor: Restore Global Styles access on the front page. (82624)
Site Editor v2: Show the template on the routes that show the site. (82712)
Allow rect and circle in the registry sanitizer. (82846)
Restore the dimmed box on the side and corner icons. (82940)
DataViews
Fields: Hide the date, author and password fields when the user can’t publish or reassign. (82844)
Fields: Show the template field to users who can’t create templates. (82857)
Show a message in MediaEdit when the user can’t upload media. (82720)
Connectors screen
Add missing listitem role to ConnectorItem. (82664)
Fix Connectors and Fonts pages background color and contrast. (82827)
Media
Media Editor: Fix crop canvas handlers and rotation ruler in RTL. (83304)
Upload media: Guard processItem against re-entrant dispatch. (83031)
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)
Components
UI: Fix highlighted item indicator in forced-colors mode. (82772)
Widgets Editor
Fix: Widgets 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. Undo and Redo buttons are disabled and the document tools focus style is not visible. (82412)
Widgets: Fix the Welcome Guide menu item triggering a preference speak message. (82395)
Performance
Data Layer
Data: Defer async-mode useSelect notification to idle time. (82821)
Data: Keep a pending listener when store not yet registered. (83346)
Data: Optimize store listeners and their execution. (82842)
Block Editor
Avoid a store subscription per inserter item. (83434)
Stop rendering a hidden drag preview and a media query per draggable. (83423)
Documentation
API Fetch: Document that requests are meant for the current site’s 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/. (82373)
Data: Fix the latest changelog entry and structure. (82959)
DataViews README: Clarify readOnly vs isDisabled. (82956)
Docs: Add blank line between since and param/return in block parser. (82690)
Docs: Add missing since tags to two functions. (83116)
UI: Document that public –wp-ui-* CSSCSSCascading Style Sheets. custom properties are frozen. (83147)
UI: Mark Select and SelectControl as recommended. (83030)
UI: Place Fieldset description after the legend in stories. (83144)
Code Quality
CI: Disable setup-node npm caching in the Create Block packed package job. (82833)
CI: Keep the bundled npm when devEngines is absent. (82823)
CI: Stop actions/setup-node from invoking the bundled npm. (82775)
Code Modernization: Use null coalescing operator in WP_Block_Parser methods. (82763)
Global Styles: Replace experimental ZStack in the palette preview. (83060)
Interactivity API: Remove the interactivity-router script module data shim. (83011)
Monorepo tools: Move the experimental API audit out of bin/. (83081)
Release tools: Move 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. ZIP build out of bin/. (83087)
Tooling: Add wordpress/monorepo-tools to root devDependencies. (82824)
Tooling: Name the shared tsconfig presets tsconfig.*.json. (83077)
Unit Tests: Resolve @ariakit/utils through its dependents. (82756)
Upgrade ReactReactReact is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces.
https://reactjs.org 19 to 19.3.0. (82760)
Layout 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.: Roll out usage of normalizeLegacyLayout to the block-editor layout hooks. (82710)
Remove the deprecated __experimentalGroup prop. (83171)
Remove the zero width space hack from getRectangleFromRange. (82977)
Replace denylisted layout components in the Duotone filter label. (83061)
Replace experimental ZStack in overlapping color indicators. (83062)
Rich text: Separate applying the selection from focusing the field. (82581)
Update block visibility badges to use from wordpress/ui package. (82670)
Post Editor
Collaborators Presence & Document Bar: Clean up styles by removing overrides. (83013)
Editor: Remove pass-through more menu Slot wrappers. (82759)
Interface: Convert the package to TypeScript. (82753)
Interface: Fix the ActionItem click handler and selector types. (82758)
Post template panel: Remove the dead template read capability check. (82861)
Use WCCheckboxControl alias for legacy CheckboxControl imports. (83145)
Use WCSelectControl alias for legacy SelectControl imports. (83027)
Data: Remove the unused AsyncModeConsumer export. (82822)
Block Library
Calendar Block: Use the args array signature of get_calendar(). (82943)
Icons
Test that the registry sanitizer preserves every library icon. (83008)
Test the registry sanitizer with a data provider. (83024)
wp-build
Build: Declare wordpress/theme as a dev dependency of wordpress/build. (83129)
Widget primitives
Fix prettier lint issues after prettier upgrade. (83015)
Plugin
Icons: Move plugin icon registration out of the 7.1 compat directory. (82832)
Bump minimum required WordPress version to 7.0. (82404)
Font Library
Fonts: Remove the deprecated Fonts API BC layer and leftovers. (82813)
Jest console
Test: Remove obsolete internal test setup and transforms. (82761)
Tools
CI: Run the required 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. changes check through the pr-baseline action. (82725)
CI: Scope the required trunk changes refresh to what a move can invalidate. (82767)
Project Management: Exclude private APIs configuration from CODEOWNERS. (82750)
Testing
Automated Testing: Document and validate expected changelog structure. (83043)
Customize Widgets: Fix asynchronous updates in the header history test. (82963)
E2E: Reset preferences in the post editor preload spec. (82818)
Fields: Resolve the MediaEdit picker through the editor.MediaUpload filter. (82678)
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. adm-zip audit failure in AI development tests. (83170)
Move the unit-test-date.sh script to workspace, rewrite to JSJSJavaScript, a web scripting language typically executed in the browser. Often used for advanced user interfaces and behaviors.. (83066)
Scripts: Switch unit tests to Vitest and deprecate Jest tooling. (82843)
Speed up collaboration end-to-end by shortening poll interval. (78746)
Test: Finish repository Vitest migrationMigrationMoving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. and expand Browser Mode coverage. (82742)
Test: Run rendered browser behavior in Vitest Browser Mode. (80995)
Test: Strengthen Menu 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. listener cleanup assertions. (82575)
Tests: Isolate deprecation warnings between cases. (83097)
Tests: Remove obsolete internal Jest infrastructure. (82975)
Tests: Update Testing Library DOM to 10.4.2. (83279)
Build Tooling
AI development tests: Use repository Node version. (82662)
Dependency Extraction Webpack Plugin: Add global-styles-engine and global-styles-ui as bundled packages. (82589)
Packages: Backport the September 10 npm release metadata to trunk. (82709)
Packages: Remove npm from package engines. (83326)
Release: Verify SVNSVNSubversion, the popular version control system (VCS) by the Apache project, used by WordPress to manage changes to its codebase. deployment after publication. (82513)
Stylelint: Add –_wp-* to custom-property-pattern rule. (83075)
Stylelint: Add custom-property-pattern to disallow –_gcd-* custom properties. (83025)
Test: Make browser tests independent of execution order. (82743)
TypeScript: Give each widget its own typecheck project. (83328)
Workflows: Refine and complete the push and pull_request branchbranchA directory in Subversion. WordPress uses branches to store the latest development code for each major release (3.9, 4.0, etc.). Branches are then updated with code for any minor releases of that branch. Sometimes, a major version of WordPress and its minor versions are collectively referred to as a "branch", such as "the 4.0 branch". filters. (82744)
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.
@ericmann asked to open a conversation about the Secrets 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., TracTracAn open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress.#66187 . A PR for integrating 2FA has been opened and broader conversation on the API approach would be valuable to establish a trajectory prior to the 7.2 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. period.
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.
TL;DR: WordPress Contributor Toolkit v1.2.0 has been released providing full CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. and 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/ contribution workflows for first-time contributors.
The WordPress Contributor Toolkit was created to remove the points of friction first-time contributors face before they write a line of code, especially during Contributor Days, but is becoming a great tool also for experienced contributors.
The app started by providing a seamless setup of a full WordPress contribution development environment, the first wall most newcomers hit. Version 1.0 brought a full Core contribution workflow into the app: from reading a TracTracAn open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress.ticketticketCreated for both bug reports and feature development on the bug tracker. and testing the work attached to it, to sending your own fix back as a pull request or a Trac 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., without ever leaving the app.
Now, version 1.2 adds also a full Gutenberg contribution workflow.
A first Gutenberg contribution, from start to finish
A Gutenberg contribution follows the same path as a Core ticket in the app: create a site, link the work item, try the work that already exists, write your fix, and send it.
1. Create a Gutenberg site
Click Create a site, choose a folder, and pick what the site contributes to: WordPress Core, the default, or Gutenberg. That choice decides what the site clones, how it builds and how it runs, and it cannot be changed afterwards. Everything else is the same app: 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., the terminal, the review screen, the ways to submit.
A Gutenberg site clones 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’s repository, installs its dependencies with the bundled npm 11, and builds the packages, all as one continuous setup. When it finishes, click Start dev server. The app runs a stock WordPress in Playground with your checkout mounted as the Gutenberg plugin, already activated. Posts, settings and uploads survive stopping the server and restarting the app.
Setup ends with a full build, so the server starts in seconds. To have what you save recompiled, click Start build watch, which runs Gutenberg’s own npm run dev. It rebuilds everything once, then recompiles each save.
2. Link the site to a 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/ issue
Where a Core site has its Trac ticket card, a Gutenberg site has a GitHub issue card. Enter the issue number or paste its URLURLA specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org to link the issue to the site.
The issue gets its own branchbranchA directory in Subversion. WordPress uses branches to store the latest development code for each major release (3.9, 4.0, etc.). Branches are then updated with code for any minor releases of that branch. Sometimes, a major version of WordPress and its minor versions are collectively referred to as a "branch", such as "the 4.0 branch". inside the site, so everything ticket branches do on a Core site works here too: switch between issues in seconds, park work you are not ready to finish, move an issue onto the current 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. with one click.
Click Review & submit changes to inspect the complete diff. On a Gutenberg site the destination is Open a pull request. You sign in to GitHub through the device flow, and the app forks WordPress/gutenberg to your account, pushes a branch and opens the pull request through 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.. The authorization lives in memory only, and is gone when you quit the app.
The form asks for a title and notes for reviewers. Gutenberg reviewers want testing steps, so that is where they go: what to open, what to click, what should happen. The app adds the Fixes #N line for you, so the pull request appears on the issue as soon as it opens. There is nothing to post anywhere else.
Every site is a real GitGitGit is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. Git is easy to learn and has a tiny footprint with lightning fast performance. Most modern plugin and theme development is being done with this version control system.
https://git-scm.com/ repository
Since v1.1, a pull request you try arrives as its own branch with its author’s commits, its conflicts are the same ones GitHub reports, and your ticket can move onto today’s trunk. That comes from one change: the app now ships Git itself (the client GitHub Desktop uses) instead of the 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 reimplementation 1.0 relied on.
It runs with none of your machine’s settings, and you never see it. A Git you already have, or the lack of one, changes nothing about how a site behaves.
Every operation is now a Git command run on your behalf. Creating a site is a clone, linking a ticket is a branch, applying a patch is git apply, trying a pull request is a fetch and a checkout, updating trunk is a fetch and a merge. What the app does in that folder is exactly what you would see if you had typed the commands yourself. That also means a patch fits or fails the way it will for the reviewer, and when it fails the app names the regions that failed and leaves the checkout unchanged.
What this gives you:
The whole history, from the terminal or your editor. Open the site folder and git log, git blame and git bisect work as they do on any clone. A new site brings the full history of wordpress-develop or Gutenberg, fetching old file contents only when something asks for them, so it is not much larger than the shallow clone 1.0 made.
A pull request you apply shows up as its author’s commits. After Apply…, git log lists the pull request’s commits, with their authors, on a pr/N branch. You can read them, diff them, and see exactly what you are testing.
Your work is on branches you can name. Each Core ticket lives on ticket/N, each Gutenberg issue on issue/N, each pull request you try on pr/N. Parking a ticket in the app is a checkout, and git branch shows everything the app is holding for you.
The site outlives the app. Delete the app, or open the folder on another machine, and the repository continues with whatever Git is there. Nothing you did depends on the Toolkit staying installed.
Working from the terminal is fine too. Reading the site with git log or git diff never gets in the app’s way, and if you start a merge or a rebase yourself the app waits: it refuses to write until you finish or abandon it, and names the commands that do either.
Sites created before 1.1 cannot be written to by this version. You can still read them and save their work as a patch, but to keep contributing you create a new site. The app says so on the site’s card, and offers to create one.
Links from your browser
Since 1.1 the app answers wpct://ticket/N links, so a link can hand a Trac ticket to the app instead of making you type the number. The app asks before it links the ticket to the site you have open, because linking switches branches, and a ticket link that arrives while a Gutenberg site is open waits for a Core site. On Windows, open the app once before trying a link.
This enables much smoother contribution workflows. For example, with WP Trac Triager, a Chrome extension for triaging Core Trac tickets, every ticket on Trac gets a link that opens it in Contributor Toolkit, with its pull requests ready to test.
Help shape the next version
Try it on a real ticket or issue and tell us how it went:
Something broke?Open an issue with what you did and what happened.
Something felt off? Use the feedback form, or the feedback button in the app.
Want to talk it through? Ask in #core, or #core-editor for the Gutenberg flow, or comment below.
Gutenberg support is new, so the most useful reports come from taking an issue all the way to a pull request.
You must be logged in to post a comment.