Room chat on Cloudflare · self-host or hosted
Ship in-app chattoday.
Sign up, add @fluxy-chat/sdk, and run rooms on hosted cloud. Or deploy the Worker in your Cloudflare account from the monorepo. Next can stay on Vercel; chat runs on Workers and Durable Objects.
Chat infrastructure inside your product, not a helpdesk. Compare vs Pusher/Ably · Why we built it · Vercel without Pusher · Product chat vs support.
Works with npm and yarn too — same package name @fluxy-chat/sdk.
Your app
Live preview
The same hooks power your production UI: wire the client once, then iterate on layout and copy — the preview mirrors the room your users join in your app.
Deploy in your account. Quotas live in D1. Console access can require a one-time ack — usage still runs through your Worker with your keys.
Edge-first
Pay Cloudflare for the edge slice, not a second realtime vendor and not a socket VPS.
Hooks + REST
Build UI with @fluxy-chat/sdk. Manage keys and quotas in the dashboard.
Multi-tenant
Many projects and rooms on one deployment, with per-project billing hooks.
Messaging basics, on the edge
Tap or hover a row on desktop. Channels, presence, mentions, and webhooks without bolting on another realtime vendor.
Threads, polls, and translation are up to your product layer. Fluxychat ships the realtime core.
From blank repo to live threads
Install, connect, hooks, live messages — loops below and pauses when you scroll away.
Step 1
Install
One dependency. No native binaries, no sidecar.
Step 2
Point at your edge
Worker URL + scoped JWT — the client never sees admin keys.
Step 3
Open a room
Hooks subscribe, send, and reconcile — you keep your UI primitives.
Live
Ship the inbox
Typing, delivery, and history — already moving on the wire.
What ships in the box
Edge delivery, clear quotas, and a console for the day-two work. You own the UI; we handle rooms, delivery, and ops hooks.
Already set up? Open the console for rooms, agents, and billing.
Runs on your edge
WebSockets and Durable Objects handle presence, typing, and delivery. No socket fleet to babysit.
GDPR tools included
Export, erasure, audit trails, and signed webhooks when you need to answer security questionnaires.
Humans and agents, one stream
Tool events sit on the same room WebSocket as user messages. You debug copilots without a second realtime pipe.
Middleware
Transform messages before they land
Moderate, validate, enrich, and fan out from the edge. Policy code stays on the data path, not in a sidecar you forget to deploy.
// hooks run on your Worker before delivery — policy stays on the edge.
Developers
SDK, docs, and console in one repo
Auth, rooms, and retries sit behind hooks and route handlers. When you need keys, quotas, or billing, open the operator UI instead of wiring another admin surface.
Where teams start
Pricing
Monthly limits for messages, agent invokes, and webhook deliveries. Each project stores enforcement in D1.
Console routes can require a one-time ack on your dashboard host. Billable usage still needs your Worker credentials.
Free
Try the stack without a card.
- 50,000 messages / month
- 1,000 agent invokes / month
- 10,000 webhook deliveries / month
- SDK and dashboard access
- Help via GitHub issues
- One project, fair-use limits
- Upgrade without migrating data
Starter
Production traffic with fixed monthly limits.
- 500,000 messages / month
- 10,000 agent invokes / month
- 100,000 webhook deliveries / month
- Higher quotas than Free
- Signed webhooks with retries
- GDPR export and erasure endpoints
- Email support (best effort)
Pro
Heavy rooms, agents, and webhook volume.
- 5,000,000 messages / month
- 100,000 agent invokes / month
- 1,000,000 webhook deliveries / month
- 5M messages, 100k agent invokes, 1M webhook deliveries per month
- Priority support
- Custom retention and audit (contact us)
- Annual invoicing on request
Need enterprise SSO, VPC-style isolation, or custom SLOs? Email fluxychat@outlook.com.
Message lifecycle you can show users
Per-message delivery state, connection UI with scheduled reconnect, and transport fallback when WebSockets drop.
deliveryStatusconnectionStatenextRetryAt- WS → SSE → polling
Pending
Optimistic bubble in UI
Sent
Server ack + WS fan-out
Failed
Retry via clientMessageId
connectionState example
{
status: "reconnecting",
retryAttempt: 2,
nextRetryAt: "2026-05-20T12:00:03.000Z",
transport: "websocket"
}Render "Reconnecting in 3s…" without custom timers
How we compare
Not a feature shootout — rough fit vs Stream, Ably, Pusher, and DIY DO repos. Full compare · Leaving Pusher.
| Capability | Typical stream APIs | Typical Ably-style | Typical Channels (Pusher-style) | Fluxychat |
|---|---|---|---|---|
| Edge-native (Cloudflare Workers + DO + D1) | Managed cloud | Managed cloud | Managed cloud | Designed for Workers + DO + D1 |
| In-app chat + operator console | Separate product areas | Console + APIs | Channels dashboard | First-party console in monorepo |
| Headless SDK (optimistic sends, reconnect state) | Strong SDKs | Strong SDKs | Channels SDKs | @fluxy-chat/sdk + vanilla store |
| Agent tool events on room WebSocket | Varies | Separate products | N/A | tool_call / tool_result on same timeline |
| Message templates + member preferences API | Varies | N/A | Limited | POST /templates, member prefs PATCH |
| Reconnect, replay, and delivery state in SDK | SDK features vary | SDK features vary | Channels SDK | connectionState, loadMore, clientMessageId idempotency |
| Read receipts / unread badges | Product features vary | Varies by product | Not first-class in Channels | markReadLatest + room list unread in SDK/console |
| In-app notifications (mentions, DMs) | Separate notification products | Separate products | Beams (separate SKU) | REST + SDK useNotifications on same Worker |
| Message middleware (validate / filter / enrich) | Varies | N/A | Webhooks only | Edge pipeline before persist + broadcast |
| Pricing surprises at scale | Enterprise / usage tiers | Usage-based | Free tier small; connections add up | Cloudflare pricing you can read; MIT self-host option |
| Self-host / on your own account | Proprietary cloud | Managed-first | Managed-first | Full MIT monorepo — deploy Worker + D1 in your CF account |
| Socket fleet / VPS to operate | Managed vendor infra | Managed vendor infra | Managed vendor infra | No VPS; one Room DO per room on CF edge |
| Next.js on Vercel + realtime (typical split) | Managed cloud + your frontend | Ably + Vercel tutorial pattern | Channels + serverless functions | Vercel/Netlify UI + CF Worker chat (no Vercel WS limits) |
FAQs
Questions we hear when teams compare hosted chat APIs and edge deployments.
What is the chat API vs the SDK?▾
Your backend talks to the Worker over HTTP. The browser uses @fluxy-chat/sdk to join a room, send, and render. Same product, two surfaces.
Can I keep the frontend on Vercel?▾
Yes. Lots of teams leave Next on Vercel or Netlify and run chat on Workers + Durable Objects. You skip the platform WebSocket limits and a second Pusher-style bill.
Is this Intercom, Zendesk, or a live-chat widget?▾
No. Those are support desks. FluxyChat is the room layer for chat inside your app — SDK, webhooks, agent timeline. You build the UI. Guide: /guides/in-app-chat-vs-support-desk.
Is this a Pusher or Ably replacement?▾
For tenant-scoped in-app chat on the edge, usually yes: rooms, history, reconnect, operator tools. For generic pub/sub or SMS/WhatsApp, keep those products and use FluxyChat for the chat slice.
How is this different from a fully managed vendor?▾
You can run the Worker and D1 in your Cloudflare account, read the MIT source, and control upgrades. Hosted cloud is there when you do not want to wire infra on day one.
Can I add moderation and webhooks?▾
Yes. Middleware on the edge, signed webhooks, and console pages for the boring admin work.
What are Durable Objects for chat?▾
Cloudflare puts shared state in a DO — chat rooms are the textbook case. FluxyChat uses one Room object per room and D1 for history. Guide: /guides/durable-objects-for-chat-rooms.
Humans and AI agents in the same room?▾
tool_call and tool_result ride the same WebSocket as user messages, so you replay one timeline instead of guessing what the agent did. Guide: /guides/agent-events-same-websocket-stream.
I finished Cloudflare's chat tutorial — now what?▾
That tutorial is the right start. FluxyChat adds JWT, D1 history, reconnect in the SDK, and a console — /guides/after-cloudflare-chat-tutorial.
Why not stay on Pusher?▾
You might not need to. Edge pricing you can read, self-host on your account, no socket VPS fleet. Compare at /compare.
Where should I start?▾
Run the quickstart for a JWT and first room, or read /guides if you are still picking between DIY Workers chat and a packaged layer.
Does a public dashboard mean anyone can spend my quota?▾
No. Billable calls need your JWTs and API keys. Turn on DASHBOARD_ACCESS_MODE=ack (and optional CONSOLE_GATE_SECRET) so console routes need a one-time ack first.
Read the guides
Auth, SDK setup, and self-host notes are on /docs. After sign-up, the quickstart wizard walks you through JWT and your first room.