// the find
heroiclabs/nakama
Scalable open-source game backend server: multiplayer, matchmaking, leaderboards, chat, and social features for games.
Nakama is a self-hosted game backend that bundles the features most multiplayer games need — auth, storage, social graph, matchmaking, leaderboards, real-time messaging — into a single Go binary backed by CockroachDB or Postgres. It targets indie studios and small teams who want a Firebase-scale feature set without the vendor lock-in. The extensibility model (Lua, TypeScript, or native Go plugins) is the main differentiator from managed alternatives.
The runtime extension model is genuinely well-designed: you can write match logic in TypeScript or Go, hot-reload Lua modules, and call server functions via RPC without forking the server binary. The embedded admin console — API explorer, live match inspection, storage browser — is production-quality and ships with the binary, no separate deployment. Protocol flexibility (gRPC, REST/HTTP, WebSocket, rUDP) means clients on Unity, Unreal, Godot, or a browser can all connect without adapter shims. The migration history goes back to 2018 with active commits through 2026, so the schema is battle-tested rather than freshly invented.
CockroachDB is listed as the recommended database and the default in Docker Compose examples, but CockroachDB's operational complexity and licensing costs are non-trivial — burying 'or Postgres wire-compatible server' in fine print is a gotcha for teams who read the quick-start and nothing else. The matchmaker is a black box: the query-based filtering API is documented but the actual ranking and ticket-expiry behavior is opaque, which makes it hard to reason about queue latency at low player counts. Horizontal scaling requires you to figure out CockroachDB cluster topology yourself — the docs hand-wave at 'deploy separate nodes' without concrete guidance on connection pooling or split-brain behavior. The plugin sandbox for Lua and TypeScript is not well-isolated from the host process; a panicking Go plugin can take down the server.