Open source Β· GPL-3.0

Endless Game

A browser-based, infinite procedural RPG where an LLM generates the world β€” skills, biomes, items, creatures, and art β€” on demand as you play.

Endless Game gameplay: the Skills panel open beside the generated 3D world

An RPG that writes itself

You start stranded on an island with a single skill. Everything after that is discovered, and generated the first time anyone finds it.

🌱

Infinite skill tree

Actions have a chance to unlock brand-new skills, generated on first discovery. Progression cascades outward forever.

πŸ—ΊοΈ

AI-generated world

Biomes, world objects, items, and creatures are generated on first contact and cached, so the world is persistent and shared.

🎨

Procedural art

Every world object gets its own 3D model, generated on demand and cached.

🌍

A world that writes itself

The overworld is an LLM-authored fantasy region map, generated once and extended as you sail past its edges.

⚑

No build step

Vanilla ES-module JavaScript + Three.js on the client; Python + FastAPI on the server.

🧩

Pluggable models

Swap between Anthropic, OpenAI, or NVIDIA chat providers with a single line of config.

How it works

A thin Three.js client streams chunks from a FastAPI backend that orchestrates the LLM and caches every generation to disk.

webclient/ (Three.js)  ──REST──▢  server/ (FastAPI + LLM)  ──▢  worldData/ (JSON + GLB cache)

Run it yourself

Python 3.10+ and an API key for one chat provider is all you need.

cp config.ini.example config.ini      # add your API key(s)
pip install fastapi "uvicorn[standard]" "pydantic>=1.10,<2.0" requests
uvicorn server.main:app --reload --port 8000

cd webclient && python3 -m http.server 3000   # in another terminal

⚠️ It eats API tokens like Pac-Man eats dots. Everything you see is a live model call, and it generates constantly as you play. Do not point it at an API account with auto-reload or auto-recharge billing unless you genuinely do not care about the cost. Set a hard spending cap first.

Then open http://localhost:3000. Full instructions in the setup guide.