Real-time pub/sub: where Mercure stands.
Mercure is the only option in this comparison that ships as all three at once: an open protocol with a public specification, a free MIT-licensed hub you can self-host with no caps, and a managed Cloud plus self-hosted Enterprise built on the same hub.
Figures captured on 2026-09-14 from each provider’s public pricing page, documentation, and protocol specification. Trademarks belong to their respective owners. We are Dunglas Services SAS, the publisher of Mercure.
Two categories, two comparisons.
Mercure plays in two categories at once: a free OSS self-hostable hub like Socket.IO, AND a managed cloud service with paid Enterprise tiers like Pusher and Ably. Putting them all in a single column would be misleading, so we split the comparison in two.
In both we compare verifiable facts: the underlying network protocol, the licensing model, whether a published protocol specification exists, native client requirements, replay semantics, and the published numerical limits of each commercial tier.
We don’t compare subjective attributes such as developer experience, documentation quality, latency, or support responsiveness, since those cannot be measured uniformly.
Self-hostable open source: Mercure hub vs Socket.IO library.
| Criterion | MercureOSS hub · MIT | Socket.IO[1]OSS library · MIT |
|---|---|---|
| License | MIT | MIT |
| Concurrent connections | Unlimited (bounded by your hardware) | Unlimited (bounded by your hardware) |
| History / replay | Built-in event store with Last-Event-ID replay | Implemented by the developer |
| Underlying network protocol | Server-Sent Events over HTTP/2+, with HTTP POST for publishing | Socket.IO protocol over WebSockets, with HTTP long-polling fallback |
| Published protocol specification | ✓IETF-style spec with public conformance tests | Project-defined protocol, documented on socket.io |
| Native browser client (no SDK to ship) | ✓EventSource is a browser primitive | Socket.IO client library required |
| Auto-reconnect with replay | ✓Native via Last-Event-ID (web standard) | Provided by the Socket.IO client library |
| JWT-based topic authorization | ✓Built into the protocol | Implemented by the developer |
| End-to-end encryption (JWE) | ✓Optional, built into the protocol | Implemented by the developer |
| Horizontal scaling backend | Bolt (file-based), Redis, PostgreSQL[2] | Redis adapter (community-maintained) |
| Single binary deployment | ✓Hub built on Caddy, official Docker image and Helm chart | Library; you ship and operate your own Node.js server |
| Server runtime | Any (Go binary, runs anywhere) | Node.js |
Managed cloud services: Mercure Cloud vs Pusher Channels vs Ably.
| Criterion | Mercure CloudPro+ · €250/mo | Pusher Channels[3]Business · $299/mo | Ably[4]Pro · $399+/mo, usage-based |
|---|---|---|---|
| Pricing model | Flat monthly tiers | Flat monthly tiers | Usage-based (messages, peak connections, channel-minutes) |
| Concurrent connections (mid-tier shown) | 5,000 | 5,000 | 50,000 (50,000 concurrent channels) |
| History buffer (mid-tier shown) | ~100 messages, every plan | Last event only, TTL up to 30 min[3] | 2 minutes default; up to 365 days on Pro[4] |
| Underlying protocol | Server-Sent Events (open IETF-style spec) | Pusher protocol over WebSockets | Ably protocol over WebSockets, MQTT, SSE |
| Migration path to self-hosted on the same protocol | ✓Run the OSS Mercure hub or Mercure Self-Hosted Enterprise, no code change | Pusher Enterprise (private cloud, contact sales) | Ably self-hosted via on-premises agreement (contact sales) |
| Vendor independence (open spec, multiple impls) | ✓ | No (single-vendor protocol) | No (single-vendor protocol) |
| Default data residency | EU only (Amsterdam, French SAS) | Vendor-defined; see provider terms | Vendor-defined; see provider terms |
| Article 28 GDPR DPA published | ✓/legal/dpa | Available on request | Available on request |
| Native browser client (no SDK to ship) | ✓EventSource is a browser primitive | Pusher JS SDK required | Ably JS SDK required |
- [3]Pusher Channels pricing is published at pusher.com/channels/pricing. Cache-channel behaviour is documented at pusher.com/docs: a cache channel retains the last triggered event only.
- [4]Ably pricing is published at ably.com/pricing. Ably’s “Pro” plan is billed on usage; the figure shown is the published starting price for that tier. Retention is documented at ably.com/docs: two minutes by default, up to 365 days with persistence on Pro.
Three structural takeaways.
For the technical trade-offs of SSE vs WebSockets (battery, firewalls, binary payloads), see Why SSE over WebSockets.
When each option tends to be a good fit.
Run Mercure in five minutes. Free. No credit card.
Pusher, Ably, and Socket.IO are trademarks of their respective owners. We are not affiliated with any of those companies. Figures on this page are sourced from each provider’s public pricing page and documentation, captured on 2026-09-14. To report an inaccuracy, email contact+brand@mercure.rocks; we update within five business days.