Your product is a room
Humans and agentsin the same room.
Chat, live presence, a shared document, and an agent on the same Durable Object. Public rooms use a pk_ in the browser. Self-host is MIT. Hosted is still beta.
pnpm add @fluxy-chat/reactYour app
Live preview
Chat and agents first. Location, stream, collab, game, IoT, and Bridges run on the same Worker if you turn them on.
Try it right now.No signup required.
Jump into a live room with an AI agent. Ask questions, test real-time messaging, see how Durable Objects work. Everything runs on Cloudflare's edge network.
Try the product, then copy the scaffold
These are the gallery apps. Drag the cursors. Invoke an agent. Flick a sensor. Times assume you already have a Worker URL and a room.
npx @fluxy-chat/create-fluxy-chat@latest my-cursors --example live-cursorsMove here. Your pointer is the orange one. Sam follows on the same room.
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.
Bridges
Slack, Discord, Telegram, WhatsApp, Teams: you create the vendor app. Same channel_configs table, not a finished helpdesk.
Agents in-room
invokeAgent streams on the same timeline as chat. Copilots do not write the timeline.
One room DO
Chat, sendCursor, Yjs, HTTP ingest, invokeAgent. A second binary WebSocket only if you mount Yjs.
WorkflowAgent
Optional D1-backed agent steps on the Worker. Not required for invokeAgent.
Voice signaling
joinVoiceStage is a roster. Live audio is LiveKit. Clips are POST /messages/voice.
MIT self-host
Deploy the Worker + D1 in your Cloudflare account. Read every line of source.
Built for rooms that stay live
Chat, collab, and broadcast on one kernel
Same Durable Object room for messages, presence, and server events. Photos are product scenes, not a second stack.
Messaging basics, on the edge
Channels, presence, mentions, and webhooks without bolting on another realtime vendor. Tap or hover a row on desktop.
Rooms, presence, typing, delivery, polls, and invokeAgent on one Durable Object. Translation and your chrome stay in the product.
What ships in the box
Edge delivery, in-room agents, Bridges you wire yourself, and a console for day-two work. You own the UI. We run the room Durable Object.
Chat, presence, Yjs, and an agent sit on one Durable Object. Hosted is beta. Self-host is MIT. Pusher is transport. Liveblocks is the document. Stream is consumer chat.
- One room Durable Object: chat, sendCursor, Yjs, invokeAgent, HTTP ingest
- Guest session or pk_ for public rooms; fc_ stays on the server
- fluxy.config onPublish plus hosted D1 overlay (no forked Worker)
- Bridges: you create Slack/Discord/Telegram apps on the same table
- Voice signaling (joinVoiceStage); media is LiveKit
- GDPR export/erasure on the Worker
- Named SDK errors (not_member, token_expired, anonymous_not_allowed)
- Open beta hosted. Pin npm versions.
Already set up? Open the console for rooms, agents, and billing.
Built-in architecture
Bridges
Slack, Discord, Telegram, WhatsApp, Teams: you create the vendor app. Same channel_configs table.
Streaming markdown
Table buffering, code fence tracking, inline marker healing for clean partial renders during AI streaming
invokeAgent
Agents on the same room timeline. Copilots do not write the timeline.
pk_ + guest
Publishable keys and joinPublicRoomAsGuest. fc_ stays on the server.
Middleware pipeline
Transform messages and AI responses before they land
Moderate, validate, enrich, and fan out from the edge. LLM middleware supports guardrails, caching, RAG injection, PII redaction, and logging via wrapGenerate / wrapStream / transformParams. Policy code stays on the data path, not in a sidecar you forget to deploy.
Developers
SDK, CLI, docs, and console in one repo
Auth, rooms, and retries sit behind hooks and route handlers. Scaffold a new project with create-fluxy-chat CLI. When you need keys, quotas, or billing, open the operator UI instead of wiring another admin surface.
Where teams start
Live verticals, voice, and the server event bus
Polls, breakouts, stage go-live, collab CRDT, fleet GPS, and hybrid check-in fan out as server_event frames on the room WebSocket. Voice AI, streaming AI, MCP tools, and durable agents sit on the same worker.
Slack, Discord, Telegram, WhatsApp, Teams. You create the vendor app. Bindings live in one Worker table.
Modules on the same Worker
Marketplace, Web3, FluxyEdu, stream, game, IoT, and the chatbot builder are in the console sidebar.
- production01
App Marketplace
Publish and install apps with signed manifests, scoped grants, and tenant installs.
Open - production02
Cross-Channel Continuity
One identity across web, mobile, voice, and bot — handoff without dropping the room.
Open - production03
Spatial & Digital Twins
3D room scenes, entities, agent grants, and spatial presence on the same kernel.
Open - production04
Web3 Chat
Wallet authentication, token-gated rooms, and on-chain message commitments.
Open
Also on the same worker
Realtime SDK
Chat, presence, Yjs, and agents in one room
Start with useChat. Add cursors, Yjs, polls, HTTP ingest, and invokeAgent on the same Durable Object. Voice media is LiveKit. Bridges are console rows you wire yourself.
Ship a chat feature in an afternoon.
Rooms, presence, threads, and reactions on one Durable Object. Vertical events (polls, breakouts, stage live) arrive on the JSON socket via onServerEvent. Yjs, if you need it, is a second binary connection to the same object.
const { messages, sendMessage } = useChat({
roomId: "chat:room-42",
client,
onServerEvent: (ev) => {
if (ev.name === "edu.poll.created") showPoll(ev.data);
},
});
sendMessage("Hello from FluxyChat");Ship Squad
Leo: on it, adding you now.
Dana Ortiz
sounds great, will ping...
Design Circle
Wren: fresh comps up...
Leo Martins
You: deployed to staging
FluxyCollab
Everything teams need to build together
Whiteboard, kanban, documents, spreadsheets, and AI, all synced in real-time via CRDT. No save button required.
FluxyStream
Live streaming with real-time chat
Room chat and polls ship in the product. For live video, bring LiveKit or Cloudflare Stream. FluxyChat is not an SFU, RTMP ingest, or OBS plugin.
Live video broadcast
Bring LiveKit or Cloudflare Stream for the media plane. FluxyChat is the room, not an SFU.
Chat overlay
Integrated FluxyChat room inside the player. Viewers chat, react, and engage in real-time.
Polls & quizzes
createPoll and votePoll on the same room timeline. Anonymous ballots via POST /polls.
AI moderation
Automated content moderation powered by DLP and AI agents. Keep chat clean at scale.
Virtual gifts & tipping
Viewers send virtual gifts with physics animations. Stripe-powered tipping for creators.
AI highlights
Automatic highlight reels generated from chat spikes, reactions, and viewer sentiment.
Enterprise default
The room Cloudflare Agents will not ship
Cloudflare Agents give you a Durable Object. FluxyChat is the room other orgs can join: private terms, quorum on the dangerous tools, a group cipher and a signed export. E2EE only if you keep the key. We never see it.
Cross-org rooms
Two companies, one room, private terms and settlement. Not a Cloudflare Agents class.
Critical-action quorum
High-risk tools and decisions wait for a binding ack from the humans who own the room.
E2EE envelope + attestation
Group cipher for the payload. Signed conversation export any auditor can verify offline.
- Cross-org rooms, private terms, and settlements
- Critical-action quorum on the same WebSocket as chat
- Group cipher and signed export. E2EE only if you keep the key.
- Room SQLite PITR (30-day bookmarks, restore on next wake)
- SSO / SAML & SCIM provisioning
- Audit logs, retention, legal hold, GDPR export
- Per-tool HITL gates and OpenTelemetry gen_ai spans
Walk the operator path in the cross-org console, room insights, and enterprise default story.
How we compare
Not a feature shootout: rough fit vs Stream, Ably, Pusher, and DIY DO repos. Full compare · Leaving Pusher.
MCP, WorkflowAgent, FCM, PITR UI, and Bridges OAuth are not this table. Kernel first. Spatial, IoT, and Stream have their own docs.
| Capability | Typical stream APIs | Typical Ably-style | Typical Channels (Pusher-style) | Fluxychat |
|---|---|---|---|---|
| Unit of value | Consumer chat SaaS | Pub/sub network | Pub/sub channels | The room: chat, presence, Yjs, invokeAgent on one Durable Object |
| pk_ in the browser (public rooms) | Usually user tokens | Token auth typical | Public channels | Yes: publishableKey + POST /tokens/anonymous. fc_ stays on the server |
| MIT server you can fork | No | No | No | Yes. Worker + D1 in your Cloudflare account |
| Chat history + pagination | Yes | Chat add-on / extra SKU | Cache-ish events | D1 + useChat loadMore |
| First-class live cursors | No | Spaces (partial) | No | sendCursor / type cursor. Not client_event |
| Yjs / shared document | No | Spaces Yjs coming soon | No | FluxyYjsProvider on the same room object |
| Agent on the room timeline | GenAI add-on | AI Transport (network) | No | invokeAgent writes chat messages |
| Polls / anonymous ballots | Varies | DIY | DIY | createPoll / votePoll + POST /polls isAnonymous |
| HTTP device ingest | No | MQTT / IoT messaging | No | POST → iot.reading / fleet.gps_update. iotAutoAgentId can invoke without @mention |
| Config without forking the server | Dashboard rules | Capabilities | Channel rules | fluxy.config.ts + pnpm fluxy:deploy (rooms, deny, extension slots). Callbacks on self-host |
| Inbox realtime socket | Notification feeds | Push / channels | User channels / Beams | GET /ws/inbox (connectInbox). Same User DO as /ws/user/:id; inbox_updated only |
| Nested chat threads | Channel threads | DIY | DIY | parentId lens (useThread), GET /rooms/:id/threads + nextCursor, inbox kind thread |
| Room / channel extension snapshots | Custom | Channel state | No | GET/PUT /rooms/:id/extensions (kv|counter, max 5, 16 KiB). Hosted: declared kinds, no eval |
| Time to first public message | Dashboard + user tokens | SDK + keys | SDK + keys | FluxyRealtimeProvider + publishableKey + useChat({ roomId }) |
| Voice / live video media | Separate Video SKU | No SFU | No | joinVoiceStage signaling. Media is LiveKit. Not an SFU |
| Hosted maturity | SLA on paid tiers | Enterprise SLA / HIPAA BAA | Enterprise-select SLA | Open beta. Pin npm. Written SLA only with a signed MSA |
Pricing
One plan covers chat, AI agents, webhooks, and platform modules. Undercuts Pusher and Ably on message quotas. Starter at $20/mo vs Pusher Startup at $49/mo for similar traffic.
Console routes can require a one-time ack on your dashboard host. Billable usage still needs your Worker credentials.
Self-serve checkout today
Free includes 200,000 messages, 5,000 agent invokes, and 50,000 webhook deliveries /mo. Pro raises each to 10× for $50/mo, ideal for production rooms with active agents.
Free
Weekend plan. No card. pk_ in the browser.
- 200,000 messages / month
- 5,000 agent invokes / month
- 50,000 webhook deliveries / month
- Public rooms with publishableKey. Cursors do not count as messages.
- 200k persisted messages and 5k agent invokes per month
- MIT self-host if you want the Worker in your account
- Community support on GitHub
Starter
Production traffic with fixed monthly limits.
- 500,000 messages / month
- 10,000 agent invokes / month
- 100,000 webhook deliveries / month
- Room kernel: chat, presence, Yjs, agents
- 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
Team
Multiple projects, more seats, same compliance posture as Pro.
- 20,000,000 messages / month
- 200,000 agent invokes / month
- 1,000,000 webhook deliveries / month
- 20M messages, 200k agent invokes, 1M webhook deliveries per month
- Up to 5 projects and 5 team seats
- Team member management and RBAC
- Priority support, annual invoicing on request
Growth
B2B SaaS with omnichannel, AI memory, and FTS search.
- 100,000,000 messages / month
- 1,000,000 agent invokes / month
- 5,000,000 webhook deliveries / month
- Multiple projects, omnichannel inbox (base)
- AI memory and full-text search
- Light moderation tooling
- Annual invoicing on request
Sales-led plans for governance and higher limits
Business
Serious teams needing SSO and audit at scale.
- SSO add-on
- Custom domain and higher limits
- Audit export schedules
- Priority support, white-label lite
Enterprise
Regulated and large deployments.
- SCIM. Written SLA only with a signed MSA (not a public uptime number).
- Retention and DLP pack
- Compliance review
- Dedicated support
Is chat end-to-end encrypted?▾
TLS in transit. If you want E2EE, you hold the key. Double Ratchet for private rooms is still on the roadmap.
Why usage-based quotas?▾
Cost tracks messages, AI invokes, and webhook volume. Self-serve plans include fixed monthly quotas; heavy usage can be metered on Growth and above.
Do AI agent invokes count against my quota?▾
Yes. Each plan includes a monthly agent invoke limit. Streaming AI, tool calls, and MCP interactions count as invokes.
Are stream, collab, game, and IoT modules extra?▾
No separate SKU. Platform modules run on the same room and worker. Quotas apply to messages and agent invokes like chat.
Enterprise vs Business?▾
Business is high-limit self-serve with SSO add-on and audit export. Enterprise can add SCIM, DLP, a security review, and a written MSA. There is no public fleet SLO on this page.
What counts as a message?▾
Persisted chat messages (including agent replies on the timeline) and client_event frames that are not client-ephemeral-*. Cursors, typing, and presence_patch do not increment the message quota. Agent invokes are a separate meter. Room ids are not metered.
Is there a hackathon or maker plan?▾
Free is that plan. No card. Public rooms with a pk_ in the client. 200k persisted messages and 5k agent invokes per month. Hosted is beta. Self-host is MIT.
Is hosted production-ready?▾
Hosted is open beta. Pin npm versions. Cloudflare PoP RTT is Cloudflare's, not a FluxyChat SLA. Self-host MIT if you need the Worker in your account today.
Self-host vs hosted?▾
Same worker and SDK. Hosted is fastest to start; self-host gives full control on your Cloudflare account with MIT source.
Need enterprise SSO, VPC-style isolation, or custom SLOs? Email fluxychat@outlook.com.
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 Durable Object. 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. Streaming markdown with table buffering and code fence tracking renders cleanly during AI responses. Guide: /guides/agent-events-same-websocket-stream.
What do Bridges cover?▾
A Bridge is a row in the console. You create the Slack (or Discord, Telegram, WhatsApp, Teams) app, paste the token, and point their webhook at the Worker. Web chat is just a room. We do not ship a 14-channel helpdesk.
What is MCP and how does FluxyChat use it?▾
Model Context Protocol lets your agents consume external tool servers. FluxyChat acts as an MCP client and auto-converts tools to LLM function-calling format. Point your agent at any MCP-compatible server.
Can I add guardrails or RAG to AI responses?▾
Yes. The LLM middleware pipeline supports wrapGenerate, wrapStream, and transformParams hooks. Plug in guardrails, caching, RAG injection, PII redaction, or logging on the edge before responses reach users.
Does WorkflowAgent survive deploys?▾
Yes. WorkflowAgent persists state to D1 after each step. If the Worker restarts or you deploy a new version, the agent resumes from the last completed step.
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. See /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.
What does it actually cost on Cloudflare?
Real numbers, not vague "contact sales" ranges. The free tier is generous; the paid tier scales with usage; self-host is just your Cloudflare bill. No per-connection pricing surprises.
FluxyChat runs entirely on your Cloudflare account. You pay Cloudflare directly no per-seat or per-message markup from us on the self-host path.
| Plan | Monthly messages | D1 reads / day | Cost (USD) | Best for |
|---|---|---|---|---|
| Workers Free | ~3M / mo (100k req/day × 30) | 5M / day | $0 | Hobby · early beta · <1k MAU |
| Workers Paid ($5/mo) | ~300M+ / mo | 25M+ / day | $5 + usage | Growing SaaS · 1k–100k MAU |
| Self-host on your CF account | Unlimited* | Your plan limits | Your plan cost | Enterprise · cost-sensitive · compliance |
* D1 storage cap: 10 GB on the free plan, unlimited on paid. Message fanout uses Durable Object egress see Cloudflare's current pricing for live numbers. Run pnpm run check:pricing to verify your env assumptions match the published rates.
Same SDK on hosted or on your Cloudflare account.
Free has no card. Public rooms take a pk_. Private rooms take a member JWT minted with fc_ on the server. Hosted is beta. Self-host when procurement asks who owns D1.