2026.09.07 — v2.0.0
v2.0.0
Changed
- Event-Loop Reactor Architecture. Replaced the OS thread-per-connection model and 256-connection ceiling with a libxev event-loop reactor. A single loop thread multiplexes all incoming connections and dispatches framed requests to a bounded worker pool.
- Platform-Specific I/O Backends. Uses epoll on Linux (verified for 4,000–6,000 concurrent connections and ~72,000 open/close cycles with flat memory and zero file descriptor leaks) and kqueue on macOS. Windows runs a blocking Winsock fallback sharing the same framing and dispatch code so behaviour is identical.
- Unified Transport Engine. Three protocol formats (WebSocket GraphSON/GraphBinary, ASNA binary, and JSON-line) across both TCP and Unix domain socket (UDS) transports run through the reactor pipeline (or the Winsock fallback on Windows sharing identical framing and dispatch code).
- Cross-Platform REPL (asna). Moved the asna Gremlin REPL line editor to a vendored library, enabling native Windows builds and cross-compilation across platforms.
Added
- TLS 1.3 Encryption. Native TLS 1.3 server authentication on the TCP listener via --tls-cert / --tls-key flags or ASANAGIDB_TLS_CERT / ASANAGIDB_TLS_KEY environment variables. (Unix domain sockets remain plaintext; unavailable on Windows fallback).
- Bounded Worker Queue & Backpressure. Added configurable worker pool sizing (EXECUTION_POOL_SIZE, default 64) and queue capacity (EXECUTION_QUEUE_MAX, default 1024). Overflow requests return a standard Gremlin 597 ("too busy") status response instead of dropping socket connections.
- WebSocket SASL PLAIN Auth. End-to-end SASL PLAIN authentication over WebSockets. The server buffers pre-authentication requests and replays them under the original request ID upon successful authentication.
Fixed
- Write-Load Connection Drop Cascades. Resolved socket drops ("write: broken pipe") and client reconnect stampedes under sustained write load that previously exhausted the connection ceiling.
- LMDB Reader Table Fixes. Bundled fixes for LMDB reader-table allocation and read-transaction handling.