Securely forward Webhooks to local environments behind NAT or firewalls.
Receive events securely using your own server and WebSocket connections, without relying on external
services like ngrok.
Testing webhooks from services like GitHub or Stripe locally usually requires a public IP. Webhook over WebSocket utilizes a persistent WebSocket connection between a server and client to route HTTP requests seamlessly through NAT.
No public IP required for your local machine. Because the client initiates the WebSocket connection to the server, it easily traverses firewalls and NAT.
Don't rely on third-party tunneling services. Deploy the server component on your own affordable VPS to keep your traffic completely under your control.
Integrates Memberlist gossip protocol and Traefik HTTP Provider, seamlessly supporting High Availability in multi-replica environments.
Click on the components below to explore the traffic flow.
Webhook over WebSocket creates a secure tunnel between the client and server. HTTP requests received by the server are instantly forwarded to the client via WebSocket.
Third-party services like GitHub, Stripe, or Slack. They send Webhooks (HTTP POST) when an event occurs.
The publicly accessible HTTP server component.
/webhook/{channel_id}/ws/{channel_id})Runs on your local PC or private network.
Your application under development.
It receives the Webhook exactly as if the external service made the request directly to it, making debugging and testing a breeze.
Start routing in three simple steps.
Mock Data Visualization
Leverage WebSockets to eliminate polling latency. The moment a webhook is fired, the event is streamed to your local environment with near-zero overhead.
Persistent connection means instant delivery.
No need to expose local ports to the internet.
Flexible deployment options available.
Use the official Docker image to quickly spin up the server.
The repository also includes a docker-compose.yml for local development.
# Pull the image docker pull ghcr.io/nonchan7720/webhook-over-websocket:latest # Run the server with Docker docker run --rm -p 8080:8080 \ ghcr.io/nonchan7720/webhook-over-websocket:latest \ server --port 8080
--port, -p --peer-domain --cleanup-duration
--server-url --target-url
For production deployments with multiple server replicas, Traefik is used as a load
balancer with dynamic routing.
HashiCorp Memberlist enables cluster coordination via a gossip
protocol. When Traefik polls /traefik-config on any replica, that replica automatically
aggregates channel info from all members and returns the complete routing configuration.