finds.dev← search

// the find

ergo-services/ergo

★ 4,669 · Go · MIT · updated Sep 2026

An actor-based Framework with network transparency for creating event-driven architecture in Golang. Inspired by Erlang. Zero dependencies.

Ergo is an Erlang/OTP-style actor framework for Go: isolated processes with mailboxes, supervision trees, and transparent local/remote messaging over a custom binary protocol. It's aimed at Go developers building stateful, distributed services (real-time backends, IoT fleets, multi-agent systems) who are tired of hand-rolling mutexes and service discovery on top of goroutines and channels.

Supervision is a real implementation, not a slogan — One For One, All For One, Rest For One, and Simple One For One strategies each have their own file and test suite (act/supervisor_ofo.go, supervisor_arfo.go, etc.), with Transient/Temporary/Permanent restart policies. The benchmark section is unusually honest for a framework README: it publishes allocation counts (2 allocs/op local, 6 over network) on two different CPUs and explicitly explains why per-core latency and aggregate throughput move in opposite directions instead of just citing one flattering number. Erlang distribution protocol interop is a genuine differentiator — mixed Go/Elixir clusters with links and monitors across the language boundary is not something other Go actor libraries offer. Observability is built as composable applications (Observer, Radar, Pulse) rather than bolted-on debug endpoints, with OTLP tracing export and a Prometheus metrics actor you can extend.

Messages travel as `any` through a type switch in HandleMessage, so you lose Go's compile-time type checking at exactly the boundary — inter-process communication — where a typing mistake is hardest to catch; the framework ships a separate `argus` vet tool specifically because the compiler can't verify actor invariants, which is a tell. Cross-node communication depends on EDF, a custom binary serialization format with its own versioning scheme — anything outside the Ergo/Erlang world that wants to talk to a node needs a compatible encoder, so 'network transparency' means transparency within this ecosystem, not with arbitrary services. The 'zero dependencies' framing only covers ergo.services/ergo itself; the extra library needed for real production use (etcd registrar, Sentry logger, Grafana/OTLP export) pulls in the dependencies the pitch implies you're avoiding. The API surface is large — mailboxes, four priority queues, meta processes, EDF type registration, cron, tracing samplers — and the 30-second Counter example doesn't prepare you for the ramp-up once you need remote spawn, application orchestration, or mTLS.

View on GitHub → Homepage ↗

// 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 →