diff --git a/src/blog/anycable-vs-socket-io/index.md b/src/blog/anycable-vs-socket-io/index.md new file mode 100644 index 0000000..5e5ae86 --- /dev/null +++ b/src/blog/anycable-vs-socket-io/index.md @@ -0,0 +1,108 @@ +# AnyCable vs Socket.io: built-in reliability vs roll-your-own + +April 1, 2026 +{date} + +
+ +Socket.io is the most popular WebSocket library in the JavaScript ecosystem. It's battle-tested, well-documented, and free. So why would you use AnyCable instead? Because Socket.io doesn't guarantee delivery — and in production, that's the problem that breaks everything else. +{intro} + +
+ +## Socket.io doesn't guarantee delivery + +This is the core difference between the two tools, and everything else flows from it. + +Socket.io provides **at-most-once delivery**. Their own [documentation][socketio-delivery] says it plainly: "if the connection is broken while an event is being sent, then there is no guarantee that the other side has received it." There is no retry, no buffering for disconnected clients, and no catch-up on reconnection. + +AnyCable provides **at-least-once delivery**. Publications are stored in logs. The client tracks its stream position. On reconnection, it automatically recovers every missed message. Your application code doesn't change — you broadcast messages, and every client receives every one of them, even through disconnections. + +This matters more than you think. WebSocket connections are not as reliable as they appear in development. In production, micro-disconnections happen on stable connections, longer interruptions occur during commutes and subway rides, and every server deploy severs active connections. Without delivery guarantees, every one of these events silently corrupts your client state. + +### What this looks like in practice + +**Live chat:** A user enters a tunnel for 3 seconds. Two messages arrive in the group chat during that window. With Socket.io, those messages are gone — the user sees an incomplete conversation. With AnyCable, the client catches up automatically on reconnection. + +**LLM/AI streaming:** You're streaming an AI response word by word. The client briefly loses connection mid-sentence. With Socket.io, the response is truncated or garbled — chunks are lost with no recovery. With AnyCable, every chunk is recovered in order. As we described in our article on [the pitfalls of LLM streaming][llm-streaming], this is a real production problem that breaks AI-powered features. + +**Real-time dashboards:** A monitoring dashboard shows live metrics. A 200ms network blip causes a gap in the data. With Socket.io, that gap is permanent. With AnyCable, the missed data points are recovered and the chart stays complete. + +**Deploys:** You ship code. With Socket.io, every WebSocket connection is severed — every client must reconnect, and any in-flight messages are lost. With AnyCable, the Go-based WebSocket server is a separate process from your application. When you deploy your app, the WebSocket server stays up. Connections are never interrupted. Users never notice a deployment. + +As Doximity engineers [described on the On Rails podcast][doximity-podcast]: + +> "AnyCable allows them to keep that connection open. That Go service stays up, and you can continue shipping your Rails application as normal." + +## A standalone server, not an embedded library + +Socket.io is a library you embed in your Node.js application. It runs in the same process as your business logic, competing for the same CPU and memory. + +AnyCable is a standalone server written in Go. It handles WebSocket connections independently — your application communicates with it via HTTP API. This separation has three consequences: + +1. **Scale independently.** Need more WebSocket capacity? Scale AnyCable. Need more app server capacity? Scale your app. They don't compete for resources. + +2. **Deploy independently.** Ship code to your app without touching WebSocket connections. This is why connections survive deploys. + +3. **Use any backend language.** Socket.io locks you into Node.js. AnyCable works with Rails, Laravel, Node, Python/FastAPI, or any backend that can make HTTP requests. Broadcast a message from any language: + +``` +POST /api/v1/broadcasts +{ "stream": "chat/42", "data": "{\"message\": \"hello\"}" } +``` + +### Why Go for WebSockets + +WebSocket connections are long-lived — a user can hold one open for hours. In Node.js, each connection consumes meaningful memory in the V8 runtime. At 10,000 concurrent connections, this adds up fast. + +Go's goroutine-based concurrency model handles long-lived connections with minimal overhead. AnyCable serves 10,000+ concurrent connections per server using a fraction of the memory that Node.js or Ruby would need. And Go compiles to a single binary — no `node_modules`, no runtime version conflicts. + +## What you don't have to build + +With Socket.io, you get a WebSocket transport and rooms. Everything else is your responsibility: + +| What you need | Socket.io | AnyCable | +|---------------|-----------|----------| +| Reliable delivery | No (at-most-once) | Built-in (at-least-once) | +| Missed message recovery | No catch-up mechanism | Automatic on reconnection | +| Presence (who's online) | Build it yourself | Built-in | +| Authentication | Build your own middleware | JWT, signed streams | +| Pub/sub clustering | Redis adapter (separate setup) | Embedded NATS (zero extra infra) | +| Monitoring | Add your own | Prometheus & StatsD built-in | +| Binary compression | No | Yes (Pro) | +| Deploy resilience | Not possible (same process) | Built-in (separate server) | + +Each of these is weeks of engineering work to build properly, and months to battle-test in production. AnyCable ships them as built-in primitives because we've been doing this since 2017. + +## Proven at scale + +AnyCable has been powering real-time features in production since 2017, for companies like: + +- **Doximity** — telehealth for 80% of US physicians +- **CoinGecko** — cryptocurrency market data at massive scale +- **Jobber** — field service management ($167M revenue) +- **Headway** — mental health therapy ($2.3B valuation) +- **Circle** — community platform ($30M+ raised) +- **ClickFunnels** — sales funnels (~$265M revenue) + +The project is actively developed with regular releases, a dedicated team, commercial Pro support, and a growing ecosystem including [Laravel support][laravel-post], [Pusher protocol compatibility](https://docs.anycable.io/guides/pusher), and the emerging [Durable Streams](https://docs.anycable.io/guides/durable_streams) standard. + +## When Socket.io is the right choice + +To be fair: if you're building a small Node.js app, prototyping, or need full control over a custom protocol, Socket.io is a fine choice. It's well-documented, has a massive community, and is free. + +But if you need delivery guarantees — and in production, you almost certainly do — you'll end up building them yourself on top of Socket.io. AnyCable gives you delivery guarantees, presence, authentication, and scaling out of the box, with any backend language, tested in production by companies serving millions of users. + +## Get started + +- [Documentation](https://docs.anycable.io) +- [Rails getting started guide](https://docs.anycable.io/rails/getting_started) +- [Laravel guide](https://docs.anycable.io/guides/laravel) +- [JavaScript/TypeScript client](https://github.com/anycable/anycable-client) +- [GitHub](https://github.com/anycable/anycable) +- [AnyCable Pro](https://plus.anycable.io/pro) — free 2-month trial + +[socketio-delivery]: https://socket.io/docs/v4/delivery-guarantees +[llm-streaming]: https://evilmartians.com/chronicles/anycable-rails-and-the-pitfalls-of-llm-streaming +[doximity-podcast]: https://podcast.rubyonrails.org/2462975/episodes/17653501 +[laravel-post]: https://evilmartians.com/chronicles/anycable-for-laravel diff --git a/src/compare/index.html b/src/compare/index.html new file mode 100644 index 0000000..4888a42 --- /dev/null +++ b/src/compare/index.html @@ -0,0 +1,289 @@ + + + {{> dochead title="Compare AnyCable vs Socket.io, Pusher, Ably, Action Cable, Centrifugo" description="Compare AnyCable with Socket.io, Pusher, Ably, Action Cable, Laravel Reverb, Django Channels, and Centrifugo. Built-in delivery guarantees, presence tracking, and message ordering for any backend."}} + +
+ {{> header}} +
+ +
+
+
+

Find the Right Real-Time Solution

+

+ Compare AnyCable with other popular WebSocket solutions +

+
+
+
+ + +
+
+

Compare AnyCable with:

+ + + +

More comparisons

+ +
+
+
+

Action Cable

+ Rails +
+

+ Action Cable tops out at ~500 concurrent connections and drops all WebSocket connections on every deploy. AnyCable is a drop-in replacement — zero code changes, 10,000+ connections per server, connections survive deploys. +

+
+
+ 15x less RAM per connection +
+
+ Zero code changes +
+
+
+ +
+
+

Pusher & Ably

+ Managed +
+

+ Pusher and Ably route data through third-party servers — a non-starter for HIPAA, SOC2, and data sovereignty. Pricing grows linearly with connections. AnyCable runs on your infrastructure with flat Pro pricing ($1,490/year unlimited). +

+
+
+ Self-hosted HIPAA compliant +
+
+ Flat pricing +
+
+
+ +
+
+

Centrifugo

+ Go +
+

+ Both are Go-based WebSocket servers with pub/sub. AnyCable has native Rails and Laravel SDKs, Action Cable protocol compatibility, and a managed SaaS option (AnyCable+). Centrifugo uses its own protocol and is self-hosted only. +

+
+
+ Native Rails & Laravel SDKs +
+
+ Managed SaaS option +
+
+
+ +
+
+

Laravel Reverb

+ Laravel +
+

+ Laravel Reverb does not provide delivery guarantees, message ordering, or presence tracking. AnyCable's native Laravel SDK provides all three out of the box, plus embedded NATS for zero-infrastructure clustering. +

+
+
+ Reliable delivery +
+
+ Presence tracking +
+
+
+ +
+
+

Django Channels & FastAPI WebSockets

+ Python +
+

+ Django Channels and FastAPI's built-in WebSocket support give you transport — delivery guarantees, presence, and message ordering are DIY. AnyCable runs alongside your Python app as a standalone server, broadcasting via HTTP API. +

+
+
+ Standalone server +
+
+ HTTP API broadcasting +
+
+
+
+
+
+ + +
+
+

Quick Feature Comparison

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureAnyCableSocket.ioPusher / AblyAction Cable
TypeStandalone server (Go)Library (Node.js)Managed serviceBuilt into Rails
Reliable Delivery✓ Built-in✗ Build your own✓ Built-in✗ No
Presence Tracking✓ Built-in✗ Build your own✓ Built-in✗ No
Missed Message Recovery✓ Automatic catch-up✗ No✓ Built-in✗ No
Backend LanguageAny (Rails, Laravel, Python, Node, HTTP API)Node.js onlyAny (SDK/API)Rails only
Deploy Resilience✓ Connections survive✗ Restart = disconnect✓ Managed✗ Restart = disconnect
Self-Hosted / HIPAA✓ On your servers✓ Self-hosted✗ Third-party servers✓ Self-hosted
Scaling10,000+ per serverVaries (Node.js)Managed~500 per server
Starting PriceFree / Pro $1,490/yrFree (+ infra)From $49/mo (grows with connections)Free (included in Rails)
+
+ +
+

+ 💡 Need help choosing? Each solution has its strengths. + Click through to see detailed comparisons for your specific use case. +

+
+
+
+ + +
+
+

Comparison Tools

+ +
+
+
💰
+

Pricing Calculator

+

+ Estimate your costs across different solutions based on your connection volume. +

+ Try Calculator → +
+ +
+
📚
+

Migration Guides

+

+ Step-by-step guides for migrating from Action Cable, Pusher, or other solutions. +

+ View Guides → +
+ +
+
+

Performance Benchmarks

+

+ Real-world performance data comparing throughput, latency, and resource usage. +

+ See Benchmarks → +
+
+
+
+ + +
+
+

Ready to Try AnyCable?

+

+ Start with open source or try our managed service +

+ +
+
+
+ {{> footer }} +
+ + + diff --git a/src/compare/socket-io/index.html b/src/compare/socket-io/index.html new file mode 100644 index 0000000..a49c9f7 --- /dev/null +++ b/src/compare/socket-io/index.html @@ -0,0 +1,255 @@ + + + {{> dochead title="AnyCable vs Socket.io | WebSocket Server Comparison" description="Compare AnyCable and Socket.io for real-time applications. Built-in reliability, presence tracking, and framework-agnostic architecture vs DIY on Node.js."}} + +
+ {{> header}} +
+ +
+
+
+

AnyCable vs Socket.io

+

+ Built-in reliability and high-level primitives vs roll-your-own on Node.js +

+
+
+
+ + +
+
+

The reliability problem

+
+

+ WebSocket connections are not as reliable as they appear. On a real-time scale, connectivity is not that solid and smooth: micro-disconnections happen even on stable connections, longer interruptions occur during commutes and subway rides, and every server deploy severs active connections. Most WebSocket libraries, including Socket.io, give you a transport layer and leave you to solve these problems yourself. +

+
+ +
+
+

Message ordering

+

+ When you broadcast multiple messages to the same client in rapid succession, concurrent threads can deliver them out of order. This is especially critical for AI/LLM streaming, where chunks must arrive sequentially. Socket.io provides no ordering guarantees. AnyCable maintains publication logs with position metadata, ensuring messages always arrive in order. +

+
+ +
+

Missed messages during disconnections

+

+ When a client briefly loses connection — even for a few hundred milliseconds — any messages sent during that gap are lost forever. Socket.io offers automatic reconnection but no catch-up mechanism. AnyCable provides at-least-once delivery: publications are stored in logs, the client tracks its position, and automatically recovers all missed messages on reconnection. +

+
+ +
+

Deploys drop all connections

+

+ When you deploy your Socket.io server, every WebSocket connection is severed and clients must reconnect. For products like video calls, live collaboration, or real-time monitoring, this is unacceptable. AnyCable's Go server stays up during application deploys — connections are never interrupted, and users never notice a deployment. +

+
+ +
+

AnyCable's solution

+

+ AnyCable implements the Action Cable Extended protocol with built-in reliable delivery. Your application code stays the same — broadcast messages one by one, and the client receives all of them in the same order, even through disconnections. No custom retry logic, no client-side reordering, no accumulated state management. +

+
+
+
+
+ + +
+
+

Why a separate WebSocket server

+
+

+ Think of your server as a phone line: HTTP requests are like brief phone calls that come and go. WebSocket connections are like a dial-up modem — they stay connected and consume resources the entire time. When both compete for the same process, WebSockets consume everything. Real-time connections should be serviced and scaled independently from your HTTP application. +

+

+ Socket.io runs inside your Node.js application process, coupling WebSocket handling with your business logic. AnyCable is a standalone server: it handles WebSocket connections independently while your application (Rails, Node, or anything else) handles business logic via gRPC or HTTP. This separation means you can scale, deploy, and restart your application without affecting real-time connections. +

+
+
+
+ + +
+
+

Why Go

+
+

+ WebSocket connections are long-lived — a single user can hold a connection open for hours. In Node.js (Socket.io) or Ruby (Action Cable), each connection consumes significant memory in the runtime. Go's goroutine-based concurrency model handles long-lived connections with minimal memory overhead: AnyCable serves 10,000+ concurrent connections per server using a fraction of the memory that Node.js or Ruby would need. +

+

+ Go also compiles to a single binary — no dependency management, no runtime version conflicts. Deploy AnyCable as a Docker image or a standalone binary alongside your application in any language. +

+
+
+
+ + +
+
+

Why AnyCable

+
+

+ AnyCable is not a new project. It has been in production since 2017, powering real-time features for companies like Doximity (telehealth for 80% of US physicians), CoinGecko (crypto market data), Jobber ($167M revenue field service platform), and 50+ others across healthcare, fintech, and SaaS. +

+

+ The project is actively developed with regular releases (v1.6 is the current stable line, with patch releases every few weeks), a dedicated team, commercial support via AnyCable Pro, and a growing ecosystem including Laravel support, Pusher protocol compatibility, and the emerging Durable Streams standard. +

+
+
+
+ + +
+
+

Feature Comparison

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureSocket.ioAnyCable
TypeJavaScript library (Node.js)Standalone server (Go binary)
ProtocolCustom (not standard WebSocket)Standard WebSocket + Action Cable protocol
Reliable DeliveryBuild your ownBuilt-in with automatic recovery
Missed Message RecoveryNo catch-up mechanismAutomatic recovery on reconnection
Presence TrackingBuild your ownBuilt-in
AuthenticationBuild your own middlewareJWT, signed streams, Action Cable auth
Pub/Sub ClusteringRedis adapter (separate setup)Embedded NATS (zero extra infra)
Backend LanguageNode.js onlyAny (Rails, Node, Laravel, HTTP pub/sub API)
Deploy ResilienceRestart = disconnect all clientsConnections survive app deploys
Memory per 10K connectionsHigh (Node.js runtime overhead)Minimal (Go goroutines)
Binary CompressionNoYes (Pro)
MonitoringAdd your ownPrometheus and StatsD built-in
Open SourceYesYes
In production since20142016
PriceFree (+ infrastructure)Free / Pro $1,490/yr / Managed from $29/mo
+
+
+
+ + +
+
+

Migrating from Socket.io

+
+

+ If you're currently using Socket.io with a Node.js backend, AnyCable's HTTP pub/sub API lets you keep your existing backend and offload WebSocket handling to AnyCable. If you're using Rails, the migration is even simpler — AnyCable is a drop-in replacement for Action Cable. +

+
    +
  • Replace Socket.io server with AnyCable (single Go binary or Docker image)
  • +
  • Use AnyCable's pub/sub HTTP API to broadcast from any backend
  • +
  • Get presence, reliable delivery, and authentication for free
  • +
  • Remove custom reconnection/retry code from your clients
  • +
+ Read the Docs +
+
+
+ + +
+
+

Further reading

+
+ +
+
+
+ + +
+
+

Stop Building Infrastructure

+

+ Get reliable delivery, presence, and authentication out of the box +

+ +
+
+
+ {{> footer }} +
+ + + diff --git a/src/images/hotwire-icon.svg b/src/images/hotwire-icon.svg index 9a73b8b..dfb4c85 100644 --- a/src/images/hotwire-icon.svg +++ b/src/images/hotwire-icon.svg @@ -1,3 +1 @@ - - - +Hotwire diff --git a/src/images/js-icon.svg b/src/images/js-icon.svg new file mode 100644 index 0000000..5856688 --- /dev/null +++ b/src/images/js-icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/images/laravel-icon.svg b/src/images/laravel-icon.svg new file mode 100644 index 0000000..f59012e --- /dev/null +++ b/src/images/laravel-icon.svg @@ -0,0 +1 @@ +Laravel diff --git a/src/images/logos/agero.png b/src/images/logos/agero.png new file mode 100644 index 0000000..1100130 Binary files /dev/null and b/src/images/logos/agero.png differ diff --git a/src/images/logos/agero.svg b/src/images/logos/agero.svg new file mode 100644 index 0000000..5b79d03 --- /dev/null +++ b/src/images/logos/agero.svg @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/logos/calltrackingmetrics.png b/src/images/logos/calltrackingmetrics.png new file mode 100644 index 0000000..9f998b7 Binary files /dev/null and b/src/images/logos/calltrackingmetrics.png differ diff --git a/src/images/logos/coingecko.png b/src/images/logos/coingecko.png new file mode 100644 index 0000000..3edd403 Binary files /dev/null and b/src/images/logos/coingecko.png differ diff --git a/src/images/logos/coingecko.svg b/src/images/logos/coingecko.svg new file mode 100644 index 0000000..fc86e0b --- /dev/null +++ b/src/images/logos/coingecko.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/images/logos/companycam.png b/src/images/logos/companycam.png new file mode 100644 index 0000000..0a5f2a5 Binary files /dev/null and b/src/images/logos/companycam.png differ diff --git a/src/images/logos/dext.png b/src/images/logos/dext.png new file mode 100644 index 0000000..dd00b7d Binary files /dev/null and b/src/images/logos/dext.png differ diff --git a/src/images/logos/doximity.png b/src/images/logos/doximity.png new file mode 100644 index 0000000..a805066 Binary files /dev/null and b/src/images/logos/doximity.png differ diff --git a/src/images/logos/doximity.svg b/src/images/logos/doximity.svg new file mode 100644 index 0000000..1c7895d --- /dev/null +++ b/src/images/logos/doximity.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/images/logos/ev-connection.png b/src/images/logos/ev-connection.png new file mode 100644 index 0000000..7a47b43 Binary files /dev/null and b/src/images/logos/ev-connection.png differ diff --git a/src/images/logos/floatcard.png b/src/images/logos/floatcard.png new file mode 100644 index 0000000..1cdf73d Binary files /dev/null and b/src/images/logos/floatcard.png differ diff --git a/src/images/logos/freeagent.png b/src/images/logos/freeagent.png new file mode 100644 index 0000000..ba89c84 Binary files /dev/null and b/src/images/logos/freeagent.png differ diff --git a/src/images/logos/fullscript.png b/src/images/logos/fullscript.png new file mode 100644 index 0000000..a13fb62 Binary files /dev/null and b/src/images/logos/fullscript.png differ diff --git a/src/images/logos/headway.png b/src/images/logos/headway.png new file mode 100644 index 0000000..3044a55 Binary files /dev/null and b/src/images/logos/headway.png differ diff --git a/src/images/logos/jane.png b/src/images/logos/jane.png new file mode 100644 index 0000000..324c19e Binary files /dev/null and b/src/images/logos/jane.png differ diff --git a/src/images/logos/jobber.png b/src/images/logos/jobber.png new file mode 100644 index 0000000..b967ace Binary files /dev/null and b/src/images/logos/jobber.png differ diff --git a/src/images/logos/mighty-networks.png b/src/images/logos/mighty-networks.png new file mode 100644 index 0000000..9d01656 Binary files /dev/null and b/src/images/logos/mighty-networks.png differ diff --git a/src/images/logos/qualified.png b/src/images/logos/qualified.png new file mode 100644 index 0000000..451b4e3 Binary files /dev/null and b/src/images/logos/qualified.png differ diff --git a/src/images/logos/rangee.png b/src/images/logos/rangee.png new file mode 100644 index 0000000..1e660b7 Binary files /dev/null and b/src/images/logos/rangee.png differ diff --git a/src/images/logos/sessionshealth.png b/src/images/logos/sessionshealth.png new file mode 100644 index 0000000..36efc81 Binary files /dev/null and b/src/images/logos/sessionshealth.png differ diff --git a/src/images/logos/tasktag.png b/src/images/logos/tasktag.png new file mode 100644 index 0000000..1e660b7 Binary files /dev/null and b/src/images/logos/tasktag.png differ diff --git a/src/images/logos/uscreen.png b/src/images/logos/uscreen.png new file mode 100644 index 0000000..851f422 Binary files /dev/null and b/src/images/logos/uscreen.png differ diff --git a/src/images/logos/uula.png b/src/images/logos/uula.png new file mode 100644 index 0000000..8182d09 Binary files /dev/null and b/src/images/logos/uula.png differ diff --git a/src/images/logos/via.png b/src/images/logos/via.png new file mode 100644 index 0000000..97da7f7 Binary files /dev/null and b/src/images/logos/via.png differ diff --git a/src/images/logos/vinita.png b/src/images/logos/vinita.png new file mode 100644 index 0000000..98983ce Binary files /dev/null and b/src/images/logos/vinita.png differ diff --git a/src/images/logos/wawafertility.png b/src/images/logos/wawafertility.png new file mode 100644 index 0000000..b1afcd2 Binary files /dev/null and b/src/images/logos/wawafertility.png differ diff --git a/src/images/logos/wealthbox.png b/src/images/logos/wealthbox.png new file mode 100644 index 0000000..4437e79 Binary files /dev/null and b/src/images/logos/wealthbox.png differ diff --git a/src/images/logos/yay.png b/src/images/logos/yay.png new file mode 100644 index 0000000..dafeb7d Binary files /dev/null and b/src/images/logos/yay.png differ diff --git a/src/images/logos/zyda.png b/src/images/logos/zyda.png new file mode 100644 index 0000000..c1ab4eb Binary files /dev/null and b/src/images/logos/zyda.png differ diff --git a/src/images/rails-icon.svg b/src/images/rails-icon.svg index b4bba7e..f4b9953 100644 --- a/src/images/rails-icon.svg +++ b/src/images/rails-icon.svg @@ -1,3 +1 @@ - - - + diff --git a/src/index-blog.scss b/src/index-blog.scss index fee5864..cedaa7f 100644 --- a/src/index-blog.scss +++ b/src/index-blog.scss @@ -2,7 +2,7 @@ @import url(./vendor/reset.scss); @import url(./vendor/fonts.css); @import './blog/styles/main.scss'; //old blog styles -@import './modules/veriables.scss'; +@import './modules/variables.scss'; @import './modules/mixins.scss'; @import './modules/blocks/button.scss'; @import './modules/blocks/footer.scss'; diff --git a/src/index.html b/src/index.html index 14292cb..f5ff8e7d 100644 --- a/src/index.html +++ b/src/index.html @@ -14,7 +14,23 @@ {{> popup popupClass='try-now-popup'}} {{> popup popupClass='contact-us-popup' popupTitle = 'Contact us' typeformLink='https://form.typeform.com/c/wAHm0sRP'}} + + = { + 'Doximity': '/images/logos/doximity.svg', + 'Healthie': '/images/logos/healthie-text.png', + 'Headway': '/images/logos/headway.png', + 'Jane': '/images/logos/jane.png', + 'Fullscript': '/images/logos/fullscript.png', + 'Joint Academy': '/images/logos/joint-academy-text.png', + 'Wawa Fertility': '/images/logos/wawafertility.png', + 'Sessions Health': '/images/logos/sessionshealth.png', + 'Vinita': '/images/logos/vinita.png', + 'CoinGecko': '/images/logos/coingecko.svg', + 'Dext': '/images/logos/dext.png', + 'FreeAgent': '/images/logos/freeagent.png', + 'Wealthbox': '/images/logos/wealthbox.png', + 'Floatcard': '/images/logos/floatcard.png', + 'Jobber': '/images/logos/jobber.png', + 'CompanyCam': '/images/logos/companycam.png', + 'EV Connection': '/images/logos/ev-connection.png', + 'Via Transportation': '/images/logos/via.png', + 'Agero': '/images/logos/agero.svg', + 'rang.ee': '/images/logos/rangee.png', + 'Tasktag': '/images/logos/tasktag.png', + 'Circle': '/images/logos/circle.png', + 'Mighty Networks': '/images/logos/mighty-networks.png', + 'LiveVoice': '/images/logos/live-voice.png', + 'Welcome': '/images/logos/welcome.png', + 'Uula': '/images/logos/uula.png', + 'Yay!': '/images/logos/yay.png', + 'ClickFunnels': '/images/logos/clickfunnels.png', + 'Poll Everywhere': '/images/logos/poll-everywhere.png', + 'Callbell': '/images/logos/callbell-text.png', + 'Qualified': '/images/logos/qualified.png', + 'Uscreen': '/images/logos/uscreen.png', + 'CallTrackingMetrics': '/images/logos/calltrackingmetrics.png', + 'Zyda': '/images/logos/zyda.png', + 'Sera': '/images/logos/sera-text.png', + 'Vito': '/images/logos/vito.png', +}; + +const modal = document.getElementById('company-modal'); +if (modal) { + const popup = new Popup('#company-modal'); + popup.init(); + + const logoEl = document.getElementById('company-modal-logo') as HTMLImageElement; + const nameEl = document.getElementById('company-modal-name'); + const descEl = document.getElementById('company-modal-desc'); + const detailEl = document.getElementById('company-modal-detail'); + const linkEl = document.getElementById('company-modal-link') as HTMLAnchorElement; + const caseStudyEl = document.getElementById('company-modal-case-study') as HTMLAnchorElement; + + // Inject a "Read case study →" element into every tile that has one. + // We use a (not ) because the tile is a - - + + + +
@@ -76,6 +77,9 @@ +
diff --git a/src/partials/slides/cases-slide.hbs b/src/partials/slides/cases-slide.hbs index d371a1b..5e3c2b7 100644 --- a/src/partials/slides/cases-slide.hbs +++ b/src/partials/slides/cases-slide.hbs @@ -1,101 +1,348 @@ -
+
+ + {{!-- Healthtech --}}
-
- - +
+ + + + + + + + +
-

Use cases

-

Secure chats for healthtech

+

Industries

+

Healthtech

    -
  • AnyCable is a HIPAA compliant and secure solution for messaging because it runs on premise, in your - infrastructure.
  • -
  • AnyCable serves some of the largest patient-doctor communication platforms in healthtech.
  • -
  • AnyCable is used as a critical component in software saving lives potentially every second.
  • +
  • HIPAA and SOC2 compliant — AnyCable runs on premise, data never leaves your infrastructure.
  • +
  • Powers patient-doctor communication, telehealth video, and real-time health monitoring.
  • +
  • Used as a critical component in software serving millions of patients.
+ + {{!-- Doximity quote --}} +
+
+
+ "We use AnyCable for our dialer products, which is where real-time is critical — it's our video and voice platform. Anytime you restart your application, which happens when you deploy, you're gonna get connection severances. AnyCable allows them to keep that connection open. That Go service stays up, and you can continue shipping your Rails application as normal." +
+
+ Ryan Stawarz & Austin Story + Engineering at Doximity + + On Rails Podcast + +
+
+
+ + {{!-- Fintech --}}
-

Use cases

-

Streaming AI responses

+

Industries

+

Fintech

- Faster AI responses, better UX, better retention -
-
    -
  • Applications use AnyCable to stream each syllable of the AI-generated responses in realtime.
  • -
  • The faster users can access AI-generated response, the better their retention in the product.
  • +
  • Real-time market data, live dashboards, transaction notifications.
  • +
  • Handles massive concurrent connections where every millisecond matters.
-
- +
+ + + + +
+ + {{!-- Field Services & IoT --}}
-
- - - - - +
+ + + + + + + +
-

Use cases

-

Realtime-heavy apps

+

Industries

+

Field Services & IoT

    -
  • Scalable chats and updates for platforms powering online events.
  • -
  • Scalable and cost-efficient infrastructure for real-time messaging: SaaS expenses grow uncomfortably as your product grows, but the cost of AnyCable Pro license does not.
  • -
  • AnyCable is both performant and cost-efficient for applications that are big on realtime: notifications, updates, communication and collaboration.
  • +
  • Live GPS tracking, real-time dispatching, and EV charging infrastructure.
  • +
  • Native support for OCPP (Open Charge Point Protocol) for EV charger communication.
  • +
  • Keeps field teams and transit fleets in sync with low-latency connections.
+ + {{!-- Communities --}}
-

Use cases

-

Voice processing and IoT data

+

Industries

+

Communities

    -
  • Process voice streaming APIs, like Twilio Media Streams, in Go. Read more.
  • -
  • Stream GPS coordinates and EV charging data. AnyCable supports OCPP protocol.
  • +
  • Real-time messaging, live events, presence indicators, activity feeds.
  • +
  • Community platforms need WebSocket connections at scale — AnyCable delivers.
  • +
  • From creator communities to live interpretation — reliable delivery across use cases.
-
- +
+ + + + + + +
+ + {{!-- And more --}}
-
- - +
+ + + + + + +
-

Use cases

-

Hotwire at scale

+

Industries

+

And more

    -
  • AnyCable acts as a performance power-up for apps with HTML-over-the-wire frontends out-of-the-box.
  • -
  • Binary compression (Pro feature) ensures additional speed and performance benefits.
  • +
  • Live notifications, real-time collaboration, streaming AI responses.
  • +
  • From marketing funnels to audience engagement — AnyCable powers the real-time layer.
  • +
  • Cost-efficient: SaaS expenses grow as your product grows, but AnyCable Pro does not.
+
diff --git a/src/partials/slides/code-snippets/python.html b/src/partials/slides/code-snippets/python.html new file mode 100644 index 0000000..3d7f110 --- /dev/null +++ b/src/partials/slides/code-snippets/python.html @@ -0,0 +1,15 @@ +
# Broadcast from FastAPI via HTTP API
+import httpx
+
+@app.post("/messages")
+async def create_message(msg: Message):
+    async with httpx.AsyncClient() as client:
+        await client.post(
+            f"{ANYCABLE_URL}/api/v1/broadcasts",
+            json={
+                "stream": f"chat/{msg.room_id}",
+                "data": msg.json()
+            }
+        )
+    return {"ok": True}
+
diff --git a/src/partials/slides/main-slide.hbs b/src/partials/slides/main-slide.hbs index e75949e..28ec720 100644 --- a/src/partials/slides/main-slide.hbs +++ b/src/partials/slides/main-slide.hbs @@ -6,14 +6,14 @@

AnyCable

- Realtime server for reliable two-way communication. + Realtime server with delivery guarantees, presence tracking, and message ordering — built in.

-

- Comes in different flavors: open source, managed, on-premise Pro. -

- Plays nice with Rails, JavaScript/TypeScript, and any backend. + Works with Rails, Laravel, Node.js, Python, and any backend via HTTP API. +

+

+ Open source, managed, or on-premise Pro.