From open chat rooms to team messengers
Build KakaoTalk-grade chat in under an hour
Install one package, write a few lines, and your app has live chat rooms. Crowded rooms and dropped connections are ours to handle, not yours.
- One-line install
- Keep your existing login
- Servers are our problem
$ npm install @kispi/chat
import { createChatClient } from '@kispi/chat'
const chat = createChatClient({
key, token
})
await chat.connect()
const room = chat.roomByKey('lobby')
await room.subscribe()
room.on('messages', render)
await room.send({ text: 'hi everyone 👋' })
Use cases
Any kind of chat you need
Open rooms anyone can join, private rooms by invite, one-on-one DMs, and channels only admins post to. Mix them however your product needs.
Community open chat
Anyone can drop in and talk, and you can show how many people are in the room.
- Public rooms
- Who's online
Support & direct messages
Customer support, marketplaces, dating matches — private talk between two people, with read receipts.
- DMs
- Read receipts
Team messenger
Slack-style invite-only rooms. Side conversations move into threads.
- Private rooms
- Threads
Announcement channels
Like a Telegram channel: admins post, everyone reads. New posts hit your server, so app notifications pick up from there.
- Channels
- Notification hook
Live stream chat
A crowd reacting to the same moment. You can block abuse before it reaches the room.
- Reactions
- Pre-publish check
In-game & in-app chat
Guild chat, party chat, match lobbies. It plugs into the login you already have.
- Private rooms
- Mentions
Features
Everything a chat needs, already here
-
Read receipts & unread counts
Who read what, and an unread count on every room.
-
Typing…
Those little dots that make a chat feel alive.
-
Emoji reactions
Tap to react, and see who reacted with what.
-
Replies & threads
Answer a message in place, or branch off into a thread.
-
Photos & files
Attach photos and files to messages. They stay in the storage you already use.
-
Mentions
@ someone to get their attention.
-
Who's online
See who is in the room right now.
-
Edit & delete
Fix a typo, or take a message back.
-
Filter before sending
Every message asks your server first. Allow it, rewrite it or block it — your rules decide.
-
Notification hook
Every new message hits your server. Send the push from there.
Performance
Easy to add, built to hold up
Built for crowded rooms and flaky networks. One node pushed past 150k frames per second, measured on a dev machine.
150k+
messages delivered per second
52 ms
for 99% of messages to reach everyone
0
connections dropped under that load
Our own load test, September 2026: the chat server, database, Redis and the load generator all on one dev machine (Apple M5 Pro); 1 server, 1 room, 400 people connected, 400 messages sent per second, 30 seconds (157,873 deliveries per second). The load generator hit its limit first, so these are lower bounds.
Drop the connection, lose nothing
A tunnel is fine. The moment the connection is back, the SDK fills in whatever arrived while you were gone.
Before the drop
Back online — a gap is spotted
Filled in automatically
Order never breaks
Hundreds of people can type at once and everyone still sees the same order. Nobody gets their own version.
We run the servers
The engine, the database and the deploys are on our side. Your code looks the same as it did with your first ten users.
A featherweight SDK
TypeScript with zero runtime dependencies. Same code in the browser and on Node.
Getting started
Three steps and you are live
- 1
Create an app in the console
Sign up, create an app, and you get a public key and a secret key. A few clicks.
- 2
Hand out tickets from your server
A few lines that give each signed-in person a chat ticket. Your sign-up and login stay as they are.
- 3
Connect from your app
Connect with the ticket, join a room, and you are done. Send the first message.
The next big messenger? It's your turn.
From creating an app to your first message takes under an hour.