Beta build. Report issues to your operator channel.
NewPublic rooms: put a pk_ in the client →

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/react
Self-host on WorkersMITHosted is beta

Your app

Live preview

app/chat/page.tsx
support-room
Live
PT
Write a message…

Chat and agents first. Location, stream, collab, game, IoT, and Bridges run on the same Worker if you turn them on.

Live Playground

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.

Works with stacks you already use

One SDK across common frontends and runtimes. Fork the repo when you want full control.

Next.jsReactViteNodeWorkersReact NativeRemixTanStackExpressFastify
Next.jsReactViteNodeWorkersReact NativeRemixTanStackExpressFastify

Featured on

Fluxychat on Product Hunt: realtime chat API on Cloudflare, hosted or self-hostFluxychat badge (SaaSHub approved)Check out Fluxychat at SideProjectors

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

In-app chat with an agent

The agent writes on the same WebSocket as your users. Tool calls show up in the timeline. If you want a copilot panel, that is separate UI and it does not write the room log.

Bridges

Create the Slack, Discord, Telegram, WhatsApp, or Teams app yourself. Paste the token in the console and point the webhook at the Worker. SMS to phones still needs a telco.

Export, erasure, webhooks

GDPR export and erasure run on the Worker. Webhooks are signed. We do not sell that as a separate SKU.

Ship without a socket fleet

JWT, the SDK, and a console. You do not have to be the person who keeps WebSockets alive at 3am.

Production ready

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.

Platform extensions

Modules on the same Worker

Marketplace, Web3, FluxyEdu, stream, game, IoT, and the chatbot builder are in the console sidebar.

Chat, collab, live

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");
Open the live SDK demos
Ship Squad3 online
typing
Type your message...

FluxyCollab

Everything teams need to build together

Whiteboard, kanban, documents, spreadsheets, and AI, all synced in real-time via CRDT. No save button required.

Spatial ViewDocumentSpreadsheetFilesAI SummariesExplore all

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.

LIVE

Welcome to the stream everyone! 🎉

8424.2K
Stream chat2.1K viewers
4 more typing...
Type a message...

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, 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.

CapabilityTypical stream APIsTypical Ably-styleTypical Channels (Pusher-style)Fluxychat
Unit of valueConsumer chat SaaSPub/sub networkPub/sub channelsThe room: chat, presence, Yjs, invokeAgent on one Durable Object
pk_ in the browser (public rooms)Usually user tokensToken auth typicalPublic channelsYes: publishableKey + POST /tokens/anonymous. fc_ stays on the server
MIT server you can forkNoNoNoYes. Worker + D1 in your Cloudflare account
Chat history + paginationYesChat add-on / extra SKUCache-ish eventsD1 + useChat loadMore
First-class live cursorsNoSpaces (partial)NosendCursor / type cursor. Not client_event
Yjs / shared documentNoSpaces Yjs coming soonNoFluxyYjsProvider on the same room object
Agent on the room timelineGenAI add-onAI Transport (network)NoinvokeAgent writes chat messages
Polls / anonymous ballotsVariesDIYDIYcreatePoll / votePoll + POST /polls isAnonymous
HTTP device ingestNoMQTT / IoT messagingNoPOST → iot.reading / fleet.gps_update. iotAutoAgentId can invoke without @mention
Config without forking the serverDashboard rulesCapabilitiesChannel rulesfluxy.config.ts + pnpm fluxy:deploy (rooms, deny, extension slots). Callbacks on self-host
Inbox realtime socketNotification feedsPush / channelsUser channels / BeamsGET /ws/inbox (connectInbox). Same User DO as /ws/user/:id; inbox_updated only
Nested chat threadsChannel threadsDIYDIYparentId lens (useThread), GET /rooms/:id/threads + nextCursor, inbox kind thread
Room / channel extension snapshotsCustomChannel stateNoGET/PUT /rooms/:id/extensions (kv|counter, max 5, 16 KiB). Hosted: declared kinds, no eval
Time to first public messageDashboard + user tokensSDK + keysSDK + keysFluxyRealtimeProvider + publishableKey + useChat({ roomId })
Voice / live video mediaSeparate Video SKUNo SFUNojoinVoiceStage signaling. Media is LiveKit. Not an SFU
Hosted maturitySLA on paid tiersEnterprise SLA / HIPAA BAAEnterprise-select SLAOpen 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

$0/mo

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
Create free account
Most teams start here

Starter

$20/mo

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)
Choose Starter

Pro

$50/mo

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
Choose Pro

Team

$99/mo

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
Choose Team

Growth

From $199/mo

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
Choose Growth

or talk to us first →

Sales-led plans for governance and higher limits

Business

From $699/mo

Serious teams needing SSO and audit at scale.

  • SSO add-on
  • Custom domain and higher limits
  • Audit export schedules
  • Priority support, white-label lite
Contact sales

Enterprise

Custom

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
Talk to us
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.

PlanMonthly messagesD1 reads / dayCost (USD)Best for
Workers Free~3M / mo (100k req/day × 30)5M / day$0Hobby · early beta · <1k MAU
Workers Paid ($5/mo)~300M+ / mo25M+ / day$5 + usageGrowing SaaS · 1k–100k MAU
Self-host on your CF accountUnlimited*Your plan limitsYour plan costEnterprise · 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.