Free to Use

The Free Ably Alternative for Realtime WebSockets

Realtime WebSocket channels, presence, and pub/sub — without enterprise pricing.

Get WebSocket channels, presence, pub/sub, and webhooks without enterprise pricing. Apinator is free to use — no per-message metering, no peak-connection charges, no channel-minute billing. Start free, no credit card.

No Per-Message Metering

Ably meters every message, every peak connection, and every channel-minute. Apinator does none of that — you send as many events as you need, free.

Free to Use

No credit card, no trial, no paid plan above it. Presence, private channels, webhooks, and HMAC auth are all included, not gated.

Comparable Features

WebSocket channels, presence tracking, HMAC auth, webhook delivery, and multi-region — without Ably's enterprise tier.

Predictable — $0/month

A bill that never changes, because it never starts. No surprise invoices from a viral launch or a traffic spike.

Multi-Region (EU + US)

Pick a region per app so connections stay close to your users and sensitive data stays in its jurisdiction.

HMAC Token Auth

Private channels use HMAC-signed tokens the same way Ably does. Your existing server-side auth pattern maps directly across.

Apinator vs Ably

FeatureApinatorAbly
Pricing modelFreePer-message + peak connection + channel-minutes
Free-tier messages / month15M (500k/day)6M
Free-tier peak connections500200
Pub/sub
Presence
Webhooks (integrations)
HMAC auth
Multi-regionPaid tiers
SDKs (client + server)JS, Node, Python, Go, PHP, Swift, KotlinBroad
RegionsEU + USGlobal (paid tiers)
Predictable monthly billFree — $0/mo

Quick Start

Connect, subscribe to a channel, and bind event handlers — similar to Ably, fully managed.

client.js
import { RealtimeClient } from '@apinator/client' const client = new RealtimeClient('APP_KEY', { host: 'wss://rt.apinator.io' }) // Subscribe to a channel and bind an event const channel = client.subscribe('notifications') channel.bind('alert', (data) => { showNotification(data.title, data.body) }) // Publish from your server (Node.js, Python, Go, PHP, ...) import { ApinatorServer } from '@apinator/server' const apinator = new ApinatorServer({ appId, key, secret }) await apinator.trigger('notifications', 'alert', { title: 'New order', body: '#1042' })

Pricing: Three Meters vs. None

Ably bills on more axes than most realtime platforms. Here is the practical difference.

Ably meters realtime on three separate axes: messages, peak connections, and channel-minutes. Each one is a dial that turns as your app grows, and the monthly invoice is the sum of all three. That makes costs hard to predict — a single busy day or a long-lived presence channel can move the bill in ways that are difficult to explain after the fact.

Apinator has no meter at all. It is free to use: the current free tier covers 500 concurrent connections, roughly 15 million messages per month (500,000 per day), 100 channels, and presence up to 500 members per channel. There is no per-message charge, no peak-connection charge, and no channel-minute billing — the bill stays at $0 whether you send 100,000 or 100,000,000 messages.

Apinator deliberately focuses on the core realtime primitives rather than Ably's full breadth (see the trade-offs below). If you want the no-frills version, the free WebSocket server page is the quickest start; for region and residency detail see managed WebSocket infrastructure.

Step-by-Step Migration from Ably

Map Ably concepts onto Apinator: channels stay channels, and token auth stays HMAC token auth.

1. Swap the client and subscribe

Replace the Ably client with @apinator/client. A channel subscription and event binding map directly — instead of channel.subscribe(name, cb) you bind named events on a channel.

client.js
// Before — ably import * as Ably from 'ably' const realtime = new Ably.Realtime('API_KEY') const channel = realtime.channels.get('alerts') channel.subscribe('alert', (msg) => notify(msg.data)) // After — @apinator/client import { RealtimeClient } from '@apinator/client' const client = new RealtimeClient('APP_KEY', { host: 'wss://rt.apinator.io' }) const channel = client.subscribe('alerts') channel.bind('alert', (data) => notify(data))

2. Publish from your server

Ably channel.publish() becomes apinator.trigger(channel, event, data). The server SDK is available for Node.js, Python, Go, and PHP.

publish.js
// Before — ably (server) await realtime.channels.get('alerts').publish('alert', { id: 7 }) // After — @apinator/server import { ApinatorServer } from '@apinator/server' const apinator = new ApinatorServer({ appId, key, secret }) await apinator.trigger('alerts', 'alert', { id: 7 })

3. Move token auth to your HMAC endpoint

Ably token requests map to Apinator HMAC channel authorization. Your backend signs with the app secret and returns the auth payload — choose your region (EU or US) when you create the app, then deploy. Realtime events are transient, so there is no message history to migrate.

When to Choose Ably vs. Apinator

An honest read. Ably is a broad, mature realtime platform; Apinator is a focused, free-to-use one. Pick based on feature breadth versus predictable cost.

Stick with Ably when

  • You rely on persistent message history, message replay, or stream rewind from a point in time.
  • You need higher-level products Ably layers on top — like its data integrations, queues, or reactor rules.
  • You require a specific global region or compliance certification Apinator does not currently offer (today: EU and US data planes).

Switch to Apinator when

  • Your use case is event broadcasting and presence, and three separate meters (messages, connections, channel-minutes) are more billing complexity than you want.
  • You want a predictable $0 bill instead of cost that scales on three axes with traffic.
  • You need EU data residency without a paid tier, with presence, private channels, and webhooks all included.

Frequently Asked Questions

Ready to get started?

Completely free, no credit card required. Deploy in minutes.