The WordPress community recently received a major update regarding the roadmap for version 7.0. In a pivotal announcement, Matt Mullenweg confirmed that **Real-Time Collaboration (RTC)**—the crown jewel of Gutenberg Phase 3—will not ship with the 7.0 release.
As developers, we know that “Real-Time” is often a synonym for “Complex.” Moving from a single-user state to a synchronized multi-user state is a fundamental paradigm shift.
Here is a technical breakdown of the five reasons why RTC was pulled, and what it means for the engineering side of WordPress.
1. The “Surface Area” Problem
WordPress isn’t just a post editor; it’s a Full Site Editor (FSE). RTC needs to work across paragraph blocks, global styles, template parts, and navigation menus.
When you increase the surface area, you increase the potential for **state desynchronization**. If a user is editing a Global Header while another is adjusting a Template, the dependency graph becomes a nightmare to manage in real-time.
2. Race Conditions in Collaborative Editing
In a standard WordPress setup, the last person to click “Update” wins. In RTC, we use algorithms like **CRDTs (Conflict-free Replicated Data Types)** or **Operational Transformation (OT)** to merge changes.
If two users edit the same block attribute simultaneously, a “race condition” occurs. If the logic isn’t perfect, you end up with “zombie” data.
**Conceptual example of a failing sync state:
| |
3. Server Load and Scaling Bottlenecks
Most WordPress sites run on stateless PHP environments (Nginx/Apache). RTC, however, is inherently stateful.
To make RTC work, the server needs to keep track of who is doing what, right now. While SaaS tools use WebSockets (Node.js/Go), many WordPress hosts don’t support persistent socket connections. This forces a fallback to Long Polling, which can crush a shared hosting server.
The Polling Nightmare:
JavaScript
| |
The Core team realized that shipping this would likely crash thousands of sites hosted on entry-level servers that aren’t optimized for high-concurrency REST API traffic.
4. Memory Efficiency & Client-Side Bloat
Collaborative engines (like Yjs or Automerge) maintain a “history” of every change to resolve conflicts. On long-form posts with thousands of edits, this history grows in the browser’s memory.
During fuzz testing, it was discovered that the RTC implementation was consuming massive amounts of RAM. For users on lower-end hardware, the browser tab would simply hang. As a “Democratizer of Publishing,” WordPress cannot ship a feature that excludes users with older computers.
5. Fuzz Testing & Edge Case Bugs
The team used Fuzzing—an automated testing technique that injects random, chaotic data into the editor. This revealed recurring bugs where the block tree would “break” (invalid HTML) when multiple users performed complex actions like “Nested Inner Block Drag-and-Drop” simultaneously.
Bash
| |
The Silver Lining for Developers
While the delay is disappointing, it’s a win for stability. If you are a plugin developer, this gives you more time to ensure your custom blocks are “Collaboration Ready.”
What you should do now:
- Audit your
save()andedit()functions: Ensure they are pure and don’t rely on side effects that could break in a synchronized environment. - Follow the Gutenberg Plugin: The feature isn’t dead; it’s moving back to the Gutenberg feature plugin for more “incubation.”
- Monitor Ticket #65205: This is where the code “unwinding” from 7.0 is happening.
Final Thought: I’d rather have a stable, single-user WordPress 7.0 than a broken, multi-user one. In the world of Open Source, “Ready when it’s ready” is always better than “Shipped because of a deadline.”
Follow me for more deep dives into the WordPress Core. Have thoughts on RTC? Let’s discuss in the comments below.