Skip to content
Use case · Chat

Realtime chat that lands in milliseconds

Public rooms, private DMs, presence indicators, end-to-end encrypted channels — everything you need to ship a chat product, on a Pusher-compatible API hosted in Saudi Arabia.

Presence channels

Know who is online, who is typing, and who joined or left — all synced across every connected client in milliseconds.

Private channels

Server-signed subscriptions mean you control exactly who can join each conversation — using your own auth.

End-to-end encryption

Encrypted channels using your master key — message bodies are opaque to our servers, so even we can't read them.

The code you actually write

Same Pusher protocol — works with every official SDK, unchanged.

Mawjly
import Pusher from 'pusher-js';

const pusher = new Pusher('YOUR_KEY', {
  wsHost: 'ws-sa.mawjly.com',
  cluster: 'sa',
  forceTLS: true,
  authEndpoint: '/api/pusher/auth',
});

// Subscribe to a private chat room
const channel = pusher.subscribe('private-room-42');

channel.bind('chat:message', ({ user, body }) => {
  appendMessage({ user, body });
});

// Track who's in the room
const presence = pusher.subscribe('presence-room-42');
presence.bind('pusher:subscription_succeeded', (members) => {
  setOnline(members.count);
});

Ship your realtime feature today

No credit card. No setup. First 200,000 messages/day free forever.

Start free