Real-time messaging API and SDK for your product. Drop in a widget or go fully headless — 5 lines to a working chat, 23 hooks for a custom UI.
No credit card required · Free tier with 1,000 MAU forever
Support Chat
Online
Hey! How can I help you today?
10:32 AM
I need help setting up the SDK
10:33 AM
Sure! I'll walk you through it. 🚀
10:33 AM
5 lines of code
to a working chat
npm install to live chatUse your existing user database. Sign a JWT on your backend, pass it to the SDK, and chat works. No user migration, no separate auth system.
Install the SDK
npm install @opiniom/react
Sign a JWT
HS256-sign your user's ID on your backend, pass it to the SDK
Render or go headless
Use <ChatWidget /> for instant UI, or hooks for a fully custom design
import { OpinioMProvider, ChatWidget } from '@opiniom/react';
function App() {
return (
<OpinioMProvider
projectKey="ok_live_your_key"
jwt={userJwt}
>
<YourApp />
<ChatWidget /> {/* That's it. Chat is live. */}
</OpinioMProvider>
);
}Every feature below is handled by OpinioM's backend. You write zero infrastructure code.
Messages arrive over a persistent WebSocket. Optimistic UI updates show messages instantly before server confirmation.
Use the pre-built widget for quick setup, or go fully headless with React hooks to build any UI you need.
React hooks, Lit web components, or vanilla JS. Works with Next.js, Vue, Svelte, and any stack that runs JavaScript.
No separate user database. Sign a JWT with your existing users and OpinioM handles the rest. Zero migration needed.
React to chat events in your backend. HMAC-signed webhook delivery with automatic retries and a delivery log.
Message volume, active users, and conversation metrics — aggregated daily with CSV export.
Your customers' apps are unique — their chat should be too. OpinioM gives you the real-time engine; you decide what it looks and feels like.
Embed a support widget in your app. Customers message your team directly — no Zendesk or Intercom needed.
Buyers and sellers chat about orders. You control who can talk to whom — OpinioM handles real-time delivery.
Team chat, project discussions, or collaborative workspaces. Groups, channels, and DMs out of the box.
Security, reliability, and compliance from day one.
Secrets encrypted at rest, JWTs signed with HS256
Redis-backed WebSocket with exponential backoff
Data erasure endpoint, no third-party data sharing
Socket.io Redis adapter for horizontal scale
TypeScript-first. Every hook, every event, every response is fully typed. No runtime surprises, no "any" types, no guessing at payload shapes.
// Every hook returns typed data + loading/error state
const { messages, loadMore, hasMore } = useMessages(convId);
const { send, isLoading, error } = useSendMessage(convId);
const { onKeystroke, stopTyping } = useSetTyping(convId);
const typingUserIds = useTyping(convId); // string[]
const presence = usePresence(userId); // "online" | "away" | "offline"
const unread = useUnreadCount(); // number
const reactions = useReactions(messageId); // { "👍": ["user_1"] }
// Actions return loading + error — no manual state management
const { upload, isLoading } = useUploadFile();
const { create } = useCreateConversation();
const { edit } = useEditMessage(convId);
const { remove } = useDeleteMessage(convId);
const { addReaction } = useAddReaction();Start with 1,000 monthly active users — no credit card, no time limit. Upgrade when you're ready.
Sendbird and Stream are built for enterprises. OpinioM is built for the rest of us.
| Feature | OpinioM | Sendbird | Stream | TalkJS |
|---|---|---|---|---|
| Free tier MAU | 1,000 | 1,000 (30d trial) | 2,000 | 500 |
| Paid entry price | $49/mo | $399–499/mo | $499/mo | $199/mo |
| MAU at entry price | 10,000 | 1,000 | 1,000 | ~5,000 |
| Headless / hooks SDK | ✓ Full | Partial | Partial | ✕ |
| No "contact sales" | ✓ | ✕ | ✕ | ✓ |
| Bundle size (gzipped) | 35 KB core | 100 KB+ | 80 KB+ | 60 KB+ |