Self-hosted Pusher-compatible WebSocket server with Sockudo
Description and use
Sockudo is a self-hosted, Pusher-compatible WebSocket server built in Rust. It offers resource efficiency and horizontal scaling capabilities, allowing users to replace managed services without modifying existing frontend code.
Problem
Need for a self-hosted, resource-efficient alternative to managed WebSocket services like Pusher, Laravel Reverb, or Soketi, while maintaining compatibility with existing client libraries.
Outcome
A self-hosted, Pusher-compatible WebSocket server implemented in Rust, offering low resource usage, horizontal scaling via various adapters, and seamless integration with existing Pusher client libraries.
Workflow
- Choose deployment method: Docker or Cargo install.
- For Docker: Run 'docker run -d -p 6001:6001 sockudo/sockudo:latest'.
- For Cargo: Run 'cargo install sockudo'.
- Configure adapters for scaling (Redis, Redis Cluster, NATS, or local).
- Configure backend for app config storage (MySQL, PostgreSQL, DynamoDB, or in-memory).
- Configure queue system for webhooks (Memory, Redis, SQS).
- Point existing Pusher client libraries (e.g., Laravel Echo) to the Sockudo endpoint.
- Monitor using built-in Prometheus metrics and optional Grafana dashboard.
Evidence
I built a WebSocket server in Rust that implements the Pusher protocol. It's designed to be a self-hosted alternative to Pusher, Laravel Reverb, or Soketi.
The main reason was performance and resource efficiency. It runs with Tokio for async, uses fastwebsockets for the WebSocket implementation, and the whole thing is pretty lean on memory.
- Record date: 2026-09-07T13:05:30.742Z