ocaml http/1, http/2 and websocket client and server library

Changelog#

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.3.1] - 2026-01-06#

Fixed#

  • Reduced opam package size from 87MB to ~200KB by using git archive for tarball creation

[0.2.1] - 2026-01-04#

Fixed#

  • Server port binding now fails correctly when port is already in use. Previously, reuse_port defaulted to true, which enabled SO_REUSEPORT and allowed multiple processes to silently bind to the same port. This caused confusing behavior where a new server would start successfully but only receive a fraction of connections. Now reuse_port defaults to false, and binding to an already-used port will fail with a clear error.

Changed#

  • Server.default_config.reuse_port now defaults to false instead of true.
  • Users who intentionally want multiple processes sharing a port (for load balancing) can enable it explicitly via { config with reuse_port = true }.

[0.2.0] - 2026-01-03#

Added#

  • Phoenix-style three-layer plug architecture
  • Pipeline module for reusable plug collections
  • Endpoint module for global plug entry point
  • Scoped authentication with Plug.Auth pipeline

Changed#

  • Refactored plug system to match Phoenix conventions
  • Improved router with per-route plug support

[0.1.0] - Initial Release#

Added#

  • HTTP/1.1 and HTTP/2 client and server
  • WebSocket support (RFC 6455)
  • Server-Sent Events (SSE)
  • Lock-free pub/sub messaging
  • Connection pooling
  • TLS support via tls-eio
  • Static file serving
  • Gzip/zstd compression
  • CORS, CSRF, rate limiting plugs
  • CLI tools: hc (client) and hs (file server)