// the find
juggleim/im-server
A high-performance IM server.
JuggleIM is a self-hostable IM backend written in Go, built around a Protobuf+WebSocket long-connection protocol with an actor-model internals. It targets teams that want to embed real-time chat in a product without building message routing, conversation state, and multi-device sync from scratch. The ecosystem spans 15+ repos covering Android, iOS, Web, Flutter, and HarmonyOS SDKs plus an admin console.
The actor system (commons/gmicro/actorsystem) is a real implementation — dispatcher, executor, timer wheel — not just goroutines fired into the void; message isolation is genuinely designed in. Storage is configurable: MySQL or MongoDB for messages, LRU and ephemeral caches layered on top, with versioned SQL migration files checked in and a migration runner. Multi-tenancy is first-class: a single deployment issues isolated app_keys, so you can host multiple products without separate installs. Bot engine support covers Coze, Dify, SiliconFlow, and a custom webhook contract — plugging in an LLM takes a config change, not a code change.
The clustering and horizontal scaling features that make it viable for anything beyond a modest single-node deployment are in a closed 'professional edition' — the open-source version gives you no documented path to running more than one node. Setup requires inserting the connect address as a raw SQL row rather than a config value, which is a friction point that will catch people. Test coverage is thin for a system where message ordering and delivery guarantees matter most; the test files visible are mostly in commonservices utilities, not the actors or connection manager. The community is predominantly Chinese — the English docs exist but issues and discussions are mostly in Chinese, which is a real support gap if you hit something the docs don't cover.