// the find
andeya/erpc
An efficient, extensible and easy-to-use RPC framework.
eRPC is a Go RPC framework built around a socket-first, pluggable-everything design: swappable transports (TCP, Unix sockets, KCP, QUIC, WebSocket), swappable codecs (protobuf, Thrift, JSON, form), and a plugin system for auth/heartbeat/overload protection. It's aimed at people building custom internal protocols for microservices, IM, or game backends who want raw socket performance without writing their own framing and codec layer from scratch.
The peer abstraction is genuinely useful — server and client share the same API surface, so you're not learning two different mental models like you do with most RPC libraries. The codec and protocol layers are properly decoupled: switching from the default binary rawproto to JSON or Protobuf is a config change, not a rewrite. Plugin hooks (PostReadCallHeader, etc.) are real interception points, not just marketing bullet points — the auth and secure plugins actually use them. Automatic redial on disconnect is built into the client session rather than left as an exercise for the user, which is the kind of thing you usually end up hand-rolling with net/rpc or raw gRPC.
The benchmark numbers in the README are from a Sandy Bridge Xeon running CentOS 6 with Go 1.9.2 — that's circa 2017 hardware and toolchain being presented as current evidence of performance, which tells you the docs haven't had a real pass in years even though the module is on v7. Custom wire protocol means zero interop with the gRPC/HTTP2 ecosystem — no grpcurl, no standard tracing middleware, no service mesh support without writing your own adapter. Documentation is rough: awkward machine-translated phrasing throughout, a broken markdown table in the PeerConfig section, and API docs that lean entirely on code snippets with no explanation of failure modes (what happens on codec mismatch, buffer overflow beyond 'disconnect it'). No mention of distributed tracing or metrics export — logging is the only observability story, which is thin for anything you'd run as actual microservice infrastructure.