Mercure: real-time collaboration without WebSockets
One annotation, every mutation broadcasts a patch. DataTables and detail screens refresh themselves.
Real-time in a web application long meant: dedicated WebSocket server, parallel deployment, client-side state management. Mercure replaces all of that with standard HTTP/2: the server publishes on topics, clients subscribe via SSE, and the hub handles multiplexing.
On Jul6art the pattern is even simpler. The attribute #[BroadcastableEntity(changedFields: ['title', 'status'])] on a Doctrine entity triggers, on every flush, the publication of a patch to a private topic scoped to the organization. Stimulus components on the backoffice listen and refresh:
- DataTables auto-refresh the touched row without reloading the page.
- Detail screens show a "this record was just updated" toast and offer a reload.
- The notification bell increments without polling.
All of this without a single line of glue in your business code. Add the attribute, restart Mercure, you're live.