joewalnes /websocketd

Turn any program that uses STDIN/STDOUT into a WebSocket server. Like inetd, but for WebSockets.

★ 17,455⑂ 1,008
GoCreated 2013-02-14websocketd.com/
17,455
stars
+1+1+-8
1,008
forks
–
watchers
–
prs
–
issues
–
releases
–
discussions

README

websocketd
==========

websocketd is a small command-line tool that will wrap an existing command-line interface program, and allow it to be accessed via a WebSocket.

WebSocket-capable applications can now be built very easily. As long as you can write an executable program that reads STDIN and writes to STDOUT, you can build a WebSocket server. Do it in Python, Ruby, Perl, Bash, .NET, C, Go, PHP, Java, Clojure, Scala, Groovy, Expect, Awk, VBScript, PowerShell, Haskell, Lua, R, whatever! No networking libraries necessary.

-@joewalnes

Details
-------

Upon startup, websocketd will start a WebSocket server on a specified port, and listen for connections.

Upon a connection, it will fork the appropriate process, and disconnect the process when the WebSocket connection closes (and vice-versa).

Any message sent from the WebSocket client will be piped to the process's STDIN stream, followed by a \n newline.

Any text printed by the process to STDOUT shall be sent as a WebSocket message whenever a \n newline is encountered.


Download
--------

If you're on a Mac, you can install websocketd using Homebrew. Just run brew install websocketd. For other operating systems, or if you don't want to use Homebrew, check out the link below.

Download for Linux, macOS and Windows


Quickstart
----------

To get started, we'll create a WebSocket endpoint that will accept connections, then send back messages, counting to 10 with 1 second pause between each one, before disconnecting.

To show how simple it is, let's do it in Bash!

__count.sh__:

sh
!/bin/bash
for ((COUNT = 1; COUNT 


  // helper function: log message to screen
  function log(msg) {
    document.getElementById('log').textContent += msg + '\n';
  }

  // setup websocket with callbacks
  const ws = new WebSocket('ws://localhost:8080/');
  ws.onopen = () = {
    log('CONNECT');
  };
  ws.onclose = () = {
    log('DISCONNECT');
  };
  ws.onmessage = (event) = {
    log(MESSAGE: ${event.data});
  };


Open this page in your web-browser. It will even work if you open it directly
from disk using a file:// URL.

More Features
-------------

   Very simple install. Just download the single executable for Linux, Mac or Windows and run it. Minimal dependencies, no installers, no package managers, no external libraries. Suitable for development and production servers.
   Server side scripts can access details about the WebSocket HTTP request (e.g. remote host, query parameters, cookies, path, etc) via standard CGI environment variables. Note that SERVER_NAME and SERVER_PORT mirror the request's Host header (virtual-host semantics, as in net/http/cgi), so a client that controls its Host header controls them too. Do not make access decisions on them.
   As well as serving websocket daemons it also includes a static file server and classic CGI server for convenience.
   Can listen on a Unix domain socket (--unixsocket) instead of, or alongside, a TCP address. That exposes websocketd only to processes on the sa

Snapshot: 2026-11-10T09:35:25Z · Data license Apache-2.0 · JSON