// the find
ortuman/jackal
💬 Instant messaging server for the Extensible Messaging and Presence Protocol (XMPP).
jackal is a Go XMPP (Jabber) server with pluggable storage (PostgreSQL or BoltDB), Redis caching, and etcd-based clustering for horizontal scale. It's aimed at people who need to self-host instant messaging infrastructure and want something lighter than ejabberd or Openfire without touching Erlang.
The storage layer is cleanly separated into interfaces with boltdb/cached/measured/pgsql implementations, so swapping backends or adding metrics wrapping didn't require touching business logic. Clustering via etcd plus a gRPC-based extensibility API for external authenticators and components is a real feature, not a stub — most small XMPP servers don't bother with multi-node support at all. Test coverage is unusually consistent: nearly every package has a matching _test.go, including the trickier stream/session/dialback code. Built-in Prometheus metrics and a shipped Grafana dashboard mean you're not instrumenting this yourself on day one.
No XEP-0045 (Multi-User Chat) support — this is a 1:1 messaging server, not a group chat server, despite being tagged 'chat' and 'messaging.' There's also nothing for OMEMO or any modern E2E story, so anyone wanting private group messaging or encrypted chat needs to look elsewhere entirely. Last commit is from July 2023; for software that terminates TLS and handles auth/federation (server dialback), two-plus years with no security patches is a real adoption risk. Clustering requires standing up etcd as an extra dependency, which is a lot of operational weight if you just wanted a couple of redundant nodes.