Free chat SDK
A free chat SDK and API, with the limits stated
Most free chat tiers are small, and the first paid plan costs hundreds of dollars a month. GravEx Chat is free at every size, with no card. Here is what is included and what is not.
Competitor figures are from each vendor's pricing page, checked 2026-11-03. Confirm on the vendor page before you decide. More vendors, checked 2026-10-31, are on the comparison page.
// 01
What other free tiers cap
| Service | Free tier | When you outgrow it |
|---|---|---|
| GravEx Chat | No MAU or connection cap through pricing; per-app safety limits | There is no paid plan |
| Sendbird | 1,000 MAU, 20 peak concurrent connections, no overages | Starter: $399/mo ($349/mo billed annually), 5,000 MAU |
| Stream | 1,000 MAU, 100 concurrent connections | Start: $499/mo ($399/mo billed annually), 10,000 MAU |
| Twilio Conversations | The first 200 monthly active users | $0.05 per active user per month from the 201st, plus channel and media fees |
Free tiers are sized for building. A product with real users has to pay. That is fine if you plan for it and a surprise if you do not.
// 02
What you get for free
- Rooms of four types: public, private, channel (anyone reads, only owner and admin write) and dm.
- Threads, quote replies, emoji reactions and mentions.
- Read position and unread counts, typing, presence, and history with no gaps after a reconnect.
- Attachments by URL (you store the files), signed webhooks, and a synchronous before_publish hook for moderation.
- Guest identities for visitors who are not logged in.
- A full data export as NDJSON, any time.
- Docs and this site in Korean and English.
// 03
What you do not get
- No UI kit. The SDK is headless, so you draw the screen.
- The official SDK is JavaScript and TypeScript only. iOS, Android and Flutter clients implement the public REST and WebSocket protocol themselves.
- No push sending. The engine delivers to open connections. For people whose app is closed, receive the webhook and send through FCM, web push or email.
- No file storage, no login and no automatic moderation. The engine opens hooks and you supply the judgment.
- No voice or video.
- A 99.5% monthly target with no credits, one disk snapshot a day (up to 24 hours of data lost in the worst case) and a single region, Seoul.
// 04
Why it is free
Usage is still small, and we improve the engine by running it in real products. Coinsect, EveryMaple and real.gravex.app run on the same engine. As it stands today, Basic is free. Any paid plan or price change is announced at least 90 days before it applies, and a shutdown at least 180 days ahead, with export available the whole time.
// 05
Five minutes to a first message
Your backend signs a token and creates the room. The browser connects and sends.
// backend
import { createChatServer } from '@kispi/chat/server'
const chat = createChatServer({ secretKey: process.env.CHAT_SECRET_KEY })
await chat.rooms.ensure({ key: 'lobby', type: 'public' })
const token = chat.token({ userId: '42', name: 'Mina' }) // send it to this user
// browser
import { createChatClient } from '@kispi/chat'
const client = createChatClient({ key: PK, token: () => fetchToken() })
await client.connect()
const room = client.roomByKey('lobby')
await room.subscribe()
room.on('messages', render)
await room.send({ text: 'Hello' })Prefer not to type it? Give your AI tool the llms.txt address and one account key, and it creates the app, issues the keys and wires up a first room.
// FAQ
Questions
- Is there a catch?
- The trade-offs are the list above. One operator, GravEx, runs it in one region with a 99.5% target and no credits. If you need a contractual SLA, compliance certifications or native SDKs, a larger vendor fits better.
- Does the free plan have message or usage limits?
- Pricing sets no cap. Each app has default safety limits: 5 publishes per second per user (burst of 10), 4,000 characters per message, 10 attachments per message and 10 concurrent connections per user. You can see them in the console, and you can ask us to raise them.
- Does it work with React, Vue or Svelte?
- Yes. The SDK has no runtime dependencies and no framework binding. room.messages is a new array on every change, so it drops straight into state that compares by reference, such as Svelte $state.raw, React useState or Vue shallowRef.
- Can I take my data with me?
- Yes. One click in the console, or GET /v1/export with a secret key, downloads every user, room and message as NDJSON.
Keep reading
- Pricing and SLA comparison
- Sendbird alternative
- Sendbird pricing explained
- GravEx Chat pricing
- Start with AI
- Architecture and benchmarks
Sources