Progress Report: wp_kses()

Since its inception, WordPress has relied on the KSES1 subsystem to sanitize HTMLHTML HyperText 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’ BlockBlock Block 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.

Continue reading →

#html-api, #html-api-progress-report, #progress-report

Performance Chat Summary: 6 October 2026

The full chat log is available beginning here on Slack.

WordPress Performance TracTrac An 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 coreCore Core 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.

Our next chat will be held on Tuesday, October 20, 2026 at 16:00 UTC in the #core-performance channel in Slack.

#core-performance, #hosting, #performance, #performance-chat, #summary

Presence API: What’s new

An update on the Presence API feature pluginFeature Plugin A 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 PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher 7.4.

The Posts screen, where four locked posts show a lock icon and a note naming who is editing, such as "Quinn Roberts is currently editing". An Editors column on the right shows the faces of everyone in each post.
Post locks live in the presence table, so refreshing one no longer bumps the posts cache key.

In this post

What’s new since April

  • Every avatarAvatar An 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).

Settings > General with a checked "Record who is working where in the admin" checkbox under Presence.
Each site has its own switch.
Network Admin Settings with a checked "Record presence on sites in this network" checkbox under Presence, noting that switching it off stops recording everywhere, whatever an individual site has chosen.
The network switch overrides every site’s own setting when it’s off.

From WP-CLIWP-CLI WP-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.

Multisitemultisite Used 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_enabled filterFilter Filters 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).

Network Admin Users screen filtered to Online, with an Online column listing the sites each user is active on.
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 metaMeta Meta 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 Type WordPress 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_location capabilitycapability A 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 blockBlock Block 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).

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 pluginPlugin A 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.

The Presence menu with Editorial Assistant, marked with an "Agent" badge, listed under "Weekend Arts Guide" next to Alex Smith.

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 pingPing The 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 widgetWidget A 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.org The 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.
  • Writes work on SQLite (#623).
  • Gutenberg Sync Engines, a plugin for trying server-aware real-time collaboration, keeps who’s in the editor in the presence table when Presence APIAPI An 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-.
The Presence debugger opened from the admin bar on the Dashboard. It shows a 60-second interval and a 150-second TTL, then the admin/online room with 101 rows. admin, Kendall Wilson and Toby Martinez are listed first with blue dots, matching the faces of the people on the Dashboard in the admin bar.
101 people online, each row showing its client ID and seconds since last seen.

Feedback welcome

Discussion and development: #feature-presence-api on WordPress SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/

Bug reports and discussion: GitHub Issues

Thank you to @mindctrl, @iqbal1hossain, and @iamchitti for reviewing this post.

Props to @intenzi, @ashishjii, @iamchitti, @iqbal1hossain, @wp24horas, @aldorza, @bejignesh, @stfulldev, @obenland, @moriikuri, @ishitaj34, @theaminuldev, @muneebashraf, @mindctrl, @zahidui, @mitgiselle, @jaredrethman, @jooahmed and @westonruter for contributing.

#performance, #presence-api

What’s new in Gutenberg 24.1? (30 September)

“What’s new in GutenbergGutenberg The 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.

What’s new in
Gutenberg 24.1?

Gutenberg 24.1 has been released and is available for download!

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 coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. blockBlock Block 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

Screenshot of a block inspector sidebar showing the new background 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

Screenshot of a block inspector sidebar showing the new text shadow tools.

The text shadow functionality introduced in Gutenberg 23.5 (#73320) now is fully supported by theme.jsonJSON JSON, 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

Screenshot of a block inspector sidebar showing the new media selection tools.

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 categoryCategory The '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 APIAPI An 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

  • UIUI User interface: Add CheckboxGroup form primitive. (82556)
  • UI: Add RadioGroup form primitive. (83038)
  • UI: Add RadioGroupControl. (83143)
  • UI: Add Switch form primitive. (83039)
  • UI: Add SwitchControl component. (83146)

Enhancements

  • Adminadmin (and super admin) bar: Backportbackport A 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)

Block Library

  • Accordion Item: Add background gradient support. (83197)
  • Accordion Item: Add link, heading, and button colour support. (83371)
  • Accordion Panel: Add background image, size, and gradient support. (83201)
  • Accordion Panel: Add link, heading, and button colour support. (83374)
  • Accordion: Add link, heading, and button colour support. (83373)
  • Archives: Add background image, size, and gradient support. (83198)
  • Audio: Add link colour support. (83375)
  • Block API: Add textShadow typography support and UI. (79584)
  • Block API: Public API for supporting viewport states in custom controls. (82741)
  • Block API: Re-enable editableRoot for multi-selection on mobile web. (81542)
  • Breadcrumbs: Add background gradient support. (83202)
  • Buttons: Add background image, size, and gradient support. (83203)
  • Code: Add background image, size, and gradient support. (83204)
  • Code: Add shadow support. (83014)
  • Column: Add background image, size, and gradient support. (83205)
  • Columns: Add background image, size, and gradient support. (83206)
  • Comment Author Name: Add background gradient support. (83207)
  • Comment Content: Add background gradient support. (83208)
  • Comment Content: Add heading and button colour support. (83376)
  • Comment Date: Add background gradient support. (83209)
  • Comment Edit Link: Add background gradient support. (83210)
  • Comment Reply Link: Add background gradient support. (83211)
  • Comments Next Page: Add background gradient support. (83215)
  • Comments Page Numbers: Add background gradient support. (83216)
  • Comments Pagination: Add background gradient support. (83219)
  • Comments Previous Page: Add background gradient support. (83220)
  • Comments Title: Add background gradient support. (83217)
  • Comments: Add background image, size, and gradient support. (83212)
  • Comments: Add button colour support. (83378)
  • Cover: Add a Media section to the block inspector panel. (82751)
  • Details: Add background image, size, and gradient support. (83222)
  • Details: Add heading and button colour support. (83381)
  • Details: Add shadow support. (83021)
  • File: Add background image, size, and gradient support. (83223)
  • Footnotes: Add background image, size, and gradient support. (83224)
  • Footnotes: Add shadow support. (83044)
  • Gallery: Add background image, size, and gradient support. (83225)
  • Gallery: Enable viewport state values for Gallery aspect ratio. (82233)
  • Group: Add text columns support. (83425)
  • Heading: Add background image, size, and gradient support. (83226)
  • Heading: Add shadow support. (83045)
  • Home Link: Add background image, size, and gradient support. (83230)
  • Home Link: Add border support. (83360)
  • Home Link: Add shadow support. (83046)
  • Icon block: Don’t render non-public icons on the frontend. (82774)
  • Latest Comments: Add background image, size, and gradient support. (83227)
  • Latest Comments: Add shadow support. (83047)
  • Latest Posts: Add background image, size, and gradient support. (83228)
  • Latest Posts: Add shadow support. (83051)
  • Login/out: Add background image, size, and gradient support. (83229)
  • Login/out: Add shadow support. (83050)
  • Math: Add background image, size, and gradient support. (83231)
  • Math: Add shadow support. (83052)
  • Math: Improve inline block UI. (77743)
  • Media & Text: Add a Media section to the block inspector panel. (82593)
  • Media & Text: Add button colour support. (83380)
  • Navigation Overlay Close: Add border support. (83362)
  • Navigation Overlay Close: Add shadow support. (83053)
  • Next Page: Add background gradient support. (83232)
  • No Results: Add background image, size, and gradient support. (83233)
  • No Results: Add heading and button colour support. (83382)
  • No Results: Add shadow support. (83054)
  • Page List: Add background image, size, and gradient support. (83234)
  • Page List: Add shadow support. (83056)
  • Page Numbers: Add background gradient support. (83235)
  • Pagination: Add background gradient support. (83236)
  • Playlist: Add shadow support. (83055)
  • Post Author Biography: Add background gradient support. (83199)
  • Post Author Biography: Add text columns support. (83424)
  • Post Author Name: Add background image, size, and gradient support. (83200)
  • Post Comments Count: Add background gradient support. (83213)
  • Post Comments Form: Add background image, size, and gradient support. (83214)
  • Post Comments Form: Add button colour support. (83377)
  • Post Content: Add button colour support. (83379)
  • Post Content: Add shadow support. (83016)
  • Post Content: Add text align support. (83427)
  • Post Date: Add background gradient support. (83218)
  • Post ExcerptExcerpt An 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)
  • Post Excerpt: Add shadow support. (83018)
  • Post Navigation Link: Add border and spacing support. (83122)
  • Post Navigation Link: Add shadow support. (83058)
  • Post Template: Add background image, size, and gradient support. (83237)
  • Post Template: Add heading and button colour support. (83384)
  • Post Template: Add shadow support. (83059)
  • Post Terms: Add background image, size, and gradient support. (83238)
  • Post Terms: Add shadow support. (83175)
  • Post Time to Read: Add background image, size, and gradient support. (83258)
  • Post Time to Read: Add shadow support. (83194)
  • Post Title: Add background image, size, and gradient support. (83260)
  • Post Title: Add shadow support. (83195)
  • Preformatted: Add background image, size, and gradient support. (83239)
  • Preformatted: Add link colour support. (83386)
  • Preformatted: Add shadow support. (83174)
  • Previous Page: Add background gradient support. (83240)
  • Pullquote: Add shadow support. (83177)
  • Query Title: Add background gradient support. (83242)
  • Query Total: Add background image, size, and gradient support. (83243)
  • Query Total: Add shadow support. (83176)
  • Quote: Add shadow support. (83178)
  • RSS: Add background image, size, and gradient support. (83244)
  • RSS: Add shadow support. (83179)
  • Read More: Add background image, size, and gradient support. (83245)
  • Read More: Add shadow support. (83180)
  • Site Tagline: Add background image, size, and gradient support. (83246)
  • Site Tagline: Add fit text support. (83034)
  • Site Tagline: Add shadow support. (83181)
  • Site Title: Add background image, size, and gradient support. (83247)
  • Site Title: Add shadow support. (83182)
  • Social Icons: Add background gradient support. (83249)
  • Submenu: Add shadow support. (83185)
  • Tab Panel: Add background image, size, and gradient support. (83248)
  • Tab Panel: Add border support. (83363)
  • Tab Panel: Add link, heading, and button colour support. (83389)
  • Tab Panel: Add shadow support. (83183)
  • Tab Panel: Add typography support. (83426)
  • Tab Panels: Add background image, size, and gradient support. (83250)
  • Tab Panels: Add button colour support. (83388)
  • Tab Panels: Add shadow support. (83184)
  • Tab Panels: Add typography support. (83428)
  • Table of Contents: Add background image, size, and gradient support. (83251)
  • Table of Contents: Add shadow support. (83187)
  • Table of Contents: Add text align support. (83430)
  • Tabs: Add background image, size, and gradient support. (83252)
  • Tabs: Add border support. (83361)
  • Tabs: Add link, heading, and button colour support. (83390)
  • Tabs: Add shadow support. (83186)
  • Tabs: Add typography support. (83431)
  • Tag Cloud: Add background and link colour support. (83264)
  • Tag Cloud: Add background image, size, and gradient support. (83259)
  • Tag Cloud: Add shadow support. (83188)
  • Term Count: Add background image, size, and gradient support. (83253)
  • Term Count: Add shadow support. (83189)
  • Term Count: Add text align support. (83429)
  • Term Description: Add background image, size, and gradient support. (83254)
  • Term Description: Add shadow support. (83190)
  • Term Name: Add background image, size, and gradient support. (83255)
  • Term Name: Add shadow support. (83191)
  • Term Template: Add background image, size, and gradient support. (83256)
  • Term Template: Add shadow support. (83192)
  • Terms List: Add background image, size, and gradient support. (83257)
  • Terms List: Add shadow support. (83193)
  • Terms List: Add text columns support. (83432)
  • Verse: Add shadow support. (83057)
  • Video block: Remove GIF variation handling. (82696)
  • Video: Add shadow support. (83196)
  • i18ni18n Internationalization, 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)
  • Deprecate Divider. (83040)
  • Deprecate ResponsiveWrapper. (83347)
  • Deprecate Scrollable. (83273)
  • Deprecate ZStack. (83344)
  • Elevation: Deprecate Elevation. (83269)
  • Elevation: Migrate from Emotion to SCSS modules. (82572)
  • Grid: Migrate Emotion styles to SCSS Modules. (82571)
  • Notes: Use UI Menu for note actions. (81930)
  • 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 WidgetWidget A 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 sidebarSidebar A 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 headerHeader The 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. avatarAvatar An 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)
  • Editor: Add left border to Notes panel. (83330)
  • Editor: Use UI Menu for post actions. (81922)
  • Featured imageFeatured image A 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 filterFilter Filters 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: Use UI Menu. (81921)
  • Global Styles: Switch the revisionsRevisions The 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)
  • Block Inspector: Improve style states UI. (82649)
  • Block Inspector: Migrate block-card Badge to UI Badge. (82503)
  • Block Inspector: Stabilize display of inherited global styles and keep UI changes behind experiment. (82840)
  • Block Toolbar: Show the parent selector for blocks inside patterns. (82912)
  • UI: Use UI Menu for bindings and variation transforms. (81925)

Icons

  • Add a core-admin collection for the admin interface. (83261)
  • Allow icons to ship to WordPress Core without exposing them in the Icon block. (82634)
  • Icons: Stroke conversion – 3rd batch, 142 icon updates. (82540)
  • Icons: Stroke conversion – Final batch, 96 icons. (82754)
  • Move the public property from icons to collections. (83277)
  • Rebalance a few, add other new icons. (83338)
  • 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 capabilitycapability A 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)
  • ExtensibleExtensible This 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)

Bug Fixes

  • Env: Preserve complete lifecycle script error output. (82735)

Block Library

  • Cover: Prevent content cutoff when aspect ratio is set in Safari. (70152)
  • Gallery: Skip gap style generation for themes opting out of layout styles. (81633)
  • Image Block: Prevent global link colors from leaking into linked image borders. (79401)
  • Image block: Stop interpreting $/\ in img attributes as regex backreferences. (79369)
  • Image: Restore alt text and caption when undoing a media editor save. (82829)
  • Math: Source the LaTeX from the MathML annotation. (82987)
  • Navigation: Block appender button is 26×24 instead of square. (82718)
  • Navigation: Don’t force submenus open inside a custom overlay. (82596)
  • Navigation: Fix always-open submenus jumping in width on hover. (83142)
  • Navigation: Fix submenu detection leaks between Navigation blocks. (82366)
  • Navigation: Multi-line text of menu items is not aligned. (70917)
  • Pattern block: Run autoembed() before do_blocks(). (82860)
  • Playlist: Fix track selector stability. (81760)
  • Post Title: Remove the inline-block from the title link. (80231)
  • Query Pagination: block ignores the parent block gap in the editor. (82399)
  • Tab Panel: Hide the shadow on closed panels. (83369)
  • Term Name: Block skips the term name display filters. (82365)

Block Editor

  • Block Toolbar: Fix parent selector inserter for locked blocks. (83444)
  • Cover Block: Fix resizable handle visibility on mobile when sidebar is opened. (80355)
  • Find focusable image map areas. (82736)
  • 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 iOSiOS The operating system used on iPhones and iPads. keyboard capitalized after Return inside the editing host. (82911)
  • Link Control: Only tagtag A 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)
  • PHPPHP The 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)
  • Fix stray fill rule in SelectControl. (82949)
  • FocalPointPicker: Fix Sidebar Overflow Issue. (68915)
  • 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: MetaMeta Meta 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)

Global Styles

  • Rank block search results by title match. (83435)
  • Retain responsive styles in block style variation partials. (82403)

Data Layer

  • Core Data: Fix overwriting scored matches for duplicate ids. (83113)
  • Core Data: Fix return types on generated save/delete entity actions. (77162)

Icons

  • 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)

AccessibilityAccessibility Accessibility (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 customizerCustomizer Tool 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)
  • Drop the O(n) tie-break in orderBy. (83443)

Components

  • 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 API The 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)
  • Docs: Clarify DEWP asset file naming rule. (80620)
  • Docs: Clarify dependency extraction asset filename. (78968)
  • Docs: Clarify parent behavior during block registration. (78967)
  • Docs: Data: Fix typo in code example for __unstableNormalizeArgs. (83070)
  • Docs: Document page stability convention. (80632)
  • Docs: Document published dependency constraints. (80631)
  • Docs: Document the no-hard-wrap rule for Markdown. (83017)
  • Docs: Fix the broken Query block link in the Interactivity API guide. (82862)
  • Docs: Fix the dead anchor in the block development environment list. (82878)
  • Docs: Guard against ESLint bulk suppression abuse. (82944)
  • Docs: Replace retired reduce-motion mixin in animation guidelines. (83335)
  • Docs: Say how long a notice can be, in the copy guide. (81195)
  • Docs: The image dimensions have been removed from the name. (82828)
  • Fix typos in comments and test descriptions. (83172)
  • Notice: Add custom icon Storybook example. (82762)
  • Storybook: Drop CustomSelectControlV2 stories and the unused WIP tag. (83349)
  • Sync: Add PR link to CHANGELOG. (83037)
  • UI: Document that public –wp-ui-* CSSCSS Cascading 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 pluginPlugin A 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)
  • Storybook: Reject non-module stylesheet imports. (83313)
  • 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 ReactReact React 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)

Block Editor

  • Block Mover: Cleanup focus ring override. (83068)
  • Layout hooksHooks In 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)

Components

  • Build: Deduplicate npm dependencies. (82698)
  • ESLint: Allow string literal IDs in tests and Storybook. (83090)
  • Packages: Update Ariakit to 0.4.39. (82831)
  • Prettier: Upgrade wp-prettier to 3.9.6. (82731)
  • Prettier: Upgrade wp-prettier to 3.9.6 final. (83026)
  • Storybook: Convert story-only stylesheets to CSS modules. (83272)
  • Storybook: Place RadioGroup, Switch, and SwitchControl under wordpress-ui. (83314)
  • Storybook: Remove obsolete manifest extractor render workaround. (83124)
  • UI: Update Base UI to 1.8.0. (82835)

CSS & Styling

  • Button: replace deprecated word-break with overflow-wrap: Anywhere. (82854)
  • DataViews: replace word-break with overflow-wrap: Anywhere on DataForm panel field control. (82776)
  • Fields: replace word-break with overflow-wrap: Anywhere on slug permalink. (82693)
  • Post publish panel: Replace deprecated word-break with overflow-wrap. (82495)
  • Replace deprecated word-wrap with overflow-wrap in responsive block control. (82855)
  • Replace deprecated word-wrap with overflow-wrap in screen-reader-text. (82972)
  • Stylelint: Fix Stylelint configuration and coding standards for font weight numeric values and disallow relative weights. (82778)
  • Stylelint: Remove deprecated word-wrapping Stylelint suppressions. (82426)
  • UI: Replace deprecated word-wrap with overflow-wrap in VisuallyHidden. (82970)
  • Workflow: Remove deprecated word-wrapping. (82562)

Data Layer

  • 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 trunktrunk A 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-severityseverity The 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 JSJS JavaScript, 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 migrationMigration Moving 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 iframeiframe iFrame 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)
  • Dependency Extraction Webpack Plugin: Pretty-print generated asset output. (79650)
  • Disable caching when publishing built assets. (79835)
  • ESLint: Disallow Storybook build-style side-effect imports. (82960)
  • Packages: Backport the September 10 npm release metadata to trunk. (82709)
  • Packages: Remove npm from package engines. (83326)
  • Release: Verify SVNSVN Subversion, 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 branchbranch A 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)
  • Tooling: Add .mts and .cts support. (83071)
  • Tooling: Extract shared TypeScript configs into a wordpress/monorepo workspace. (82334)
  • UI: Move interaction tests to Browser Mode. (82838)
  • WP Scripts: Update lerna to 10 and markdownlint-cli to 0.49.1. (81917)

ESLint plugin

  • Check type-only imports for undeclared dependencies. (83336)
  • Upgrade eslint-plugin-jsdoc to latest version 64. (82727)

Collaboration

  • Sync: Add backwards-compatible Y option to provider creator. (82621)

First-time contributors

The following PRs were merged by first-time contributors:

  • @DanielFloeter: Multi-line text of menu items is not aligned. (70917)
  • @gunjanjaswal: Dependency Extraction Webpack Plugin: Pretty-print generated asset output. (79650)
  • @guzel: Global Styles: Retain responsive styles in block style variation partials. (82403)
  • @iiibrapn: The image dimensions have been removed from the name. (82828)
  • @imraan011: Video block: Remove GIF variation handling. (82696)
  • @smeetbuilds: Docs: Clarify dependency extraction asset filename. (78968)
  • @som3669: Docs: Add missing since tags to two functions. (83116)

Contributors

The following contributors merged PRs in this release:

@aaronrobertshaw @adamsilverstein @aduth @afercia @alecgeatches @andrewserong @chihsuan @ciampo @costasovo @DanielFloeter @desrosj @dhruvikpatel18 @dknauss @dpmehta @ellatrix @fushar @gunjanjaswal @guzel @hbhalodia @i-am-chitti @iiibrapn @im3dabasia @imraan011 @jasmussen @jeryj @jorgefilipecosta @jsnajdr @juanmaguitar @Kgupta62 @lonesahilnazir @MaggieCabrera @Mamaduka @manzoorwanijk @mcsf @mirka @mukeshpanchal27 @Mustafabharmal @ntsekouras @oandregal @ObliviousHarmony @R1shabh-Gupta @ramonjd @retrofox @SainathPoojary @scruffian @shail-mehta @simison @sirreal @smeetbuilds @Soean @som3669 @stokesman @swissspidy @t-hamano @talldan @tellthemachines @timse201 @tyxla @Vrishabhsk @yashjawale @youknowriad

#block-editor, #core-editor, #gutenberg, #gutenberg-new

WordPress Contributor Toolkit 1.2: One app for your first Core or Gutenberg contribution

TL;DR: WordPress Contributor Toolkit v1.2.0 has been released providing full CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. and GutenbergGutenberg The 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 TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. ticketticket Created 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 patchpatch A 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 sidebarSidebar A 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 blockBlock Block 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 GitHubGitHub GitHub 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 URLURL A 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 branchbranch A 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 trunktrunk A 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.

3. Check the work that already exists

A linked issue shows the pull requests that fix it showing the pull request’s state.

Each PR associated to an issue has an Apply… button. The app previews the files it will touch, then checks the pull request out on its own branch, with the author’s commits. Revert this PR brings your own work back.

4. Review and send the contribution

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 APIAPI An 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 GitGit Git 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 JavaScriptJavaScript JavaScript 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.

Resources

Props to @greenshady and @welcher for review and feedback.

+make.wordpress.org/playground/ +make.wordpress.org/test/ +make.wordpress.org/community/

#contributor-day, #playground, #wordcamp

Dev Chat summary: September 23, 2026

Start of the meeting in SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/, facilitated by @audrasjb 🔗 See the agenda post.

Announcements 📢

7.2

7.1.x

  • WordPress 7.1.1 was released and contained 17 bugbug A 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. fixes on CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress., 19 bug fixes for the BlockBlock Block 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. It also contained 11 security fixes
  • Shortly after, WordPress 7.1.2 was released and fixed one important security issuesecurity issue A security issue is a type of bug that can affect the security of WordPress installations. Specifically, it is a report of a bug that you have found in the WordPress core code, and that you have determined can be used to gain some level of access to a site running WordPress that you should not have.

General

Discussion 💬

From @leemon

@leemon is waiting for feedback on these GutenbergGutenberg The 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/ open issues. Some already have PRs associated with them:

  • Additional CSSCSS Cascading Style Sheets. styles are not generated for Navigation Link blocks on the frontend: #82171
  • Add Border and Spacing support to Navigation, Navigation Link and Navigation Submenu: #66392, #66483 and #68455
  • adding templateParts to child themeChild theme A Child Theme is a customized theme based upon a Parent Theme. It’s considered best practice to create a child theme if you want to modify the CSS of your theme. https://developer.wordpress.org/themes/advanced-topics/child-themes/ disables random titles of other template parts: #39166
  • slimImageObject drops metaMeta Meta 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. fields added to attachments: #64415

From @afercia

Andrea would like to get some feedback on Trac ticket #65729, specifically on the 3 different potential approaches summarized in comment 6.

@audrasjb shared his preference for adding a parameter to wp_strip_all_tags(), which is Andrea’s least favorite option as function should ideally be responsible to do only one thing. Jb agreed.

@dmsnell added that probably trying to handle this in wp_strip_all_tags() could backfire. He also argued against calling html_entity_decode() first and then wp_strip_all_tags() since this would be a pretty severe anti-pattern as it creates mis-parses which lead to data corruption or worse. This all relates back to escaping late and making sure we don’t confuse HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. markup and plaintext. To make matters worse, the type of a post title in WordPress is HTML markup, which is different from the type of an HTML page’s title, which is plaintext. so in some cases things like attachment titles should be rendered as HTML and at other times the plaintext context should be extracted from it.

More discussion happened in this Slack thread. Further discussion welcome in the related ticketticket Created for both bug reports and feature development on the bug tracker.: #65729

Also, for the Build/Test tools component, Andrea is waiting for feedback on this ticket: #65621

#7-1-x, #7-2, #core, #dev-chat

New public repo: core release tools

The coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. team is working hard on better release automation, including CLICLI Command Line Interface. Terminal (Bash) in Mac, Command Prompt in Windows, or WP-CLI for WordPress. scripts, AI skills, and updated documentation.

Why is this work important? A minor WordPress release—including every security patchpatch A 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.—can touch 20+ branches, and much of the work is manual and error-prone.

Example tasks include: tagtag A 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.) the older WordPress version branches, draft a HelpHub page per version, check the SVNSVN Subversion, the popular version control system (VCS) by the Apache project, used by WordPress to manage changes to its codebase. merges for accuracy, and build the props list.

Our mission is to remove friction and help releases become faster, smoother, and more predictable.

👉 Six new tools are now live in WordPress/core-release-utils:

  1. helphub: draft and check HelpHub version pages.
  2. svn-tags: write the svn cp tag commands from each branchbranch A 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".’s $wp_version.
  3. verify-tags-reached-mirror (props @adrianmoldovanwp): confirm release tags reach the GitHubGitHub GitHub 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/ mirror.
  4. svnmergecheck: confirm svn merge --record-only record every revision before a commit.
  5. ghpatch (props @peterwilsoncc and @johnbillion): apply a PR diff to an SVN checkout with svn patch.
  6. wp-profile-link-generator (props @jorbin and @johnbillion): build the contributor list for the release post and the credits APIAPI An 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. edit.

Each tool has a README and tests. The tools print the commands—you run them.

Try these on your next minor releaseMinor Release A set of releases or versions having the same minor version number may be collectively referred to as .x , for example version 5.2.x to refer to versions 5.2, 5.2.1, 5.2.3, and all other versions in the 5.2 (five dot two) branch of that software. Minor Releases often make improvements to existing features and functionality. and tell us how they went: feedback and PRs welcome.

Thanks to @jorbin for creating the new GitHub repo.

Gutenberg’s JavaScript unit and integration tests now use Vitest

TL;DR

  • GutenbergGutenberg The 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/’s JavaScriptJavaScript JavaScript 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 unit and integration tests now use Vitest, bringing better support for modern JavaScript modules and real-browser component testing.
  • Tests explicitly import Vitest APIs. Filenames select Node, jsdom, or Browser Mode according to what each test needs.
  • @wordpress/scripts 36.0.0 makes Vitest the default for test-unit-js. Projects install and configure their own test runner.
  • Existing projects can keep their Jest tests through test-unit-jest, after a one-time setup update. This command receives maintenance support and has no scheduled removal.
  • @wordpress/jest-preset-default and @wordpress/jest-console are deprecated. Published versions remain available for existing projects. No replacement WordPress Vitest preset or console packages are planned.

Following the initial announcement in #core-editor, Gutenberg has completed its migrationMigration Moving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. from Jest to Vitest for JavaScript unit and integration tests.

The migration changes both Gutenberg’s test setup and the published WordPress test tooling. Most tests keep a familiar structure, with more explicit control over their environment.

Why Vitest?

Modern JavaScript module support and real-browser testing are two major benefits.

As more dependencies adopted ECMAScript modules, or ESM, Gutenberg’s CommonJS-based Jest setup needed additional compatibility configuration. For example, we maintained an explicit list of dependencies that Babel needed to transform for Jest. Updating a dependency could therefore require changes to the test configuration too.

Vitest’s native ESM support reduces the need for these workarounds. Tests run in Node by default, with DOM or browser environments selected explicitly when needed. This makes the test environment easier to understand and avoids supplying simulated browser behavior to tests that don’t need it.

Browser Mode runs focused unit and integration tests in a real browser. Component tests can check computed styles, element sizes, scrolling, focus, and keyboard interactions without recreating those behaviors through jsdom mocks. jsdom remains available for DOM tests that don’t depend on browser rendering.

Maintainability also matters. Jest’s maintainers have acknowledged a period of slower progress and fewer releases, though recent versions have brought performance and compatibility improvements. Gutenberg’s move to Vitest addresses longer-term needs: reducing custom compatibility configuration and sharing the Vite tooling already used by Storybook. Its Jest-compatible APIs also made an incremental migration possible.

The migration adds real-browser coverage while keeping test execution parallel. Browser Mode tests run alongside the Node and jsdom suites and, in our migration benchmarks, finished before the longest-running Node/jsdom group. Browser testing therefore did not determine the overall test completion time in that measured configuration. We also optimized test workers and shared setup to reduce runtime during the migration.

What changes for Gutenberg contributors?

Tests explicitly import APIs such as describe, test, expect, and vi from vitest. Some mocking APIs, assertions, and command-line options differ from Jest, so existing examples may need more than a change of imports.

Test filenames select the environment:

  • *.test.* without an environment suffix runs in Node.
  • *.jsdom.test.* runs in jsdom for DOM structure, events, and state that don’t depend on browser rendering.
  • *.browser.test.* runs in Browser Mode for real CSSCSS Cascading Style Sheets., layout, and browser-dependent interaction.

Browser Mode also requires a browser installation and uses different ReactReact React is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces. https://reactjs.org rendering and interaction APIs from jsdom tests. The Testing Overview in the Block Editor Handbook covers setup, choosing an environment, and writing and running tests.

The main contributor commands remain npm test and npm run test:unit.

What changes for consumers of WordPress test tooling?

Starting with @wordpress/scripts 36.0.0, wp-scripts test-unit-js uses the project’s installed Vitest. This release includes breaking changes to test configuration, dependencies, APIs, and command-line options.

For a new test setup, start with the test-unit-js documentation. It explains installation and configuration and links to examples for Node, jsdom, and Browser Mode. Projects own their configuration and choose the environments and supporting dependencies they need.

Existing projects have two options:

  • Move to Vitest. Follow the migration guidance linked from the package documentation to update dependencies, configuration, tests, and commands.
  • Keep Jest. Switch Jest commands from wp-scripts test-unit-js to wp-scripts test-unit-jest, install the required Jest dependencies directly, and configure the project explicitly. Existing tests and snapshots can stay on Jest.

Keeping Jest requires more than renaming the command if your project relied on the defaults previously bundled with @wordpress/scripts. The package no longer supplies Jest, its environment, or the WordPress Jest configuration and transformer. The documented upgrade steps cover how to retain that setup using the published packages.

The public test-unit configuration in @wordpress/eslint-plugin 27.0.0 and the default wp-scripts lint-js unit-test rules also switch to Vitest. Projects keeping Jest need explicit Jest lint rules; the upgrade guidance covers these too.

test-unit-jest remains a maintenance-only command with no scheduled removal. New testing features target Vitest.

What happens to the WordPress Jest packages?

@wordpress/jest-preset-default and @wordpress/jest-console are deprecated and will no longer receive updates. Their published versions remain available for existing Jest projects.

Most of the functionality that motivated separate WordPress packages can now use Vitest’s built-in features and configuration. There are therefore no corresponding @wordpress/vitest-preset-default or @wordpress/vitest-console packages.

Some behavior still needs explicit setup. For example, Vitest’s spies can check expected console calls, but automatically failing tests on unexpected console output requires additional setup. The configuration examples explain which behavior projects need to configure themselves.

Questions and feedback

Comment here, ask in #core-editor, or comment directly on the migration tracking issue (#80855), which records the implementation and decisions behind this change.

Props to @manzoorwanijk, @aduth, @0mirka00, @jonsurrell, @tyxla, and @mamaduka for driving and reviewing this work, and to @aduth, @manzoorwanijk, @simison and @tyxla for reviewing this post.

#gutenberg, #jest, #testing, #vitest

Performance Chat Summary: 22 September 2026

The full chat log is available beginning here on Slack.

WordPress Performance TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. tickets

Performance Lab PluginPlugin A 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 noted that there is a backlog of Performance Lab work sitting there for the team to hack on, but he has not had time over the past couple of weeks.

Our next chat will be held on Tuesday, October 6, 2026 at 16:00 UTC in the #core-performance channel in Slack.

#core-performance, #hosting, #performance, #performance-chat, #summary

What’s new in Gutenberg 24.0? (16 September)

“What’s new in GutenbergGutenberg The 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.

What’s new in
Gutenberg 24.0?

Gutenberg 24.0 has been released and is available for download!

This version extends visual revisionsRevisions The WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision. to include the post title, gives the Gallery blockBlock Block is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. a grid layout with per-breakpoint controls, and lets a site title scale to the width it is given.

Visual revisions now cover the post title

Visual revisions have been growing over the last few releases, and until now the post title sat outside them. In 24.0, the title participates like any other piece of content, including displaying change diffs directly in the post title (#82536, #82586).

Seeing it in the same view as body changes removes the need to guess when a rename happened.

The Gallery block gains a Grid variation that can be switched on from the block inspector, replacing the default non-editable flex layout with a fully customizable grid (#81909).

“Column count” and “Crop images to fit” can now also be set per breakpoint through viewport states. A gallery can show four columns on a wide screen and two on a tablet without any custom CSSCSS Cascading Style Sheets. (#82003).

Site titles that fill their available space

The Site Title block now supports fit-text (#82074). Toggle it on from the ellipsis menu in the typography panel and the title scales to the full width available to it, rather than being sized in points and left to wrap or fall short.

Other notable highlights

  • A redrawn icon set. Nearly 100 icons have been redrawn from a mix of filled and outlined shapes into a single, consistently stroke-based visual language (78812, 78808, 82338).
  • Tab indents lists. In the List block, Tab and Shift+Tab now indent and outdent a fully selected list item, and work across a multi-item selection instead of only at the caret (82460, 82411).
  • Background images from a URLURL A specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org. Background image support can now accept an image URL, rather than requiring an entry in the Media Library (82230).
  • Non-breaking spaces are visible. The format library now visualizes non-breaking spaces, so a character that silently changes wrapping is no longer invisible while editing (74040).

Changelog

Enhancements

Components

  • Add defaultShown, onShownChange to ToolsPanelItem. (78010)
  • Border Box Control: Try moving the unlink button to the label row, and rename the panel to Borders. (82163)
  • Breadcrumb: Add UIUI User interface component. (80425)
  • DataForm: Add a showPlaceholderIfEmpty option to the panel layout. (82527)
  • DataForm: Communicate the timezone in the datetime control. (82291)
  • Editor: Migrate post-card-panel Badge to UI Badge. (82500)
  • Global Styles UI: Migrate revisions Active Badge to UI Badge. (82560)
  • Icons: Redraw 35 prominent icons with consistent stroke widths. (78808)
  • Icons: Redraw 64 icons to be stroke-based. (78812)
  • Menu: Stabilize portaled iframeiframe iFrame is an acronym for an inline frame. An iFrame is used inside a webpage to load another HTML document and render it. This HTML document may also contain JavaScript and/or CSS which is loaded at the time when iframe tag is parsed by the user’s browser. unit testunit test Code written to test a small piece of code or functionality within a larger application. Everything from themes to WordPress core have a series of unit tests. Also see regression.. (82092)
  • Menu: Support multiple item descriptions. (81825)
  • Menu: Use Text for item labels and descriptions. (82237)
  • SearchableSelect: Add form primitive to wordpress/ui. (80961)
  • Storybook: Persist sidebarSidebar A sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme. theme in URL. (82111)
  • Support isAny and isNone filterFilter Filters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output. operators for numeric fields. (77942)
  • Tab Panel: Show focus with outline instead of legacy box-shadow ring. (82421)
  • Text: Use pretty wrapping by default. (82133)
  • Theme: Build default ramps before token artifacts. (82525)
  • Theme: Reduce repeated color ramp search work. (82545)
  • UI: Add CheckboxControl. (82213)
  • UI: Add Combobox and Autocomplete Status. (82195)
  • UI: Add popupWidth prop to item popup components. (82087)
  • UI: Add Radio form primitive. (82214)
  • UI: Align overlay Trigger props with Base UI. (81824)
  • UI: Put overflow on Select.List instead of a nested wrapper. (82470)
  • UI: Rename Popup popupWidth prop to width. (82193)
  • UI: Reset completed calendar ranges by default. (82612)
  • UI: Support custom targets on Link and Menu.LinkItem. (82347)
  • UI: Use root theme for portaled overlays. (82038)
  • Validated form controls: Use design token for invalidinvalid A resolution on the bug tracker (and generally common in software development, sometimes also notabug) that indicates the ticket is not a bug, is a support request, or is generally invalid. focus rings. (82410)

Block Library

  • Math: Declare clientNavigation interactivity support. (82248)
  • Allow themes to override the padding added via background color. (82024)
  • Audio: Update autoplay help text for clarity. (69978)
  • Enable Gallery columns and crop controls in viewport states. (82003)
  • Icons: Convert Search icon to strokes. (82338)
  • List: Indent and outdent a fully selected list item with Tab. (82460)
  • List: Indent and outdent multi-selected items with Tab. (82411)
  • Query LoopLoop The Loop is PHP code used by WordPress to display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post. https://codex.wordpress.org/The_Loop: Rename the “Keyword” filter to “Search terms” and add help text. (82387)
  • Query: Replace the “Reload full page enabled” modal with a snackbar notice. (82246)
  • Site title: Add fit-text support. (82074)
  • Try adding a Grid block variation to Gallery. (81909)
  • Update navigation link block name, use a default variation for custom link. (82375)
  • Use ‘useEntityProp’ in Site Title and Tagline blocks. (82518)
  • Video block: Switch to UI Badge. (82441)
  • feat: Introduce ‘Add Media’ in the block controls for media-text block. (82420)

Post Editor

  • Autocompleters: Consider email address context in user mention. (47249)
  • CSS Styling: Represent focus with outline for list view component. (82129)
  • DataViews: Append an ellipsis to action labels that open a dialog. (81994)
  • Editor: Refactor the Options menu to use the Menu component. (81564)
  • Editor: Refactor the View menu to use the Menu component. (82321)
  • Editor: Render change diffs in the post title in revisions. (82586)
  • Editor: Show revision data in Post Title component. (82536)
  • Media: Attach unattached media to the current post on save/publish. (81977)
  • Menu: Align selection indicators and prefix icons with item labels. (82346)
  • Post slug: Prefer server sanitization in the editor. (78135)
  • Try: Add “reading settings” link to Front Page template. (81987)

Site Editor

  • Add New Template: Show the design system focus ring instead of legacy box-shadow rings. (82164)
  • Add a root error boundary to prevent a blank screen. (82486)
  • Site editor v2: Identity takes its form from the view configuration endpoint. (82692)
  • Site editor v2: Navigation takes view configuration from endpoint. (82138)
  • Site editor v2: Pages take view configuration from endpoint. (82140)
  • Site editor v2: Patterns take view configuration from endpoint. (82458)
  • Site editor v2: Template parts take view configuration from endpoint. (82457)
  • Site editor v2: Templates take view configuration from endpoint. (82456)
  • Site editor v2: Use the canonical template fields in the templates list. (82666)
  • Site editor v2: Use the canonical wp_block fields in the patterns list. (82672)

Block Editor

  • Background image: Support setting the image from a URL. (82230)
  • BlockPreview: Assert preview contents are inert. (82682)
  • Format library: Visualise non-breaking spaces. (74040)
  • List View: Disable block icon colors while the block is selected. (82498)
  • Show the block outline where the grab cursor shows. (81798)
  • Tab trap escape hatch: Leave/enter the canvas with Escape/Enter. (82314)

Dashboard

  • Site Health widgetWidget A WordPress Widget is a small block that performs a specific function. You can add these widgets in sidebars also known as widget-ready areas on your web page. WordPress widgets were originally created to provide a simple and easy-to-use way of giving design and structure control of the WordPress theme to the user.: Route the body’s review link through the host. (82066)
  • Widget Dashboard: Add a Policy provider to govern what users may do. (81967)
  • Widget Dashboard: Enforce the policy on the staging layer for every instance operation. (82256)
  • Widget Dashboard: Govern Reset to default through the policy. (82255)

APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. fetch

  • Add unregister to remove a registered middleware. (82408)
  • Expose defaultFetchHandler so overrides can restore it. (82553)
  • api-fetch: Resolve to null for a 200 response with an empty body. (79325)

Media

  • Media Editor: Refactor the panel layout. (81840)
  • Media Fields: Pass the field’s disabled state to the textarea controls. (82516)
  • Media editor: Lock the editing tools while a save is running. (82417)

Widgets Editor

  • Widgets: Surface debugging details in the ErrorBoundary. (82099)
  • Widgets: Use the layout icon for widget areas. (82025)

Fields

  • Migrate page-title Badge to UI Badge. (82499)

Data Layer

  • Privacy policy page badge: Make it visible in Site Editor > Pages and Editor Inspector. (82422)

Widget Dashboard

  • Make the column count a host decision. (82204)

Grid

  • Per-item tile size limits. (81899)

Bug Fixes

  • CI: Do not immediately fail the type label check on a newly opened pull request. (82322)
  • Fix LocationPicker popover alignment. (82090)

Components

  • BorderBoxControl: Make sure the group of controls is associated with the label. (82279)
  • DataForm: Render untyped fields without an edit control that are read-only. (82514)
  • DataForm: Treat combined form fields purely as layout containers. (82175)
  • DataViews: Fix Field.sort TypeScript type definition. (82162)
  • DataViews: Restrict the isAll filter operator to array fields. (82463)
  • DataViews: Scope the search field’s fixed width to the default UI search row. (82128)
  • DataViews: Skip table columns for field ids without a field definition. (82601)
  • Disabled: Keep the consumer className when isDisabled is false. (82648)
  • Fieldset: Fix gap token to match spec. (75479)
  • Fix: Alert dialog box cancel button color. (82261)
  • FormTokenField: Wrap to the last suggestion when pressing ArrowUp with nothing selected. (82646)
  • Inserter: Keep the block preview inside the viewport. (82060)
  • Keep foreign items out of a ToolsPanel menu. (82127)
  • Searchable selects: Hide creatable footer when it is filtered out. (82566)
  • Snackbar: Restart timeout when a notice is recreated. (81764)
  • Theme: Enforce active fill contrast. (82542)
  • Theme: Make chroma capacity caching deterministic. (82505)
  • Theme: Remove chroma capacity cache. (82591)
  • ToggleGroupControl: Honor the root disabled prop. (82259)
  • UI, DataViews: Give input and selection controls solid backgrounds. (82391)
  • UI: Fix Link target detection. (82447)
  • UI: Fix Menu.LinkItem target detection. (82442)
  • UI: Fix Minimal Select popup width. (82461)
  • UI: Fix enabled input placeholder contrast. (82304)
  • UI: Hide Input field ring when a slot control is focused. (82257)
  • UI: Keep borderless InputLayout chrome when disabled. (82468)
  • UI: Keep focus rings visible in overlay content. (82443)
  • UI: Name unlabeled form primitive stories. (82311)
  • UI: Re-read the native validity on blur in ControlWithError. (82376)
  • UI: Remove ValidityIndicator outer margin. (82267)

Block Library

  • Accordion Panel: Reset padding-block when panel is hidden. (81782)
  • Fix categories block handling of invalid taxonomyTaxonomy A taxonomy is a way to group things together. In WordPress, some common taxonomies are category, link, tag, or post format. https://codex.wordpress.org/Taxonomies#Default_Taxonomies.. (82153)
  • Fix: Footnote IDs can start with a digit and break CSS selectors. (82398)
  • Fix: Tabs block: Anchor links in tab panels are not functional. (81744)
  • Gallery block: Fix ‘Crop images to fit’ broken in editor. (82318)
  • Gallery: Shorten “Use images attached to the post” button, add description. (82617)
  • Image block cropping: Sync image size and link destination settings. (82316)
  • List: Merge into the previous line on Backspace instead of outdenting. (82145)
  • List: Outdent an empty middle item without adding an item. (82011)
  • Navigation: Restore flex-grow on container when accessible label is present. (78447)
  • Query Loop: Fall back to post when the query has no postType. (82465)
  • Query: Don’t write excludeCurrent into blocks that never had it. (82147)

Block Editor

  • Columns: Fix appender drop zone visibility when dragging into empty column. (77852)
  • DOM: Exclude visibility-hidden elements from focusable results. (82574)
  • Fix auto-capitalization after Enter on iOSiOS The operating system used on iPhones and iPads. Safari. (82475)
  • Fix editor link colour cascade order for nested blocks. (77833)
  • Fix: Responsive horizontal orientation does not override a vertical layout. (82364)
  • Fix: Retain focus and caret position after Backspace undo of a prefix block transform. (82116)
  • List View: Don’t focus the last Table cell on keyboard activation. (81964)
  • Rich text: Restore contenteditable on pointercancel. (82598)
  • Writing Flow: Bail out of Enter handling when no block is selected. (82424)

Post Editor

  • Editor: Deprecate the as prop of the pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. menu item components. (82319)
  • Editor: Derive post-only block list layout from the assigned template. (82599)
  • Editor: Store the finalize response as the attachment record. (81947)
  • Fields: Hide the slug field for posts without a permalink. (82341)
  • Media: Refuse a multi-file drop on a placeholder that takes one file. (82046)
  • Media: Stop claiming “Upload complete” when every upload failed. (81397)
  • MetaMeta Meta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. Boxes: Move meta box markup with moveBefore to keep classic editors alive. (82243)
  • Post URL: Translate the copy permalink button label. (82642)

wp-build

  • Build Package: Restore CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. Boot layout compatibility. (82112)
  • Build: Allow wp-theme 2.x peer deps. (82139)
  • Build: Fix regular CSS injection in Vitest Browser Mode. (82154)
  • Pages: Require authentication and a capabilitycapability A capability is permission to perform one or more types of task. Checking if a user has a capability is performed by the current_user_can function. Each user of a WordPress site might have some permissions but not others, depending on their role. For example, users who have the Author role usually have permission to edit their own posts (the “edit_posts” capability), but not permission to edit other users’ posts (the “edit_others_posts” capability). to render generated standalone pages. (82254)

Data Layer

  • Core Data: Return a stable record for equivalent _fields queries. (82552)
  • Core Data: Scope revisionId to the entity it is provided for. (82517)
  • DataViews: Clamp page after delete. (82244)

Client Side Media

  • Media: Keep indexed PNG sub-sizes indexed. (81884)
  • Media: Only blame the browser’s codecs when HEIC really cannot be decoded. (82265)
  • Media: Report server upload failures in plain language. (81735)

Site Editor

  • Boot, Site Editor: Seed content surfaces with default background color. (81646)
  • Fields: Remove unused custom sort from the author fields. (82559)

Global Styles

  • Global styles engine: Return a copy from getResolvedValue instead of mutating. (82278)
  • Resolve theme-relative background image URLs for display. (82242)

Env

  • wp-env: Fix Docker build errors with Debian Bullseye repositories. (82478)

Layout

  • Fix: Restore layout styles for block style variations. (82335)

Format library

  • Fix Edit as HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. crash with background-only highlight. (82215)

Views

  • useViewConfig: Don’t request the view configuration twice. (82141)

Dashboard

  • Widget Dashboard: Keep the plain anchor for an empty-string download. (82073)

Font Library

  • Keep CSS custom properties unquoted in font previews. (82010)

Fields

  • Fix pattern export filenames by normalizing special characters. (77033)

AccessibilityAccessibility Accessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility)

  • Workflow: Replace cmdk with the wordpress/ui Autocomplete primitive. (82504)

Components

  • Match the wordpress/ui disabled styles in form controls. (82454)
  • ProgressBar: Respect reduced motion preferences. (82490)

Connectors screen

  • Fix help paragraph color contrast ratio in the Connectors page. (82378)

Guidelines

  • Fix: Content Guidelines: UXUX User experience/UI Accessibility issues. (80306)

Post Editor

  • Standardize ‘Back’ and ‘Go back’ labels. (79211)

Performance

  • Tests: Skip pull requests that only change Storybook stories. (82459)

Themes

  • Theme JSONJSON JSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML.: Avoid rebuilding identical block schemas during sanitization. (82203)

Components

  • Cut the ToolsPanel render cascade. (82180)

Style States

  • Block Supports: Bail early in state styles when a block has no style attribute. (81908)

Block Editor

  • Rich text: Resolve owned event listeners once instead of per subscriber. (80605)

Experiments

  • Editor assets endpoint: Prime the theme JSON resolver before capturing. (82134)

Post Editor

  • ExtensibleExtensible This is the ability to add additional functionality to the code. Plugins extend the WordPress core software. site editor: Add a revisions entry point to the Styles route. (82142)
  • Media Modal Experiment: Allow filtering by attached to the post, or unattached. (81974)

Block Library

  • Remove the form blocks experiment. (82451)

Block Editor

  • Block Fields Media: Handle ‘audio’ in chooseItemLabel. (82389)

Site Editor

  • Extensible site editor: Fall back to the raw title in edit route document titles. (82143)
  • Extensible Site Editor: Let menu items be added from the navigation screen. (82125)

Documentation

  • API Fetch: Rename defaultFetchHandler parameter to options. (82588)
  • Add recommended bulk suppressions configuration for ESLint VSCode. (82303)
  • Components: Add an Emotion-to-SCSS migrationMigration Moving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. skill and guide. (82567)
  • DataViews: Add hierarchical levels story. (82344)
  • DataViews: Document that table column styles do not apply to the primary column. (82238)
  • DataViews: Remove the rich text options from the control configuration type. (82330)
  • Docs: Document isolated worktree setup. (82524)
  • Docs: Explain when the Cover block’s overlay controls appear. (82234)
  • Docs: Fix grammar in documentation. (82032)
  • Docs: Improve setAttributes updater function wording. (82405)
  • Docs: Update Playground CLICLI Command Line Interface. Terminal (Bash) in Mac, Command Prompt in Windows, or WP-CLI for WordPress. wording. (77579)
  • Document every type for DataViews/DataForm/Field API. (82326)
  • Fix spelling typos in documentation and inline comments. (82217)
  • Menu: Correct alignment documentation and changelog. (82455)
  • Packages: Add cross-version compatibility skill. (81890)
  • Popover storybook: Add infotip with link example. (82653)
  • Remove invalid references to Babel in packages README. (82176)
  • Storybook: Demonstrate light, dark, and nested themes. (82039)
  • Theme: Clarify color seed and warning guarantees. (82526)
  • Theme: Move post-release changelog entry to Unreleased. (82093)
  • UI: Add Form best practices Storybook page. (82197)
  • Update Style Engine block supports documentation. (82585)

Code Quality

  • CI: Pin npm version in the private API check job. (82222)
  • CodeRabbit: Disable the review status comment. (82534)
  • CodeRabbit: Only review on request, keep PR descriptions untouched. (82448)
  • Docs: Align param tagtag A directory in Subversion. WordPress uses tags to store a single snapshot of a version (3.6, 3.6.1, etc.), the common convention of tags in version control systems. (Not to be confused with post tags.) columns in lib/ docblocks. (81902)
  • Docs: Align param tag columns in phpunit/ docblocks. (81904)
  • Docs: Remove the blank line between param and return in test docblocks. (81907)
  • Packages: Exclude src from block-serialization-default-parser package. (77307)
  • Performance tests: Reuse the plugin an earlier trunktrunk A directory in Subversion containing the latest development code in preparation for the next major release cycle. If you are running "trunk", then you are on the latest revision. run already built. (82223)
  • Replace npm-run-all with native npm script chaining. (82166)
  • Reusable Blocks: Remove leftover merge conflictconflict A conflict occurs when a patch changes code that was modified after the patch was created. These patches are considered stale, and will require a refresh of the changes before it can be applied, or the conflicts will need to be resolved. markers from the changelog. (82126)
  • list-reusable-blocks: Exclude src from published files. (77305)

Components

  • Add compound component composition diagnostics. (82509)
  • Adminadmin (and super admin) UI: Exclude src from published files and sideEffects. (77285)
  • Block editor, Components: Stop relying on Disabled class name. (82651)
  • DataViews layout storybook: Action names and primary status. (82104)
  • DataViews: Declare dependencies imported by the ./wp bundle. (81843)
  • Icons: Remove the obsolete forced colors mode hack. (82481)
  • Migrate remaining JSX files to TypeScript. (82132)
  • Theme, Widget dashboard: Declare the @storybook/addon-docs dependency. (82676)
  • Theme: Migrate Terrazzo modes to resolvers. (82537)
  • UI: Drop Status and Empty live region test assertions. (82300)
  • UI: Remove ESLint ref suppressions and refactor AlertDialog state. (82131)
  • UI: Remove unused outset-ring–focus-within-visible class. (82077)
  • UI: Test Calendar raw-offset timezones directly. (82658)
  • UI: Validate compound component context. (82510)

Block Editor

  • CSS Styling: Cleanup focus outline override for grid component. (82337)
  • Migrate __experimentalText and __experimentalHeading to wordpress/ui Text in Inspector Popover HeaderHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes.. (77449)
  • Migrate __experimentalText to wordpress/ui Text in Allowed Blocks Modal. (78119)
  • Migrate __experimentalText to wordpress/ui Text in Block switcher bindings hint. (77366)
  • Migrate __experimentalText to wordpress/ui Text in Pattern Overrides Dropdown. (77492)
  • Span the writing flow focus capture elements over the canvas. (82354)
  • TypeScript: Migrate format-library package to TS. (79486)

Post Editor

  • Block Editor: Remove the dead Write/Design editor tool plumbing. (82677)
  • Editor: Apply the showListViewByDefault preference in the shared editor. (82119)
  • Editor: Fix disabled and link items of the more menu adapter. (82428)
  • Editor: Mark __unstableSaveForPreview options as optional. (81858)
  • Editor: Merge duplicate “Enhancements” changelog sections. (82533)
  • Make @wordpress/reusable-blocks a no-op compatibility package. (79186)

Block Library

  • Docs: Remove invalid @return tag from the block_core_social_link_get_services hook docblockdocblock (phpdoc, xref, inline docs). (82488)
  • List: Simplify indent code & keep client ID. (59216)
  • Navigation: Change WCText to Text. (82130)
  • Remove the content-only inspector fields (block fields) experiment. (82531)

Data Layer

  • Core Data: Convert hooksHooks In WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same. tests to renderHook and drop JSX. (82276)
  • Remove the template activation experiment. (82241)
  • Validate tsconfig references against declared dependencies. (82106)
  • feat: Improve TypeScript definitions in the getEntityRecord function. (81863)

Fields

  • Declare the caption, alt text, description and pingPing The act of sending a very small amount of data to an end point. Ping is used in computer science to illicit a response from a target server to test it’s connection. Ping is also a term used by Slack users to @ someone or send them a direct message (DM). Users might say something along the lines of “Ping me when the meeting starts.” status controls through the Field API. (82539)
  • Remove unused CSS rule from slug field control. (77961)

Widgets Editor

  • Edit Widgets: Guard canInsertBlockInWidgetArea against an empty block list. (82107)
  • Widgets: Replace {TODO} placeholder with PR number in changelog entries. (82450)

REST APIREST API The REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think “phone app” or “website”) can communicate with the data store (think “database” or “file system”) https://developer.wordpress.org/rest-api/

  • Templates REST API: Prevent fatal error when a null template reaches prepare_item_for_response. (82374)
  • View Config: Move the table column style descriptions to the 7.2 compat layer. (82372)

Create Block

  • Test package at supported Node.js versions. (82657)

Site Editor

  • View config: Remove stale fields from the wp_template default view. (82602)

Global Styles

  • Remove the color randomizer experiment. (82452)

Server Side Render

  • Tests: Fix Vitest setup and stale jest types under non-hoisting installs. (82290)

Url

  • Test: Fix unit test failures on trunk. (82201)

Blocks

  • Make BlockTransform a discriminated union over its type. (81831)

A11yAccessibility Accessibility (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)

  • Exclude src from published package files. (77309)

Keycodes

  • Exclude src from published files. (77306)

Escape HTML

  • Exclude src from published package files. (77304)

Deprecated

  • Packages: Exclude src from deprecated published package. (77303)

DOM ready

  • Exclude src from published package files. (77302)

Blob

  • Exclude src from published package files. (77289)

Autop

  • Packages: Exclude src from autop published package. (77283)

Tools

  • Point to docmumentation about release assets. (82250)
  • Project Management: Add validation for missing GitHubGitHub GitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the ‘pull request’ where code changes done in branches by contributors can be reviewed and discussed before being merged by the repository owner. https://github.com/ labels configuration. (76263)
  • Project Management: Remove empty entries from CODEOWNERS. (82292)
  • Project Management: Restore CODEOWNERS exclusions for suppression lists. (82538)
  • Project Management: Update CODEOWNERS to reflect current participation. (82262)
  • Update changelog instructions for agents. (82097)

Testing

  • Add more end-to-end tests for the editor inspector consolidation experiment. (82239)
  • Add more end-to-end tests for the editor inspector consolidation experiment. (82327)
  • Add promptfoo for testing agent development setup and skills. (80812)
  • Add the template end-to-end tests for the editor inspector consolidation experiment. (82394)
  • Automated Testing: Enforce .tsx for all new ReactReact React is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces. https://reactjs.org files. (80123)
  • Automated Testing: Fix failing categories test on trunk. (82182)
  • Automated Testing: Fix unit test compatibility with Node.js v26. (82618)
  • CI: Add “Required changes from trunk” PR check. (82272)
  • CI: Add a per-workflow status check job and filter paths. (81015)
  • CI: Unify the automation comments into a single PR comment. (82249)
  • DataViews: Remove obsolete Node 20 timezone test gate. (82644)
  • DateTime tests: Freeze the clock in the empty-value calendar test. (82282)
  • e2e-test-utils-playwright: Update Lighthouse and web-vitals. (81916)
  • E2E: Run the site editor suite against the extensible site editor too. (82117)
  • Fix privacy policy page setting unit test on multisitemultisite Used to describe a WordPress installation with a network of multiple blogs, grouped by sites. This installation type has shared users tables, and creates separate database tables for each blog (wp_posts becomes wp_0_posts). See also network, blog, site. (82467)
  • Jest: Update to 30.5.0. (82181)
  • Media Utils: Preserve arrays in multipart form data. (82353)
  • Packages: Replace stale jest types with the Vitest test environment. (82605)
  • Performance tests: Build once and shard the suites across parallel CI jobs. (82160)
  • Scaffold end-to-end tests for the editor inspector consolidation experiment. (82178)
  • Stylelint tools: Resolve test configuration extends from the workspace. (82336)
  • Tabs: Remove core’s duplicate render_block_context filter. (82610)
  • Test: Drop the jest-dom Vitest entry point from test files. (82606)
  • Test: Enforce JavaScriptJavaScript JavaScript or JS is an object-oriented computer programming language commonly used to create interactive effects within web browsers. WordPress makes extensive use of JS for a better user experience. While PHP is executed on the server, JS executes within a user’s browser. https://www.javascript.com test runner ownership. (82299)
  • Test: Migrate Node unit tests to Vitest. (82211)
  • Test: Migrate deterministic JSDOM tests and harden Vitest isolation. (82212)
  • Test: Prepare TypeScript test graphs for Vitest. (82210)
  • Test: Root the Vitest browser project where its dependencies are declared. (82699)
  • Test: Update Vitest to version 5. (82687)
  • Update Playwright to 1.63.0. (82654)

Build Tooling

  • Add browserslist configuration for build targeting. (82179)
  • Build Scripts: Suggest –verbose when a type check fails. (82604)
  • Build: Enforce NodeNext resolution for ESM packages. (82088)
  • Build: Require explicit JSX file extensions. (82189)
  • Bump vite from 8.2.1 to 8.2.2. (82668)
  • Bundled packages: Add a check for transitive private API usage. (82027)
  • CI: Collapse package CHANGELOG check exclusions into a single grep pattern. (82121)
  • CI: Read the required npm version from a single source. (82235)
  • Change stray ubuntu-latest to ubuntu-24.04. (82156)
  • Fix the high-severityseverity The seriousness of the ticket in the eyes of the reporter. Generally, severity is a judgment of how bad a bug is, while priority is its relationship to other bugs. sharp audit failure in AI development tests. (82627)
  • Framework: Error on npm versions older than the required floor. (82320)
  • Framework: Update @types/node to v24. (82616)
  • Framework: Update Node.js to v24 LTS and npm to v11. (80395, 82355, 82370)
  • Package lock: Deduplicate Jest dependencies. (82187)
  • Packages: Recover August 26 npm release metadata. (82085)
  • Release: Make npm publication verification resumable. (82089)
  • Release: Map [Type] Flaky Test to the Tools changelog section. (82078)
  • Release: Use the CLI Node.js version for all package publishing. (82122)
  • Storybook: Drop unused support for js-as-jsx. (82192)
  • Storybook: Include stories in docgen TypeScript project. (82694)
  • Test: Classify and enforce unit test environments by filename. (80991)
  • Test: Enforce Vitest conventions and CI guardrails. (81040)
  • Test: Update SWC dependencies. (82660)
  • Theme: Add LightningCSS WPDS token fallback plugin. (80401)
  • Theme: Add bin-specific tsconfig with nodenext module resolution. (82622)
  • Theme: Use Node.js native type-stripping for scripts. (82680)
  • Update Actions and Octokit dependencies. (82663)
  • Update Stylelint to v17 and related packages. (80738)

ESLint plugin

  • ESLint: Thin use-recommended-components tests. (82407)
  • Remove usage of Babel parser. (82144)

Data Layer

  • Build: Normalize JSX file extensions. (80990)
  • Remove unused dependencies across the monorepo. (82103)

Components

  • UI: Add Field.VisualLabel. (82095)

Block Library

  • Docs: Align param tag columns in packages/ docblocks. (81903)

Security

WP Scripts

  • Build/Test Tools: Replace npx with npm exec –no. (82331)

First-time contributors

The following PRs were merged by first-time contributors:

  • @0xDI: Navigation: Restore flex-grow on container when accessible label is present. (78447)
  • @antwonw: Media Utils: Preserve arrays in multipart form data. (82353)
  • @dmallory42: DataForm: Render untyped fields without an edit control that are read-only. (82514)
  • @Jiwoon-Kim: Fix: Restore layout styles for block style variations. (82335)
  • @Joseph-Mutua: Docs: Update Playground CLI wording. (77579)
  • @MicahelE: api-fetch: Resolve to null for a 200 response with an empty body. (79325)
  • @shameemreza: Pages: Require authentication and a capability to render generated standalone pages. (82254)
  • @wprashed: DataViews: Fix Field.sort TypeScript type definition. (82162)

Contributors

The following contributors merged PRs in this release:

@0xDI @aaronrobertshaw @adamsilverstein @adimoldovan @aduth @afercia @ahirpravin @andrewserong @antwonw @ciampo @coderGtm @desrosj @dilipom13 @dinhtungdu @dmallory42 @ellatrix @hbhalodia @himanshupathak95 @i-am-chitti @im3dabasia @Infinite-Null @jasmussen @jeryj @Jiwoon-Kim @jorgefilipecosta @Joseph-Mutua @jsnajdr @karthikeya-io @Kgupta62 @Mamaduka @manzoorwanijk @marekdedic @maxschmeling @mcsf @MicahelE @mikeybinns @mirka @mreishus @mukeshpanchal27 @Mustafabharmal @Nikschavan @ntsekouras @oandregal @R1shabh-Gupta @ramonjd @retrofox @SainathPoojary @sanketio @saranshsinhaa @sarthaknagoshe2002 @scruffian @shail-mehta @shameemreza @simison @sirreal @swissspidy @t-hamano @talldan @tellthemachines @tyxla @widoz @wprashed @yashjawale @youknowriad

Props

Special thanks to @im3dabasia and @ralucastn for the review.

#block-editor, #core-editor, #gutenberg, #gutenberg-new