// the find
rsms/gotalk
Async peer communication protocol & library
Gotalk is a binary-ish multiplexing RPC protocol over any byte stream, with first-class WebSocket support and a matching JavaScript library. It lets both sides of a connection act as server and client simultaneously, which is the interesting design decision here. Aimed at Go developers building real-time web apps or inter-process communication who want something lighter than gRPC but more structured than raw WebSockets.
The ASCII wire format is a genuine differentiator — you can read protocol traffic with `nc` or browser devtools without a schema file or special tooler. Bidirectional operation without role distinction is well thought out and cleanly exposed in the API. The bundled JavaScript library with auto-served `/gotalk/gotalk.js` and `openKeepAlive` reconnect logic removes a real chunk of boilerplate from Go+browser setups. The protocol spec is fully documented in the README with byte-level examples, which is rare and makes implementing a third-party client straightforward.
Last commit was February 2023 and the vendored `golang.org/x/net/websocket` package it depends on has been deprecated in favor of `nhooyr.io/websocket` or `gorilla/websocket` for years — this is a quiet liability if you need to stay current on security patches. No context propagation: handlers have no way to receive a `context.Context`, so you can't cancel in-flight requests or hook into tracing. The JavaScript library is hand-rolled ES5 with no npm publish and no TypeScript support beyond a `.d.ts` stub, which will feel out of place in any modern frontend build. With 1200 stars and one Python third-party port, the ecosystem is thin — if you hit a gap, you are writing it yourself.