Symfony of Ages is a turn-based browser game inspired by Civilization. Players expand their influence, explore a hex-based map, and engage in strategic gameplay to dominate the neighborhood.
This is an experimental setup for learning, so expect the code to change frequently. But if you're also exploring Ecotone or curious how event sourcing might work in a Symfony project, feel free to check it out, leave feedback, or just follow along.
- Turn-based gameplay on a hexagonal map
- 2D visual style inspired by Civilization
- Playable directly in the browser
- Symfony 7.3, Api platform, Ecotone – Backend framework (API & game logic)
- Vite, Symfony UX (Live Components, Turbo) – Interactive frontend behavior without heavy JavaScript SPA
- PixiJS – Fast WebGL rendering of the game map and units
- TypeScript – Strongly-typed logic for frontend interactions
- HTML5/CSS3 – Core UI structure
- Dynamic hex map rendering
- Terrain types with different strategic values (plains, forest, mountain, swamp, water, desert)
- Turn-based movement and interaction system
- Fog of war
- Event-driven gameplay
- If not already done, install Docker Compose (v2.10+)
- Run
docker compose build --pull --no-cacheto build fresh images - Run
docker compose up --waitto set up and start a fresh Symfony project - Run
npm run buildornpm run dev - Open
https://localhostin your favorite web browser and accept the auto-generated TLS certificate - Open
https://localhost/api(API documentation) - Run
docker compose down --remove-orphansto stop the Docker containers.

