Title: 7-0 – Make WordPress Core

---

#  Tag Archives: 7-0

 [  ](https://profiles.wordpress.org/audrasjb/) [Jb Audras](https://profiles.wordpress.org/audrasjb/)
5:13 am _on_ April 15, 2026     
Tags: 7-0, [agenda ( 1,124 )](https://make.wordpress.org/core/tag/agenda/),
[core ( 721 )](https://make.wordpress.org/core/tag/core/), [dev chat ( 899 )](https://make.wordpress.org/core/tag/dev-chat/)

# 󠀁[Dev Chat Agenda – April 15, 2026](https://make.wordpress.org/core/2026/04/15/dev-chat-agenda-april-8-2026-2/)󠁿

The next WordPress Developers Chat will take place on [Wednesday, April 15, 2026, at 15:00 UTC](https://www.timeanddate.com/worldclock/fixedtime.html?iso=20260415T1500)
in the [core](https://wordpress.slack.com/messages/core/) channel on [Make WordPress Slack](https://make.wordpress.org/chat/).

The live meeting will focus on the discussion for upcoming releases, and have an
open floor section.

The various curated agenda sections below refer to additional items. If you have
ticketticket Created for both bug reports and feature development on the bug tracker.
requests for help, please continue to post details in the comments section at the
end of this agenda or bring them up during the dev chat.

## Announcements 📢

### WordPress 7.0 Updates

 * [The Path Forward for WordPress 7.0](https://make.wordpress.org/core/2026/04/02/the-path-forward-for-wordpress-7-0/)

The release schedule is currently still on hold, pending further validation of a
new release candidaterelease candidate One of the final stages in the version release
cycle, this version signals the potential to be a final release to the public. Also
see [alpha (beta)](https://make.wordpress.org/core/tag/7-0/?output_format=md#alpha-beta)..

### General announcements

 * [What’s new in Gutenberg 22.9? (8 April)](https://make.wordpress.org/core/2026/04/09/whats-new-in-gutenberg-22-9-8-april/)
 * [Twenty Twenty-Seven: Team Announcement](https://make.wordpress.org/core/2026/04/08/tt7-team/)

## Discussions 💬

_The discussion section of the agenda is for discussing important topics affecting
the upcoming release or larger initiatives that impact the CoreCore Core is the 
set of software required to run WordPress. The Core Development Team builds WordPress.
Team. To nominate a topic for discussion, please leave a comment on this agenda 
with a summary of the topic, any relevant links that will help people get context
for the discussion, and what kind of feedback you are looking for from others participating
in the discussion._

 * From [@annezazu](https://profiles.wordpress.org/annezazu/): [Defining expectations for Iteration issues](https://make.wordpress.org/core/2026/04/08/iteration-issue-expectations/)
 * From [@matt](https://profiles.wordpress.org/matt/): [Elevating Individuals](https://make.wordpress.org/core/2026/04/11/elevating-individuals/)

## 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.

[#7-0](https://make.wordpress.org/core/tag/7-0/), [#agenda](https://make.wordpress.org/core/tag/agenda/),
[#core](https://make.wordpress.org/core/tag/core/), [#dev-chat](https://make.wordpress.org/core/tag/dev-chat/)

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcore%2F2026%2F04%2F15%2Fdev-chat-agenda-april-8-2026-2%2F%23respond&locale=en_US)

 [  ](https://profiles.wordpress.org/audrasjb/) [Jb Audras](https://profiles.wordpress.org/audrasjb/)
3:49 pm _on_ April 8, 2026     
Tags: 7-0, [core ( 721 )](https://make.wordpress.org/core/tag/core/),
[core-editor ( 745 )](https://make.wordpress.org/core/tag/core-editor/), [dev chat ( 899 )](https://make.wordpress.org/core/tag/dev-chat/)

# 󠀁[Dev Chat summary: April 8, 2026](https://make.wordpress.org/core/2026/04/08/summary-dev-chat-april-8-2026/)󠁿

[Start](https://wordpress.slack.com/archives/C02RQBWTW/p1775660548427059) of the
meeting in SlackSlack Slack is a Collaborative Group Chat Platform [https://slack.com/](https://slack.com/).
The WordPress community has its own Slack Channel at [https://make.wordpress.org/chat/](https://make.wordpress.org/chat/),
facilitated by [@audrasjb](https://profiles.wordpress.org/audrasjb/) 🔗 [Agenda post](https://make.wordpress.org/core/2026/04/07/dev-chat-agenda-april-8-2026/).

## Announcements 📢

### WordPress 7.0 Updates

 * [The Path Forward for WordPress 7.0](https://make.wordpress.org/core/2026/04/02/the-path-forward-for-wordpress-7-0/).
   Quick summary:
    - `trunk` is **closed to commits for the 7.1 release** until further notice
    - Backporting to 7.0 still requires double committercommitter A developer with
      commit access. WordPress has five lead developers and four permanent core 
      developers with commit access. Additionally, the project usually has a few
      guest or component committers - a developer receiving commit access, generally
      for a single release cycle (sometimes renewed) and/or for a specific component.
      sign off
    - Pre-releases are paused
    - The next release will be a RCrelease candidate One of the final stages in 
      the version release cycle, this version signals the potential to be a final
      release to the public. Also see [alpha (beta)](https://make.wordpress.org/core/tag/7-0/?output_format=md#alpha-beta).
    - We’re currently in string freeze
 * New Dev Notesdev note Each important change in WordPress Core is documented in
   a developers note, (usually called dev note). Good dev notes generally include
   a description of the change, the decision that led to this change, and a description
   of how developers are supposed to work with that change. Dev notes are published
   on Make/Core blog during the beta phase of WordPress release cycle. Publishing
   dev notes is particularly important when plugin/theme authors and WordPress developers
   need to be aware of those changes.In general, all dev notes are compiled into
   a Field Guide at the beginning of the release candidate phase.:
    - [Building a custom sync provider for real-time collaboration](https://make.wordpress.org/core/2026/04/01/building-a-custom-sync-provider-for-real-time-collaboration/)

## Discussion 💬

From [@desrosj](https://profiles.wordpress.org/desrosj/): contributors who have 
a list of notes for tickets to create are encouraged to create them before the WordCampWordCamp
WordCamps are casual, locally-organized conferences covering everything related 
to WordPress. They're one of the places where the WordPress community comes together
to teach one another what they’ve learned throughout the year and share the joy.
[Learn more](https://central.wordcamp.org/about/). Asia Contributor DayContributor
Day Contributor Days are standalone days, frequently held before or after WordCamps
but they can also happen at any time. They are events where people get together 
to work on various areas of [https://make.wordpress.org/](https://make.wordpress.org/)
There are many teams that people can participate in, each with a different focus.
[https://2017.us.wordcamp.org/contributor-day/](https://2017.us.wordcamp.org/contributor-day/)
[https://make.wordpress.org/support/handbook/getting-started/getting-started-at-a-contributor-day/](https://make.wordpress.org/support/handbook/getting-started/getting-started-at-a-contributor-day/).
Especially if they are `good-first-bugs`! 

[@desrosj](https://profiles.wordpress.org/desrosj/) added: “If someone has some 
time, triaging the good-first-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. list could also be helpful. Sometimes
that list is intimidating because it seems like everything is attended to. But often
times the patches need to be refreshed or the approaches so far are not fully solving
the issue at hand. If we could note that on the tickets, it may make them more easily
actionable.”

[@audrasjb](https://profiles.wordpress.org/audrasjb/) noted that the [8 tickets in the i18n component for 7.0](https://core.trac.wordpress.org/query?status=accepted&status=assigned&status=new&status=reopened&status=reviewing&component=I18N&milestone=7.0&group=component&col=id&col=summary&col=status&col=owner&col=type&col=priority&col=changetime&col=keywords&order=priority)
are easy tickets that would be nice to address during the contributor day. They 
are also Polyglots, CoreCore Core is the set of software required to run WordPress.
The Core Development Team builds WordPress., and Core Editor cross-team tickets.

[@desrosj](https://profiles.wordpress.org/desrosj/) will encourage our Polyglots
contributors to open tickets for strings that need refinement and additional context
as it is a great way to contribute to the upcoming release.

[#7-0](https://make.wordpress.org/core/tag/7-0/), [#core](https://make.wordpress.org/core/tag/core/),
[#core-editor](https://make.wordpress.org/core/tag/core-editor/), [#dev-chat](https://make.wordpress.org/core/tag/dev-chat/)

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcore%2F2026%2F04%2F08%2Fsummary-dev-chat-april-8-2026%2F%23respond&locale=en_US)

 [  ](https://profiles.wordpress.org/audrasjb/) [Jb Audras](https://profiles.wordpress.org/audrasjb/)
9:42 am _on_ April 7, 2026     
Tags: 7-0, [agenda ( 1,124 )](https://make.wordpress.org/core/tag/agenda/),
[core ( 721 )](https://make.wordpress.org/core/tag/core/), [dev chat ( 899 )](https://make.wordpress.org/core/tag/dev-chat/)

# 󠀁[Dev Chat Agenda – April 8, 2026](https://make.wordpress.org/core/2026/04/07/dev-chat-agenda-april-8-2026/)󠁿

The next WordPress Developers Chat will take place on [Wednesday, April 8, 2026, at 15:00 UTC](https://www.timeanddate.com/worldclock/fixedtime.html?iso=20260408T1500)
in the [core](https://wordpress.slack.com/messages/core/) channel on [Make WordPress Slack](https://make.wordpress.org/chat/).

The live meeting will focus on the discussion for upcoming releases, and have an
open floor section.

The various curated agenda sections below refer to additional items. If you have
ticketticket Created for both bug reports and feature development on the bug tracker.
requests for help, please continue to post details in the comments section at the
end of this agenda or bring them up during the dev chat.

## Announcements 📢

### WordPress 7.0 Updates

 * [The Path Forward for WordPress 7.0](https://make.wordpress.org/core/2026/04/02/the-path-forward-for-wordpress-7-0/)
 * New Dev Notesdev note Each important change in WordPress Core is documented in
   a developers note, (usually called dev note). Good dev notes generally include
   a description of the change, the decision that led to this change, and a description
   of how developers are supposed to work with that change. Dev notes are published
   on Make/Core blog during the beta phase of WordPress release cycle. Publishing
   dev notes is particularly important when plugin/theme authors and WordPress developers
   need to be aware of those changes.In general, all dev notes are compiled into
   a Field Guide at the beginning of the release candidate phase.:
    - [Building a custom sync provider for real-time collaboration](https://make.wordpress.org/core/2026/04/01/building-a-custom-sync-provider-for-real-time-collaboration/)

## Discussions 💬

_The discussion section of the agenda is for discussing important topics affecting
the upcoming release or larger initiatives that impact the CoreCore Core is the 
set of software required to run WordPress. The Core Development Team builds WordPress.
Team. To nominate a topic for discussion, please leave a comment on this agenda 
with a summary of the topic, any relevant links that will help people get context
for the discussion, and what kind of feedback you are looking for from others participating
in the discussion._

## Open floor  🎙️

Any topic can be raised for discussion in the comments, as well as requests for 
assistance on tickets. Tickets in the milestone for the next major or maintenance
release will be prioritized.
Please include details of tickets / PRs and the links
in the comments, and indicate whether you intend to be available during the meeting
for discussion or will be async.

[#7-0](https://make.wordpress.org/core/tag/7-0/), [#agenda](https://make.wordpress.org/core/tag/agenda/),
[#core](https://make.wordpress.org/core/tag/core/), [#dev-chat](https://make.wordpress.org/core/tag/dev-chat/)

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcore%2F2026%2F04%2F07%2Fdev-chat-agenda-april-8-2026%2F%23respond&locale=en_US)

 [  ](https://profiles.wordpress.org/audrasjb/) [Jb Audras](https://profiles.wordpress.org/audrasjb/)
8:13 am _on_ April 4, 2026     
Tags: 7-0, [core ( 721 )](https://make.wordpress.org/core/tag/core/),
[core-editor ( 745 )](https://make.wordpress.org/core/tag/core-editor/), [dev chat ( 899 )](https://make.wordpress.org/core/tag/dev-chat/)

# 󠀁[Dev Chat summary: April 1, 2026](https://make.wordpress.org/core/2026/04/04/summary-dev-chat-april-1-2026/)󠁿

[Start](https://wordpress.slack.com/archives/C02RQBWTW/p1775055661350799) of the
meeting in SlackSlack Slack is a Collaborative Group Chat Platform [https://slack.com/](https://slack.com/).
The WordPress community has its own Slack Channel at [https://make.wordpress.org/chat/](https://make.wordpress.org/chat/),
facilitated by [@audrasjb](https://profiles.wordpress.org/audrasjb/) 🔗 [Agenda post](https://make.wordpress.org/core/2026/04/01/dev-chat-agenda-april-1-2026/).

## Announcements 📢

### Editor

 * [What’s new in Gutenberg 22.8? (25 March)](https://make.wordpress.org/core/2026/03/25/whats-new-in-gutenberg-22-8-25-march/)

### General

 * [WordPress 6.9.2 retrospective](https://make.wordpress.org/core/2026/03/25/wordpress-6-9-2-retrospective/)
 * [Join Core at WordCamp Asia 2026 Contributor Day (April 9, Mumbai & Online)](https://make.wordpress.org/core/2026/03/25/join-core-at-wordcamp-asia-2026-contributor-day-april-9-mumbai-online/)
 * [2027 Default Theme call for volunteers](https://make.wordpress.org/core/2026/03/13/twenty-twenty-seven/)

### WordPress 7.0 Updates

 * [Extending the 7.0 Cycle](https://make.wordpress.org/core/2026/03/31/extending-the-7-0-cycle/)
   
   This item will of course have an impact on the release party initially scheduled
   to happen during WC Asia Contributor DayContributor Day Contributor Days are 
   standalone days, frequently held before or after WordCamps but they can also 
   happen at any time. They are events where people get together to work on various
   areas of [https://make.wordpress.org/](https://make.wordpress.org/) There are
   many teams that people can participate in, each with a different focus. [https://2017.us.wordcamp.org/contributor-day/](https://2017.us.wordcamp.org/contributor-day/)
   [https://make.wordpress.org/support/handbook/getting-started/getting-started-at-a-contributor-day/](https://make.wordpress.org/support/handbook/getting-started/getting-started-at-a-contributor-day/),
   which will probably more be focused on testing.
 * New Dev Notesdev note Each important change in WordPress Core is documented in
   a developers note, (usually called dev note). Good dev notes generally include
   a description of the change, the decision that led to this change, and a description
   of how developers are supposed to work with that change. Dev notes are published
   on Make/Core blog during the beta phase of WordPress release cycle. Publishing
   dev notes is particularly important when plugin/theme authors and WordPress developers
   need to be aware of those changes.In general, all dev notes are compiled into
   a Field Guide at the beginning of the release candidate phase.:
    - [Introducing the AI Client in WordPress 7.0](https://make.wordpress.org/core/2026/03/24/introducing-the-ai-client-in-wordpress-7-0/)
    - [Client-Side Abilities API in WordPress 7.0](https://make.wordpress.org/core/2026/03/24/client-side-abilities-api-in-wordpress-7-0/)
    - [Introducing the Connectors API in WordPress 7.0](https://make.wordpress.org/core/2026/03/18/introducing-the-connectors-api-in-wordpress-7-0/)

## Discussion 💬

From Matt: [Rethinking Left Navigation](https://make.wordpress.org/core/2026/03/24/rethinking-left-navigation/)

 * [@audrasjb](https://profiles.wordpress.org/audrasjb/): “Ordering plugins in a
   menu is a pretty sensible [but] it would be great if users could order them themselves”
 * [@jorbin](https://profiles.wordpress.org/jorbin/) recommended to make it a Feature
   PluginFeature Plugin A plugin that was created with the intention of eventually
   being proposed for inclusion in WordPress Core. See [Features as Plugins](https://make.wordpress.org/core/handbook/about/release-cycle/features-as-plugins/)
   project
 * [@joedolson](https://profiles.wordpress.org/joedolson/) wanted to note that maintaining
   consistent navigation order is [an explicit accessibility requirement](https://www.w3.org/TR/WCAG21/#consistent-navigation)

---

From [@joefusco](https://profiles.wordpress.org/joefusco/): “Following the awareness/
presence discussion in [#64696](https://core.trac.wordpress.org/ticket/64696), I
built [a feature plugin to test the workload independently from RTC feature](https://github.com/josephfusco/presence-api).”

 * [@desrosj](https://profiles.wordpress.org/desrosj/) proposed to make it a Feature
   Plugin hosted on the WordPress 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/](https://github.com/)
   repository and… tada! [It’s live](https://github.com/WordPress/presence-api).

---

From [@wildworks](https://profiles.wordpress.org/wildworks/): “I am proposing to
remove the ability to embed YouTube videos in the cover 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.. I would appreciate your thoughts
on this. In my opinion, this violates the terms of service and also presents 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) issues.” See [this PR comment](https://github.com/WordPress/gutenberg/issues/75069#issuecomment-4168811354).

 * [@jorbin](https://profiles.wordpress.org/jorbin/) pointed out that WordPress 
   has shipped with [header video support](https://make.wordpress.org/core/2016/11/26/video-headers-in-4-7/)
   for almost a decade with no complaints, so removing this from the cover block
   should not be rushed.
 * [@joedolson](https://profiles.wordpress.org/joedolson/) added that the accessibility
   issue is technically a content control issue; it doesn’t directly create an issue,
   but opens a door for significant issues that were previously easily prevented.
 * [@wildworks](https://profiles.wordpress.org/wildworks/) shared [this Slack thread](https://wordpress.slack.com/archives/C0A803Z8MA5/p1775036419140409),
   where comments are welcome about this topic.

[#7-0](https://make.wordpress.org/core/tag/7-0/), [#core](https://make.wordpress.org/core/tag/core/),
[#core-editor](https://make.wordpress.org/core/tag/core-editor/), [#dev-chat](https://make.wordpress.org/core/tag/dev-chat/)

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcore%2F2026%2F04%2F04%2Fsummary-dev-chat-april-1-2026%2F%23respond&locale=en_US)

 [  ](https://profiles.wordpress.org/czarate/) [Chris Zarate](https://profiles.wordpress.org/czarate/)
10:45 pm _on_ April 1, 2026     
Tags: 7-0, [dev-notes ( 616 )](https://make.wordpress.org/core/tag/dev-notes/),
[dev-notes-7-0 ( 19 )](https://make.wordpress.org/core/tag/dev-notes-7-0/), feature-
real-time-collaboration, [hosting ( 44 )](https://make.wordpress.org/core/tag/hosting/)

# 󠀁[Building a custom sync provider for real-time collaboration](https://make.wordpress.org/core/2026/04/01/building-a-custom-sync-provider-for-real-time-collaboration/)󠁿

WordPress 7.0 will introduce real-time collaboration in 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. Out of
the box, the editor syncs changes between peers using an HTTPHTTP HTTP is an acronym
for Hyper Text Transfer Protocol. HTTP is the underlying protocol used by the World
Wide Web and this protocol defines how messages are formatted and transmitted, and
what actions Web servers and browsers should take in response to various commands.
polling provider. However, an HTTP polling transport isn’t the only option and it
may not be the best fit for your infrastructure, especially if you are a WordPress
hosting provider.

The `sync.providers` client-side filterFilter Filters are one of the two types of
Hooks [https://codex.wordpress.org/Plugin_API/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. proposed for WordPress 7.0 lets you replace the default transport with your
own. This post walks through why you’d want to use one, what a provider does, and
how to build one.

## Why build a custom provider?

The default HTTP polling provider is designed to work on any WordPress installation.
It batches document and awareness updates into periodic HTTP requests: every four
seconds when editing alone, every second when collaborators are present. ([These values are filterable.](https://github.com/WordPress/gutenberg/blob/41bef30bf359d085236d447ee98b7d83c1664658/packages/sync/src/providers/http-polling/config.ts#L10-L18))

It works reliably, but there can be good reasons to swap it out:

 * **Lower latency.** Transports such as WebSockets deliver updates as they happen,
   not on a polling interval. For sites doing heavy collaborative editing, the difference
   can be noticeable.
 * **Reduced server load.** Polling generates requests even when nothing has changed.
   A push-based transport only sends data when needed.
 * **Infrastructure alignment.** If you already run WebSocket servers or other real-
   time transport, you can benefit from using familiar infrastructure with WordPress.

These benefits come with a substantial overhead. Building a custom provider is not
trivial. It will require custom code. Most likely, it will also involve deployingDeploy
Launching code from a local development environment to the production web server,
so that it's available to visitors. and maintaining server resources.

## What a sync provider does

Real-time collaboration in WordPress is powered by [Yjs](https://yjs.dev/), a 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_.-free
Replicated Data Type (CRDT) library. WordPress content is represented by Yjs documents;
syncing happens by exchanging updates to those documents.

The sync provider is the transport layer. It facilitates the exchange of Yjs document
updates between peers.

Concretely, a provider needs to:

 1. **Receive local Yjs document updates** and send them to remote peers.
 2. **Receive remote updates** and apply them to the local Yjs document.
 3. **Report connection status** so the editor UIUI User interface can show whether
    the user is connected.

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/](https://wordpress.org/gutenberg/)’
s sync manager orchestrates the syncing process. It creates a sync provider for 
each Yjs document that will be synced. Therefore, supplying a custom sync provider
means supplying a provider creator function. A provider creator is an async function
following this example:

    ```wp-block-code
    async function myProviderCreator( options ) {
        const objectType = options.objectType; // e.g., "postType/post"
        const objectId   = options.objectId;   // e.g., "123"
        const ydoc       = options.ydoc;       // Yjs document
        const awareness  = options.awareness;  // Yjs awareness

        // Create provider.
        const room     = `${ objectType }:${ objectId }`;
        const provider = new MyYjsProvider( ydoc, awareness, room );

        // Connect.
        provider.connect();

        return {
            destroy: () => provider.destroy(),
            on: ( event, callback ) => provider.on( event, callback ),
         };
    }
    ```

Note that the returned object has two function properties that the provider must
implement:

 * **destroy()**: The sync manager will call this function when it is time to close
   connections, remove listeners, and free resources.
 * **on()**: This function allows the sync manager to subscribe to connection state
   changes. Emit `{ status: 'connecting' }`, `{ status: 'connected' }`, or `{ status:'
   disconnected', error?: ConnectionError }` as appropriate.
    - A disconnected event can be accompanied by an error. Using specific error 
      codes allows the editor to give specific feedback to the user. See [the list of error codes](https://github.com/WordPress/gutenberg/blob/41bef30bf359d085236d447ee98b7d83c1664658/packages/sync/src/errors.ts#L2-L6)
      and resulting messaging.

## Existing Yjs providers

You don’t have to build a sync provider from scratch. Yjs has [a provider ecosystem](https://docs.yjs.dev/ecosystem/connection-provider)
and several existing libraries can handle the heavy lifting. 

[y-websocket](https://github.com/yjs/y-websocket) is the most widely used Yjs provider
and has been deployedDeploy Launching code from a local development environment 
to the production web server, so that it's available to visitors. by [WordPress VIP](https://wpvip.com/)
and other WordPress hosts. It includes both a client and a simple Node.js server.

**Note:** [y-webrtc](https://github.com/yjs/y-webrtc) is nominally a peer-to-peer
provider that syncs via WebRTC, but in practice it [requires centralized servers to reliably connect peers](https://webrtc.org/getting-started/peer-connections)
with each other. It is not recommended unless you are willing to invest in those
servers. 

### Minimal client example with y-websocket

Wrapping a Yjs provider in a ProviderCreator function is straightforward, as seen
in the following example. However, note that this example is missing essential authorization
checks (discussed in the next section):

    ```javascript
    import { addFilter } from '@wordpress/hooks';
    import { WebsocketProvider } from 'y-websocket';

    addFilter( 'sync.providers', 'my-plugin/websocket', () => {
        return [
            async ( { objectType, objectId, ydoc, awareness } ) => {
                const roomName = `${ objectType }-${ objectId ?? 'collection' }`;
                const provider = new WebsocketProvider(
                    'wss://my-sync-server.example.com',
                    roomName,
                    ydoc,
                    { awareness }
                );

                return {
                    destroy: () => provider.destroy(),
                    on: ( event, callback ) => provider.on( event, callback ),
                };
            },
        ];
    } );
    ```

This code replaces the default HTTP polling provider entirely. The filter callback
ignores the incoming providerCreators array and returns a new array containing a
single WebSocket-based provider creator.

The WebSocket server (`wss://my-sync-server.example.com` in the example above) must
be configured and deployed separately. The [y-websocket-server](https://github.com/yjs/y-websocket-server)
library is the server companion to y-websocket.

## Authorization and security

A custom sync provider connects to infrastructure that you own and operate, e.g.,
a WebSocket server. Because that infrastructure lives outside of WordPress, WordPress
can’t authorize requests to it on your behalf.

Securing the connection between the editor and your sync server is your responsibility—
a critical one. Without authorization checks, any user could connect to your WebSocket
server and participate in a collaborative session with your WordPress users. 

### Token-based auth

A common pattern is to issue short-lived tokens via a WordPress 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/](https://developer.wordpress.org/rest-api/)
endpoint, then pass the token when opening the WebSocket connection. The tokens 
assert that the user has permission to collaborate on a specific entity.

Here’s a simplified example of how the [WPVIP Real-Time Collaboration plugin](https://github.com/Automattic/vip-real-time-collaboration)
handles it:

    ```javascript
    // Fetch a short-lived token from a WordPress REST endpoint.
    // This endpoint is provided by your plugin. Tokens encode the
    // type and ID of the entity being edited, as well as the current
    // WordPress user ID.
    const data = await apiFetch( {
        path: '/my-plugin/v1/sync/auth',
        method: 'GET',
        data: { objectType, objectId },
    } );

    // Pass the token as a query parameter when connecting.
    provider.params = { auth: data.token };
    provider.connect();
    ```

### Key considerations

 * **Validate on the server.** Never trust the client. The sync server should verify
   the token on every connection request. The token should encode information about
   the user, the entity being edited, and which actions are authorized. The sync
   server should validate each assertion and reject unauthorized connections before
   applying any document updates.
 * **Authorize per-document.** It’s worth restating: Don’t just authenticate the
   user, additionally verify they have permission to edit the specific post or entity
   being synced. Your WebSocket server should validate this on every connection.
 * **Rotate tokens.** WebSocket connections are long-lived. Use short-lived tokens
   and re-authenticate on reconnect so that revoked permissions take effect promptly.
 * **Handle disconnects gracefully**. When authorization fails or a token is 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., emit a `{ status: 'disconnected', error }`
   event so the editor can inform the user. The WPVIP 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/](https://wordpress.org/plugins/) or can be cost-
   based plugin from a third-party. maps WebSocket close codes to specific error
   types to give users actionable feedback.

The [WPVIP Real-Time Collaboration plugin](https://github.com/Automattic/vip-real-time-collaboration)
is a functional and secure example using WebSockets. It’s open sourceOpen Source
Open Source denotes software for which the original source code is made freely available
and may be redistributed and modified. Open Source **must be** delivered via a licensing
model, see GPL. and contributions are welcome.

## Feedback

If you have questions or feedback about building a custom sync provider, please 
share them in a comment on this post or in the [#hosting](https://make.wordpress.org/core/tag/hosting/)
channel of [Make WordPress Slack](https://make.wordpress.org/chat/).

_Props to [@jorbin](https://profiles.wordpress.org/jorbin/) and [@westonruter](https://profiles.wordpress.org/westonruter/)
for feedback and contributions._

[#7-0](https://make.wordpress.org/core/tag/7-0/), [#dev-notes](https://make.wordpress.org/core/tag/dev-notes/),
[#dev-notes-7-0](https://make.wordpress.org/core/tag/dev-notes-7-0/), [#feature-real-time-collaboration](https://make.wordpress.org/core/tag/feature-real-time-collaboration/)

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcore%2F2026%2F04%2F01%2Fbuilding-a-custom-sync-provider-for-real-time-collaboration%2F%23respond&locale=en_US)

 [  ](https://profiles.wordpress.org/audrasjb/) [Jb Audras](https://profiles.wordpress.org/audrasjb/)
1:41 pm _on_ April 1, 2026     
Tags: 7-0, [agenda ( 1,124 )](https://make.wordpress.org/core/tag/agenda/),
[core ( 721 )](https://make.wordpress.org/core/tag/core/), [dev chat ( 899 )](https://make.wordpress.org/core/tag/dev-chat/)

# 󠀁[Dev Chat Agenda – April 1, 2026](https://make.wordpress.org/core/2026/04/01/dev-chat-agenda-april-1-2026/)󠁿

The next WordPress Developers Chat will take place on [Wednesday, April 1, 2026, at 15:00 UTC](https://www.timeanddate.com/worldclock/fixedtime.html?iso=20260401T1500)
in the [core](https://wordpress.slack.com/messages/core/) channel on [Make WordPress Slack](https://make.wordpress.org/chat/).

The live meeting will focus on the discussion for upcoming releases, and have an
open floor section.

The various curated agenda sections below refer to additional items. If you have
ticketticket Created for both bug reports and feature development on the bug tracker.
requests for help, please continue to post details in the comments section at the
end of this agenda or bring them up during the dev chat.

## Announcements 📢

### Editor

 * [What’s new in Gutenberg 22.8? (25 March)](https://make.wordpress.org/core/2026/03/25/whats-new-in-gutenberg-22-8-25-march/)

### General

 * [WordPress 6.9.2 retrospective](https://make.wordpress.org/core/2026/03/25/wordpress-6-9-2-retrospective/)
 * [Join Core at WordCamp Asia 2026 Contributor Day (April 9, Mumbai & Online)](https://make.wordpress.org/core/2026/03/25/join-core-at-wordcamp-asia-2026-contributor-day-april-9-mumbai-online/)
 * [2027 Default Theme call for volunteers](https://make.wordpress.org/core/2026/03/13/twenty-twenty-seven/)

### WordPress 7.0 Updates

 * [Extending the 7.0 Cycle](https://make.wordpress.org/core/2026/03/31/extending-the-7-0-cycle/)
 * New Dev Notesdev note Each important change in WordPress Core is documented in
   a developers note, (usually called dev note). Good dev notes generally include
   a description of the change, the decision that led to this change, and a description
   of how developers are supposed to work with that change. Dev notes are published
   on Make/Core blog during the beta phase of WordPress release cycle. Publishing
   dev notes is particularly important when plugin/theme authors and WordPress developers
   need to be aware of those changes.In general, all dev notes are compiled into
   a Field Guide at the beginning of the release candidate phase.:
    - [Introducing the AI Client in WordPress 7.0](https://make.wordpress.org/core/2026/03/24/introducing-the-ai-client-in-wordpress-7-0/)
    - [Client-Side Abilities API in WordPress 7.0](https://make.wordpress.org/core/2026/03/24/client-side-abilities-api-in-wordpress-7-0/)
    - [Introducing the Connectors API in WordPress 7.0](https://make.wordpress.org/core/2026/03/18/introducing-the-connectors-api-in-wordpress-7-0/)

## Discussions 💬

_The discussion section of the agenda is for discussing important topics affecting
the upcoming release or larger initiatives that impact the CoreCore Core is the 
set of software required to run WordPress. The Core Development Team builds WordPress.
Team. To nominate a topic for discussion, please leave a comment on this agenda 
with a summary of the topic, any relevant links that will help people get context
for the discussion, and what kind of feedback you are looking for from others participating
in the discussion._

 * From [@matt](https://profiles.wordpress.org/matt/): [Rethinking Left Navigation](https://make.wordpress.org/core/2026/03/24/rethinking-left-navigation/)

## 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.

[#7-0](https://make.wordpress.org/core/tag/7-0/), [#agenda](https://make.wordpress.org/core/tag/agenda/),
[#core](https://make.wordpress.org/core/tag/core/), [#dev-chat](https://make.wordpress.org/core/tag/dev-chat/)

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcore%2F2026%2F04%2F01%2Fdev-chat-agenda-april-1-2026%2F%23respond&locale=en_US)

 [  ](https://profiles.wordpress.org/matveb/) [Matias Ventura](https://profiles.wordpress.org/matveb/)
10:50 pm _on_ March 31, 2026     
Tags: 7-0   

# 󠀁[Extending the 7.0 Cycle](https://make.wordpress.org/core/2026/03/31/extending-the-7-0-cycle/)󠁿

After discussions with project leadership, the decision has been made to delay the
7.0 release by a few weeks to finalize key architectural details.

WordPress 7.0 is shaping up to be a big release, with some great highlight features
and a long list of improvements. I’m excited to get this in the hands of users. 
Within that context, contributors have been hard at work discussing, iterating, 
and polishing every detail.

One of the larger items for this release is the introduction of real-time collaboration
primitives, which includes built-in support for HTTPHTTP HTTP is an acronym for 
Hyper Text Transfer Protocol. HTTP is the underlying protocol used by the World 
Wide Web and this protocol defines how messages are formatted and transmitted, and
what actions Web servers and browsers should take in response to various commands.
polling to ensure the widest possible reach and access to this 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 support this system in coreCore
Core is the set of software required to run WordPress. The Core Development Team
builds WordPress., [a new custom table was proposed](https://core.trac.wordpress.org/ticket/64696).
While there was general agreement that it would be nice to have for collaborative
editing and sync coordination, it was paused due to time and design uncertainties.

Due to a combination of rapid iteration around data storage solutions and cache 
invalidation strategies, discussions were held before RC2. This led to a path forward
that addresses the outstanding concerns by continuing to store content changes in
postmeta while moving awareness/presence information about users in session to transients.
This approach avoids rapid and frequent cache invalidation issues with special handling
for collaborative editing 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. Since then, [Matt has expressed a preference](https://wordpress.slack.com/archives/C18723MQ8/p1774855143315979)
to revisit the custom table and ensure adequate time is given to come up with the
best design possible from the start. To support this, more time is being added to
the 7.0 cycle to ensure the best solution for the overwhelming majority of users
is included.

Additionally, there was one extra consideration raised about use cases beyond the
real time support (like accommodating [broader sync use cases](https://github.com/WordPress/gutenberg/issues/76919#issuecomment-4163846218))
that should also be discussed to ensure we design the right primitives in the broadest
possible sense. After getting more clarity on how a new table will look and function,
a new final timeline for 7.0 will be announced. This will likely be a delay of a
few weeks, as there are many features that will benefit users, and it would be counterproductive
to hold them back for too long. The extra time will help ensure we can process all
the feedback given so far and ensure the design can stand the test of time. New 
features and enhancements not already in core will not be considered for inclusion.

Overall, the intention in shipping collaborative editing in 7.0 as an opt-in is 
to give the WordPress ecosystem time to adapt to a major change. For hosts, this
can have an impact in WordPress resource usage and database interactions. WordPress
sites are generally very read-heavy, but collaborative features inherently involve
a writing state that is then rebroadcast to other users. The HTTP polling mechanism
as designed is a lowest-common-denominator approach, but its broad compatibility
comes at the cost of relative inefficiency compared to more specialized solutions
like WebSockets. It’s important to empower site owners and hosts to have full control
during this process. So, rather than enabling the feature for 100% of users on day
one, the opt-in approach allows usage to ramp up organically. Hosts can monitor 
requests to the sync endpoints, perform profiling to ensure their particular caching
and request management approaches are appropriate, etc.

Thus far, for example, [WordPress.com](http://wordpress.com) has done extensive 
testing on this feature and has demonstrated that the conservative defaults, the
limit on the number of collaborators, and the number of active editor sessions in
the shared environment make HTTP polling a viable transport that can work on essentially
any WordPress host without additional dependencies. Other hosts are encouraged to
test this as well, and a call for testing will be coming to make.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/](https://wordpress.org/)/
hosting after the final architecture has been committed.

For 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/](https://wordpress.org/plugins/)
or can be cost-based plugin from a third-party. developers, many popular plugins
still rely on metaboxes for their UIUI User interface. These plugins submit their
inputs when a post is saved in the editor via 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/](https://wordpress.org/gutenberg/)’
s compatibility mode. This approach, on its own, is not compatible with collaborative
editing, which builds on the wordpress/data package used by 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 to detect
and sync changes across all users in a session, gracefully handling common types
of conflicts. As a result, real-time collaboration is disabled when metaboxes are
present. The 7.0 cycle will be a window in which these plugin developers can implement
a bridge to make their metaboxes compatible or adopt more modern Gutenberg APIs 
that will instead render their UI in a way that more seamlessly integrates with 
the editor. [Learn more in the official dev note for the feature](https://make.wordpress.org/core/2026/03/10/real-time-collaboration-in-the-block-editor/)
and, for more details on migrating from metaboxes, see the [Meta Boxes guide](https://developer.wordpress.org/block-editor/how-to-guides/metabox/)
in the Block Editor Handbook.

Thank you to everyone’s continued commitment to ensuring 7.0 is an outstanding release,
both from a features and stability perspective.

_Props to [@jorbin](https://profiles.wordpress.org/jorbin/) [@desrosj](https://profiles.wordpress.org/desrosj/)
[@annezazu](https://profiles.wordpress.org/annezazu/) [@griffbrad](https://profiles.wordpress.org/griffbrad/)
[@4thhubbard](https://profiles.wordpress.org/4thhubbard/) for helping review this
post. _

[#7-0](https://make.wordpress.org/core/tag/7-0/)

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcore%2F2026%2F03%2F31%2Fextending-the-7-0-cycle%2F%23respond&locale=en_US)

 [  ](https://profiles.wordpress.org/desrosj/) [Jonathan Desrosiers](https://profiles.wordpress.org/desrosj/)
5:08 pm _on_ March 27, 2026     
Tags: 7-0   

# 󠀁[WordPress 7.0 Release Candidate Phase, Pt. 2](https://make.wordpress.org/core/2026/03/27/wordpress-7-0-release-candidate-phase-pt-2/)󠁿

This updates the expectations and policies that should be followed through the final
release of WordPress 7.0 following [the previous post](https://make.wordpress.org/core/2026/03/25/wordpress-7-0-release-candidate-phase/)
and the release of RC2 on 26 March.

_These policies mainly cover how and when CoreCore Core is the set of software required
to run WordPress. The Core Development Team builds WordPress. committers can commit.
For non-committing contributors, this post may help explain why Core committers 
make certain decisions._

## 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. is now WordPress 7.1-alpha

WordPress 7.0 has been [copied to its own branch](https://core.trac.wordpress.org/changeset/62159),`
trunk` is now open for commits for the next version of the software.

## Backporting to the 7.0 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".

[Backporting commits](https://make.wordpress.org/core/handbook/best-practices/backporting-commits/#backport-process)
of production code (that is, anything that ends up in the zip file) now requires
double sign-off by two core committers. The `dev-feedback` keyword should be used
to request a second committercommitter A developer with commit access. WordPress
has five lead developers and four permanent core developers with commit access. 
Additionally, the project usually has a few guest or component committers - a developer
receiving commit access, generally for a single release cycle (sometimes renewed)
and/or for a specific component.’s review, `dev-reviewed` should be added to indicate
a second committer has reviewed and approved the commit to the 7.0 branch.

## String Freeze

The RC1 release marked the hard string freeze point of the release cycle and that
continues. Strings will be available for Polyglots contributors shortly. Please 
subscribe to the [Make Polyglots blog for updates](https://make.wordpress.org/polyglots/).

No new strings are permitted. Exceptions can be made for critical strings (the About
page, for example) provided they are properly tagged with the `i18n-change` keyword
in TracTrac An open source project by Edgewall Software that serves as a bug tracker
and project management tool for WordPress. and the Polyglot team is made aware. 
Existing strings can be removed and/or duplicated as necessary.

Seek guidance from the [Polyglots team reps](https://make.wordpress.org/updates/team-reps/)
for any strings reported as buggy. A buggy string is one that can not be translated
to all languages in its current form. 

## Tickets on the WordPress 7.0 milestone

For the remainder of the cycle, only two types of tickets may be placed on/remain
on the [7.0 milestone](https://core.trac.wordpress.org/query?status=accepted&status=assigned&status=new&status=reopened&status=reviewing&milestone=7.0&group=component&col=id&col=summary&col=status&col=owner&col=type&col=priority&col=changetime&col=keywords&order=priority):

 * **Regressions**: bugs that have been introduced during the WordPress 7.0 development
   cycle, either to existing or new features.
 * **Test suite expansion**: tests can be committed at any time without regard to
   code or string freezes. This can cover either new or existing features.

Please make sure to observe all code freezes, which applies to changes of any kind.
Coordinate with the release squad in the [#7-0-release-leads](https://wordpress.slack.com/archives/C0A803Z8MA5)
channel in SlackSlack Slack is a Collaborative Group Chat Platform [https://slack.com/](https://slack.com/).
The WordPress community has its own Slack Channel at [https://make.wordpress.org/chat/](https://make.wordpress.org/chat/)
if there is a change you feel should be committed during a freeze.

_Props [@jorbin](https://profiles.wordpress.org/jorbin/), [@audrasjb](https://profiles.wordpress.org/audrasjb/),
[@amykamala](https://profiles.wordpress.org/amykamala/) for peer review._

[#7-0](https://make.wordpress.org/core/tag/7-0/)

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcore%2F2026%2F03%2F27%2Fwordpress-7-0-release-candidate-phase-pt-2%2F%23respond&locale=en_US)

 [  ](https://profiles.wordpress.org/jeffpaul/) [Jeffrey Paul](https://profiles.wordpress.org/jeffpaul/)
3:27 am _on_ March 25, 2026     
Tags: 7-0   

# 󠀁[WordPress 7.0 Release Candidate Phase](https://make.wordpress.org/core/2026/03/25/wordpress-7-0-release-candidate-phase/)󠁿

**Note:** The 7.0 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". was created on 26 March. This post should be considered
obsolete for the RCrelease candidate One of the final stages in the version release
cycle, this version signals the potential to be a final release to the public. Also
see [alpha (beta)](https://make.wordpress.org/core/tag/7-0/?output_format=md#alpha-beta).
phase of the 7.0 release cycle. [Refer to the updated post](https://make.wordpress.org/core/2026/03/27/wordpress-7-0-release-candidate-phase-pt-2/)
for expectations and policies in place.

Now that WordPress 7.0 has [entered the Release Candidate phase](https://wordpress.org/news/2026/03/wordpress-7-0-release-candidate-1/),
the following policies are in place.

_These policies mainly cover how and when CoreCore Core is the set of software required
to run WordPress. The Core Development Team builds WordPress. committers can commit.
For non-committing contributors, this post may help explain why Core committers 
make certain decisions._

## Committing to 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.

Due to a technical issue that must be resolved before the `7.0` branch is created,
branching has been delayed until RC2 later this week (see [#64393](https://core.trac.wordpress.org/ticket/64393)
and the [relevant pull request](https://github.com/WordPress/wordpress-develop/pull/11064)
for background on the issue).

**As a result, all commits to `trunk` will require double sign-off by two core committers
until the `7.0` branch is created.**

The `dev-feedback` keyword should be used to request a second committercommitter
A developer with commit access. WordPress has five lead developers and four permanent
core developers with commit access. Additionally, the project usually has a few 
guest or component committers - a developer receiving commit access, generally for
a single release cycle (sometimes renewed) and/or for a specific component.’s review,`
dev-reviewed` should be added to indicate a second committer has reviewed and approved
the commit to the 7.0 branch. Commits to the test suite do not require double sign-
off.

## String Freeze

RC1 release marks the hard string freeze point of the release cycle. While this 
normally means the Polyglots teamPolyglots Team Polyglots Team is a group of multilingual
translators who work on translating plugins, themes, documentation, and front-facing
marketing copy. [https://make.wordpress.org/polyglots/teams/](https://make.wordpress.org/polyglots/teams/)
can begin translating strings from the upcoming release into their local language,
a version-specific branch is required. **As a result, strings will not be available
for translationtranslation The process (or result) of changing text, words, and 
display formatting to support another language. Also see [localization](https://make.wordpress.org/core/tag/7-0/?output_format=md#l10n),
[internationalization](https://make.wordpress.org/core/tag/7-0/?output_format=md#i18n).
until the `7.0` branch is created.**

Despite this, the normal rules for hard string freeze will be followed:

 * No new strings are permitted. Exceptions can be made for critical strings (the
   About page, for example) provided they are properly tagged with the `i18n-change`
   keyword in TracTrac An open source project by Edgewall Software that serves as
   a bug tracker and project management tool for WordPress. and the Polyglot team
   is made aware.
 * Existing strings can be removed and/or duplicated if needed.

Seek guidance from the [Polyglots team reps](https://make.wordpress.org/updates/team-reps/)
for any strings reported as buggy. A buggy string is one that can not be translated
to all languages in its current form. 

## Tickets on the WordPress 7.0 milestone

For the remainder of the cycle, only two types of tickets may be placed on/remain
on the [7.0 milestone](https://core.trac.wordpress.org/tickets/major):

 * **Regressions**: bugs that have been introduced during the WordPress 7.0 development
   cycle, either to existing or new features.
 * **Test suite expansion**: tests can be committed at any time without regard to
   code or string freezes. This can cover either new or existing features.

## Bumping Trunk to WordPress 7.1-alpha

After the `7.0` branch is created following RC2, a follow-up post will be published
announcing that `trunk` is open for commits related to the next version of the software.

_Props [@desrosj](https://profiles.wordpress.org/desrosj/), [@amykamala](https://profiles.wordpress.org/amykamala/),
[@jorbin](https://profiles.wordpress.org/jorbin/) for peer review._

[#7-0](https://make.wordpress.org/core/tag/7-0/)

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcore%2F2026%2F03%2F25%2Fwordpress-7-0-release-candidate-phase%2F%23respond&locale=en_US)

 [  ](https://profiles.wordpress.org/jorgefilipecosta/) [Jorge Costa](https://profiles.wordpress.org/jorgefilipecosta/)
9:40 pm _on_ March 24, 2026     
Tags: 7-0, [dev-notes ( 616 )](https://make.wordpress.org/core/tag/dev-notes/),
[dev-notes-7-0 ( 19 )](https://make.wordpress.org/core/tag/dev-notes-7-0/)   

# 󠀁[Client-Side Abilities API in WordPress 7.0](https://make.wordpress.org/core/2026/03/24/client-side-abilities-api-in-wordpress-7-0/)󠁿

WordPress 6.9 introduced the [**Abilities API**](https://make.wordpress.org/core/2025/11/10/abilities-api-in-wordpress-6-9/).
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. provides a common interface that AI agents, workflow automation tools,
and plugins can use to interact with WordPress. In WordPress 7.0 we continued that
work and now provide a counterpart 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](https://www.javascript.com/)
API that can be used to implement client-side abilities like navigating, or inserting
blocks. This work is fundamental to integrate with browser agents/extensions and
[WebMCP](https://github.com/WordPress/ai/pull/224).

## Two packages

The client-side Abilities API is split into two packages:

 * **`@wordpress/abilities`**: A pure state management package with no WordPress
   server dependencies. It provides the store, registration functions, querying,
   and execution logic. Use this when you only need the abilities store without 
   loading server-registered abilities. This package could also be used in non-WordPress
   projects.
 * **`@wordpress/core-abilities`** :The WordPress integration layer. When loaded,
   it automatically fetches all abilities and categories registered on the server
   via the 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/](https://developer.wordpress.org/rest-api/)(`/
   wp-abilities/v1/`) and registers them in the `@wordpress/abilities` store with
   appropriate callbacks.

## Getting started

To use the Abilities API in your 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/](https://wordpress.org/plugins/)
or can be cost-based plugin from a third-party., you need to enqueue the appropriate
script module.

### When your plugin needs server-registered abilities

If your plugin needs access to abilities registered on the server (e.g., coreCore
Core is the set of software required to run WordPress. The Core Development Team
builds WordPress. abilities), enqueue `@wordpress/core-abilities`. This is the most
common case:

    ```notranslate
    add_action( 'admin_enqueue_scripts', 'my_plugin_enqueue_abilities' );
    function my_plugin_enqueue_abilities() {
        wp_enqueue_script_module( '@wordpress/core-abilities' );
    }
    ```

This will load both `@wordpress/core-abilities` and its dependency `@wordpress/abilities`,
and automatically fetch and register all server-side abilities.

### When your plugin only registers client-side abilities

If your plugin only needs to register and work with its own client-side abilities
on a specific page, without needing server-registered abilities, you can enqueue
just `@wordpress/abilities`:

    ```notranslate
    add_action( 'admin_enqueue_scripts', 'my_plugin_enqueue_abilities' );
    function my_plugin_enqueue_abilities( $hook_suffix ) {
        if ( 'my-plugin-page' !== $hook_suffix ) {
            return;
        }
        wp_enqueue_script_module( '@wordpress/abilities' );
    }
    ```

### Importing in JavaScript

Abilities API should be imported as a dynamic import, for example:

    ```notranslate
    const {
        registerAbility,
        registerAbilityCategory,
        getAbilities,
        executeAbility,
    } = await import( '@wordpress/abilities' );
    ```

If your client code is also a script module relying on `@wordpress/scripts`, you
can just use the following code like any other import:

    ```notranslate
    import {
        registerAbility,
        registerAbilityCategory,
        getAbilities,
        executeAbility,
    } from '@wordpress/abilities';
    ```

## Registering abilities

### Register a categoryCategory The 'category' taxonomy lets you group posts / content together that share a common bond. Categories are pre-defined and broad ranging. first

Abilities are organized into categories. Before registering an ability, its category
must exist. Server-side categories are loaded automatically when `@wordpress/core-
abilities` is enqueued. To register a client-side category:

    ```notranslate
    const { registerAbilityCategory } = await import( '@wordpress/abilities' );

    registerAbilityCategory( 'my-plugin-actions', {
        label: 'My Plugin Actions',
        description: 'Actions provided by My Plugin',
    } );
    ```

Category slugs must be lowercase alphanumeric with dashes only (e.g., `data-retrieval`,`
user-management`).

### Register an ability

    ```notranslate
    const { registerAbility } = await import( '@wordpress/abilities' );

    registerAbility( {
        name: 'my-plugin/navigate-to-settings',
        label: 'Navigate to Settings',
        description: 'Navigates to the plugin settings page',
        category: 'my-plugin-actions',
        callback: async () => {
            window.location.href = '/wp-admin/options-general.php?page=my-plugin';
            return { success: true };
        },
    } );
    ```

#### Input and output schemas

Abilities should define 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. Schema (draft-04) for input
validation and output validation:

    ```notranslate
    registerAbility( {
        name: 'my-plugin/create-item',
        label: 'Create Item',
        description: 'Creates a new item with the given title and content',
        category: 'my-plugin-actions',
        input_schema: {
            type: 'object',
            properties: {
                title: { type: 'string', description: 'The title of the item', minLength: 1 },
                content: { type: 'string', description: 'The content of the item' },
                status: { type: 'string', description: 'The publish status of the item', enum: [ 'draft', 'publish' ] },
            },
            required: [ 'title' ],
        },
        output_schema: {
            type: 'object',
            properties: {
                id: { type: 'number', description: 'The unique identifier of the created item' },
                title: { type: 'string', description: 'The title of the created item' },
            },
            required: [ 'id' ],
        },
        callback: async ( { title, content, status = 'draft' } ) => {
            // Create the item...
            return { id: 123, title };
        },
    } );
    ```

When `executeAbility` is called, the input is validated against `input_schema` before
execution and the output is validated against `output_schema` after execution. If
validation fails, an error is thrown with the code `ability_invalid_input` or `ability_invalid_output`.

#### Permission callbacks

Abilities can include a `permissionCallback` that is checked before execution:

    ```notranslate
    registerAbility( {
        name: 'my-plugin/admin-action',
        label: 'Admin Action',
        description: 'An action only available to administrators',
        category: 'my-plugin-actions',
        permissionCallback: () => {
            return currentUserCan( 'manage_options' );
        },
        callback: async () => {
            // Only runs if permissionCallback returns true
            return { success: true };
        },
    } );
    ```

If the permission callback returns `false`, an error with code `ability_permission_denied`
is thrown.

## Querying abilities

### Direct function calls

    ```notranslate
    const {
        getAbilities,
        getAbility,
        getAbilityCategories,
        getAbilityCategory,
    } = await import( '@wordpress/abilities' );

    // Get all registered abilities
    const abilities = getAbilities();

    // Filter abilities by category
    const dataAbilities = getAbilities( { category: 'data-retrieval' } );

    // Get a specific ability by name
    const ability = getAbility( 'my-plugin/create-item' );

    // Get all categories
    const categories = getAbilityCategories();

    // Get a specific category
    const category = getAbilityCategory( 'data-retrieval' );
    ```

### Using with ReactReact React is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces. 󠀁[https://reactjs.org](https://reactjs.org/)󠁿 and `@wordpress/data`

The abilities store (`core/abilities`) integrates with `@wordpress/data`, so you
can use `useSelect` for reactive queries in React components:

    ```notranslate
    import { useSelect } from '@wordpress/data';
    import { store as abilitiesStore } from '@wordpress/abilities';

    function AbilitiesList() {
    	// Get all abilities reactively
    	const abilities = useSelect(
    		( select ) => select( abilitiesStore ).getAbilities(),
    		[]
    	);

    	// Filter by category
    	const dataAbilities = useSelect(
    		( select ) =>
    			select( abilitiesStore ).getAbilities( {
    				category: 'data-retrieval',
    			} ),
    		[]
    	);

    	// abilities and dataAbilities update automatically when the store changes
    }
    ```

## Executing abilities

Use `executeAbility` to run any registered ability, whether client-side or server-
side:

    ```notranslate
    import { executeAbility } from '@wordpress/abilities';

    try {
        const result = await executeAbility( 'my-plugin/create-item', {
            title: 'New Item',
            content: 'Item content',
            status: 'draft',
        } );
        console.log( 'Created item:', result.id );
    } catch ( error ) {
        switch ( error.code ) {
            case 'ability_permission_denied':
                console.error( 'You do not have permission to run this ability.' );
                break;
            case 'ability_invalid_input':
                console.error( 'Invalid input:', error.message );
                break;
            case 'ability_invalid_output':
                console.error( 'Unexpected output:', error.message );
                break;
            default:
                console.error( 'Execution failed:', error.message );
        }
    }
    ```

For server-side abilities (those registered via PHPPHP The web scripting language
in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher
and loaded by `@wordpress/core-abilities`), execution is handled automatically via
the REST API. The HTTPHTTP HTTP 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. method used depends on the ability’s
annotations:

 * **`readonly: true`**: uses `GET`
 * **`destructive: true` + `idempotent: true`**: uses `DELETE`
 * **All other cases**: uses `POST`

## Annotations

Abilities support metadata annotations that describe their behavior:

    ```notranslate
    registerAbility( {
        name: 'my-plugin/get-stats',
        label: 'Get Stats',
        description: 'Returns plugin statistics',
        category: 'my-plugin-actions',
        callback: async () => {
            return { views: 100 };
        },
        meta: {
            annotations: {
                readonly: true,
            },
        },
    } );
    ```

Available annotations:

| Annotation | Type | Description | 
| `readonly` | `boolean` | The ability only reads data, does not modify state | 
| `destructive` | `boolean` | The ability performs destructive operations | 
| `idempotent` | `boolean` | The ability can be called multiple times with the same result |

## Unregistering

Client-registered abilities and categories can be removed:

    ```notranslate
    const { unregisterAbility, unregisterAbilityCategory } = await import( '@wordpress/abilities' );

    unregisterAbility( 'my-plugin/navigate-to-settings' );
    unregisterAbilityCategory( 'my-plugin-actions' );
    ```

## Server-side abilities

Abilities registered on the server via the PHP API (`wp_register_ability()`, `wp_register_ability_category()`)
are automatically made available on the client when `@wordpress/core-abilities` 
is loaded. WordPress core enqueues `@wordpress/core-abilities` on all adminadmin(
and super admin) pages, so server abilities are available by default in the admin.

Plugins that register server-side abilities do not need any additional client-side
setup. The abilities will be fetched from the REST API and registered in the client
store automatically.

[#7-0](https://make.wordpress.org/core/tag/7-0/), [#dev-notes](https://make.wordpress.org/core/tag/dev-notes/),
[#dev-notes-7-0](https://make.wordpress.org/core/tag/dev-notes-7-0/)

 * [Login to Reply](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fmake.wordpress.org%2Fcore%2F2026%2F03%2F24%2Fclient-side-abilities-api-in-wordpress-7-0%2F%23respond&locale=en_US)

# Post navigation

[← Older posts](https://make.wordpress.org/core/tag/7-0/page/2/?output_format=md)