Esta página se muestra en inglés. Una traducción al español está en curso.
ScriptsJun 2, 2026·3 min de lectura

websocketd — Turn Any Program into a WebSocket Server

A small command-line tool that wraps any program that reads STDIN and writes STDOUT into a full WebSocket server. Write your backend logic in any language and websocketd handles the WebSocket protocol.

Listo para agents

Instalación lista para agent

Este activo puede instalarse después de elegir el runtime, revisar el plan y ejecutar el comando correspondiente.

Native · 98/100Política: permitir
Superficie agent
Cualquier agent MCP/CLI
Tipo
Skill
Instalación
Single
Confianza
Confianza: Established
Entrada
websocketd Server
Comando de instalación directa
npx -y tokrepo@latest install 4abc5ab2-5ec1-11f1-9bc6-00163e2b0d79 --target codex

Ejecutar después de confirmar el plan con dry-run.

Introduction

websocketd is a lightweight command-line tool that takes any program or script that uses STDIN/STDOUT and wraps it into a WebSocket server. Each incoming WebSocket connection spawns a new instance of the program. Messages from the client go to the program's STDIN and each line written to STDOUT is sent back as a WebSocket message. This lets you build real-time server applications in any programming language without a WebSocket library.

What websocketd Does

  • Spawns a new process for each WebSocket connection, mapping STDIN/STDOUT to messages
  • Works with programs written in any language: Bash, Python, Ruby, Go, Perl, or compiled binaries
  • Serves static HTML/JS files alongside the WebSocket endpoint for self-contained demos
  • Supports origin checking, TLS termination, and configurable connection limits
  • Provides CGI-style environment variables with connection metadata to the child process

Architecture Overview

websocketd is a single Go binary. When a WebSocket client connects, websocketd forks the specified program and bridges the WebSocket frames to the process's standard streams. Each line on STDOUT becomes a text frame sent to the client. Each incoming text frame is written as a line to STDIN. When the process exits or the client disconnects, the other side is cleaned up. This inetd-like model keeps the architecture simple and language-agnostic.

Self-Hosting & Configuration

  • Download a single binary from GitHub releases or install via Homebrew
  • Run with websocketd --port=PORT ./your-program to start serving
  • Use --staticdir=./html to serve a web frontend alongside the WebSocket endpoint
  • Enable TLS with --ssl --sslcert=cert.pem --sslkey=key.pem
  • Set --maxforks to limit concurrent connections and prevent resource exhaustion

Key Features

  • Zero-dependency single binary deployment on Linux, macOS, and Windows
  • Language-agnostic design lets you prototype with shell scripts and scale to compiled programs
  • STDERR from child processes is logged to the server console for debugging
  • Built-in static file server eliminates the need for a separate HTTP server
  • Environment variables expose client IP, request path, and headers to the child process

Comparison with Similar Tools

  • Socket.IO — Requires a Node.js server and client library; websocketd works with any language
  • ws (Node.js) — Library-level WebSocket support; websocketd wraps existing programs without code changes
  • Caddy websocket — Plugin-based approach; websocketd is a standalone tool with simpler configuration
  • socat — General-purpose relay; websocketd specifically handles WebSocket protocol framing
  • gotty — Shares a terminal over the web; websocketd is bidirectional and program-agnostic

FAQ

Q: Does each client get its own process? A: Yes. Each WebSocket connection spawns a fresh instance of the program. State is per-connection by default.

Q: Can I use websocketd in production? A: websocketd is suitable for moderate workloads. For high-connection counts, consider placing it behind a reverse proxy with connection limits.

Q: What happens if the program crashes? A: The WebSocket connection is closed. The client can reconnect, which spawns a new process.

Q: Can I send binary data? A: websocketd operates on text lines by default. Binary data can be base64-encoded or handled through a wrapper script.

Sources

Discusión

Inicia sesión para unirte a la discusión.
Aún no hay comentarios. Sé el primero en compartir tus ideas.

Activos relacionados