Distributed server for social and realtime games and apps.
Clone or download
Permalink
Failed to load latest commit information.
.github Add nakama logo. May 14, 2018
api DB defaults update, friend and group state cleanup. Nov 10, 2018
apigrpc DB defaults update, friend and group state cleanup. Nov 10, 2018
build Add git commit id to docker command comment Oct 10, 2018
console Improved support for tournaments feature. (#240) Oct 2, 2018
data/modules Fix missing match_join in p2prelayer lua code. Nov 7, 2018
flags New Go runtime and Lua runtime local cache. Sep 13, 2018
ga Update dependencies. Apr 22, 2018
migrate DB defaults update, friend and group state cleanup. Nov 10, 2018
rtapi Allow authoritative match join attempts to carry metadata. Improve sa… Oct 21, 2018
runtime Allow sending arbitrary messages instead of StreamData to stream. (#260) Nov 10, 2018
sample_go_module Allow authoritative match join attempts to carry metadata. Improve sa… Oct 21, 2018
server Increase metrics default report frequency to 60sec. Nov 11, 2018
social Improved cancellation of ongoing work when clients disconnect. (#249) Oct 12, 2018
tests Improved support for tournaments feature. (#240) Oct 2, 2018
vendor Update dependencies, replace UUID library. (#223) Jul 26, 2018
.editorconfig Initial public release. Jan 14, 2017
.gitignore Allow matches to update their labels. Jul 9, 2018
CHANGELOG.md Set new development version. Nov 12, 2018
Gopkg.lock Update lockfile. Nov 10, 2018
Gopkg.toml Update dependencies, replace UUID library. (#223) Jul 26, 2018
LICENSE Initial public release. Jan 14, 2017
README.md Update README. Oct 9, 2018
main.go Clean up runtime function signatures. Nov 1, 2018

README.md

Nakama

GitHub release Gitter License

Distributed server for social and realtime games and apps.

Features

  • Users - Register/login new users via social networks, email, or device ID.
  • Storage - Store user records, settings, and other objects in collections.
  • Social - Users can connect with friends, and join groups. Builtin social graph to see how users can be connected.
  • Chat - 1-on-1, group, and global chat between users. Persist messages for chat history.
  • Multiplayer - Realtime, or turn-based active and passive multiplayer.
  • Leaderboards - Dynamic, seasonal, get top members, or members around a user. Have as many as you need.
  • Tournaments - Invite players to compete together over prizes. Link many together to create leagues.
  • Runtime code - Extend the server with custom logic written in Lua or native Go code.
  • Matchmaker, dashboard, metrics, and more.

Build scalable games and apps with a production ready server used by ambitious game studios and app developers all around the world. Have a look at the documentation and join the developer community for more info.

Getting Started

The server is simple to setup and run for local development and can be deployed to any cloud provider. See the deployment notes for recommendations on how to deploy the project for production. Nakama server requires CockroachDB as it's database.

Docker

The fastest way to run the server and the database is with Docker. Setup Docker and start the daemon.

  1. Set up a docker-compose file and place it in a folder for your project.
  2. Run docker-compose -f ./docker-compose.yml up to download container images and run the servers.

For more detailed instructions have a look at our Docker quickstart guide.

Nakama Docker images are maintained on Docker Hub and prerelease images are published for cutting edge features of the server.

Binaries

You can run the servers with native binaries for your platform.

  1. Download the server from our releases page and the database.

  2. Follow the database instructions to start it.

  3. Run a migration which will setup or upgrade the database schema:

    nakama migrate up --database.address "root@127.0.0.1:26257"
  4. Start Nakama and connect to the database:

    nakama --database.address "root@127.0.0.1:26257"

When connected you'll see server output which describes all settings the server uses for configuration.

{"level":"info","ts":"2018-04-29T10:14:41.249+0100","msg":"Node","name":"nakama","version":"2.0.0+7e18b09","runtime":"go1.10.1","cpu":4}
{"level":"info","ts":"2018-04-29T10:14:41.249+0100","msg":"Database connections","dsns":["root@127.0.0.1:26257"]}
...

Usage

Nakama supports a variety of protocols optimized for various gameplay or app use cases. For request/response it can use GRPC with a HTTP1.1+JSON fallback (REST). For realtime communication you can use WebSockets or rUDP.

For example with the REST API to authenticate a user account with a custom identifier.

curl "http://127.0.0.1:7350/v2/account/authenticate/custom?create=true&username=allmight" \
  --user "defaultkey:" \
  --data '{"id": "someuniqueidentifier"}'

Response:

{
"token":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1MjQ5OTU2NDksInVpZCI6Ijk5Y2Q1YzUyLWE5ODgtNGI2NC04YThhLTVmMTM5YTg4MTgxMiIsInVzbiI6InhBb1RxTUVSdFgifQ.-3_rXNYx3Q4jKuS7RkxeMWBzMNAm0vl93QxzRI8p_IY"
}

There's a number of official client libraries available on GitHub with documentation. The current platform/language support includes: .NET (in C#), Unity engine, JavaScript, Java (with Android), Unreal engine, and Swift (with iOS). If you'd like to contribute a client or request one let us know.

Deployment

Nakama can be deployed to any cloud provider such as Google Cloud, Azure, AWS, Digital Ocean, Heroku, or your own private cloud. You should setup and provision separate nodes for Nakama and CockroachDB.

The recommended minimum production infrastructure for CockroachDB is outlined in these docs and Nakama can be run on instance types as small as "g1-small" on Google Cloud although we recommend a minimum of "n1-standard-1" in production. The specific hardware requirements will depend on what features of the server are used. Reach out to us for help and advice on what servers to run.

Managed Cloud

You can support development, new features, and maintainance of the server by using the Heroic Labs' Managed Cloud for deployment. This service handles the uptime, replication, backups, logs, data upgrades, and all other tasks involved with production server environments.

Have a look at our Managed Cloud service for more details.

Contribute

The development roadmap is managed as GitHub issues and pull requests are welcome. If you're interested to add a feature which is not mentioned on the issue tracker please open one to create a discussion or drop in and discuss it in the community chat.

Simple Builds

All dependencies required for a build are vendored as part of the Go project. You'll need a recent version of the Go toolchain and must setup the $GOPATH.

git clone https://github.com/heroiclabs/nakama.git $GOPATH/src/github.com/heroiclabs/nakama
cd $GOPATH/src/github.com/heroiclabs/nakama
go build -i

Full Source Builds

The codebase uses Protocol Buffers, GRPC, and the OpenAPI specification as part of the project. These dependencies are generated as sources and committed to the repository to simplify builds for contributors.

To build the codebase and generate all sources use these steps.

  1. Install the toolchain.

    go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
    go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
    go get -u github.com/golang/protobuf/protoc-gen-go
    go get -u github.com/gobuffalo/packr/...
  2. If you've made changes to the embedded Developer Console:

    cd console/ui
    yarn build
    cd ../../
  3. Compile protocol buffers, gateway code, and pack the SQL migration files. Then build the codebase.

    protoc -I/usr/local/include -I. -I$GOPATH/src -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway --go_out=plugins=grpc:. ./api/api.proto
    protoc -I/usr/local/include -I. -I$GOPATH/src -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway/third_party/googleapis -I$GOPATH/src/github.com/grpc-ecosystem/grpc-gateway --grpc-gateway_out=logtostderr=true:. ./api/api.proto
    packr -z
    go build -i

License

This project is licensed under the Apache-2 License.