Home › Migrate from Pusher
Migration guide

Migrate from Pusher to MOJAQ

MOJAQ speaks the Pusher protocol, so your existing Pusher client libraries keep working. Create a realtime app, swap the key and host, keep your public, private and presence channel code, and your WebSocket traffic terminates in the EU.

EU-hosted in Helsinki · GDPR-native, DPA included · free during the beta, no fixed end date

Why switch

Realtime code spreads across the browser, mobile clients, backend publishers and private-channel auth endpoints. Replacing every client library is expensive and risky. MOJAQ takes the compatibility route: keep the Pusher protocol and the libraries you already use, then point them at an EU host.

Realtime messages often include account IDs, document names, chat text, presence metadata and order or deployment state. MOJAQ terminates those connections in the EU and handles data in Helsinki, with a DPA included and no US transfers, and it is free during the open beta with no fixed end date.

Step by step

  1. Create a realtime app in MOJAQ and copy the key, secret and realtime host. Keep your Pusher app available until you have tested every flow.
  2. Swap the browser client key and host. The Pusher client library stays the same.
    Browser client
    // Before: new Pusher("PUSHER_KEY", { cluster: "us2", forceTLS: true })
    const pusher = new Pusher("MOJAQ_APP_KEY", {
      wsHost: "realtime.mojaq.com",
      wssPort: 443,
      forceTLS: true,
      enabledTransports: ["ws", "wss"],
    });
  3. Keep public, private and presence channels as they are. Channel names, event names and payloads do not change because the endpoint did. Private channels still hit your existing auth endpoint.
    Channels are unchanged
    const ch = pusher.subscribe("private-orders.123");
    ch.bind("order.updated", (e) => render(e));
  4. Update server-side publishing credentials to the MOJAQ app and host, then trigger a known event and confirm connected clients receive it.
    Server publisher
    const pusher = new PusherServer({
      appId: "MOJAQ_APP_ID", key: "MOJAQ_APP_KEY", secret: "MOJAQ_SECRET",
      host: "realtime.mojaq.com", port: "443", scheme: "https",
    });

What carries over

Carries over: Pusher client libraries, public, private and presence channels, event binding, socket IDs, your auth-endpoint pattern and Pusher-style server publishing. What changes: credentials, host or cluster settings, and network termination, which now happens in the EU from Helsinki instead of crossing to the US.

Questions

Do I need to replace pusher-js?

No. MOJAQ speaks the Pusher protocol, so the Pusher client libraries stay in place.

Do private and presence channels work the same?

Yes. Keep the same channel types and auth endpoint, signed with your MOJAQ app credentials.

Is realtime free during the beta?

Yes, including Pusher-compatible realtime apps, with no fixed end date.

Keep your client, change the host

Pusher-protocol realtime, terminated in the EU. Free during the beta.

Create your free account →