Accessibility Team Meeting Notes: October 08, 2026
These is the bi-weekly notes for the 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) Team meeting that happens on alternate Thursday in #accessibility. You can read the full transcript here or see the full meeting schedule. The biweekly Accessibility Team meeting was kept brief, with updates shared asynchronously, as WordPress Accessibility Day 2026 just concluded before the meeting.
📣 Announcements
- WordPress Accessibility Day 2026 took place online on October 7–8, featuring 24 hours of free sessions focused on digital accessibility.
- The tentative WordPress 7.2 release party schedule was announced, with the release planned for December 8, 2026.
- WordPress 7.1.3 was released with maintenance and security fixes.
- Additional updates included CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. TracTrac Trac is the place where contributors create issues for bugs or feature requests much like GitHub.https://core.trac.wordpress.org/. and 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/ spring cleaning, progress on the Presence APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways., and the release of 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/ 24.1.
Working Group Updates
WordPress Core and 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
- WordPress 7.2 BetaBeta A pre-release of software that is given out to a large group of users to trial under real conditions. Beta versions have gone through alpha testing in-house and are generally fairly close in look, feel and function to the final product; however, design changes often occur as part of the process. 1 is approaching, with significant work planned over the next two weeks. Overall progress is looking good.
- Ticket #66018: Needs a contributor to take ownership and prepare a PR. Without progress, it may be moved to a future release.
- Ticket #50486: Expected to be committed soon. Additional testing would be appreciated.
Accessibility-Ready Program
- The delay in the accessibility-ready theme verification process has been communicated, with a resolution expected in approximately one week.
- Contributors available to help follow up on accessibility-ready themes are encouraged to contact @joedolson, as considerable work remains to finalize the process.
Documentation about Web Accessibility
- The Design and User Experience section of the Accessibility Knowledge Base has been completed.
- @Rian Rietveld will continue writing and updating the remaining topics in the Frontend Code section.
Open Floor
- No urgent issues or additional agenda items were raised.
Thanks to @joedolson and @rianrietveld for providing the working group updates, and to @afercia for joining the meeting.
NOTE: If you’d like to have a topic added to the agenda for our next meeting, please mention it in the comments on an upcoming agenda.
Real-time Collaboration: A Guide to Sync Engines
In Moving to a server-aware approach for collaboration, @chriszarate explains why the server needs to be at the heart of real-time collaboration, and introduces the engines we’ve been investigating to power the future of RTC. In this post, we’ll explore each of the sync engines built for RTC and the different ways they achieve collaboration.
All engines currently live in an experimental pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party., gutenberg-sync-engines, which you can run right now to evaluate the engines below. Our goal is to assess engine choices with your help, and choose the next engine foundation for server-side RTC in WordPress.
This post is a guide for testers and an introduction to the concepts of each engine. We’d love for you to try each engine and help us evaluate which best matches an ideal future for RTC in WordPress.
Terms
Here are some common technical terms used in this post worth explaining:
- A sync engine is logic for combining changes when multiple people edit the same post. The three sync engines available in gutenberg-sync-engines are yjs-server, DE-RTC, and intent-log.
- A transport is the way changes travel between a browser and the server. These include a combination of 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, WebRTC, WebSockets, and Server-sent events (SSE). Any engine works with any transport.
- Any change that is set aside for review is held somewhere but not applied to the post. This can apply to merge conflicts and changes blocked for security reasons. When a change is set aside for review, a person is required to decide whether to accept it.
Setup
Sync engines and transports are chosen under Settings Collaboration:

The requirements for running the plugin are WordPress 7.0+ and the Presence API plugin, which is used to keep track of which users are on which post. The plugin ships an internal (lightly modified) copy of 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/ in order to make the sync engine swappable, so it will not work with another active Gutenberg plugin.
To try out the engines, follow the setup steps in the README. Select a sync engine and transport, and start editing a post in multiple browsers.
Engines: What do they have in common?
In all engines, every change is processed through WordPress. When an edit arrives, the server confirms who sent it, checks they are allowed to make it, validates it for unsafe code, determines how to merge it with everyone else’s changes, and stores the result. The differences between engines are the implementations of these steps. Every engine allows multiple users to edit at the same time, works with every transport, and shows who is editing a post in varying levels of detail.
Engine 1: yjs-server
Summary: Built on the 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 Yjs, the same technology used for client-side RTC in the current Gutenberg experiment. Every browser uses the Yjs library to merge changes into a document, sending the result to the server. The server verifies changes before they are shared with other users.
Yjs is an open-source and widely used CRDT implementation. In Yjs, two copies of a document edited separately can always be combined, in any order, and both end up identical. There are no merge conflicts. The server implementation runs a PHP version of Yjs to verify changes before passing them on to other users.
Transport: Polling with a WebRTC advisory channel
How your change travels to peers: You type a word. Your browser applies it locally to a copy of the editor document and sends a binary update to the server. The server opens the shared copy of the post, verifies the update, and saves it. Everyone else receives the update over the engine transport and applies it to their local copy of the document.
Strengths
- The most battle-tested library for collaboration. Yjs is used by many products, and has also received the most testing in Gutenberg.
- No merge conflicts. Yjs has a deterministic algorithm for combining edits, which means there’s never an edit that conflicts with the document.
- The most “real time” collaboration. Yjs updates are fast and small (no matter the size of a document), communicate cursor-level presence, and are designed for a real-time feel.
Weaknesses
- Yjs “hides” conflicts by choosing a winner itself. If two collaborators change a 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. setting at the same time, one user silently wins. If two people rewrite the same sentence at the same time, it’s possible for the result to be a mix that nobody wrote individually. Nobody is warned about conflicts, because the engine does not treat them as conflicts.
- It communicates in compressed binary messages. Instead of “User A added ‘Lorem ipsum’ to paragraph 1”, Yjs messages look like
{ "type": "update", "data": "AAAG+/m3og8CA4IERAE0A6gAx…" }. This is efficient for update size, but can make debugging and understanding history more difficult. - Server agents cannot easily participate in collaboration. Outside tools that alter post content directly can’t easily interact with live collaboration, which can make it possible for an editor’s working copy and post content in the database to diverge.
- Two implementations. The yjs-server engine requires matching JSJS JavaScript, a web scripting language typically executed in the browser. Often used for advanced user interfaces and behaviors. and PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher implementations because the browser is in charge of merging changes, but the server must also validate. The implementations are kept matching by shared tests, but a divergence between them would cause issues. Protocol updates must be made on server and client at the same time.
Engine 2: DE-RTC
Summary: Most similar to single-user WordPress. People share and merge changes only when they save. The server combines incoming saves with everyone else’s, and produces merge conflicts when there is an overlap. This engine is not designed for Google Docs-style real-time editing, preferring a slower update cadence. Because changes are made via save, external plugins, scripts, or WP-CLIWP-CLI WP-CLI is the Command Line Interface for WordPress, used to do administrative and development tasks in a programmatic way. The project page is http://wp-cli.org/ https://make.wordpress.org/cli/ commands that change post content can take part almost as easily as human edits.
The “DE” in DE-RTC stands for Distributed Editing. @dmsnell proposed the design in WordPress/wordpress-develop#12334 and WordPress/gutenberg#79602, and we’ve ported it into the sync engines plugin. It follows a more traditional WordPress model: if saving is how people share work, then anything that can save a post can take part, including tools that are not browsers. Although DE-RTC can send advisory data over every transport, post data updates are sent via regular saves on the configured save cadence.
How your change travels to peers: You make some changes. Every ten seconds (default), your browser sends the whole post to the server through WordPress’s normal autosave. The server merges based on three copies of the post: the version you started from, your updated version, and the current shared version on the server. Changes that do not overlap are combined automatically. When two people change a block in a way that conflicts, that block is set aside for review.
Strengths
- Outside tools can easily take part. A plugin, script, or agent that changes post content can collaborate with a live editor instead of replacing their work.
- One implementation for merging, owned by the server. Browser logic is simple and sends the whole post to the server, and the server is in charge of making merges. Unlike yjs-server and intent-log, there is no required duplication of logic between browser and server.
- Great for small, low-cost hosting. A few larger requests over a long interval are usually more friendly than constant polling on resource-constrained hosts.
Weaknesses
- It is not real-time. You see other people’s changes on the save interval, not author cursors with live updates. The save interval can be adjusted, but DE-RTC scales best with infrequent updates.
- Each save sends the whole post, so updates get bigger as the post grows.
- Outside tools must say which version they started from. For outside post edits to merge with folks in the editor, tools are required to say which post version they started from (e.g.
Base-version: 123). This is simpler than the other engines, but requires tools to be RTC-aware. - The server does not know what you meant. DE-RTC only sees content before and after a save, not “I split this paragraph.” Large post changes made together, like splitting or rearranging blocks, are more often set aside for review.
Engine 3: intent-log
Summary: The browser sends messages describing what a person did in Gutenberg terms, and the server is in charge of keeping a log. For example “Split block 1 at index 20”, then “Add text ‘Lorem Ipsum’ to block 2”. Messages explain changes in human terms. Simultaneous changes are combined via operational transform. Incompatible changes cause conflicts like DE-RTC.
Transport: Polling (with 10 second cadence to allow time to edit)
How your change travels to peers: You type some text. Your browser describes it: “insert ‘Lorem ipsum’ at position 0 in block 1”, and sends the message to the server. The server adjusts your change to fit anything that arrived since (if a peer added three letters before yours, your insert moves three places over), adds it to the log, and sends back an answer. Conflicts are set aside for human merge review. Everyone else receives the official server-side log of actions after your changes are processed.
Example intent-log messages for the demo above:
// User B adds content to block 02f5e6c3
{
"intentId": "...",
"baseSeq": 585,
"type": "insert_text",
"payload":{
"syncId": "02f5e6c3-2876-43a6-b041-6f3d0a217095",
"field": "content",
"offset": 42,
"text": " in the editor."
}
}
// At the same time, User A merges block 02f5e6c3 into block 8d979605
{
"intentId": "...",
"baseSeq": 585,
"type": "merge_blocks",
"payload":{
"survivorId": "8d979605-e1d7-4cec-bc6e-4a3eaa6f30bc",
"absorbedId": "02f5e6c3-2876-43a6-b041-6f3d0a217095",
"field": "content",
"joinOffset": 48
}
}
Strengths
- The server understands what happened in human terms. In yjs-server, moving a block in a post can look like a rewrite of the post, because the engine has no context when diffing a change. In intent-log, a block move is a simple message (“Moved block 1 to position 3”). This allows for context-aware merge strategies and server-side understanding of changes.
- Intent-log keeps a human-readable record of the session. Every post has a built-in readable history of recent actions and who made them.
- Outside tools can join by saying which version they started from, similar to DE-RTC. External saves can be turned into intent-log edits and combined with others.
Weaknesses
- Intent-log can only process one update at a time per post. Intent-log uses a lock to manage incoming messages one at a time. Under heavy use within a single post, lock contention may be an issue and cause updates to sync more slowly.
- Operational transforms are difficult. Intent-log is built on operational transforms, which involve realigning concurrent edits so that they can be combined without conflict. This difficult logic still needs a lot of work in intent-log.
- Two implementations. The intent-log engine requires both a JS and PHP implementation because the browser must show your edits instantly as well as keep them in the right place as other changes arrive. This means intent-log runs the same logic in your browser (JS) and on the server (PHP) in order to avoid separation between the two logs. The implementations are kept matching by shared tests, but a divergence between them would cause issues. Protocol updates must be made on server and client at the same time.
Side by side
| yjs-server | DE-RTC | intent-log | |
|---|---|---|---|
| Updates arrive quickly? | Yes | No | Yes |
| Live cursors in the text | Yes, Google Docs-style | No | Yes (not implemented yet) |
| What the browser sends | Binary updates | The whole post | Short descriptions of edits |
| Where does the merge logic live? | Server and browser | Server | Server (with browser preview) |
| Two people make a conflicting change | Combined silently, one person wins | Set aside for review | Set aside for review |
| Outside tools | Not merged with live session | Join by naming a version | Join by naming a version |
| Server work per change | Most, grows with post size | Middle, upload grows with post size | Least |
Transports: How changes travel
We’re mostly concerned with engine selection in this post, but we have several transports available that all engines can support. We expect transport options to depend on hosting availability. Here’s a quick rundown of those transports:
| Transport | How it works | What it needs |
|---|---|---|
| Polling | The browser sends local updates and asks the server for updates on a timer, every N seconds. Can be adjusted anywhere from one to 25 seconds (default 5). | No special infrastructure. Works on every host, and can be scaled at the cost of PHP workers. |
| Polling with WebRTC advisory channel | The browser sends local updates and asks the server for updates on a relaxed polling timer. However, when any peer makes a change, other peers are notified via WebRTC to immediately request an update from the server instead of waiting until the next poll cycle. | Browsers that can reach each other over WebRTC. When not possible, falls back to regular polling. |
| Server-sent events | The browser keeps one connection open to WordPress and receives updates through it continuously. Local updates are sent to the polling endpoint. | Hosting that allows long-open connections. One server process per open window, can consume PHP workers. |
| Server-sent events (daemon) | The same one-way connection as server-sent events, but run on a stable, separate process instead of a general PHP worker. Local updates are sent to the polling endpoint. | A server that can run a separate process, and hosting that allows long-open connections. |
| WebSocket | A connection open in both directions, run on a separate process. Changes arrive almost instantly. | A server that can run a separate WebSocket process. |
Higher-fidelity transports are designed to be downgradable and fall back to polling. That means that if you choose a transport that relies on a separate service (such as the WebSocket daemon) and it stops responding, polling will always be available as a backup.
Call to action
Try it out and tell us what you think! When you test, please keep in mind that all three engines need polish and may have bugs. We want to hear about bugs, but care most about the major design differences between the engines and how they might affect your workflow. Are fast updates and live cursors a must for you? Do you prefer the simpler model of DE-RTC? How do you feel about the merge conflicts you encountered?
Report what you find on GitHub issues or in #feature-realtime-collaboration on WordPress Slack. For more in-depth information, see documentation in the repository:
- data-flow.md shows technical engine data flows on one page.
- engine-comparison.md compares engines in even more ways.
Please let us know if there’s anything we can do to improve your testing.
Dev Chat Agenda – October 14, 2026
The next WordPress Developers Chat will take place on Wednesday, October 14, 2026, at 15:00 UTC in the core channel on Make WordPress Slack.
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.2
- WordPress 7.2 BetaBeta A pre-release of software that is given out to a large group of users to trial under real conditions. Beta versions have gone through alpha testing in-house and are generally fairly close in look, feel and function to the final product; however, design changes often occur as part of the process. 1 is scheduled for release next Tuesday, Oct 20 at 15:00 UTC
- Progress Report: wp_kses()
- NO_BACKSLASH_ESCAPES SQL mode is now turned off by default in WordPress 7.2
General
- Call for feedback: the W and the site name in the Toolbar
- Feature Notifications: status update and plan for 0.3.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.
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.
Apologies for bringing these up again! Could anyone take a look at these open issues when you have a moment? Some already have linked PRs:
– Additional CSS styles are not generated on the frontend for any block that handles its own rendering of inner blocks (for example: Navigation block): #82171
– Add Border and Spacing support to the Navigation, Navigation Link and Navigation Submenu blocks: #66392, #66483 and #68455
Documentation Team Update – October 13, 2026
New schema for docs meetings:
- 1st in the month – SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/ chat
- 2nd in the month – Video call
- 3rd in the month – Slack chat
- 4th in the month – 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/ There are many teams that people can participate in, each with a different focus. https://make.wordpress.org/support/handbook/getting-started/getting-started-at-a-contributor-day/ (video)
- 5th in the month – Video call
Documentation Issue Tracker stats.
Current state
- open issues: 469
- closed issues: 1840
- good first issues: 7
- self-assigned: 76
By status:
- To do: 355
- In progress: 30
- Review: 84
By version:
By project:
- End-user documentation: 231
- Developer documentation: 186
- Advanced administration: 20
- Contributor documentation: 4
Past month
0 pull requests merged.
85 issues closed.
18 issues were created.
Current projects:
- WP Overview
- Technical guides
- Support guides
- Customization guides
- Blocks articles overhaul
- WordPress 7.1 Documentation
- WordPress 7.0 Documentation
- WordPress 6.9 Documentation
- WordPress 6.8 Documentation
- WordPress 6.7 Documentation
- WP 6.6 Documentation
- WP 6.5 Documentation
- WP 6.4 Documentation
- WP 6.3 Documentation
- WP 6.2 Documentation
- WP 6.1 Documentation
- Documentation for WordPress 6.0 release
- Block Editor End User Docs Update to 5.9
- Content Review
- Advanced administration handbook
- WordPress Glossary update
- WordPress Block Editor End-User Docs Inventory
- Inventory of Technical Parts From End User Docs
- Documentation team Handbook
- New design for HelpHub in WordPress.org
- End-user documentation
- End-user docs repo – workflows and settings
The Documentation team repositories:
+make.wordpress.org/docs/
Presence API meeting summary: October 12, 2026
The Presence APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. meeting took place on Monday, October 12, 2026 at 15:00 UTC in #feature-presence-api. It also hosts the real-time collaboration (RTC) work. This week’s focus was the feature pluginFeature Plugin A plugin that was created with the intention of eventually being proposed for inclusion in WordPress Core. See Features as Plugins merge criteria, and which gaps are left before a coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. proposal.
Announcements
- Presence API: What’s new went up on Make/Core on October 2.
- Presence API 0.17.0 shipped October 8. A site can now switch off each piece it doesn’t want, and the presence functions take an
$argsarray (#789). - The debugger and DB viewer moved into their own presence-debugger pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. (#760), and Presence Scenes gained arrivals, coming-back and fading-out scenes (#775).
Follow-ups
- 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/ Sync Engines (GSE) is drafting a Make post to be published this week.
- The collaborator-liveness work left over from #647 now lives in GSE: a second tab is GSE#147, and another device is GSE#148. #815 gives GSE#148 a way to tell a second browser from a second tab.
Merge criteria
Each item from the handbook’s feature plugin criteria is tracked on #550.
- @huzaifaalmesbah linted the CSSCSS Cascading Style Sheets. (#811), and @rejaulalomkhan linted the PHPUnit tests (#817).
- @iamchitti is taking Firefox and WebKit end-to-end runs, scoped to the tab coordination specs (#808).
- Inline CSS in the PHPPHP The web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher files moves into stylesheets (#807).
- @iamchitti took touch devices (#821), keyboard-only checks (#822) and the feature with 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 off (#823).
- Nobody has claimed HTMLHTML HyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers. validation or a security audit yet, and neither has an issue. Comment on #550 to take one.
Path to core
Post locks are the first consumer, and GSE is the first outside project on the API. The readiness gate on #550 asks for three outside projects and eight weeks without a breaking API change, counted from 0.17.0, so December 3 at the earliest. Anyone building on the API, or considering it for a plugin or host, is welcome to get in touch.
Open floor
- Private security reporting is now enabled on the repository, thanks to @huzaifaalmesbah.
- @iamchitti asked where the TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. proposal draft is, and offered to review it this week.
Since the meeting
Presence API 0.18.0 shipped with the session hash (#815) and core’s copy of each API function winning once it exists (#805).
Next meeting
Monday, October 26, 2026 at 15:00 UTC in #feature-presence-api.
Meeting Agenda for October 13th, 2026
This week’s meeting will be held on Tuesday, October 13th, 2026, at 07:00 UTC. The meeting will be held on SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/, in the #training channel. Anyone is welcome to contribute to the meeting by commenting in Slack threads during the meeting and throughout the following days. Meeting notes will be published by the following Tuesday to incorporate these asynchronous conversations as well.
This week’s meeting will be hosted by @devmuhib.
1. Intro/Welcome
Welcome to all the new teammates who joined the Training Team this week!
2. News
- Meeting Note Takers
- Oct 13th – @miyanialkesh7

- Oct 20th – @softglazee

- Oct 27th – @Kotiyajenish

- Nov 3rd – @SAndrrew

- Nov 10th – @gohelkunjan

- Oct 13th – @miyanialkesh7
- Looking for feedback
- WordPress Hackathon: Recently we tried a WordPress Hackathon at Stamford University, Bangladesh alongside WordPress Campus Connect event. We have created a community blog post where you can share your feedback.
- Team Homepage: @clk87 has shared A block-based prototype for the Training Team homepage to make team pages more engaging and newcomer-friendly. Feedback is welcome via GitHub Issue #3674.
- Office Hours: The next Office Hours will be held on a weekday, avoiding Monday and Friday. The proposed dates are October 27, 28, or 29, 2026, you will be informed when the date is set and confirmed.
- Text-to-Speech: The team discussed exploring text-to-speech/read-aloud functionality for course lessons. @softglazee has created prototypes, and the team is encouraged to provide feedback before implementation discussions with 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. Team.
- Training Team Handbook: The handbook is currently being updated, and team members are encouraged to share suggestions, improvements, and ideas in GitHub Issue #3447.
- Intermediate PluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. Developer Course: @mebo has revived the Learning Pathway course and started working on modules and lessons. Team members are invited to review the new content and share feedback, including the “Rendering plugin data” lesson.
- Looking for volunteers
- Content Review Volunteers: Volunteers are needed to review and identify content that should be updated or consolidated. Two groups are needed: one for the handbook and one for courses.
- Lesson Thumbnails: Work has started on creating thumbnails for lessons that need them. Team members are welcome to contribute to the remaining thumbnails through GitHub Issue #3428.
- Issue Cleanup: The team discussed organising the many open issues into smaller categories and reviewing them systematically.
- Review Workflow: The proposed process is to review issues one by one, identify outdated or irrelevant items, suggest next steps, and add comments before closing or updating issues.
- Good First Issues: Contributors can start with issues labeled Good First Issue, especially those related to content feedback, and follow the handbook guide for validating feedback.
- Issue Categories: The team discussed starting with a specific categoryCategory The ‘category’ taxonomy lets you group posts / content together that share a common bond. Categories are pre-defined and broad ranging., with Bug issues suggested as a priority. Other options include Needs Translation Reviewer, Unlabeled, Awaiting Triage, and Content Feedback.
- Next Steps: Team members are encouraged to suggest which category should be reviewed first, after which the issues can be divided among contributors.
- Goal: Work together to clean up and keep the repository organised.
- Review Workflow: The proposed process is to review issues one by one, identify outdated or irrelevant items, suggest next steps, and add comments before closing or updating issues.
- Updates from last week’s Triage Squad session
- No triage squad meetings last week
- Other announcements and news
- Office Hours Recap: The September 26, 2026 Office Hours session was successfully hosted, moderated by @vasantrajput, and the recap post has been published. Thanks to @rfluethi for preparing the draft.
- Monthly Update: The Training Team’s September 2026 monthly update has been published.
- Community & Slack: The team shared the guide on how to bring your community to Make WordPress Slack.
2. Come and Contribute
- Content ready for review
- See Guidelines for reviewing content when reviewing content.
- We have 9 issues ready for review
- See Guidelines for reviewing content when reviewing content.
- Feedback awaiting validation
- See Validating and Applying Content Feedback for step-by-step guidance on validating feedback.
- We have 39 issues that require validation
- See Validating and Applying Content Feedback for step-by-step guidance on validating feedback.
- Topics awaiting vetting
- See Vetting Topic Ideas for step-by-step guidance on vetting topic ideas.
- We have 2 issues that require vetting
- See Vetting Topic Ideas for step-by-step guidance on vetting topic ideas.
- Validated feedback awaiting fix
- Contributors, see Validating and Applying Content Feedback for step-by-step guidance on applying feedback that has been validated.
- We have 26 issues awaiting a fix
- Contributors, see Validating and Applying Content Feedback for step-by-step guidance on applying feedback that has been validated.
3. Contribution Acknowledgement
- Badges awarded:
- No badges awarded this week
4. Project updates
- A new version of the 50-hour course, WordPress Credits: Intro to Contribution, has been launched. It is integrated with the new Education Platform, where mentors can track student progress through student report cards.
5. Upcoming Online Workshops
- No workshop scheduled
6. Contributor Updates
- What have you been working on, and how has it been going?
- Anything you’ve accomplished since the last meeting?
- Do you have any blockers?
- Can other contributors or Training Team members help you in some way?
7. Open Discussions
If you have topics you’d like discussed in the meeting, please leave them as a comment on this post.
You can see all meetings scheduled on this meeting calendar. If you are new to the Training Team, then come walk through our onboarding program to get to know the team and how we work. And if you have questions, feel free to reach out in the #training Slack channel at any time.
I want to participate
Thank you for sharing this meeting agenda! I’m excited to learn more about the WordPress Training Team and contribute to improving learning resources.
Hello Training Team! I’m learning WordPress through WP Credits and I’m excited to explore opportunities to contribute. I’d love to support the team by reviewing tutorials and helping improve learning resources for the WordPress community. Thank you for creating such valuable learning opportunities!
আমি অংশগ্রহণ করতে চাই
Thank you for sharing this meeting agenda! I’m excited to learn more about the WordPress Training Team and contribute to improving learning resources.
Thank you for sharing the agenda! I’m currently learning and contributing through the WordPress Credits Program. Excited to explore more opportunities, improve my skills, and contribute to the Training Team and WordPress community!
Call for feedback: the W and the site name in the Toolbar
Since WordPress 7.1 the Toolbar is also displayed in the Post Editor and the Site Editor (#65091, dev note). That change made an old problem more visible: the first two items of the Toolbar, the W and the site name, do not behave the same everywhere. #66258 proposes to fix that. This post outlines the change, the reasons, and asks for feedback before a patchpatch A special text file that describes changes to code, by identifying the files and lines which are added, removed, and altered. It may also be referred to as a diff. A patch can be applied to a codebase for testing. is written.
- TracTrac An open source project by Edgewall Software that serves as a bug tracker and project management tool for WordPress. ticketticket Created for both bug reports and feature development on the bug tracker.: core.trac.wordpress.org/ticket/66258
- Try it in Playground
- Test plugin (zip): toolbar-links-test.zip
- Source: github.com/lmendes-design/toolbar-links-test
Current behavior
- A click on the W goes to the About WordPress page.
- A click on the site name goes to the site in the adminadmin (and super admin), and to the Dashboard on the front end.
- The site name menu also changes. In the admin it has only Visit Site. On the front end it has Dashboard, Plugins and Themes.
- In the editors, the Toolbar has no link to the Dashboard.
The proposal
Two fixed links.
- The W always goes to the Dashboard. Dashboard is the first item of the W menu. About WordPress and the other items stay in the menu. On small screens the W stays visible. Today it is hidden under 600px.
- The site name always goes to the site. The menu is the same everywhere: Visit Site, Plugins and Themes. On multisitemultisite Used to describe a WordPress installation with a network of multiple blogs, grouped by sites. This installation type has shared users tables, and creates separate database tables for each blog (wp_posts becomes wp_0_posts). See also network, blog, site, Manage Site comes after Visit Site. Classic themes keep Widgets, Menus, Background and HeaderHeader The header of your site is typically the first thing people will experience. The masthead or header art located across the top of your page is part of the look and feel of your website. It can influence a visitor’s opinion about your content and you/ your organization’s brand. It may also look different on different screen sizes..
The Dashboard has one place, under the W. Please, check following images:



Why
- The W is the most visible item of the Toolbar, and today it goes to a page people rarely need. With this change it gets a useful click. There is no learned behavior to unlearn.
- One click to the Dashboard from everywhere. So, we can build the right mental model.
- One behavior to learn. People do not need to check where they are before they click.
- Two clear places. The W is the admin. The site name is the site front end.
- It works on multisite. My Sites stays next to the W, as today. In the Networknetwork (versus site, blog) Admin, the W goes to the network Dashboard.
How to test it
Open the Playground link. It loads WordPress with the test pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. active and lands on the Dashboard. Or download the plugin and install it on a test site. Deactivate it to compare with the current behavior. It stores nothing in the database.
What to look for:
- The admin, the front end, the Post Editor and the Site Editor. The W and the site name do the same thing in all of them.
- A window under 600px. The W is visible and goes to the Dashboard.
- A multisite, if you have one. The Network Admin and a sub site.
- A classic theme. Widgets, Menus, Background and Header stay in the site name menu.
- A plugin that adds items to the W menu or the site name menu. The node IDs do not change, so they should keep working.
Leave feedback by October 16th
Please leave feedback in the Trac ticket, so it stays in one place. Comments on this post are welcome too. The deadline is October 16th, ahead of the 7.2 BetaBeta A pre-release of software that is given out to a large group of users to trial under real conditions. Beta versions have gone through alpha testing in-house and are generally fairly close in look, feel and function to the final product; however, design changes often occur as part of the process. 1 on October 20th 😊
I love that this is being worked on.
Given the ‘Dashboard’ link has long lived under ‘My Site’ on the front end, I’m really nervous about removing it from there. The W seems too hidden and unexpected.
Instead, for discoverability and clearer architecture, why aren’t we adding the Dashboard link under ‘My Site’ on all wp-admin screens?
I don’t mind the W also always going to the Dashboard, but it seems too abrupt to remove it from the front end for users who are used to that.
While we are working there, I’ve never understood why Plugins and Themes are listed under ‘My Site’. They aren’t used often enough to justify that prominent placement, and in wp-admin they are duplicated.
I’ve never understood why Plugins and Themes are listed under ‘My Site’.
Agree.
Instead, for discoverability and clearer architecture, why aren’t we adding the Dashboard link under ‘My Site’ on all wp-admin screens?
Also agree – no other site-specific links are under the “W”. The “W” in general is confusing. In the client-work world, “WordPress” is irrelevant. Before the toolbar was brought back in the block editor, the exclusivity of the site icon seemed much more relevant (though it’s usage as a back button maybe leaves something to be desired). I think the WordPress backlink / about / get involved should all be deprioritized, if we’re going to review this.
While we are working there, I’ve never understood why Plugins and Themes are listed under ‘My Site’. They aren’t used often enough to justify that prominent placement, and in wp-admin they are duplicated.
i do not agree. it’s a daily task for any admin who needs to maintain the website to go to plugin update.
The “W” in general is confusing. In the client-work world, “WordPress” is irrelevant.
if i take my customer point of view, those are more keen to see their own logo than a brand. The WordPress logo should go elsewhere, like aside the Core Version at the bottom right, or as last icon in the right admin left side admin menu.
In case the admin is nicely redesigned, the use is more keen to say “wow, that’s a nice dashboard, what’s the CMS ?”, and he looks for some additional information… Here the WP logo is pushed to front too proeminentely IMHO.
> The W always goes to the Dashboard.
This way, in the admin the W would be a duplicate of the ‘Dashboard’ link in the left admin menu, which lives underneath. I’m not sure this would be less confusing for users. Basically, two links that are differently labeled point to the same destination.
Rather, I’d identify the W to anything that is ‘WordPress related’ as in: About, links to wp.org, get involved, documentation etc. Basically, anything that is related to the WordPress release or the Make blog. I don’t see the W as a good mental association with the Dashboard. It hasn’t been for ages.
I’m not opposed in principle to change long established conventions but such changes are confusing by definition. At the very least it should be A/B tested with real users to validate the proposal based on actual data.
Ive been working with WordPress for over a decade and I have never once clicked the W > About (purposely). I love this change! Yes, please!
UPDATE 🙂
Thank you all for the feedback here and on Trac. Instead of one proposal, I built four prototypes so we can try each one and compare. All of them solve the same two problems: a way back to the Dashboard from the editors, and a first item in the Toolbar that is useful.
Each link opens Playground with the prototype active. Nothing to install. A small “Prototype N” label on the right of the Toolbar tells you which one you are on.
-> Prototype 1, the current proposal: the W goes to the Dashboard, the site name goes to the site.
Playground link
-> Prototype 2, everything under the site name: the site name goes to the site, its menu is the same everywhere: Visit Site, Dashboard, Plugins, Themes. The W does not change.
Playground link
-> Prototype 3, Dashboard in the site name menu: the click works as today. Dashboard is in the menu on the front end and in the editors, not in the admin, where the menu already has it. The W does not change.
Playground link
-> Prototype 4, the W moves to the end: the site name is the first item and works like Prototype 3. The W menu moves to the right side, next to the account menu.
Playground link
To test on your own site, the plugin zip has a switch in Settings > General: https://github.com/lmendes-design/toolbar-links-test/releases/latest/download/toolbar-links-test.zip
Two questions:
-> Which prototype would you use every day?
-> Is there a flow that none of them cover?
Feedback here or on #66258, both work: https://core.trac.wordpress.org/ticket/66258
Thanks, folks 😊
-> Prototype 3, Dashboard in the site name menu: the click works as today. Dashboard is in the menu on the front end and in the editors, not in the admin, where the menu already has it. The W does not change.
Playground link
This feels the most seamless to me. Only one option changes in the same place and it changes based on where I’m looking in a way that’s helpful. I wanted to like Prototype 2 more but I could easily see myself accidentally clicking the wrong item (dashboard or view site) whereas prototype 3 felt much smoother with the respective item being at the top.
Two questions:
-> Which prototype would you use every day?
-> Is there a flow that none of them cover?
thanks for those playgrounds
I prefer P2 but with some of James Koster inputs and some inspirations taken from P3/P4 😉
1/ Jame’s proposal about the editor view is nice (collapsable menu): it helps finding how to go back the full admin side, with direct links to submenus since those are visible directly (saves an extra step). But it has more to do with the final admin redesign (merge of the editor view and classic admin right menu)
2/ The W submenus : the Jame’s question mark ‘?’ can be moved after “+New” (because of P4 rule below).
– Initially, i thought it could be moved in the left side menu, at the footer of it, after a separator (with a “Lean WP” name ?) so it brands what the site is running on, and is easily findable, with its submenus. But keeping it in the admin bar under a “?” or help icon is better IMHO
– The help content /links are also displayed as widget on the dashboard central part (maybe needs some extra work to pimp this area as “help center”)
3/ Use site logo in the admin bar as “my quick links” role :
Clicking on its top entry move to the admin. if on the admin site, clicking on it move to front. With the same entry as P2, because sometimes i want to open another instance of the website from the front view
—– Visit site must always open as “target blank” aka in a new browser tab
4/ keep the right side of the admin bar for user interactivity only (profil, notifications, discussions, notes, etc.)
5/ Keep the W logo for opening the menu (“managing stuff”)
Another solutions would be to add the quick links at the beginning of the W menu), more as icons to save places. But i will bring friction IMHO.
I did not investigate on mobile view.
(merge of the editor view and classic admin right menu)
read “and classic admin left menu” / i made a typo
Plugins Team: 12 Oct 2026
PluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. Status Change Stats
- Plugins requested : 1259
- Plugins rejected : 44
- Plugins closed : 79
- Plugins approved : 961
Plugin Queue Stats (current)
- Plugins in the queue (new and pending)* : 4779
- (older than 7 days ago)** : 3846
- (2026-10-05 – 2026-10-11) : 678
- (new; not processed or replied to yet)* : 30
- (pending; replied to)* : 4749
- (pending; waiting on author)* : 4063
- (pending; waiting on reviewer)* : 448
- (pending; waiting on reviewer, email not yet sent)* : 238
Help Scout Queue Stats
- Total Conversations: 2571
- New Conversations: 1613
- Customers: 2199
- Conversations per Day: 321
- Busiest Day: Monday
- Messages Received: 1789
- Replies Sent: 4798
- Emails Created: 1315
* : Stat reflects current size of queue and does not take into account ‘date’ or ‘day’ interval** : Stat reflects activity only within the ‘recentdays’ from today
Our First WordPress Campus Connect Hackathon: What Worked, What Didn’t, and What’s Next?

Over the past few months, we have been visiting universities in Dhaka, Bangladesh and speaking with students about WordPress, technology, their interests, and activities.
We’ve noticed hackathons, programming challenges, robotics competitions, cybersecurity competitions, and similar activities are already popular in many universities. There was a clear excitement around the idea of competing, building something, and proving what you can do.
In most of the campus connect events, we generally try to conduct workshops. But there is one issue we experience with the traditional workshop model:
Students often learn because we are asking them to learn!




What Changes When Learning Becomes a Competition?
A competition creates a different environment. Students have a problem to solve. They have to search for information, read documentation, experiment with different approaches, and build something themselves.
That is why we wanted to test whether a hackathon-based approach could be a better way to introduce WordPress to university students. Recently, we tried this at Stamford University Bangladesh as part of our Campus Connect program.
The experience gave us both positive and negative findings. More importantly, it raised several questions that we think are worth discussing with the community.
What We Tried
Our Campus Connect program followed a three-day format:
- 2 days of online hackathon
- 1 day of WPCC Seminar and Workshop
- Approximately 180 registered, among 100 student registered for hackathon
- 40 websites created (We are working to publish website lists on the event website soon)
- 82 WordPress profiles created
We designed three different hackathon tracks so that students with different skill levels could participate.
Discover WordPress
This track was specifically designed for students who had little or no previous WordPress experience. Participants were asked to research WordPress online, learn about its purpose and use cases, answer related questions, and build a basic website.
The goal wasn’t to make them WordPress experts. The goal was to answer a simpler question:
Can a student who doesn’t know WordPress learn enough independently to understand what WordPress is and what it can do?
This was the most popular track, with around 20 participants.
Designer Track
The designer track had around seven participants. Participants were given different website creation tasks.
Since we knew the participants were mostly beginners, we didn’t want to judge them purely based on professional-level design quality.
Instead, we looked at things like:
- Was the website customized?
- Did the participant simply import a demo?
- Did they make an effort to improve the design?
- Did they show creativity?
- Did they complete the assigned task?
We wanted to reward learning and effort rather than simply the most polished-looking website.
Developer Track
The developer track had only two participants. They were asked to create basic WordPress plugins. Both had experience with other technology stacks but had never created WordPress plugins before.
AI tools were allowed. The requirement was simply to create something functional.
One participant created a related-posts pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party., while another created a counter plugin.
Although participation was low, this track demonstrated something interesting: developers familiar with other technologies can potentially use AI, documentation, and experimentation to quickly start exploring WordPress development.
What we’ve learned?
Our first experiment wasn’t perfect, but several things worked better than we expected.
Students Are Willing to Learn When There Is a Challenge
One of the strongest arguments for this format is self-directed learning. When a student is given a problem instead of a lecture, the learning process becomes more active.
- They have to search.
- They have to experiment.
- They have to make decisions.
- They have to solve problems.
This is very different from simply following a workshop instructor.
Anyone Can Participate

The Discover WordPress track gave us another positive signal. We often assume that students need to know something before they can participate in a technical competition. But a well-designed beginner track can give students an opportunity to learn while competing.
However, the challenge needs to be designed specifically for beginners. Giving a complete beginner an advanced WordPress development task will probably discourage rather than motivate them.
Competition Creates Motivation
Students already seem to have a strong interest in competitive activities. Instead of asking:
“Would you like to learn WordPress?”
We can potentially ask:
“Can you solve this challenge using WordPress?”
The second question creates a very different motivation. Students aren’t only learning technology. They are trying to accomplish something. That competitive element can make learning more engaging.
Drawbacks of the hackathon format
Although we received a large number of registrations, approximately 50% of registered students did not participate in the hackathon. This raises an important question, Why?
Based on what we observed, difficulty may be one factor. Some students started the challenge, answered several questions, and then stopped. For a student who doesn’t know WordPress, even a relatively simple task can become intimidating if they don’t know where to start. And in an online hackathon, there is another problem:
Support isn’t always immediately available.
If a student gets stuck and there is nobody available to explain the next step, quitting can become easier than continuing.
Should Beginners Be Put Directly Into a Hackathon?
This is probably the biggest question we are currently debating. Imagine a student who has never used WordPress. We tell them:
“Here is a hackathon. Build something.”
Is that really a fair starting point? Maybe!
But perhaps there is a better approach. Instead of:
Workshop Go home
or
Hackathon Figure everything out yourself
We could try:
Participate on Learn WordPress Courses Workshop Hackathon
For example, we could first run a short workshop introducing WordPress. Then give students a small challenge that they can complete within an hour. But again, this is something we need to test rather than assume.
Judging Is Another Major Challenge
A mixed-skill hackathon makes judging more challenging because beginners, designers, developers, and experienced WordPress users bring different strengths. Creating separate tracks can help address these differences, but it also makes the judging process more complex.
Multi-track vs one challenge for all?
Should we introduce multiple tracks, such as WordPress Security, eCommerce, Development, and Design, to allow participants to focus on their areas of interest? Or would it be better to create a single challenge that covers different aspects of WordPress?
Multiple tracks could encourage participants to explore their strengths and specialize in specific areas, while a single challenge could provide a more unified experience and make evaluation easier.
Which approach would work best for engaging university students with different skill levels and interests? I’d love to hear the community’s thoughts on the advantages and challenges of both approaches.
What We Think So Far
Based on this first experiment, we’d love to hear the community’s thoughts on how hackathons and workshops can complement each other in WordPress Campus Connect. What role should each format play in engaging university students and helping them learn WordPress?
So perhaps the best approach isn’t Workshop vs Hackathon.
It may be:
Workshop + Challenge + Hackathon
The workshop provides the foundation. The small challenge builds confidence. The hackathon creates the opportunity to apply that knowledge independently. This is our current thinking, but we don’t consider it a proven model yet.
Where We Want to Go From Here
We are interested in taking this format to more universities in Bangladesh. But we don’t want to simply copy the same event and run it again. We want to improve the model first. What positive and negative do you see on this approach? Can you suggest some improvement or share new ideas that we can try?
We Want Your Opinion
This is where we would really like feedback from the WordPress community. We are not presenting this as a finished or proven model. This was our first attempt.
How can we design a hackathon where a student who knows nothing about WordPress can participate, learn something meaningful, and finish the event feeling more confident than when they started?
We would love to hear both positive and negative feedback.
If you’ve organized hackathons, workshops, university programs, WordPress events, or similar competitions, we’d especially like to hear what worked for you—and what you would do differently.
thank you for this proper documentation @devmuhib
I love the proper documentation. Everything looks good. I have seen so many pointers and guides.
I will have this option too and try it in one of the upcoming events
Thanks Moses, any question or feedback comes to your mind, please share with me, so I can improve it and implement on other institutes.
Great experiment and valuable insights for the WordPress community. Having mentors available during the hackathon could help beginners overcome challenges instead of dropping out.
It would also be interesting to track how many students continue learning and contributing to WordPress after the event, as that could be a meaningful measure of its long-term impact.
We are trying to test different methods, which one works best. In workshops we always have mentors. So, if we organise a small competition after the workshop, that can ensure mentor support for students.
How can we design a hackathon where a student who knows nothing about WordPress can participate, learn something meaningful, and finish the event feeling more confident than when they started?
If these are new or new-ish to WordPress students, what if the hackathon divided them up into cross-functional teams, and each team had mentors? And instead of a competition with judgements (where a newcomer might think “There’s no way I can compete with these people”) a showcase of the work completed?
Absolutely! Team-based activities with mentors can make the experience less overwhelming for newcomers and help them build confidence through collaboration.
Congratulations to everyone involved in successfully organizing the first WordPress Campus Connect Hackathon! 🎉
Thank you @devmuhib for sharing such a thoughtful and well documented reflection on what worked, what didn’t, and the lessons learned. 👏🏻
I believe these insights will be valuable for others planning similar initiatives in the future.
One thought I’d love to add is how we could further encourage participation from students with different skills and interests, beyond development.
Speaking personally, coming from a QA and testing background rather than development, I might hesitate to participate in a hackathon if I feel the primary expectation is to build or code something. I imagine there could be students who feel similarly, even though they may have plenty of other areas to contribute while learning the same.
I appreciate that this hackathon already introduced different tracks for students. Perhaps we could build on that approach by exploring more collaborative, real-world challenges where students can contribute in different ways to a shared outcome.
For example, if the challenge is to build a website, some students could focus on development, while others contribute through design, content, usability testing, accessibility reviews, exploratory or automated testing, and understanding how an actual user or customer would interact with the website.
This could also be reflected in how projects are evaluated. Beyond whether something is built successfully, we could consider how usable, accessible, and meaningful the solution is for its intended audience.
Another possibility is to introduce smaller, beginner-friendly challenges for students who may not yet feel confident building something from scratch. Even reviewing an existing website, identifying usability issues, or suggesting accessibility improvements could be a valuable starting point.
I feel this approach could help students experience how real-world projects come together through collaboration, while also introducing them to the many ways they can contribute to WordPress beyond writing code.
This could be another opportunity for Campus Connect initiatives: helping students discover where their interests fit within the wider WordPress community, whether that’s Test, Accessibility, Design, Documentation, Development, or other contribution areas.But again we are not aiming this to convert in Contributor Day as well!
Just sharing these thoughts as possible ideas to explore for future events. I’d love to hear what others think and whether something along these lines could be incorporated into future hackathons.
Thank you for openly sharing your experiences and learnings with the community! ✨
Hi Krupa,
Thanks for sharing your thoughtful feedback! I really appreciate these suggestions. We’ll definitely explore and test different approaches in future events and share our experiences with the community.
I’d love to experiment with challenges that involve different contribution areas, including Test, Accessibility, Design, Documentation, Development, and others, so students with diverse skills and interests can find their place and contribute in different ways.
Thanks again for sharing these ideas!
Training Team Meeting Recap – 6th October 2026
This meeting followed this meeting agenda in GitHub and P2 Post. You can see conversations from the meeting in this Slack Log. (If you don’t have a SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/ account, you can set one up.)
Introductions and Welcome
There were 27 attendees: @pravin1996, @rjekic, @dilip2615, @lidarroy, @alkesh7, @rfluethi, @jenish1234, @mosescursor, @ishahinakhter, @vishitshah, @freewebmentor, @makanikaran, @dhruvang21, @vasantrajput, @sumitsingh, @harshjadav003, @sonaliprajapati (async), @ravigadhiyawp (async), @webgrrrl (async), @rithika3 (async), @sibokul (async), @andrewssanya (async), @nitspatel (async), @upekar99 (async), @valeriewandeler (async), @ursha (async), @mohkatz (async)
Newcomers: @fgcalderon, @owaisobject, @riyad176255, @forhadkhan, @purvadesai21, @noushin955, @msarvas
Meeting hosted by:@rjekic
Note Taker:@makanikaran
Note Reviewer: @vasantrajput
Welcome! Please post in the #training channel or reach out to a team member to help you with contributing. Resources to check out our onboarding program, and our Guide Program.
News
Meeting Note Takers
Here is our current note taker roster:
- 6th October – @makanikaran
- 13th October – @alkesh7
- 20th October – @softglaze
Important note: If anyone needs more information on note-taking or a guide to creating a Recap Note Post, they can DM Vasantsinh Rajput. He will guide you on a Recap Note, and he will review & publish your Recap Post.
Looking for feedback
- Team Homepage: @clk87 has shared A block-based prototype for the Training Team homepage to make team pages more engaging and newcomer-friendly. Feedback is welcome via GitHub Issue #3674.
- Text-to-Speech: The team discussed exploring text-to-speech/read-aloud functionality for course lessons. @softglaze has created prototypes, and the team is encouraged to provide feedback before implementation discussions with the 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. Team.
- Training Team Handbook: The handbook is currently being updated, and team members are encouraged to share suggestions, improvements, and ideas in GitHub Issue #3447.
- Intermediate PluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. Developer Course: @mebo has revived the Learning Pathway course and started working on modules and lessons. Team members are invited to review the new content and share feedback, including the “Rendering plugin data” lesson.
Looking for volunteers
- Content Review Volunteers: Volunteers are needed to review and identify content that should be updated or consolidated. Two groups are needed: one for the handbook and one for courses.
- Lesson Thumbnails: Work has started on creating thumbnails for lessons that need them. Team members are welcome to contribute to the remaining thumbnails through GitHub Issue #3428.
- Issue Cleanup: The team discussed organising the many open issues into smaller categories and reviewing them systematically.
- Review Workflow: The proposed process is to review issues one by one, identify outdated or irrelevant items, suggest next steps, and add comments before closing or updating issues.
- Good First Issues: Contributors can start with issues labeled Good First Issue, especially those related to content feedback, and follow the handbook guide for validating feedback.
- Issue Categories: The team discussed starting with a specific categoryCategory The ‘category’ taxonomy lets you group posts / content together that share a common bond. Categories are pre-defined and broad ranging., with Bug issues suggested as a priority. Other options include Needs Translation Reviewer, Unlabeled, Awaiting Triage, and Content Feedback.
- Next Steps: Team members are encouraged to suggest which category should be reviewed first, after which the issues can be divided among contributors.
- Goal: Work together to clean up and keep the repository organised.
- Review Workflow: The proposed process is to review issues one by one, identify outdated or irrelevant items, suggest next steps, and add comments before closing or updating issues.
Updates from last week’s Triage Squad session
- N/A
Updates for the Office Hours session
- Last Office Hours Recap: The September 26, 2026 Office Hours session was successfully hosted, moderated by @vasantrajput, and the recap post has been published. Thanks to @rfluethi for preparing the draft.
- Looking for feedback for Next Office Hours: The next Office Hours will be held on a weekday, avoiding Monday and Friday. The proposed dates are October 27, 28, or 29, 2026. @sumitsingh will be informed when the date is set and confirmed.
Other News
- Monthly Update: The Training Team’s September 2026 monthly update has been published.
- Community & Slack: The team shared the guide on how to bring your community to Make WordPress Slack.
Come and Contribute
This week’s contribution focus area
- Content ready for review
- See Guidelines for reviewing content when reviewing content.
- We have 9 issues ready for review
- Feedback awaiting validation
- See Validating and Applying Content Feedback for step-by-step guidance on validating feedback.
- We have 39 issues that require validation
- Topics awaiting vetting
- See Vetting Topic Ideas for step-by-step guidance on vetting topic ideas.
- We have 2 issues that require vetting
- Validated feedback awaiting fix
- Contributors, see Validating and Applying Content Feedback for step-by-step guidance on applying feedback that has been validated.
- We have 26 issues awaiting a fix
Contribution Acknowledgement
- Badges awarded:
- No badges awarded this week
- GiveProps:
- No give props this week
Project updates
- Thanks to our colleague @Destiny, the course AI Literacy through WordPress is now live on Learn WordPress!
- Building on the momentum of our last learning cohort (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. Theme Development Course cohort), we are excited to launch our next cohort focused on Plugin Development this month. We look forward to helping more students expand their WordPress skills and explore new opportunities within the open-source ecosystem.
Upcoming Online Workshops
- N/A
Contributor Updates
- N/A
Open Discussions
- If you have topics you’d like discussed in the meeting, please leave them as a comment on this issue.
- @vasantrajput: @sumitsingh, @rjekic 1) Have we finalised the Training Team Office Hours next meeting Date/Time and the Topic suggestion? 2) Also, any news for the TT Admin meeting schedule?
Thanks to everyone who participated in the sync and async, and to those who will contribute in future sessions.
You can see all meetings scheduled on this meeting calendar. If you are new to the Training Team, then come walk through our onboarding program to get to know the team and how we work. And if you have questions, feel free to reach out in the #training Slack channel at any time.
Older activity is on each team’s blog.
Teams
-
Core
The coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. team makes WordPress. Whether you’re a seasoned PHPPHP PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. https://www.php.net/manual/en/index.php, HTMLHTML HTML is an acronym for Hyper Text Markup Language. It is a markup language that is used in the development of web pages and websites., 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 or CSSCSS CSS is an acronym for cascading style sheets. This is what controls the design or look and feel of a site. developer or are just learning to code, we’d love to have you on board. You can write code, fix bugs, debate decisions, and help with development.
-
Design
The design group is focused on the designing and developing the user interface. It’s a home for designers and UXers alike. There are regular discussions about mockups, design, and user testing.
-
Mobile
The mobile team builds the iOSiOS The operating system used on iPhones and iPads. and Android apps. Lend them your Kotlin, Swift, or ReactReact React is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces. https://reactjs.org Native skills. The team also needs designers, UXUX UX is an acronym for User Experience – the way the user uses the UI. Think ‘what they are doing’ and less about how they do it. experts, and testers to give users a smooth experience on every device.
-
Accessibility
The a11yAccessibility Accessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both “direct access” (i.e. unassisted) and “indirect access” meaning compatibility with a person’s assistive technology (for example, computer screen readers). (https://en.wikipedia.org/wiki/Accessibility) group provides 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) expertise across the project. They make sure that WordPress coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. and all of WordPress’ resources are accessible.
-
Polyglots
WordPress is used all over the world in many different languages. If you’re a polyglot, you can help by translating WordPress into your own language or contributing to the GlotPress project, making translations easier and more effective for everyone.
-
Support
Answering questions in the support forums, IRC, or SlackSlack Slack is a Collaborative Group Chat Platform https://slack.com/. The WordPress community has its own Slack Channel at https://make.wordpress.org/chat/ is one of the easiest ways to start contributing. Everyone knows the answer to something! Since the forums run on bbPress, you can also contribute by helping make the software behind them even better.
-
Documentation
Good documentation lets people help themselves when they get stuck. The docs team is responsible for creating documentation and is always on the look-out for writers. The blog has discussion around the team’s current projects.
-
Themes
The Theme Review Team reviews and approves every Theme submitted to the WordPress Theme repository. Reviewing Themes sharpens your own Theme development skills. You can help out and join the discussion on the blog.
-
Plugins
If you are a PluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. developer, subscribe to the Plugin review team blog to keep up with the latest updates, find resources, and learn about any issues around Plugin development.
-
Community
If you’re interested in organizing a meetupMeetup All local/regional gatherings that are officially a part of the WordPress world but are not WordCamps are organized through https://www.meetup.com/. A meetup is typically a chance for local WordPress users to get together and share new ideas and seek help from one another. Searching for ‘WordPress’ on meetup.com will help you find options in your area. or a 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., the community blog is a great place to get started. There are groups working to support events, to create outreach and training programs, and generally support the community.
-
Training
The WordPress training team helps people learn to use, extend, and contribute to WordPress through synchronous and asynchronous learning as well as downloadable lesson plans for instructors to use in live environments, via learn.wordpress.org.
If you enjoy teaching people how to use and build stuff for WordPress, immediately stop what you’re doing and join our team!
-
Test
The Test Team works to improve WordPress quality and usability by advancing the development process through manual and automated testing. Whether through a browser, app, terminal, or code, the team focuses on testing across the entire WordPress ecosystem, including CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. and GutenbergGutenberg The Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses ‘blocks’ to add richness rather than shortcodes, custom HTML etc. https://wordpress.org/gutenberg/, mobile apps and themes, and feature plugins and importers.
-
TV
The TV team reviews and approves every video submitted to WordPress.tv. They also help WordCamps with video post-production and are responsible for the captioning and subtitling of published videos. Reviewing videos is a great way to learn about WordPress and help the community: experience is not required to get involved.
-
Marketing
The Marketing team is currently archived to make room for an experimental shift in focus and processes. Check out the WordPress Media Corps to learn more. Amplification requests and Showcase activities are still running, and you can find out more about them on GitHub.
-
CLI
WP-CLIWP-CLI WP-CLI is the Command Line Interface for WordPress, used to do administrative and development tasks in a programmatic way. The project page is http://wp-cli.org/ https://make.wordpress.org/cli/ is the official command line tool for interacting with and managing your WordPress sites.
-
Hosting
The Hosting team maintains distributed testing software that tests pre-release versions of WordPress on hosting systems, and infrastructure-focused documentation.
-
Tide
Tide is a series of automated tests run against every pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party. and theme in the directory and then displays PHPPHP PHP (recursive acronym for PHP: Hypertext Preprocessor) is a widely-used open source general-purpose scripting language that is especially suited for web development and can be embedded into HTML. https://www.php.net/manual/en/index.php compatibility and test errors/warnings in the directory.
-
Openverse
Openverse is a search engine for openly-licensed media. The Openverse team implements new features and new media types; maintains the public APIAPI An API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. and front-end search engine; and develops WordPress integrations to share Openverse with the entire WordPress community.
-
Photos
The Photo Directory team moderates every photo submitted to the WordPress Photo Directory, maintains and improves the directory site itself, and provides resources and documentation to educate, encourage, and facilitate photo contributors.
-
Core Performance
The coreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. performance team is dedicated to monitoring, enhancing, and promoting performance in WordPress core and its surrounding ecosystem.
-
Playground
The Playground team works on WordPress Playground: the platform that lets you run WordPress instantly on any device without a host, most often in a browser.
-
Core AI
The CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. AI Team coordinates and accelerates AI efforts across the project, focusing on responsible innovation that aligns with WordPress values. We use a pluginPlugin A plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory https://wordpress.org/plugins/ or can be cost-based plugin from a third-party.-first approach to explore AI-powered features, share a public roadmap, and collaborate with other teams.
-
Core Program
The CoreCore Core is the set of software required to run WordPress. The Core Development Team builds WordPress. Program team is focused on strengthening coordination across teams, improving efficiency and empowering contribution. It’s a home for those who span across product and project work.
Not sure which team to contribute to?
Check out our contributor wizard and find how to get started.
Shape the future of WordPress
Become a Five for the Future participant.


Jared Rethman
Thanks, the comparison is very clear.
On “are fast updates and live cursors a must”: yes, but the transport table decides who gets them. SSE needs a host that allows long-open connections; the SSE daemon and WebSocket need a separate process. Most shared hosts offer niether, so which ever engine wins, the typical site lands on polling.
The sse-daemon transport is close to a way out. Its stream is receive-only and edits still go through the REST route, so WordPress stays in charge of every change. The daemons only jobs are authenticating the browser, which access tokens already cover for a host’s own relay, and noticing new rows, which it does by reading the edit log. If WordPress fired an action with each stored row, a hoist or an outside service could run that stream without a process on the box. Is that a path you would consider?
Disclosure: I maintain WordSocket and run WPSignal, a hosted relay, so I have an interest here. Happy to test it.
Reply
Kevin Jahns
Thanks for writing this up, it’s a nice overview! Since Yjs is one of the engines on the table, I wanted to share a few thoughts.
On running the sync engine in PHP everywhere
My honest impression is that you’re making life harder than it needs to be by requiring real-time collaboration to go through a PHP server on every hosting environment. Real-time editing generates a lot of small messages. If every one of them has to spin up a PHP worker, load the shared document, verify, merge, and write back to the database, that’s a lot of overhead in communication, processing, and database usage. On cheap or legacy shared hosting I’m not sure that’s workable at all, and the transports table in the post already hints at this (“can consume PHP workers”, “a server that can run a separate process”).
A simpler path: a small, optional JavaScript server that speaks WebSockets. It could even be run as a public service for sites that can’t host one. That’s a well-understood, boring piece of infrastructure, and it’s much easier to make reliable than implementing a complex merge algorithm on top of polling, WebRTC, SSE, SSE-daemon, and WebSockets, each with its own failure modes. The PHP side would then only need to do what it’s good at: auth, capability checks, sanitization, and persisting the result.
It would be a shame if Gutenberg ended up with a half-baked collab solution that eats resources on every host but still doesn’t deliver actual real-time collaboration.
On “Two people make a conflicting change: combined silently, one person wins”
In practice this matters much less than the table makes it sound. In real-time editing, you see the other person’s cursor and their text appearing as they type. If two people really do hit the same block setting at the same millisecond, one of them loses at most one keystroke (or one toggle), and they see it immediately. The situation where a “conflict” is a real problem is the save-every-10-seconds model, because there two people can diverge for a long time without noticing. Real-time collaboration mostly makes the conflict dialog unnecessary rather than hiding it.
On “Outside tools: not merged with live session”
When I was funded to work on this in 2024 (only for a few months, unfortunately), my approach didn’t require a JS server at all, and it could sync changes directly from the database, or from any other source. No backend logic needed. I showed it in the last video in this post: https://github.com/WordPress/gutenberg/discussions/65012#discussioncomment-11075617
The basic idea: the client compares the “HTML version” of the post (whatever is in the database, regardless of who or what wrote it) against the Yjs document, reconciles the two, and tries to push its own changes without conflicts. It works by polling, reconciling, and retrying. So a WP-CLI script, a plugin, or an agent that edits post_content gets picked up by the live session automatically. There’s nothing for outside tools to know about, no version header to send.
I should say it’s less trivial than it sounds. The hard part is that several clients may reconcile the same external change independently, and they all need to arrive at the same Yjs document rather than each inserting their own copy. That required some ingenuity around stable Yjs clocks, so that reconciled content gets deterministic identities regardless of which client produced it. It’s solved. Unfortunately, it was not ported to the reimplementation of the yjs approach.
The inherent downsides are the computational overhead (the client needs to pull and diff backend changes) and the space overhead (the Yjs representation must be stored somewhere; in my implementation I kept it base64-encoded inside the HTML under a special tag; doubling the size per document). That’s exactly the cost that an optional real-time server can remove. Collaboration when it is there, existing post-locking behavior if it’s not.
To be clear, I’m not attached to a “boring real-time server” for its own sake. The multi-transport architecture is certainly possible. But it would also be one of the most technically challenging collaboration services I know of, and I’d rather see the team focus on shipping a great collaboration experience than on implementing and maintaining complex sync algorithms across five transports in different server environments.
Reply
alecgeatches
Thank you for the in-depth reply Kevin, we really appreciate your expertise. I’m going to focus on the “running the sync engine in PHP everywhere” portion of your response here and we can address other topics in separate threads.
You’re right that involving PHP and the server is going to be more expensive and slower than clients communicating directly over a side channel. Note that we don’t need a central server for everything with the engines above, and can run a separate process or communicate over WebRTC for information that we don’t think requires server-side checks. We call this an “advisory channel” in our engine repository and this is used to handle basic presence information and other non-content updates like nudges to refresh content over polling. This side-channel is optional, but the idea is not every message requires PHP mediation.
A major reason we chose to involve server checks for post content is the permissions issue discussed in Moving to a server-aware approach for collaboration:
Do you have any advice on handling mixed-level permissions checks without a server-side check at the update level? One option we considered is saving a post under the permissions of its lowest-permission editor, but this can cause previously-allowed content to be stripped from a post on a save from an allowed user. Other users can also come and go in a live draft over a long period of time which adds complexity. Another option is cryptographically signing each yjs update client-side, but this adds complexity as well. A server-side check already has access to the whole WordPress permissions model, and can authenticate the user making the change. Future features like attribution will also be tricky without server verification. Do you have any ideas of other avenues we should explore for that problem?
Thank your for your questions and guidance!
Reply
Kevin Jahns
I’d push back on the premise that it should. Yjs does not support granular permissions within a document, and I’d argue no CRDT or OT system can do that safely. A permission like “you may edit” has to apply to the whole document. Every update depends on operations that came before it, from any author. If the server drops or rewrites some of a user’s operations, the peers that already applied them diverge from the server, and the document is no longer consistent. Worse, selective filtering is exploitable in numerous ways: an untrusted user can craft updates where each piece looks harmless to the filter but the merged result is not, or produce content that only becomes dangerous once a privileged user’s edit lands next to it. This is not Yjs-specific. It’s why I call server-side filtering of updates an antipattern in Yjs’ threat model: https://github.com/yjs/yjs/blob/main/THREAT_MODEL.md. The recommendation there is that untrusted users work on a separate document, and a trusted user merges from it.
That also answers the two alternatives you mention. Saving under the lowest-permission editor strips content legitimately added by others, as you note. Signing each update tells you who wrote an operation, but it doesn’t help you remove it: the problem is consistency, not authenticity.
So for the content-laundering example, I don’t think the fix is attribution. The problem is that the script tag lives in a document the author is allowed to write to. Put content that requires unfiltered_html in a separate collaborative document (or a plain field; it’s not obvious this needs to be collaborative at all) that only users with that capability can write to. The post then consists of the main document, writable by anyone with edit_post, plus a privileged document referenced from it. The server still enforces capabilities, but at the granularity WordPress already uses — per post and per capability — rather than per keystroke. Nothing in the main document can escalate, because nothing in it is ever treated as unfiltered.
A nice side effect: this would also let an author save a post that contains a script tag an admin added, without kses stripping it. That isn’t possible in WordPress today.
Reply
Chris Zarate
Thanks for bringing this solution up again, Kevin. It does work in most situations, since the serialized CRDT document in
post_contentserves as a “base version” for post content (block) changes made by a machine.When a single machine writer updates post content and leaves the serialized CRDT document intact, a browser running RTC can produce a diff of those changes and apply it to its local copy—without overwriting the current user’s work. It can also potentially attribute those changes to the machine writer.
Post content is privileged here. Other fields (title, excerpt, post meta, etc.) do not embed a CRDT document / base version, so we cannot extract a diff of what changed. There is some very small downside here: The title and excerpt are represented by
Y.Text, but we cannot apply the machine’s changes as a discrete operation. Those fields are simply overwritten and there is a potential for local changes to those fields to be lost.It’s also true that this solution requires a human collaborator running RTC in a browser in order to produce a diff and reconcile changes. Two machines using server-side APIs cannot meaningfully collaborate with each other. They will always overwrite each other’s changes. While this is also a limitation of today’s WordPress, it may be beneficial to facilitate collaboration between all types of editors, machine or human. A server-based approach means that every machine update can produce a diff and be correctly attributed.
Lastly, storing the CRDT document in the
post_contentmeans that the machine has the ability to disrupt collaboration and induce content loss by removing or corrupting the embedded CRDT document. We can generally assume good faith, but parsing errors or accidents can happen.Thanks again for reraising this solution. It might be worth reconsidering. We just wanted to provide some context about why it wasn’t initially adopted. We welcome additional discussion.
Also, your larger point about complexity is well-taken. It’s certainly not our intent to ship the plugin in its current exploratory state. But even after we make careful decisions about which engine and transports should be included, it deserves careful scrutiny to make sure that collaboration in WordPress is easy to understand, debug, and extend.
Reply
Kevin Jahns
Thanks Chris, that’s useful context.
I don’t think the server-based approach changes this. Any participant that wants live merges, whether that’s a server, a browser, or an API user, has to be collaboration-aware in some form. The engines only differ in what that form is. With DE-RTC it’s the base version plus the full updated document, so the server can do a three-way merge. With Yjs it’s a Yjs update that contains only the difference between two states. A machine that writes plain HTML to post_content without either of those is going to overwrite others under any engine; the reconcile approach just lets browsers absorb that case.
Producing Yjs updates outside the browser isn’t the obstacle it may look like. The y-crdt project (https://github.com/y-crdt/y-crdt) provides a Rust implementation with bindings for Python, Ruby, Swift, Go, and others, and with y-php there’s now a PHP one too. A WP-CLI script or an agent can load the document, make its change, and emit an update, and that update is attributed like any other client’s.
On yjs-server performance
I only spent a limited amount of time on yjs-server, but it ran remarkably slowly. The cause seems to be that every request materializes the complete Yjs document in memory, applies the update, and then throws the document away. That makes each request cost O(document size) regardless of how small the update is, and it’s the opposite of what Yjs is designed for.
The
wp_sync_updatestable that stores incremental updates is the right idea. I’d recommend making it the primary path: append incoming updates to the table and nothing else. The document only needs to be materialized when something actually needs it, e.g. to render the HTML on save, or periodically to compact the update log into a single state. Yjs updates can also be merged with each other without constructing a document (Y.mergeUpdates), so compaction doesn’t require materialization either. This should remove most of the per-request overhead.Reply
Chris Zarate
Our current view is that all server engines can borrow an idea from DE-RTC and require a base version from any machine that wants to make an update. That will allow the server to materialize an update (Yjs or intent-log) on behalf of the machine. The machine can continue to transact in HTML / direct updates without any knowledge of how syncing works.
The barrier for machine participation in collaboration therefore stays very low: Just send a base version along with your updates. Even if the machine does not send a base version, we can still materialize an update but potentially flag any changes that are in conflict with unsaved changes in an active session.
Great advice here, thank you. We will explore this approach.
Reply
Adam Silverstein
Thanks for the clear writeup, @alecgeatches. I’ve been building a Suggestion mode feature (tracking issue https://github.com/WordPress/gutenberg/issues/73411, testable in one branch at https://github.com/WordPress/gutenberg/pull/78994), so I’m reading this with suggestions in mind and how each model might impact the conflicts encountered when two concurrent sessions make overlapping suggestions. The feature currently works fairly well with the RTC experiment enabled.
Conceptually, suggestions line up most closely with intent-log. Each suggestion is a named, attributed operation (inline add/delete/format, attribute change, block insert/remove/move). Each is stored server-side as a note (comment) with _wp_suggestion meta, and resolved by a person through Apply/Reject on the note. That’s very close to intent-log’s readable action history and “set aside for review” model.
How they’re anchored is different. Suggestions don’t track offsets. They’re anchored by markers carried inside the content: a core/suggestion rich-text format for inline edits, and metadata.suggestion for structural ones. Today those markers survive concurrent editing with RTC enabled because Yjs merges them along with the text.
Reply
giteshsarvaiya
Going through the docs/* right now. Ran some of the benchmarks locally, and the coverage and scope definitions are on point. The writing is clear and well structured too.
Appreciate the deep work on this.
RTC is one of the problem spaces I care most about as an engineer, so genuinely glad to be digging into this with you all.
Reply