finds.dev← search

// the find

rsms/gotalk

★ 1,204 · Go · MIT · updated Feb 2023

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.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →