← Back to projects
In progress 2026

Agricola Online

A real-time multiplayer adaptation of the board game Agricola — a Go game server with WebSockets and Redis-backed state, orchestrated on Kubernetes to scale game rooms on demand.

  • Go
  • WebSockets
  • Redis
  • Kubernetes
  • Docker
  • Microservices
Agricola Online cover

The problem

Agricola is a turn-based worker-placement game for up to five players. I wanted to learn distributed systems on a problem that genuinely needs them — not a toy that’s containerized for show. A session-based, room-per-match game is exactly that problem.

What’s technically interesting

  • A concurrency model that fits. One goroutine drives the authoritative game loop per active room, with channels for player actions and broadcasts for state changes — the kind of workload Go is built for.
  • A real rules engine. Agricola’s worker placement, resource economy, harvest phases, and end-game scoring are modelled as a state machine with pure transition functions (apply(action, state) → state) — easy to test, easy to snapshot.
  • State that survives pod churn. Game state is snapshotted to Redis after each committed turn, so any pod can serve a room and reconnections survive a restart.
  • Orchestration with a reason to exist. Game-server pods scale horizontally on Kubernetes with player demand — the orchestration earns its place because the workload is naturally many independent sessions.

Stack

Go game server · WebSocket protocol (authoritative server, versioned state) · Redis for room/session state · Docker · Kubernetes (Deployments + HPA).

Status

In progress. The full architecture and build milestones are written up in the project’s docs/agricola-architecture.md. I’m building it specifically to deepen my Go and Kubernetes skills on a problem where they’re the right tools.