WordPress 7.0 development: the real-time sync layer

WordPress 7.0 development has moved on to the harder problems, and the Core Dev Chats are where you hear about them first. The agenda for the April 8, 2026 meeting was mostly about the architectural foundations of real-time collaboration. That takes the editor past ordinary CRUD work and into state synchronization, which is where most legacy systems fall apart.

I have seen how real-time goes wrong. I once spent three days debugging a race condition in a custom stock sync for a high-traffic WooCommerce store because two transients were fighting for dominance. In WordPress 7.0 the problem is not transients. It is CRDTs (Conflict-free Replicated Data Types) and sync providers.

The roadmap for WordPress 7.0 development

The latest Path Forward note treats 7.0 as the Phase 3 milestone: the release where the block editor stops being a single-player experience and becomes a shared workspace. Most of the core team’s attention is on keeping the synchronization layer provider agnostic. The default transport is HTTP polling, a safe bet on low-end shared hosting, but anything at enterprise scale will need more than that.

That makes custom sync providers the thing most developers will trip over. If you build for agencies or high-scale clients, the default polling transport will bottleneck your server and hand users stale data as soon as concurrency climbs.

If you are already in the internals, my earlier breakdown on building a custom sync provider in WordPress 7.0 covers the state logic underneath.

Working with custom sync providers

In WordPress 7.0 development, registering a sync provider lets you swap the default polling for WebSockets, or for a third-party service like Ably or Pusher. That is what keeps performance sane when several editors are in the same long-form post at once.

The API below is the hypothetical one proposed in the latest dev notes, so treat it as a sketch. A filter injects the provider class into the registry.

<?php
/**
 * Registering a high-performance WebSocket Sync Provider.
 */
function bbioon_register_custom_sync_provider( $providers ) {
    $providers['bbioon-websocket'] = [
        'label'     => __( 'Bbioon WebSocket Provider', 'bbioon' ),
        'transport' => 'websocket',
        'endpoint'  => 'wss://sync.example.com/v1',
    ];
    return $providers;
}
add_filter( 'wp_sync_collaboration_providers', 'bbioon_register_custom_sync_provider' );

Registration is the easy half. The work is in the implementation: handling disconnects, clearing the ghost cursors left behind when a client loses its socket, and reconciling data server side without taking out database locks.

Polling versus WebSockets

The polling provider ships by default for backward compatibility, and it is expensive. Put twenty people on twenty different posts and your admin-ajax.php or REST API endpoints take the hit. At that point a socket-based architecture stops being an upgrade and becomes the baseline.

I wrote up how these systems hold together under load in my notes on stability testing for real-time collaboration.

If the 7.0 sync work is eating your dev hours, I can take it on. I have been working with WordPress since the 4.x days.

The rest of the April 8 dev chat

Open Floor went to tickets around block API version 3, with a request that developers test their custom blocks against the refinements to contentOnly mode. The Make WordPress Core logs and the WordPress Developer Resources are where the details land.

author avatar
Ahmad Wael
I'm a WordPress and WooCommerce developer with 15+ years of experience building custom e-commerce solutions and plugins. I specialize in PHP development, following WordPress coding standards to deliver clean, maintainable code. Currently, I'm exploring AI and e-commerce by building multi-agent systems and SaaS products that integrate technologies like Google Gemini API with WordPress platforms, approaching every project with a commitment to performance, security, and exceptional user experience.