Integrating Nakama
Nakama is an open-source game backend by Heroic Labs. It handles player accounts, leaderboards, matchmaking, in-app purchases, and real-time multiplayer features.
Gameye provides a native Fleet Manager implementation for Nakama. When Nakama’s matchmaker finds a group of players, it calls the Gameye Fleet Manager, which starts a dedicated server session via the Session API. Nakama receives the IP and port and delivers them to the matched players — the entire flow runs without custom glue code.
How it works
Section titled “How it works”[Nakama Matchmaker] ↓ match found[Gameye Fleet Manager plugin] ↓ POST /session[Gameye Session API] ↓ container starts (~0.5s)[Dedicated game server] ←→ [Players]The Fleet Manager handles the full session lifecycle: creation, player join and leave tracking, backfilling (adding players to existing sessions), and termination.
Installation
Section titled “Installation”The Fleet Manager is a Go package. Install it into your Nakama server module:
go get github.com/Gameye/nakama-fleetmanager/fleetmanagerRequires Nakama 3.21+.
Configuration
Section titled “Configuration”Five environment variables configure the Fleet Manager:
| Variable | Description |
|---|---|
GAMEYE_API_TOKEN | Your Gameye API authentication token |
GAMEYE_API_URL | Your Gameye environment URL (provided during onboarding) |
GAMEYE_API_IMAGE | Your application name in Gameye |
GAMEYE_API_IMAGE_VERSION | The specific image tag/version to deploy |
GAMEYE_API_REGION | Target region name (e.g. europe, us-east) |
Using with Unity Matchmaker
Section titled “Using with Unity Matchmaker”If you’re using Unity Matchmaker alongside Nakama, allocations can be routed to Gameye without changing your matchmaking rules or ticket logic. For a dedicated Unity Matchmaker integration that does not require Nakama, see the Unity Matchmaker guide.
Known limitations
Section titled “Known limitations”- Limited session list querying — Gameye’s Session API does not paginate, which limits
FleetManager#Listfor studios that need to query large numbers of running sessions programmatically. - No built-in retry queue — Sessions are created immediately on request. If session creation fails, retry logic must be handled at the application layer.