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