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 archivefor tarball creation
[0.2.1] - 2026-01-04#
Fixed#
- Server port binding now fails correctly when port is already in use. Previously,
reuse_portdefaulted totrue, which enabledSO_REUSEPORTand 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. Nowreuse_portdefaults tofalse, and binding to an already-used port will fail with a clear error.
Changed#
Server.default_config.reuse_portnow defaults tofalseinstead oftrue.- 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.Authpipeline
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) andhs(file server)