Why I Built My Own WebSocket Service Instead of Paying for Pusher
Real-time features look simple from the outside. A chat message appears instantly. A dashboard updates without refresh. A notification badge increments in the corner. A "someone is typing..." indic...

Source: DEV Community
Real-time features look simple from the outside. A chat message appears instantly. A dashboard updates without refresh. A notification badge increments in the corner. A "someone is typing..." indicator just works. But once you try to build those features into a product, you run into a very different reality: WebSocket connections need to stay alive reliably Private channels need authentication Presence needs user tracking Fanout needs to work across multiple nodes Webhooks need retries Usage needs to be measured Costs get weird as usage grows At some point I realized I had two options: Keep paying for a hosted real-time provider and accept the tradeoffs Build the service I actually wanted I picked option 2. That decision turned into Apinator: a real-time messaging platform and Pusher-style alternative with public, private, and presence channels, multi-tenant isolation, usage metering, and SDKs for Node.js, Python, PHP, Go, and browser clients. This post is the story of why I built it,