Self-hosted service
agones-dev/agones avatar
agones-dev/agones

Agones: dedicated game servers as Kubernetes custom resources

Dedicated Game Server Hosting and Scaling for Multiplayer Games on Kubernetes

7,081 stars951 forksGoApache-2.0

At a glance

What is it?
A Google-originated Kubernetes controller that gives game servers a lifecycle, a health check, a fleet to scale and an allocation API for matchmakers.
Who is it for?
Agones is the piece of infrastructure that sits between a Kubernetes cluster and a game server binary, and it is opinionated in the right places: it treats a game server as a Kubernetes object with a declared health check, and it gives the matchmaker an allocation API rather than leaving you to hand roll one. What it deliberately does not do is run your game server, choose its language or replace your matchmaking logic.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Go, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • agones-dev/agones7,081 ★ · +22
Star history
Repository2026-10-072026-10-22
agones-dev/agones7.1k7.1k

22 Stars in the last 15 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial analysis

Why the project exists: bespoke cluster management, replaced

The README's pitch is that Agones replaces bespoke or proprietary cluster management for game servers with a Kubernetes cluster plus a custom controller. The primitives it adds are GameServer, Fleet and related custom resource definitions, which means Kubernetes gains the ability to create, run, manage and scale dedicated game server processes using the tooling an operations team already has.

The design decision worth noting is that any matchmaker can talk to Agones directly through the Kubernetes API to provision a dedicated game server. That is the difference between a platform that only scales things and a platform that allocation can be built on. Allocation is a first class resource here, with its own example manifest and its own endpoint examples, rather than something bolted on later.

The name comes from the Greek agōn, which the README translates roughly as contest, competition at games, and gathering. The project started at Google, which explains the Cloud Build configuration in the tree, the Google Cloud libraries in the dependencies, and the announcement blog post the README links for background on the original design.

GameServer, Fleet and the four headline features

The feature list is short and specific. You define a single GameServer or a large Fleet through YAML or through the API. Agones manages the GameServer lifecycle, which the README describes as including health checking and connection information. Fleet autoscaling integrates with Kubernetes native cluster autoscaling rather than pretending to replace it. And there are game server specific metric exports with dashboards for ops teams.

The example manifests in the tree show how thin the surface really is. There is `examples/gameserver.yaml` and `examples/fleet.yaml` as the starting points, `examples/gameserverallocation.yaml` for handing a server to a matchmaker, and a set of autoscaler manifests: `fleetautoscaler.yaml`, `schedulefleetautoscaler.yaml`, `counterfleetautoscaler.yaml`, `listfleetautoscaler.yaml`, `chainfleetautoscaler.yaml` and `wasmfleetautoscaler.yaml`. Six autoscaler flavours is a much more interesting fact about the project than the feature list suggests, because it tells you the scaling model is pluggable and that WebAssembly autoscalers run as guest code rather than as Go plugins.

There are also allocator client examples in several languages, a custom controller example, a Terraform submodules example, and a `simple-genai-server` example that hints at where the maintainers think the interesting work is heading.

The Go module and its pinned dependencies tell a story

The repository is a Go module with a pinned language version:

toml
module agones.dev/agones

go 1.26.5

The module path is `agones.dev/agones`, not a GitHub URL, which is the vanity import setup that lets the project keep its own domain as the canonical package location even though the release badges still point at the googleforgames repository path.

The dependency list is instructive in a different way. It includes the gRPC gateway, the Prometheus client, the OpenCensus exporters for both Prometheus and Stackdriver, the Extism Go SDK, a WebAssembly runtime path, a cron library, Viper and pflag for configuration, `logrus` for logging, `heptiolabs/healthcheck` for health probing, and `grpc-websocket-proxy`. One `replace` directive pins a fork of the WebSocket proxy, with a comment explaining it is a hotfix for WebSocket connection issues introduced by a newer gRPC gateway:

toml
// Hotfix to address websocket connection issues with github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.2 and above.
replace github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75 => github.com/swermin/grpc-websocket-proxy v0.1.0

Forking a transitive dependency to fix an upstream regression is a small detail that tells you something real about the maintenance burden of a project with this many integration points.

Three releases in 2026 show where the platform is heading

The release history is the most substantive part of the project, and it shows a project tracking Kubernetes releases closely. v1.58.0 landed on 2026-05-20 and brought the Go upgrade to 1.26.0, a Python SDK for Agones Game Server, environment variable support across all Agones component deployments, selectable fields on the GameServer CRD, and a fix to avoid blocking while waiting for a pod IP to be populated.

v1.59.0 followed on 2026-07-01. It promoted multiple named port ranges and the RollingUpdateFix to stable, added TotalAllocation tracking for fleet visibility, removed the legacy Player Selection Logic, and fixed FleetAutoscaler flapping and controller panics. The release notes also mention new governance for responsible AI use, which is a governance document rather than a code change but tells you the project has a maintainer structure that treats policy as part of the work.

v1.60.0 arrived on 2026-08-12 with official support for Kubernetes 1.34, 1.35 and 1.36, PortPolicyNone promoted to stable for game servers that do not need host port allocation, a Go 1.26.5 upgrade, improved CRD patching support for customizing Kubernetes resources, and a simplified Minikube workflow for local testing.

The repository is not archived and the last push was on 2026-09-21, so the cadence behind those three tags is still running.

Client SDKs in more languages than you would expect

The examples directory carries the SDK story more clearly than the README does. There are `cpp-simple`, `nodejs-simple`, `rust-simple` and `unity-simple` directories, each with its own minimal server, plus `simple-game-server` as the reference implementation and `examples/crd-client` for talking to the custom resources directly. A Python SDK arrived with the 1.58 release, and the C# allocator client has its own directory.

The split between allocator clients and game server SDKs is worth naming, because they solve different problems. A game server SDK is about reporting lifecycle: the server tells Agones it is ready, it reports its own health, and it knows when it is being shut down. An allocator client is about requesting a server for a match, which is a client side concern that belongs in your matchmaker rather than in your game server.

The `autoscaler-wasm` and `autoscaler-webhook` examples point at a third extension mechanism, where scaling logic lives outside the Agones binary. Combined with the six autoscaler manifests, that gives three different ways to make scaling decisions, and the right one depends on whether your logic is a simple function, an HTTP call or arbitrary guest code.

The README points at the site and leaves the manual there

Agones is one of those projects where the repository README is a signpost. Documentation lives at agones.dev, and the README says so in a single line under Usage. Everything a deployment decision needs, install instructions, CRD reference, SDK guides and the allocator service configuration, is on the site rather than in the repository.

What the repository does hold is the machinery behind the site. The tree has `site/` for the documentation source, `install/helm/agones/` for the Helm chart and its CRD development notes, `build/` for the build instructions that the README points at, `sdks/` for client SDK development, `pkg/` for the controller implementation, `cmd/` for binaries, `proto/` for the API definitions, and `test/` for the test suites. There is a `cloudbuild.yaml` at the root, which tells you continuous builds run on Google Cloud Build.

Two entries in that tree are unusual enough to notice. There is an `AGENTS.md`, so the project has explicit guidance for automated coding agents contributing to it. And there is a `GOVERNANCE.md` alongside `CONTRIBUTING.md`, which matches the 1.59 release note about new governance for responsible AI use. Together they suggest a project with institutional maturity, which is a good sign for long term maintenance and a mild warning that process documents come before your first patch.

Editorial conclusion

Agones is the piece of infrastructure that sits between a Kubernetes cluster and a game server binary, and it is opinionated in the right places: it treats a game server as a Kubernetes object with a declared health check, and it gives the matchmaker an allocation API rather than leaving you to hand roll one. What it deliberately does not do is run your game server, choose its language or replace your matchmaking logic. The README is a signpost rather than a manual, so the real evaluation happens in the site documentation, the install Helm chart and the examples directory. Start from examples/gameserver.yaml and examples/fleet.yaml, then read the client SDK docs for whichever language your server is written in, because the SDK is where the health and ready signals actually get reported.

Frequently asked questions

What are agones?

Agones is a Kubernetes controller and set of custom resource definitions for hosting, running and scaling dedicated game servers. It adds GameServer and Fleet resources so that individual servers and groups of servers get lifecycle management, health checking and autoscaling through standard Kubernetes tooling and APIs. The name comes from the Greek word for contest or competition.

How does a matchmaker get a game server from Agones?

Through the allocation API. The README states that any matchmaker can interact with Agones directly via the Kubernetes API to provision a dedicated game server, and the tree carries a gameserverallocation manifest plus allocator client examples for several languages. This is what separates Agones from a plain autoscaler, since allocation is a resource rather than an afterthought.

Which programming languages have Agones client SDKs?

The examples directory includes simple servers for C++, Node.js, Rust and Unity, along with a Python SDK added in the v1.58.0 release and allocator clients that include C#. The Go implementation lives in the controller itself, and a C# allocator client example is included separately from the game server SDKs.

Official sources

  1. agones-dev/agones on GitHub
  2. License: Apache-2.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/agones-dev-agones.svg)](https://hysenlabs.com/projects/agones-dev-agones)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/agones-dev-agones.svg)](https://hysenlabs.com/projects/agones-dev-agones)