The WordPress coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. development team builds WordPress! Follow this site for general updates, status reports, and the occasional code debate. There’s lots of ways to contribute:
Found a bugbugA bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority.?Create a ticket in the bug tracker.
“What’s new in GutenbergGutenbergThe Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc.
https://wordpress.org/gutenberg/…” posts (labeled with the #gutenberg-new tag) are posted following every Gutenberg release on a biweekly basis, showcasing new features included in each release. As a reminder, here’s an overview of different ways to keep up with Gutenberg and the Editor.
This release lets you format text across several blocks at once, adds emoji reactions to notes, and redesigns the Media inserter on top of the DataViews grid. Save and autosave failures now tell you what went wrong. Developers get server-side CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. actions and fields, plus a few Interactivity APIAPIAn API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. fixes. All of this thanks to a fantastic team of contributors, including ten first-timers.
Format text across blocks
Selections that span several blocks are no longer off-limits for formatting. Select the text, and the formatting controls now apply to all of it (#58913).
Working with multi-blockBlockBlock is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. selections got a few other upgrades, too. You can drag a selection by pressing anywhere inside it (#81602), move a dragged text selection (#81603), and keep your rich text selection when you Shift+click within the same block (#84579).
Emoji reactions for notes
Sometimes an emoji is all the reply a note needs. Notes now support reactions like ❤️, 🎉, 😄, 👀, and 🚀 (#76767).
Notes also got some polish. They highlight and connect to their content more clearly (#80578), and the text for an unsent note now gets a draft marker (#84125). The “Add note” toolbar button now only adds notes and no longer shows avatars (#84635).
A new look for the Media inserter
The Media inserter now shows your media in a DataViews grid, the same component behind the lists in the Site Editor (#82749).
Additionally, audio and other files that aren’t images or videos get proper previews (#84882).
Save failures that explain themselves
Nobody likes a failed save action. Save failure notices now have a copy option and a “Show/Hide details” button, so you can share what went wrong (#82496). Autosave failures with no server response are explained, too, and the HTTPHTTPHTTP is an acronym for Hyper Text Transfer Protocol. HTTP is the underlying protocol used by the World Wide Web and this protocol defines how messages are formatted and transmitted, and what actions Web servers and browsers should take in response to various commands. status is shown when available (#85157).
After a failed autosave, a countdown shows when the next attempt will run (#84656), and the notice goes away once a later save succeeds (#84649).
Security fixes from WordPress 7.1.4
Gutenberg 24.3 also includes the security fixes from WordPress 7.1.4, so updating is recommended.
Other notable highlights
Patterns: the inserter’s “My patterns” is now “Site patterns” and has an author filterFilterFilters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output., and synced patterns you can read but not edit are listed in the inserter and can be detached (#84680, #84661, #84641, #84681).
Design tools: the consistency work continues, with Search, Table, Tab List, Paragraph, and Icon gaining more support, fit text reaching Post Title, and writing mode reaching Quote and Pullquote (#83954, #83949, #83953, #83934, #83948, #83036, #83965, #83964). A new background clip control also lands in the block supports UIUIUser interface (#77142). The changelog lists every block and support.
Non-breaking spaces: they are now marked with a red dot, and a button replaces them with regular spaces (#84737).
Navigation: links can be edited in a popover from the sidebarSidebarA sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme. List View, and an empty Navigation MenuNavigation MenuA theme feature introduced with Version 3.0. WordPress includes an easy to use mechanism for giving various control options to get users to click from one place to another on a site. shows the inserter in the sidebar (#84005, #84003).
Gallery: the mobile lightbox gets animated swiping (#79114).
Query LoopLoopThe Loop is PHP code used by WordPress to display posts. Using The Loop, WordPress processes each post to be displayed on the current page, and formats it according to how it matches specified criteria within The Loop tags. Any HTML or PHP code in the Loop will be processed on each post. https://codex.wordpress.org/The_Loop:taxonomyTaxonomyA taxonomy is a way to group things together. In WordPress, some common taxonomies are category, link, tag, or post format. https://codex.wordpress.org/Taxonomies#Default_Taxonomies. terms are listed so they can be browsed, not recalled (#82583).
Table of Contents: headings are read from the post when the block is used in a block context (#85040).
Block toolbar: the parent selector plus only shows when no allowed block splits (#84645).
List View: nesting with top-level items is allowed (#84856).
Client-side media: animated image sub-sizes are generated by default, and EXIF metadata is preserved when converting HEIC to JPEG (#80385, #82040).
Icons: new asterisk and form-based icons (#85442, #84074), popular icons shipped to the core-adminadmin(and super admin) collection (#85072), and the Icon block shows the collection name in the “All” tab (#84055).
Reduced motion: uploaded Cover background videos and front-end Videos no longer autoplay when reduced motion is preferred (#83853, #84308).
Performance: the theme.jsonJSONJSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML. data merged from all origins is cached, and the icon library renders faster (#81979, #84327).
Changelog
Features
Block Editor: Allow rich text formatting across blocks. (58913)
UI: Add AvatarAvatarAn avatar is an image or illustration that specifically refers to a character that represents an online user. It’s usually a square box that appears next to the user’s name. with initials, colored fallbacks, and an optional color ring. (84145, 84653, 84822, 84824)
Enhancements
ReactReactReact is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces.
https://reactjs.org 19: Add new incompatible plugins. (84607)
Scripts: Run end-to-end tests against the configured wp-env test environment. (84654)
Standardize focus rings with the design system:
Components: Checkbox and radio, DataViews list items, Link, Snackbar, Tabs panels, and the UnitControl unit select. (85379, 85358, 84697, 85168, 84914, 85444)
Editor: Block Directory downloadable blocks, Edit as HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. textarea, LinkControl preview, MediaEdit, and the MetaMetaMeta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. Boxes panel toggle. (85307, 85266, 84695, 84940, 85355)
SearchableSelect, SelectControl: Add trigger slots for props and content. (84934, 84828)
Select, Combobox, Autocomplete: Align popup list spacing. (84393)
Snackbar: Keep snackbars with an action on screen longer. (84842)
Tabs: Align interaction backgrounds and focus states. (84572)
Theme: Enrich the design-tokens.js export with more token data. (76604)
Theme: Generate JavaScriptJavaScriptJavaScript or JS is an object-oriented computer programming language commonly used to create interactive effects within web browsers. WordPress makes extensive use of JS for a better user experience. While PHP is executed on the server, JS executes within a user’s browser.
https://www.javascript.com design token fallbacks. (84569)
Improve how notes highlight and connect to content. (80578)
Make the “Add note” toolbar button add-only and drop the avatars. (84635)
Mark the text an unsent note is about with a draft marker. (84125)
Remove the divider between the canvas and floating notes. (84850)
Patterns
Rename the inserter’s “My patterns” to “Site patterns” and add an author filter. (84680)
Support synced patterns the user can read but not edit: list them in the inserter, load them without “Edit original”, and allow detaching them. (84661, 84641, 84681)
Global Styles
Add pseudo-selector support for text inputs and select elements. (71634, 81644)
Font Library: Mark installed font variants in font collections. (84023)
Experiment with proportional stroke scaling. (84081)
Mirror the tagtagA directory in Subversion. WordPress uses tags to store a single snapshot of a version (3.6, 3.6.1, etc.), the common convention of tags in version control systems. (Not to be confused with post tags.) icons to match the other angled icons. (84675)
Ship popular icons to the core-admin collection. (85072)
Bug Fixes
DOM: Fix getOffsetParent infinite loop on a non-element parent. (84374)
Experiments: Don’t invalidate saved option with a legacy key. (84619)
Icons: Restore the missing speech bubble in the postComments icon. (85275)
UI: Show keyboard focus on disabled menu items. (85488)
UI: Synchronize popup hover and keyboard targets. (85487)
UnitControl: Use a neutral color for static unit labels. (85456)
Post Editor
Customize Widgets: Keep the block selected when using wordpress/ui overlays. (84628)
Editor: Fix long author name overflowing the Post sidebar panel. (84165)
Editor: Keep a preview canvas from adopting the entity’s selection. (84832)
Editor: Keep the block toolbar row on phones while no block is selected. (84461)
Editor: Validate parent container when converting blocks to template parts. (84155)
Ensure “Hide block tools” text isn’t wider than the button background. (85051)
Fields: Lock the status and slug fields for users who can’t publish. (84371)
Post Taxonomies: Restore shortcuts to create terms. (84601)
Post slug: Derive the slug preview from the current title instead of generated_slug. (84893)
PostURL: Remove double focus ring outline. (84694)
RevisionsRevisionsThe WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision.: Save unsaved changes as a revision before restoring a revision. (84590)
Style Book: Fix crash when the Heading block is unregistered. (84359)
Template field: Show the default template instead of the Select placeholder. (85167)
URLURLA specific web address of a website or web page on the Internet, such as a website’s URL www.wordpress.org: Make cleanForSlug match WordPress Core’s sanitize_title(). (84896)
Notes
Focus the new note form once it’s positioned. (84639)
Keep the avatar round when it fails to load. (85807)
Read note markers from the rich-text record, not its HTML. (84310)
Skip the reaction summary pre-fetch when Core already does it. (85047)
Block Library
Accordion Heading: Anchor inline notes to selected title text. (84497)
Cover: Decode the oEmbed iframeiframeiFrame is an acronym for an inline frame. An iFrame is used inside a webpage to load another HTML document and render it. This HTML document may also contain JavaScript and/or CSS which is loaded at the time when iframe tag is parsed by the user’s browser. source before parsing its query string. (83770)
Custom HTML: Show a floating marker when the block renders nothing. (84150)
Gallery: Let columns override legacy responsive styles. (84360)
Icon: Fix display issues in the block manager. (84107)
Image: Measure the lightbox container, not the image’s parent. (82312)
Layout: Pair physical margins with the physical float on .alignleft and .alignright. (83520)
Font Library: Load all installed font families. (84684)
Media
Preserve EXIF metadata when converting HEIC to JPEG client-side. (82040)
Skip auto-attach on save when attachment pages are enabled. (84851)
For published posts, only auto-attach newly added images. (84890)
Interactivity API
Align directive name validation with WordPress Core. (81023)
Fix late data-wp-html values, throwing functions, and directive conflicts. (84652)
Keep server-rendered data-wp-html content for the server’s token representation. (84889)
AccessibilityAccessibilityAccessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility)
Block Toolbar: Give the phone placeholder button a name and icon when the default block is unregistered. (84533)
ColorPicker: Improve accessibility and discoverability of inputs. (70214)
Cover: Don’t autoplay an uploaded background video when reduced motion is preferred. (83853)
Modal: Keep an accessible name when the headerHeaderThe header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes. is hidden. (82645)
navigateRegions: Only outline focused Publish and Save regions. (84343)
Notes: Drop misleading aria-haspopup from the “Add note” menu item. (84818)
PaletteEdit: Name picker dialogs and add screen reader dismissal. (84333)
Revisions: Meet AA contrast for the inline deletion diff without an opacity filter. (82258)
ToolsPanel: Put setting names first in accessible action labels. (84341)
Video: Don’t autoplay on the front end when reduced motion is preferred. (84308)
Performance
Cache the theme.json data merged from all origins. (81979)
Connectors: Preload REST APIREST APIThe REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think “phone app” or “website”) can communicate with the data store (think “database” or “file system”)
https://developer.wordpress.org/rest-api/ responses on the Connectors screen. (77353)
Icon: Speed up rendering of the icon library. (84327)
Components: Update guidance after the Emotion migrationMigrationMoving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies.. (85020, 85023)
Framework: Improve AGENTS.md guidance around running package scripts. (84195)
Menu: Clarify icon, label, and description usage guidelines. (84020)
Note reduced-motion handling for autoplaying media. (84594)
Storybook: Add more visual pages for all tokens. (84373)
Storybook: Keep documentation first by sorting unlisted folders alphabetically. (84563)
Storybook: Present motion tokens as an MDX documentation page. (85080)
Use the null coalescing assignment operator in singleton getters. (85174)
TypeScript:
Block Editor: Convert the store, hooksHooksIn WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same., shared components, utilities, InspectorControls, LinkControl, URLInput, typography controls, and useBlockDropZone to TypeScript. (84615, 84616, 84625, 84629, 84655, 84677, 84720, 84725, 84730, 84844, 84848, 84946)
Block Supports: Share the state text clip helpers with theme.json. (85057)
Include migration hint in useSetting deprecation warning. (85100)
Rich Text: Remove refs from event listener contexts. (84545)
Sorting: Rely on stable standard sort and use toSorted. (52213)
Block Library
A11yAccessibilityAccessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility): Move prefersReducedMotion into the block library’s shared utils. (84297)
Blocks: Clarify button background comment and template part error string. (85176)
Media & Text: Replace deprecated word-break with overflow-wrap: anywhere. (82580)
Remove compat function for unsupported unprefixed style states. (84531)
Rename inspector and toolbar style-states slots for consistency. (84598)
Extensibility
Actions API: Extract the core actions into the wordpress/core-actions script modules, and remove the fields that moved to wordpress/core-fields. (84643, 84897)
Core Actions, Core Fields: Translate the labels with the default text domain. (85139)
Fields API: Take over Core’s registry singleton like the Icons API. (84168)
Tools
Props Bot: Queue runs instead of cancelling superseded ones. (84176)
Testing
Add an iOSiOSThe operating system used on iPhones and iPads. end-to-end test harness and test selecting text across two paragraphs. (84463, 84585, 84640, 84741, 84859)
Add end-to-end tests for the autosave failure notice. (84644)
Automated Testing: Add AI review guidance for lint suppressions. (84638)
Automated Testing: Fix Storybook manifest errors and validate in CI. (84198)
Changelog validation: Reject blank lines between Unreleased entries. (84804)
Entity Actions: Fix the taxonomy collision test against Core trunktrunkA directory in Subversion containing the latest development code in preparation for the next major release cycle. If you are running "trunk", then you are on the latest revision.. (85146)
Flaky end-to-end tests: Open settings sidebar in constrained canvas test. (84606)
Icons: Add unit testunit testCode written to test a small piece of code or functionality within a larger application. Everything from themes to WordPress core have a series of unit tests. Also see regression. coverage for WP_REST_Icon_Collections_Controller. (83168)
React 19 codemod: Apply defaultProps when rendering a memo component. (84568)
Update Ariakit to 0.4.42, Base UI to 1.9.0, Terrazzo token tools to 2.9.0, Testing Library user-event to 14.6.8, and Vite to 8.3.4. (84539, 85066, 84542, 85067, 85068, 84544)
WP Build: Support importing SVG files as inlined data URIs. (85147)
Zed: Exclude node_modules from the file scan and turn off Tailwind CSS. (84604)
Linting
ESLint: Align UI caution components with Storybook status. (84319)
ESLint: Allow design tokens in component JavaScript. (84827)
ESLint: Make jsdoc/escape-inline-tags an error. (84701)
ESLint: Remove an unused comments-pluginPluginA plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. dependency. (85102)
Use the matching wordpress-develop branchbranchA directory in Subversion. WordPress uses branches to store the latest development code for each major release (3.9, 4.0, etc.). Branches are then updated with code for any minor releases of that branch. Sometimes, a major version of WordPress and its minor versions are collectively referred to as a "branch", such as "the 4.0 branch". for pre-release PHPUnit tests. (84758)
First-time contributors
The following PRs were merged by first-time contributors:
@00kaku: Search: Don’t clip the button focus outline when the field is collapsed. (84685)
@anamwp: Revisions: Meet AA contrast for the inline del diff without an opacity filter. (82258)
@ariel-maidana: Media & Text: Restore content padding in classic themes with a CSS reset. (85200)
@awss1i: DropdownMenu: Keep a disabled toggle closed on ArrowDown. (84556)
@bitworks-io: Env: Update simple-git to v4. (84137)
@poligilad-auto: Icons: Mirror the tag icons to match the other angled icons. (84675)
@preetpatel713: Editor: Fix long author name overflowing the Post sidebar panel. (84165)
@rajpreetcodes: Block Editor: Preserve rich text selection on Shift+click within the same block. (84579)
@salvatorecorsi: Accordion Heading: Anchor inline notes to selected title text. (84497)
@yotatameguchi-boop: Duotone: Sync unsupported attribute type guard from Core. (84801)
Contributors
The following contributors merged PRs in this release:
The Presence APIAPIAn API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. meeting took place on Monday, October 26, 2026 at 15:00 UTC in #feature-presence-api. It also hosts the real-time collaboration (RTC) work. This week’s focus was the last two merge criteria, user testing and a security audit.
Presence API 0.18.3 is out. 0.18.0 through 0.18.3 brought a per-room session hash that tells a second browser from a second tab (#815), coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress.’s copy of each API function winning once it exists (#805), and a REST settings save warning an open Settings screen (#868).
0.18.4 was next (#873). @huzaifaalmesbah found that logging out in one browser released post locks still held in another (#890), and the fix was in review (#893).
Everything from last time except the audit is merged: touch (#830), keyboard-only (#841), JavaScriptJavaScriptJavaScript or JS is an object-oriented computer programming language commonly used to create interactive effects within web browsers. WordPress makes extensive use of JS for a better user experience. While PHP is executed on the server, JS executes within a user’s browser.
https://www.javascript.com off (#857), HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. validation (#852, #858), Firefox and WebKit (#838), inline CSSCSSCascading Style Sheets. in stylesheets (#825) and linted PHPUnit tests (#817). Thanks to @iamchitti and @rejaulalomkhan.
User testing is #835. Muhib drafted a call for testing for Make/Test in #869, with Playground links and four tasks. @huzaifaalmesbah, @iamchitti and @joefusco left feedback, and @huzaifaalmesbah offered to help get it posted on Make/Test once that feedback is worked in.
The security audit is #834. noruzzaman went through all four surfaces on the issue. The criterion still asks for a review from outside the repository, so @joefusco will ask the Core security team. Anyone who has done security review for core or a large pluginPluginA plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. is welcome to take a look, in the channel or on #834.
#836 measures the post query cache with the plugin’s post locks off and on. A synthetic 20,000-post site is in the issue, and a few large sites on WP Engine are being lined up to measure real traffic.
Path to core
The readiness gate on #550 still has December 3 as the earliest date, eight weeks with no breaking API change from 0.17.0, and that is the earliest an initial proposal would go to TracTracAn open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress.. It also asks for three outside projects on the API, and GSE is the only one so far. Anyone building on the API, or considering it for a plugin or host, is welcome to get in touch.
Open floor
@jaredrethman asked on the guide whether WordPress could fire an action for each stored edit-log row, so a hosted relay could stream changes without running a process on the server (comment). The Presence API already does this for presence, firing set_presence and removed_presence on every write.
@alecgeatches said the engine could likely support it, with the caveat that a server-side request per row would leave the server working hard to keep up, so the cost belongs with whoever hooksHooksIn WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same. in, queued or batched on their side.
@jaredrethman noted that gutenberg_sync_engines_room_changed already fires per write and the Redis notifier sends one publish per request, so a relay only needs that wake hint, never the rows. Editor presence already rides that hint, and carrying set_presence and removed_presence too would take Heartbeat polling off the adminadmin(and super admin). He opened #901 for what a relay would need.
Since the meeting
Presence API 0.18.4 shipped October 26 with the logout fix (#893), and the personal data export now leaves out reserved rows (#896).
0.19.0 shipped October 29 with a presence-api.keepalivefilterFilterFilters 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. (#904) and a presence-api.roomChanged action (#903), so a push transport can hold a tab’s rows and refresh presence at once.
0.20.0 shipped November 1 with wp_presence_admin_state() (#924), which completes #901, and wp_presence_room_changed now fires when an edited post’s title or status changes (#915).
The docs are live, a first pass at automated docs for what’s built so far, generated and checked against the code.
One major change landed this week: the notification repository is now scoped per user, laying the groundwork for the REST APIREST APIThe REST API is an acronym for the RESTful Application Program Interface (API) that uses HTTP requests to GET, PUT, POST and DELETE data. It is how the front end of an application (think “phone app” or “website”) can communicate with the data store (think “database” or “file system”)
https://developer.wordpress.org/rest-api/. In addition, we merged a README note and four Dependabot bumps. A batch of community PRs (fixes, tooling, and PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher test-matrix updates) is open and waiting for review.
Highlights
Notification repository is now user-scoped (#626, elphizu). The Notification_Repository interface was rewritten so every lookup takes a user_id. find_by_id() now finds a message by its message ID for a specific user, and new find_by_user() and count_by_user() methods support filtering by status, channel, context, after/before (for polling), expiry and pagination. The wpdb implementation was updated to match, the legacy interface-notification.php was removed, and new PHPUnit coverage was added. Users can now only reach their own notifications through the repository, and the REST layer gets what it needs for listing and totals (X-WP-Total).
README note about the demo code pluginPluginA plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. (#648, jonathanbossenger), pointing contributors to the demo plugin.
#626 fix: make notification repository user-scoped (elphizu)
Docs
#648 Adding a note to the readme about the demo code plugin (jonathanbossenger)
Dependency updates
All patchpatchA special text file that describes changes to code, by identifying the files and lines which are added, removed, and altered. It may also be referred to as a diff. A patch can be applied to a codebase for testing.-level npm bumps from Dependabot, merged 2026-10-23:
Still open from Dependabot: #647 eslint 10.4.0 → 10.13.0, and #654 fast-uri 3.1.8 → 3.1.9.
In progress
Opened this week
#649 add modern php versions to testsuite (masteradhoc)
#652 fix(channel-registry): guard title key with array_key_exists() like other optional args (hmbashar)
#653 fix(base-image): guard json_unserialize() against invalidinvalidA resolution on the bug tracker (and generally common in software development, sometimes also notabug) that indicates the ticket is not a bug, is a support request, or is generally invalid.JSONJSONJSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML. input (hmbashar)
Open and updated this week (none are drafts)
#644 REST: Add missing text domain and fix typos in REST API controller strings (devmuhib009)
#633 fix: convert notification store to thunks (KhushalSainS)
#632 Tooling: Fix the test:php, php-install, lint:css and docGen npm scripts (huzaifaalmesbah)
#628GitHubGitHubGitHub 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/: Add a Props Bot workflow (huzaifaalmesbah)
#627 Model: Handle dates in UTC in Serde and the message factory (huzaifaalmesbah)
#625 GitHub: Update the pull request template (huzaifaalmesbah)
#624 Framework: Store one Factory instance per subclass (huzaifaalmesbah)
#552 Types: add return type declaration to jsonSerialize methods (SirLouen)
Closed without merging
#383 Update wp-env and add useful script commands (Sephsekla), a 2023 draft
#568 npm: bump form-data from 4.0.5 to 4.0.6 (Dependabot)
WordPress doesn’t have a good way to tell people what’s happening on their site. Plugins fall back on adminadmin(and super admin) notices that push the page down, so the things that matter, like a failed payment, a security update or a teammate’s question, get lost among reminders and promotions.
Feature Notifications is building a shared fix (status and plan for 0.3.0, weekly updates): one place for what happens on a site, where real problems stand out and people control what they get. Alongside that work, I’ve been exploring what it could look like, and testing it against a real pluginPluginA plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party.: every message WooCommerce and WooPayments show today.
Today, every plugin tells people things its own way: admin notices that push content down the page, inbox cards, banners, badges. There’s no shared sense of what’s important, so the important things get lost among the rest.
The idea is a better place to show what happens on a site, with a baseline of rules plugins can follow, and in return be seen everywhere in WordPress, including the editor and the front of the site:
One bell for the site, its plugins and WordPress.comWordPress.comAn online implementation of WordPress code that lets you immediately access a new WordPress environment to publish your content. WordPress.com is a private company owned by Automattic that hosts the largest multisite in the world. This is arguably the best place to start blogging if you have never touched WordPress before. https://wordpress.com/.
Each notification opens to show what it’s about (an order, a post), who it’s from, and one clear next step.
Real problems stay on top until they’re dealt with. Everything else stays out of the way.
The design is inspired by the WordPress.com notifications panel by Ollie Rozdarz and the WordPress.com notifications team, tested and refined with millions of people every day.
What this is, and isn’t
What this is: a new way to reach people. One notification tray, available not only on certain admin pages like today’s notices, but everywhere: every admin screen, inside the editor, and on the front of the site. Plugins that use it get their message across consistently, instead of resorting to bigger and bigger notices that push the page down. It comes with a design direction and a set of rules, so notifications look and behave the same whoever sends them.
What this isn’t: a breaking change. Existing plugins keep working, and no APIs or hooksHooksIn WordPress theme and development, hooks are functions that can be applied to an action or a Filter in WordPress. Actions are functions performed when a certain event occurs in WordPress. Filters allow you to modify certain functions. Arguments used to hook both filters and actions look the same. are being removed. Admin notices, custom ones included, will still work. They’re just not where notifications in WordPress are heading. It also isn’t finished, or all for 0.3.0.
A clearer system
This is the second version of the prototype. The first showed the idea. Early feedback asked how much is the system and how much is left to each plugin, so the second is about rules (what changed):
Plugins send data, not layout. They pick one of four layouts and fill its fields: Standard, Object (with a card for what it’s about), Conversation and Group.
Five separate dimensions, each changing something different. A dispute, for example, is a payment (type), critical (severityseverityThe seriousness of the ticket in the eyes of the reporter. Generally, severity is a judgment of how bad a bug is, while priority is its relationship to other bugs.), operational (intent) and unread (read state), with the sender’s status “Needs response”, later “Won”. CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. owns the values; plugins choose from them.
Critical is rare and visible. It stays on top and turns the bell’s count red until it’s resolved, not just read.
An Alerts tab gathers critical notifications and warnings in one place, with a count, so what needs attention is always one click away. Warnings wait there until they’re dealt with.
Limits against noise. Repeats replace each other, many of the same become one, and tips and offers can all be turned off at once.
All of this is laid out in the catalog: System has the dimensions, layouts and rules, and Styles shows each part, from the badges and row states to the bell itself.
This version also adds a few smaller things people asked for. Density, in the ⚙ menu under Appearance, switches between comfortable and compact: one line per row, so busy sites see twice as many at once. Notifications can also be marked as unread from their ⋮ menu.
Open questions
These are open, and feedback on them is especially welcome.
Badges: one per type, or a few kinds?
Today each type of notification has its own small badge on the row: a speech bubble for comments, an order icon, a bar chart for stats. That’s what WordPress.com does, and it’s quick to scan. But the list grows every time a plugin brings something new, like bookings or form entries. The alternative is a few generic badges that never grow (message, reaction, activity, system, milestone, tip), with the specifics shown in the circle and the title instead. Which works better as more plugins join? Both are compared in the catalog.
Severity: are three values enough?
Severity decides what stands out. Critical is pinned at the top and turns the bell’s count red, warnings wait in the Alerts tab, and info is everything else. There’s no “success”: good news already shows in the status, like a dispute marked “Won”. Core’s docs suggest alert, warning and info, close to this. Are three values enough, and who decides which notifications are allowed to be critical?
Who did it and what it’s about: optional extras, or proper fields?
To show who did something (a customer’s name and picture) and what it’s about (a card for the order), a notification needs two pieces of data core doesn’t store today. They can go in core’s existing meta column, as actor and about, without changing the database. But that keeps them optional and loosely defined. Should they stay in meta, or become proper fields every plugin fills the same way?
Across channels: where should each event arrive?
The same event can reach someone in several ways: the bell, a count in the admin menu, an email, a push to their phone. A new order today does three of these, and could do four if Orders gets its own menu item with a count. Which events belong where, so each arrives once, in the right place? This needs a review of every event, not just the bell.
Unread: a tab, or a filterFilterFilters are one of the two types of Hooks https://codex.wordpress.org/Plugin_API/Hooks. They provide a way for functions to modify data of other functions. They are the counterpart to Actions. Unlike Actions, filters are meant to work in an isolated manner, and should never have side effects such as affecting global variables and output.?
I’d keep a top-level Unread tab, even though it mixes read state in with the categoryCategoryThe 'category' taxonomy lets you group posts / content together that share a common bond. Categories are pre-defined and broad ranging. tabs, because it’s what people most often want to see. For comparison, the demo also has Show only unread, a filter that works within any tab, so you can see what’s unread in Store, for example. To try it, open Demo in the admin bar › Unread › In the gear menu, then the bell’s ⚙ menu › Show only unread.
Settings: how do they scale?
People can mute notifications per channel, like WooCommerce › Orders, and turn off each plugin’s tips with one switch. With many plugins, each sending several kinds, that list gets long fast. How should settings stay manageable? This hasn’t been explored yet.
AccessibilityAccessibilityAccessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility): does the keyboard work for you?
The keyboard follows the WordPress.com panel: arrows move through the list, Enter opens a notification and moves focus into it, Esc goes back to the same row, and Esc again closes the bell. Here’s a short GIF of it in action. Does it work well with screen readers and other assistive technologyAssistive technologyAssistive technology is an umbrella term that includes assistive, adaptive, and rehabilitative devices for people with disabilities and also includes the process used in selecting, locating, and using them. Assistive technology promotes greater independence by enabling people to perform tasks that they were formerly unable to accomplish, or had great difficulty accomplishing, by providing enhancements to, or changing methods of interacting with, the technology needed to accomplish such tasks.
https://en.wikipedia.org/wiki/Assistive_technology?
Stress-testing the system against other plugins. WooCommerce was the first deep test. Next, more plugins’ notices go through the same catalog, starting with Jetpack, to see how they fit and where the rules need to change.
A first step in 0.3.0: shaping what core’s first hub can show, so it already moves in this direction.
When could this ship?
Not soon, and that’s fine. 0.3.0 comes first, as a feature pluginFeature PluginA plugin that was created with the intention of eventually being proposed for inclusion in WordPress Core. See Features as Plugins, and merging into core follows after it. Plugins can only adopt notifications once they’re in WordPress, and and moving over is up to each plugin, at its own pace. Jonathan’s weekly updates follow the plan. There’s time for feedback to shape this.
Feedback
Your feedback is welcome, whether you use WordPress, build plugins that send notifications today, or work on accessibility. Leave a comment on this post, or on issue #655, where the work continues. You can also find us in #feature-notifications on SlackSlackSlack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/.
Props @jameskoster for early feedback, @joen for guidance, and @keoshi for earlier explorations into notifications.
The live meeting focuses on upcoming releases and CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. development, with time for discussions and open floor.
If you have requests for help with a ticketticketCreated for both bug reports and feature development on the bug tracker. or another discussion topic, please post details in the comments section at the end of this agenda, or bring it up in Dev Chat during open floor.
The discussion section of the agenda is for discussing important topics affecting the upcoming release or larger initiatives that impact the Core Team. To nominate a topic for discussion, please leave a comment on this agenda with a summary of the topic, any relevant links that will help people get context for the discussion, and what kind of feedback you are looking for from others participating in the discussion.
Open floor 🎙️
Any topic can be raised for discussion in the comments, as well as requests for assistance on tickets. Tickets in the milestone for the next major or maintenance release will be prioritized.
Please include details of tickets / PRs and the links in the comments, and indicate whether you intend to be available during the meeting for discussion or will be async.
For each WordPress release, a roadmap is pulled together to share what’s planned and provide opportunities for folks to contribute. Over the last three years, these posts have taken roughly the same shape and approach, with some variation around the number of items to include based on how far along an area of work is. To ensure these posts continue to be meaningful and evolve as the WordPress project does, please use this link below to give feedback by November 16th. All are welcome to give feedback. Thank you in advance.
I’m interested in hearing from all audiences from coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. committers to extenders to hosting companies to everyday users. If you have feedback that doesn’t fit neatly into the survey, please just comment below to share your feedback and don’t feel like you need to force your thoughts into the format of this survey. After November 16th, I’ll either write a separate post summarizing the feedback or leave a comment on this one with the results and likely some reflections based on my experience pulling them together. My aim is to use this feedback to see what to evolve for the release roadmaps to come.
TL;DR: WordPress Contributor Toolkit v2.0.0 has been released with a new interface built on the WordPress Design System, a settings dialog, a dark theme, and translations into ten languages.
The WordPress Contributor Toolkit removes the points of friction first-time contributors face before they write a line of code, especially during Contributor Days. You do not have to install GitGitGit is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency. Git is easy to learn and has a tiny footprint with lightning fast performance. Most modern plugin and theme development is being done with this version control system.
https://git-scm.com/, Node.js, npm, or Docker on your machine.
The app started by setting up a full WordPress Core development environment. Version 1.0 added the full Core contribution workflow, from reading a TracTracAn open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress.ticketticketCreated for both bug reports and feature development on the bug tracker. to sending your fix back as a pull request or a patchpatchA special text file that describes changes to code, by identifying the files and lines which are added, removed, and altered. It may also be referred to as a diff. A patch can be applied to a codebase for testing.. Version 1.2 added the same workflow for Gutenberg.
Now, version 2.0brings a redesigned interface, available in ten languages. The CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. and GutenbergGutenbergThe Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc.
https://wordpress.org/gutenberg/ workflows work the same way as in 1.2.
A new look, built on the WordPress Design System
The whole window has been redesigned with the WordPress Design System: the sidebarSidebarA sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme., the page headerHeaderThe header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes., the site details, the cards, the dialogs and the tray at the bottom. If you have used the blockBlockBlock is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. editor, the buttons, notices and dialogs will look familiar.
A few smaller changes make the screen easier to read:
The sites list shows each site’s server status beside its name, so you can see which sites are running without opening them.
The footer’s tray buttons are labeled with their names, not only icons.
The next-action cue is visible on warning notices, so the button that moves you forward stands out even when something needs your attention.
The Trac window uses the app’s theme.
Settings in one place
Version 2.0 adds a settings dialog. Open it from the cog at the bottom right of the window, from Settings… in the app menu on macOS, or from the File menu on Windows and Linux.
The settings are in three groups:
General. The theme, the language, whether a site’s server and build watch start when you open it, whether what was running at quit starts again next time, and a default folder for new sites.
Sites. The PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher version every site’s development server runs on, and the WP_DEBUG and SCRIPT_DEBUG flags. A change applies the next time a server starts, and the site details show the values the next start will use.
Account. Your WordPress.orgWordPress.orgThe community site where WordPress code is created and shared by the users. This is where you can download the source code for WordPress core, plugins and themes as well as the central location for community conversations and organization. https://wordpress.org/ username and the event you are at, which go into a patch you hand to a mentor, and the GitHubGitHubGitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the ‘pull request’ where code changes done in branches by contributors can be reviewed and discussed before being merged by the repository owner. https://github.com/ account the app opens pull requests with.
The theme can be light, dark, the same as your operating system, or custom: pick a background and a primary color, and the app builds every other color from them.
The app speaks your language
Every string in the interface is now translatable: the setup checklist, the trunktrunkA directory in Subversion containing the latest development code in preparation for the next major release cycle. If you are running "trunk", then you are on the latest revision. update, Review & submit changes, the pull request form and GitHub sign-in, the ticket and branchbranchA directory in Subversion. WordPress uses branches to store the latest development code for each major release (3.9, 4.0, etc.). Branches are then updated with code for any minor releases of that branch. Sometimes, a major version of WordPress and its minor versions are collectively referred to as a "branch", such as "the 4.0 branch". notices, patch errors, the Terminal and Logs output, the mail dialog, the app menu, and the app’s own dialogs.
Version 2.0 ships in ten languages: Czech, Dutch, English (Canada), English (UK), Galician, Hungarian, Lao, Polish, Serbian and Turkish.
By default the app follows your operating system’s language. To choose another one, open Settings, pick a Language, and relaunch when the dialog offers to.
A language ships with the app once it is at least 80% translated on translate.wordpress.org, so the list grows with each release. If yours is not there yet, the Contributor Toolkit project on translate.wordpress.org is a good first contribution in itself.
See what changed, file by file
After you apply a patch or check out a pull request, the site’s details now list the Changed files as a tree of folders, in two groups:
From the patch or From PR #N: the files the change itself touches. A pencil marks the ones you have edited since.
Your changes: every other file you have changed on that ticket or issue.
Click a file to open it in your editor, inside the site’s folder. Each file you changed has a revert button that puts back just that file, so you can undo one experiment without losing the patch you are testing. Discard your changes now removes only your own work and leaves the applied patch or pull request in place.
Trac details that stay
When you click Read details from Trac, the app now keeps what it read. Quit and reopen it, and the ticket’s summary, status, type, component, milestone and keywords are still there, with the time they were read. A refresh button beside that line reads the ticket again when you want the latest.
The ticket card has also been reorganized: the ticket’s title leads, its facts are on labeled rows, and unsubmitted work on the ticket appears as a notice with Review and submit and Discard changes buttons.
At a Contributor Day, everyone downloads the app at the same time, on the same networknetwork(versus site, blog). Version 2.0 is about 350 MB smaller once installed. It no longer ships PHP builds it never loads, libraries already bundled into the interface, or Chromium language files for languages the app has no translationtranslationThe process (or result) of changing text, words, and display formatting to support another language. Also see localization, internationalization. for.
Other improvements
Sites run as a local environment, so Application Passwords can be tested over HTTPHTTPHTTP is an acronym for Hyper Text Transfer Protocol. HTTP is the underlying protocol used by the World Wide Web and this protocol defines how messages are formatted and transmitted, and what actions Web servers and browsers should take in response to various commands..
Adminer opens the right database when the site uses randomized SQLite storage or a custom DB_PATH.
The debug.log pane no longer shows a line twice, or replays the whole file when you save it from an editor.
The pull request preview no longer lists trunk’s files when the site’s trunk is behind.
The main window can no longer be navigated away from the app or open other windows, and HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. mail is shown in a separate frame.
You must be logged in to post a comment.