Websocketify (wsify) v2.0 StackShare

Just a tiny, simple and realtime pub/sub messaging service

Quick Demo


I wanted to create a tiny solution that can replace pusher and similar services and learning more about the realtime world, so I dispatched this project.


  • No dependencies, just a single binary !
  • Light and Tiny.
  • Event-Driven Design webhooks.
  • A client can listen on any resource.
  • You control whether a client is allowed to connect, subscribe, unsubscribe using any programming language !.
  • A client defines itself using key via the url query param i.e ?key=123.
  • Send messages to only certain users.


  • Docker ? > docker run --network host alash3al/wsify -listen :8080 -webhook "http://localhost/wsify.php"
  • Binary ? > goto the releases page and download yours.
  • From Source ? > go get -u github.com/alash3al/wsify


(1)- How can a client/device connect to the websocket service?

by simply connecting to the following endpoint ws://your.wsify.service:port/subscribe

(2)- How can a client subscribe to a certain channel(s)/topic(s)?

after connecting to the main websocket service /subscribe, you can send a simple json payload commands to ask wsify to subscribe/unsubscribe you to/from any channel/topic you want!

(3)- What is the commands format?

    "action": "subscribe",
    "value": "testchan"

(4)- Can I control the client command so I can allow/disallow certain users?

Yes, each client can define itself using a query param ?key=client1, this key will be passed to the webhook endpoint as well as the event being executed, and here is the event format:

    // one of the following: connect|subscribe|unsubscribe|disconnect
    "action": "subscribe",

    // the channel if provided
    "value": "testchan",

    // the key provided by the client
    "key": "client1"

(5)- How can I publish message to i.e testchan?

Just a post request to /publish with the following format:

    // the channel you want to publish to
    "channel": "testchan",

    // the data to be send (any format)
    "payload": "testchan",

    // array of clients "keys" (if you want certain clients only to receive the message)
    "to": []


curl -X POST \
    -H "Content-Type: application/json" \
    -d '{"payload": "hi from the terminal", "channel": "testchan"}' \

(6)- Can I skip the webhook events for testing?

Yes, wsify --events="" empty events means "NO WEBHOOK, WSIFY!"

(7)- How can I secure the publish endpoint, so no one except me can publish ?!!

Easy :), Just change the endpoint to something more secure and hard to guess it is an alternative to access tokens .. etc, wsify --publish="/broadcasteiru6chefoh1Yee0MohJ2um5eepaephies3zonai0Cae7quaeb"

(8)- What about other options?

wsify --help will help you !

(9)- What is the websocket client used in demos?

Simple Websocket Client

(10)- How I can use it over SSl/TLS with Nginx?

You can use proxy, add this lines on your Nginx configration

    location /websocket/subscribe {
        proxy_pass http://localhost:4040/subscribe;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";

Now you can call websocket by wss://yourdomain.com/websocket/subscribe

Quick Demo2


This project has been created by Mohamed Al Ashaal a Crazy Gopher ^^!


  • Fork the Repo
  • Create a feature branch
  • Push your changes to the created branch
  • Create a pull request.


Wsify is open-sourced software licensed under the MIT License.


Just a tiny, simple and real-time self-hosted pub/sub messaging service

Wsify Info

⭐ Stars 479
πŸ”— Source Code github.com
πŸ•’ Last Update 8 months ago
πŸ•’ Created 5 years ago
🐞 Open Issues 4
βž— Star-Issue Ratio 120
😎 Author alash3al