Low-latency delivery via WebSockets with a REST API fallback when needed.
Add real‑time chat to your app in minutes, not months.
Heyyo gives you the primitives you actually need: channels, messages, typing indicators, presence, reactions, and threads — with multi-tenant support baked in.
Everything you expect from modern chat — without building a chat company
Use the hosted platform for realtime delivery and a clean API surface. Keep control over your UX, data model, and product experience.
Native typing events, so your UI feels alive and familiar out of the box.
Online/offline awareness for users and channels — essential for collaboration apps.
Emoji reactions as first-class events (fast, sticky, and easy to render).
Keep conversations organized with parent/child messages and thread-aware UIs.
Built for SaaS: isolate customers, manage access, and scale cleanly across orgs.
Three lines to connect and ship a message
The client uses Socket.IO for realtime and automatically falls back to REST when the socket isn’t connected.
import { HeyyoClient } from "@heyyo/sdk";
const client = new HeyyoClient({ apiUrl: "https://api.yourapp.com", token: "<jwt>" });
client.connect();
await client.messages.send("channel_123", "Hello from Heyyo");
// client.typing.start("channel_123")
// client.reactions.add(messageId, "👍")
A chat product, not a general realtime toolkit
Heyyo focuses on chat primitives and developer ergonomics. You get the features users expect without pulling in a platform that’s optimized for everything except chat.
Ship the chat UI your product needs — with a clean SDK, predictable APIs, and realtime events designed for messaging.
Heyyo
- Messaging-first APIs
- Socket.IO realtime + REST fallback
- React components included
Traditional chat platforms (too much surface)
- Powerful, but heavy to integrate
- Lots of product modes to learn
- Easy to overpay for unused features
General realtime toolkits (not chat-native)
- Great transport layer
- Chat UX still on you
- Higher effort for threads/reactions/presence
Drop‑in components, fully customizable
Use the provider + hooks, or adopt prebuilt components like ChatView, ChannelList, and MessageInput.
import { HeyyoProvider, ChatView } from "@heyyo/react";
export function App() {
return (
<HeyyoProvider
apiUrl={"https://api.yourapp.com"}
token={"<jwt>"}
>
<ChatView channelId={"channel_123"} />
</HeyyoProvider>
);
}
import { ChatView } from "@heyyo/react";
// Includes: ChannelList + MessageList + MessageInput + TypingIndicator + Presence
export function SupportChat() {
return <ChatView channelId={"support"} />;
}
import {
ChannelList,
MessageList,
MessageInput,
TypingIndicator,
UserPresence,
} from "@heyyo/react";
// Build your own layout and styling — use the primitives as needed.
Start with the docs, or explore the interactive demo to see events (typing/presence) in action.