The net stack
A Nimony-native networking stack, one concern per repo, layered tcp → net → tls → serve with transport-free http/compress helpers and ws / requests alongside. Common stance throughout: nimony-native, no framework runtime, status-based errors instead of exceptions, blocking I/O by default with a non-blocking escape hatch on every handle. TLS 1.3, dual-stack IPv6, a concurrent worker pool, HTTP/2, WebSocket, and HTTP/3 (client) are all first-class.
How it layers
requests (HTTP client — curl-impersonate; HTTP/2 + HTTP/3, browser-identical)
ws (WebSocket, RFC 6455 — ws:// and wss://, server + client)
serve (HTTP/1.1 + HTTP/2 server; HTTPS; concurrent pool; compression) ┐
├── http (transport-free: headers, URL/form, parsing, status) │
├── compress (gzip / brotli / zstd codecs) │ consumed
├── tls (TLS 1.3 over OpenSSL 3 — client + server) ┐ │ by serve
└── net (Socket / dual-stack IPv6 / dial) │ tls wraps a Socket │
└── tcp (native sockets: IPv4 + IPv6) ┘ ┘
http and compress are deliberately out of the transport chain — no sockets — so any transport can reuse them. tls sits beside net (it wraps a net.Socket), and serve / ws build on both.
Libraries
| Library | What it is | Repo |
|---|---|---|
| tcp | Native blocking sockets, IPv4 + IPv6, raw handles | aoughwl/tcp |
| net | Socket ergonomics, dual-stack dial/listen6, buffered reads | aoughwl/net |
| tls | TLS 1.3 over OpenSSL 3 — client + server, ALPN | aoughwl/tls |
| http | Transport-free HTTP: headers, URL/form, parsing, status | aoughwl/http |
| compress | gzip / brotli / zstd codecs | aoughwl/compress |
| serve | HTTP/1.1 + HTTP/2 server, HTTPS, concurrency | aoughwl/serve |
| ws | WebSocket (RFC 6455), server + client, ws:// + wss:// | aoughwl/ws |
| requests | Browser-identical HTTP client (curl-impersonate) | aoughwl/requests |
Verbatim API symbol tables for the older libraries are archived under Reference: tcp · net · http · serve · requests.