Beta build. Report issues to your operator channel.

← Back to landing

Compare FluxyChat

Positioning for teams evaluating Stream, Ably, Pusher, TalkJS, Firebase, or a DIY Workers stack. FluxyChat is a realtime platform on Cloudflare — chat, agents, streaming, collab, game, IoT, fleet, spatial, and 14 channel adapters in one SDK — MIT self-host or hosted beta, not a helpdesk widget. Pusher alternative guide →

When the Pusher bill catches up

Same story in every thread: the free tier is fine for a demo, then connection and message pricing climbs faster than the app. FluxyChat is not a flat-fee miracle — you still pay Cloudflare — but you can self-host on your account, read the MIT source, and drop a second vendor's connection counter.

  • Try hosted beta first; self-host when pricing starts to matter in the evaluation.
  • One Durable Object per room keeps cost and failure scoped to that room, not one global socket server.
  • D1 history and REST pagination instead of cache-only channel events you stitch back together.
  • Same SDK for hosted and self-host — swap Worker URL and keys, not your client code.

Self-host on your Cloudflare account

A lot of teams shopping Pusher or Ably alternatives ask the same thing: can we run it ourselves? With FluxyChat, yes — that is the default story, not a footnote in the pricing page.

  • Deploy apps/worker and run D1 migrations on your Cloudflare account (MIT monorepo).
  • Same console and @fluxy-chat/sdk as hosted beta; you wire Clerk and Stripe if you want them.
  • JWT tenants, webhooks, GDPR export, and message middleware all run on your Worker.

In-app realtime platform, not a support desk

Most live-chat listicles are written for support teams: inbox, macros, CSAT. FluxyChat is for realtime inside your product — tenant rooms, SDK embed, streaming, collab, game, IoT, fleet, spatial, and agent events on the same timeline. Wire Salesforce or HubSpot through your own integration layer; we handle the room kernel.

  • Helpdesk products sell ticketing and agent assignment. We sell transport, history, JWT rooms, platform modules, and webhooks.
  • User messages and agent tool_call / tool_result share one WebSocket stream, so you can replay what happened.
  • Stream, collab, game, IoT, and fleet modules reuse the same Worker — not a patchwork of vendor SKUs.

Product chat vs support desk guide →

Walkthrough on Dev.to

Architecture, RoomDurableObject, SDK reconnect, and self-host steps How to Build a Realtime Chat App on Cloudflare Workers (Without Managing a Socket Fleet).

One platform, not a patchwork of SKUs

Pusher and Ably excel at pub/sub channels. Stream bundles chat and feeds with separate video products. FluxyChat ships stream, collab, game, IoT, fleet, and spatial modules on the same Worker and room kernel — so you are not stitching five vendor bills for one product experience.

Chat layer, not full BaaS

If you need auth, RBAC, uploads, and AI in one mega-starter, a full Cloudflare framework may fit. If the product is tenant-scoped in-app messaging with history and operator tools, FluxyChat is the slice. What we are not →

Build vs buy

Pusher vs Socket.IO is really build vs buy. FluxyChat is the middle path: one realtime platform (chat, agents, stream, collab, game, IoT, fleet, spatial, 14 channels) with less ops than rolling your own socket cluster and more control than a closed channels vendor.

Managed chat APIs

Side-by-side with Portal (chat-first DX benchmark), Stream, Ably, and Pusher. Rows are factual — check each vendor's current docs before you buy.

CapabilityPortalStreamAblyPusherFluxyChat
Edge-native (Cloudflare Workers + DO + D1)Managed SaaS — not Workers/DO-firstManaged cloudManaged cloudManaged cloudDesigned for Workers + DO + D1
Multi-platform adapters (14 platforms)Web/React SDK — not 14 channel adaptersLimited / separate productN/AN/ASlack, Discord, Telegram, WhatsApp, Teams, +9 — unified interface
AI-native streaming (markdown, tool calling)Core — streaming agents + tool callsAdd-on / separate productN/AN/AStreaming markdown, tool_call/tool_result, HITL approval
MCP client integrationMCP apps / tool server integrationsN/AN/AN/AConsume any MCP tool server — auto-convert to function-calling
LLM middleware pipelineMiddleware hooks in SDKN/AN/AN/AwrapGenerate / wrapStream / transformParams — guardrails, RAG, PII
Durable agent execution (WorkflowAgent)Hosted agent runtimeN/AN/AN/APersists to D1, survives deploys, auto-resume from last step
In-app chat + operator consoleHosted Portal dashboardSeparate product areasConsole + APIsChannels dashboardFirst-party console in monorepo
Headless SDK (optimistic sends, reconnect state)Excellent DX — package split, SSR-safe hooksStrong SDKsStrong SDKsChannels SDKs@fluxy-chat/sdk + vanilla store
Agent tool events on room WebSocketSame room timelineVariesSeparate productsN/Atool_call / tool_result on same timeline
Message templates + member preferences APITemplates + member prefsVariesN/ALimitedPOST /templates, member prefs PATCH
Reconnect, replay, and delivery state in SDKconnectionState + replay patternsSDK features varySDK features varyChannels SDKconnectionState, loadMore, clientMessageId idempotency
Read receipts / unread badgesInbox + read watermarksProduct features varyVaries by productNot first-class in ChannelsmarkReadLatest + room list unread in SDK/console
In-app notifications (mentions, DMs)Unified inbox feedSeparate notification productsSeparate productsBeams (separate SKU)REST + SDK useNotifications on same Worker
Message middleware (validate / filter / enrich)Server-side hooksVariesN/AWebhooks onlyEdge pipeline before persist + broadcast
Unified room WebSocket (chat + server_event + capability)Chat timeline onlySeparate channel productsPub/sub channelsChannels onlyOne WS: messages, game/IoT/live/fleet/poll fan-out, vertical capability events
Live streaming & broadcast (HLS, polls, highlights)Not core (chat-first product)Video product / add-onSeparate live productChannels only (no HLS stack)FluxyStream: events, broadcast, polls, AI co-host on same Worker
Real-time collab (Yjs / CRDT whiteboard)Not coreFeeds / activityPub/sub channelsN/ACollab DO adapter + Excalidraw/Yjs in SDK
Game multiplayer (matchmaking, replay, NPC)N/AN/AN/APresence onlyFluxyGame: lobbies, authoritative ticks, D1 leaderboard
IoT & device sync (MQTT, shadow, rules)N/AN/AIoT messaging (separate)N/AFluxyIoT: fleets, readings, rules, geofence on Worker
Fleet & live location trackingN/AN/ALocation / maps partnersN/AFluxyFleet: trips, ETA, driver tracking APIs + fleet.gps_update on room WS
Spatial / digital twin roomsN/AN/AN/AN/AScenes + spatial.entity_added fan-out on room WS
Voice + AI transport pipelineVoice varies — chat-first SDKVoice / video add-onsSeparate productsN/AuseVoice (production) + transport fallback on room WebSocket
Cross-channel continuity & customer memoryInbox + continuity focusCRM integrationsN/AN/ACDP graph + journey mapping + A2A tasks on Worker
Pricing surprises at scaleHosted SaaS tiersEnterprise / usage tiersUsage-basedFree tier small; connections add upCloudflare pricing you can read; MIT self-host option
Self-host / on your own accountProprietary cloud — no MIT self-hostProprietary cloudManaged-firstManaged-firstFull MIT monorepo — deploy Worker + D1 in your CF account
Socket fleet / VPS to operateManaged vendor infraManaged vendor infraManaged vendor infraManaged vendor infraNo VPS; one Room DO per room on CF edge
Next.js on Vercel + realtime (typical split)Frontend-agnostic hosted APIManaged cloud + your frontendAbly + Vercel tutorial patternChannels + serverless functionsVercel/Netlify UI + CF Worker chat (no Vercel WS limits)
Omnichannel inbox (mentions, unread, follow-ups)Unified inbox + onItem over user channelSeparate feeds productN/AN/AuseInbox items feed + REST /inbox + console badge
MIT license — read and deploy the full stackProprietary hosted serviceProprietary cloudManaged-firstManaged-firstMIT monorepo — Worker, SDK, console, no vendor lock-in

FluxyChat vs Ably for in-app chat on Vercel

Ably’s Next.js starters own “realtime chat on Vercel” search. FluxyChat is the chat layer on Cloudflare Workers + DO — general pub/sub stays on Ably; tenant rooms, history, and operator tooling stay in FluxyChat. Next.js on Vercel guide →

FluxyChat vs Pusher on Vercel

Vercel documents Pusher as a common path for live features. FluxyChat keeps the socket layer on Cloudflare so you avoid a second vendor SKU and room limits on serverless functions. Full Vercel guide →

FluxyChat vs DIY Durable Objects chat

GitHub examples are excellent teachers; production SaaS usually needs the rows below. Reconnect & hibernation guide →

ConcernDIY DO repoFluxyChat
One Room DO per channel + WS fan-outYou implement accept(), broadcast, and cleanupRoomDurableObject in MIT repo — same pattern, maintained
Multi-thread / multi-tenant chatCustom schema + auth glueProject-scoped JWT, room membership in D1
Chat history + paginationD1/DB layer you designD1 persistence + SDK loadMore()
Reconnect after DO hibernationClient logic you ownconnectionState, retry, SSE/polling fallback
Human + agent on same timelineSeparate pipelinestool_call / tool_result on room WebSocket
Operator console + quotasNot in demo reposDashboard + Worker enforcement

PartyKit vs FluxyChat (SaaS chat)

PartyKit wins collab parties and generic edge realtime. FluxyChat wins when you ship tenant-scoped in-app messaging with history, JWT, and operator tooling — see the PartyKit row in the table below.

Running costs on Cloudflare

Both options ship the same Worker. The Free tier is generous for early apps; the Paid tier scales with usage; self-hosting is just your own Cloudflare bill.

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.

Other approaches on Cloudflare

Common mental models from Reddit and CF threads — when to use something else vs FluxyChat.

ApproachBest forTradeoffFluxyChat angle
Portal (chat-first SDK)Teams optimizing for React DX — SSR-safe hooks, inbox feed, streaming agents, hosted dashboard.Proprietary hosted service — no MIT self-host on your Cloudflare account; broader platform modules (stream, IoT, fleet) are on you.FluxyChat matches Portal on inbox/useInbox, connection UX, and AI timeline — adds MIT self-host, Workers/DO-native deployment, and 14 channel adapters.
PartyKit (+ DO demos on X)Collab sessions, games, generic realtime “party” state — often mentioned beside Durable Objects in builder posts.Not tenant-scoped SaaS chat: no first-class multi-tenant JWT, D1 history ops, billing hooks, or operator console for your product.Pick FluxyChat when buyers need in-app messaging for customers, not a party runtime you extend into a full chat product.
Workers + Upstash Redis (DIY)Teams that want to assemble WS + Redis persistence themselves.You own ordering, reconnect, multi-tenant auth, and ops glue.FluxyChat is the chat layer pre-wired: room DO + D1 + SDK + console.
Firebase / Supabase realtimeGreenfield apps already on that BaaS for auth + DB + everything.Heavier than a chat-only slice if you only need rooms + history.Edge split: static/SSR front + FluxyChat on CF for chat only.
Full Cloudflare app frameworksAuth, RBAC, queues, uploads, AI helpers in one starter kit.Realtime chat is one module among many — scope blur.FluxyChat replaces the chat/realtime slice, not your whole framework.
Vercel WebSockets / PushFlo-style workaroundsTeams that want managed realtime without leaving Vercel’s billing envelope.Still a separate realtime product; WebSocket limits and pricing context on the host remain.Keep Vercel for the app shell; run chat on CF with room-per-DO isolation and one less socket vendor.
DIY WebSockets on Vercel Functions (Rivet-style)Builders assembling their own WS layer on serverless functions.You own connection lifecycle, scaling, auth, and ops — easy to underestimate.FluxyChat removes the DIY socket fleet for SaaS in-app chat; you integrate the SDK.
Ably for Next.js / Vercel live appsGeneral realtime (live dashboards, pub/sub) with strong tutorials for Next.js.Broader than chat: history UI, templates, and tenant operator tooling are on you.FluxyChat is the chat layer (rooms, D1 history, console) on Workers + DO, not generic channels.
Chatsemble (GPL workspace app)Self-hosted team chat + in-room agents + workflows/MCP in one React app (one DO per org, SQLite inside the DO).GPL-3.0; not a headless API — you adopt their product shape or fork the monolith.FluxyChat is MIT chat infrastructure: room-per-DO, D1, SDK, operator console — embed in your SaaS without their UI.
Vask (Pusher-compatible on Cloudflare)Teams wanting Pusher-shaped APIs on CF with “no fan-out fees” positioning.Compare their Pusher-compat surface vs your need for D1 history, agent timeline, MIT self-host console.FluxyChat is room-native chat infra (DO + D1 + SDK), not only channel-compat; evaluate lock-in, webhooks, and operator tooling.
Self-hosted helpdesk (Libredesk-style)Full support desk, ticketing, and customer-facing helpdesk UI.Not a drop-in chat API for your SaaS product’s in-app threads.FluxyChat is infrastructure for your app’s messaging — pair with your own support UI if needed.
Node-RED WebSocket nodesTeams that already orchestrate telco/CRM/call-center logic in flows they operate.You own socket reliability, scaling, and upgrades on your Node-RED runtime — not edge room isolation.FluxyChat when you want room fan-out + history on Cloudflare without maintaining WS infra; Node-RED when flows are the product and alerts are mostly pub/sub.
Stoa Edge (CF-native live state)Self-hosted edge meshes and live state subscriptions on Workers.Not a chat-specific layer (rooms, templates, agent timeline, operator console).FluxyChat for in-app chat and agent events; Stoa-like stacks for broader edge state patterns.

Questions we hear before buying

We deploy on Vercel — can’t we use Vercel WebSockets?
Many teams hit WebSocket limits, pricing, or ops friction on serverless hosts. A common pattern is Vercel/Netlify for the UI and FluxyChat on Cloudflare for room state — no second Pusher bill, no VPS socket fleet.
Do I still need a separate WebSocket vendor?
Not for in-app chat, collab, game, or IoT on Cloudflare: FluxyChat uses Workers + one Durable Object per room. You may still want telco APIs for SMS/WhatsApp or a dedicated SFU for large video rooms.
What about idle rooms and surprise Cloudflare bills?
Room-scoped DOs limit blast radius vs one global socket server. You still need budget alerts, staging tests, and avoiding unbounded write loops into storage — see cost guardrails on /why.
Reconnect and history on refresh?
The SDK exposes connectionState (including reconnecting), REST history pagination (loadMore), and clientMessageId for idempotent retries.
Export and backup?
Self-host: messages live in your D1. Hosted: use GDPR export flows and your own backup policy for D1; you are not locked into a vendor’s message retention UI.
Should I fork a DIY Durable Objects chat repo on GitHub?
Great for learning. For SaaS in-app chat, compare the DIY checklist on this page — FluxyChat ships the same Room DO pattern plus JWT, history, reconnect SDK, and console.
Shared state for humans and AI agents in one room?
FluxyChat streams agent tool events on the same WebSocket as user messages — useful for copilots and agentic SaaS. See /guides/durable-objects-for-chat-rooms.

Cost guardrails, operator console, and DO capacity: /why — cost & architecture

Decision flow

  1. Step 1

    Need SMS/WhatsApp to phones?

    Use a telco API (e.g. Sent) alongside FluxyChat for in-app threads.

    Continue ↓

  2. Step 2

    Need collab/game “party” realtime (PartyKit-style), not product chat?

    Consider PartyKit or generic edge realtime tooling.

    Continue ↓

  3. Step 3

    Frontend on Vercel/Netlify, need realtime without a socket VPS?

    FluxyChat on Cloudflare + your existing frontend host.

    Continue ↓

  4. Step 4

    Need only pub/sub fan-out (no message history UI)?

    Consider Ably/Pusher-style channels.

    FluxyChat fits: rooms, history, presence, agents, stream, collab, game, IoT.

  5. Step 5

    Must run on your Cloudflare account?

    MIT self-host FluxyChat.

    Try hosted beta or self-host — same API shape.